tgsi_to_nir: translate non-vec4 image stores correctly
authorMarek Olšák <marek.olsak@amd.com>
Tue, 5 May 2020 16:44:54 +0000 (12:44 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 6 May 2020 16:39:07 +0000 (16:39 +0000)
set the correct number of components for src data and the intrinsic

Reviewed-by: Rob Clark <robdclark@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4908>

src/gallium/auxiliary/nir/tgsi_to_nir.c

index 34ececa17a3cf05f9f20d79192625226c49822c4..2865697482eb2e1312cd6ed66fef03e639c6e5de 100644 (file)
@@ -1846,12 +1846,15 @@ ttn_mem(struct ttn_compile *c, nir_alu_dest dest, nir_ssa_def **src)
          instr->src[3] = nir_src_for_ssa(nir_imm_int(b, 0)); /* LOD */
       }
 
+      unsigned num_components = util_last_bit(tgsi_inst->Dst[0].Register.WriteMask);
+
       if (tgsi_inst->Instruction.Opcode == TGSI_OPCODE_STORE) {
-         instr->src[3] = nir_src_for_ssa(nir_swizzle(b, src[1], SWIZ(X, Y, Z, W), 4));
+         instr->src[3] = nir_src_for_ssa(nir_swizzle(b, src[1], SWIZ(X, Y, Z, W),
+                                                     num_components));
          instr->src[4] = nir_src_for_ssa(nir_imm_int(b, 0)); /* LOD */
       }
 
-      instr->num_components = 4;
+      instr->num_components = num_components;
    } else {
       unreachable("unexpected file");
    }