From d95791bb2eeb73df81ac3da2514a56b8533cdcd1 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Sat, 28 Nov 2020 16:36:04 +0100 Subject: [PATCH] r600/sfn: Fix dest-swizzle for GS vertex loads Signed-off-by: Gert Wollny Part-of: --- src/gallium/drivers/r600/sfn/sfn_shader_geometry.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_geometry.cpp b/src/gallium/drivers/r600/sfn/sfn_shader_geometry.cpp index 8fb23fdfbaa..915acadd57f 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader_geometry.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_shader_geometry.cpp @@ -393,7 +393,12 @@ bool GeometryShaderFromNir::emit_vertex(nir_intrinsic_instr* instr, bool cut) bool GeometryShaderFromNir::emit_load_per_vertex_input(nir_intrinsic_instr* instr) { - auto dest = vec_from_nir(instr->dest, instr->num_components); + auto dest = vec_from_nir(instr->dest, 4); + + std::array swz = {7,7,7,7}; + for (unsigned i = 0; i < nir_dest_num_components(instr->dest); ++i) { + swz[i] = i + nir_intrinsic_component(instr); + } auto literal_index = nir_src_as_const_value(instr->src[0]); @@ -408,6 +413,8 @@ bool GeometryShaderFromNir::emit_load_per_vertex_input(nir_intrinsic_instr* inst auto fetch = new FetchInstruction(vc_fetch, no_index_offset, dest, addr, 16 * nir_intrinsic_base(instr), R600_GS_RING_CONST_BUFFER, PValue(), bim_none, true); + fetch->set_dest_swizzle(swz); + emit_instruction(fetch); return true; }