panfrost/midgard: Handle non-zero component in store
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 17 Jun 2019 19:35:57 +0000 (12:35 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 17 Jun 2019 19:52:51 +0000 (12:52 -0700)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/ci/expected-failures.txt
src/gallium/drivers/panfrost/midgard/midgard_compile.c

index 98632faaac75ef53b3045f0273ead87b9b747732..ded1cc18ab053db8221ae001923b29d59fff6451 100644 (file)
@@ -300,11 +300,8 @@ dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_fragment
 dEQP-GLES2.functional.shaders.preprocessor.predefined_macros.line_2_vertex
 dEQP-GLES2.functional.shaders.random.all_features.fragment.0
 dEQP-GLES2.functional.shaders.random.all_features.fragment.16
-dEQP-GLES2.functional.shaders.random.all_features.fragment.45
 dEQP-GLES2.functional.shaders.random.all_features.fragment.5
 dEQP-GLES2.functional.shaders.random.all_features.fragment.6
-dEQP-GLES2.functional.shaders.random.all_features.fragment.72
-dEQP-GLES2.functional.shaders.random.all_features.fragment.77
 dEQP-GLES2.functional.shaders.random.all_features.vertex.0
 dEQP-GLES2.functional.shaders.random.all_features.vertex.17
 dEQP-GLES2.functional.shaders.random.texture.vertex.10
index 47742a5a7a949e47de4a70dae1a48526385db609..c213f5f726d30c2f7453bc6a901f33ff41334898 100644 (file)
@@ -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");