panfrost/midgard: Fix fp16 embedded constants
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 2 Jul 2019 02:49:51 +0000 (19:49 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 10 Jul 2019 13:12:05 +0000 (06:12 -0700)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/midgard/midgard_schedule.c

index caa29b7a2e4caec237ea88b7d6ef8f28ba7c0f33..ebbabae10bf386e355ea408e536d0fc4116362b8 100644 (file)
@@ -272,6 +272,25 @@ schedule_bundle(compiler_context *ctx, midgard_block *block, midgard_instruction
 
                                 bundle.has_blend_constant = 1;
                                 bundle.has_embedded_constants = 1;
+                        } else if (ains->has_constants && ains->alu.reg_mode == midgard_reg_mode_16) {
+                                /* TODO: DRY with the analysis pass */
+
+                                if (bundle.has_blend_constant)
+                                        break;
+
+                                if (constant_count)
+                                        break;
+
+                                /* TODO: Fix packing XXX */
+                                uint16_t *bundles = (uint16_t *) bundle.constants;
+                                uint32_t *constants = (uint32_t *) ains->constants;
+
+                                /* Copy them wholesale */
+                                for (unsigned i = 0; i < 4; ++i)
+                                        bundles[i] = constants[i];
+
+                                bundle.has_embedded_constants = true;
+                                constant_count = 4;
                         } else if (ains->has_constants) {
                                 /* By definition, blend constants conflict with
                                  * everything, so if there are already