r600/sfn: Fix RAT instruction assembly emission
authorGert Wollny <gert.wollny@collabora.com>
Wed, 6 May 2020 21:51:42 +0000 (23:51 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 19 May 2020 07:52:13 +0000 (07:52 +0000)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5085>

src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp

index 4898d5b2a8ecc8812a4153d4ca1138bd02cda961..77e84e33b216bba74c266e3e31d1412dc15e5c71 100644 (file)
@@ -1071,7 +1071,7 @@ bool AssemblyFromShaderLegacyImpl::emit_rat(const RatInstruction& instr)
 {
    struct r600_bytecode_gds gds;
 
-   int rat_idx = -1;
+   int rat_idx = instr.rat_id();
    EBufferIndexMode rat_index_mode = bim_none;
    auto addr = instr.rat_id_offset();
 
@@ -1127,10 +1127,14 @@ bool AssemblyFromShaderLegacyImpl::emit_rat(const RatInstruction& instr)
    cf->output.index_gpr = instr.index_gpr();
    cf->output.comp_mask = instr.comp_mask();
    cf->output.burst_count = instr.burst_count();
-   cf->output.swizzle_x = instr.data_swz(0);
-   cf->output.swizzle_y = instr.data_swz(1);
-   cf->output.swizzle_z = instr.data_swz(2);
-   cf->output.swizzle_w = instr.data_swz(3);
+   assert(instr.data_swz(0) == PIPE_SWIZZLE_X);
+   if (cf->rat.inst != RatInstruction::STORE_TYPED) {
+      assert(instr.data_swz(1) == PIPE_SWIZZLE_Y ||
+             instr.data_swz(1) == PIPE_SWIZZLE_MAX) ;
+      assert(instr.data_swz(2) == PIPE_SWIZZLE_Z ||
+             instr.data_swz(2) == PIPE_SWIZZLE_MAX) ;
+   }
+
    cf->vpm = 1;
    cf->barrier = 1;
    cf->mark = instr.need_ack();