pan/midgard: Force alignment for csel_v
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 6 Dec 2019 21:22:06 +0000 (16:22 -0500)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 12 Dec 2019 16:42:07 +0000 (11:42 -0500)
The swizzle on the conditional gets lost.

Fixes "horizontal mirroring" in godot. See
https://gitlab.freedesktop.org/mesa/mesa/issues/2108 which has attached
apitrace.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fixes: d3b3daa9d3f ("pan/midgard: Use new scheduler")
Reported-by: Icecream95
src/panfrost/midgard/midgard_ra.c

index 2fe406d6e7aec77e495942ead488594136428f36..c084a896a40bd39c06ca429d4baf49d11c121fac 100644 (file)
@@ -473,6 +473,14 @@ allocate_registers(compiler_context *ctx, bool *spilled)
 
                 if (ins->type == TAG_LOAD_STORE_4 && ins->load_64)
                         min_alignment[dest] = 3;
+
+                /* We don't have a swizzle for the conditional and we don't
+                 * want to muck with the conditional itself, so just force
+                 * alignment for now */
+
+                if (ins->type == TAG_ALU_4 && OP_IS_CSEL_V(ins->alu.op))
+                        min_alignment[dest] = 4; /* 1 << 4= 16-byte = vec4 */
+
         }
 
         for (unsigned i = 0; i < ctx->temp_count; ++i) {