From: Alyssa Rosenzweig Date: Wed, 15 Apr 2020 00:20:37 +0000 (-0400) Subject: pan/bi: Handle st_vary with <4 components X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=aba7f09902f704819f0bc718a322793b265acd64;p=mesa.git pan/bi: Handle st_vary with <4 components Still no writemasks. Signed-off-by: Alyssa Rosenzweig Part-of: --- 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); }