diff options
-rw-r--r-- | src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp b/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp index 4898d5b2a8e..77e84e33b21 100644 --- a/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp @@ -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(); |