summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-08-30 14:35:01 -0700
committerAlyssa Rosenzweig <[email protected]>2019-08-30 15:50:27 -0700
commit116b17d2d191892aeccf8fd5044a20f5a2d0c64f (patch)
tree159a549e1a4ca212b4742b27ccf02f0721c2b344
parenteb3cc20f42feb4a79c35ca717d4bda2430223d78 (diff)
pan/midgard: Do not propagate swizzles into writeout
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 <[email protected]>
-rw-r--r--src/panfrost/midgard/midgard_opt_copy_prop.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/panfrost/midgard/midgard_opt_copy_prop.c b/src/panfrost/midgard/midgard_opt_copy_prop.c
index 9a278876088..8f6ff2ac7db 100644
--- a/src/panfrost/midgard/midgard_opt_copy_prop.c
+++ b/src/panfrost/midgard/midgard_opt_copy_prop.c
@@ -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. */