diff options
-rw-r--r-- | src/panfrost/bifrost/bifrost_compile.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index aa3de9ec356..adddef794ef 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -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); } |