pan/bi: Handle st_vary with <4 components
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 15 Apr 2020 00:20:37 +0000 (20:20 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 17 Apr 2020 20:25:35 +0000 (16:25 -0400)
Still no writemasks.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4615>

src/panfrost/bifrost/bifrost_compile.c

index aa3de9ec356315383657949cd954b86a4d0bf7e7..adddef794ef825459674089909d74c5339e1208d 100644 (file)
@@ -189,6 +189,9 @@ bi_emit_st_vary(bi_context *ctx, nir_intrinsic_instr *instr)
         address.dest_type = nir_type_uint32;
         address.writemask = (1 << 12) - 1;
 
+        unsigned nr = nir_intrinsic_src_components(instr, 0);
+        assert(nir_intrinsic_write_mask(instr) == ((1 << nr) - 1));
+
         bi_instruction st = {
                 .type = BI_STORE_VAR,
                 .src = {
@@ -200,12 +203,15 @@ bi_emit_st_vary(bi_context *ctx, nir_intrinsic_instr *instr)
                         nir_type_uint32, nir_type_uint32, nir_type_uint32,
                 },
                 .swizzle = {
-                        { 0, 1, 2, 3 },
+                        { 0 },
                         { 0 }, { 1 }, { 2}
                 },
-                .store_channels = 4, /* TODO: WRITEMASK */
+                .store_channels = nr, 
         };
 
+        for (unsigned i = 0; i < nr; ++i)
+                st.swizzle[0][i] = i;
+
         bi_emit(ctx, address);
         bi_emit(ctx, st);
 }