diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-06-17 12:35:57 -0700 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-06-17 12:52:51 -0700 |
commit | a3ae3cb8e93595459cfe5ec4e829c68154dfdab2 (patch) | |
tree | 2851d2f7684395ea985ff9f071bee1a5fe9c3740 /src/gallium/drivers/panfrost/midgard | |
parent | 2c9e124f8119728aaebab493cdaf9f15d4ec7f84 (diff) |
panfrost/midgard: Handle non-zero component in store
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/gallium/drivers/panfrost/midgard')
-rw-r--r-- | src/gallium/drivers/panfrost/midgard/midgard_compile.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/gallium/drivers/panfrost/midgard/midgard_compile.c b/src/gallium/drivers/panfrost/midgard/midgard_compile.c index 47742a5a7a9..c213f5f726d 100644 --- a/src/gallium/drivers/panfrost/midgard/midgard_compile.c +++ b/src/gallium/drivers/panfrost/midgard/midgard_compile.c @@ -1286,14 +1286,18 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr) midgard_instruction ins = v_mov(reg, blank_alu_src, SSA_FIXED_REGISTER(26)); emit_mir_instruction(ctx, ins); - /* We should have been vectorized. That also lets us - * ignore the mask. because the mask component on - * st_vary is (as far as I can tell) ignored [the blob - * sets it to zero] */ - assert(nir_intrinsic_component(instr) == 0); + /* We should have been vectorized, though we don't + * currently check that st_vary is emitted only once + * per slot (this is relevant, since there's not a mask + * parameter available on the store [set to 0 by the + * blob]). We do respect the component by adjusting the + * swizzle. */ + + unsigned component = nir_intrinsic_component(instr); midgard_instruction st = m_st_vary_32(SSA_FIXED_REGISTER(0), offset); st.load_store.unknown = 0x1E9E; /* XXX: What is this? */ + st.load_store.swizzle = SWIZZLE_XYZW << (2*component); emit_mir_instruction(ctx, st); } else { DBG("Unknown store\n"); |