pan/midgard: Do not propagate swizzles into writeout
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 30 Aug 2019 21:35:01 +0000 (14:35 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 30 Aug 2019 22:50:27 +0000 (15:50 -0700)
There's no slot for it; you'll end up writing into the void and
clobbering stuff. Don't. do it.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/panfrost/midgard/midgard_opt_copy_prop.c

index 9a278876088f0cdcfcf58194205c8837e186540f..8f6ff2ac7db494b7053a4b6f9ec00577688dfc6f 100644 (file)
@@ -53,16 +53,18 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
                 if (mir_nontrivial_outmod(ins)) continue;
 
                 /* Shortened arguments (bias for textures, extra load/store
-                 * arguments, etc.) do not get a swizzlw, only a start
-                 * component and even that is restricted. */
+                 * arguments, etc.) do not get a swizzle, only a start
+                 * component and even that is restricted. Fragment writeout
+                 * doesn't even get that much */
 
                 bool skip = false;
 
                 mir_foreach_instr_global(ctx, q) {
                         bool is_tex = q->type == TAG_TEXTURE_4;
                         bool is_ldst = q->type == TAG_LOAD_STORE_4;
+                        bool is_writeout = q->compact_branch && q->writeout;
 
-                        if (!(is_tex || is_ldst)) continue;
+                        if (!(is_tex || is_ldst || is_writeout)) continue;
 
                         /* For textures, we get one real swizzle. For stores,
                          * we also get one. For loads, we get none. */