From 986396a1471537480f7570a3bf1971183c9c9cd8 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Thu, 31 Jul 2025 15:19:20 +0200 Subject: [PATCH] r600/sfn: factor out adding an input in GS This is a preparation for the next patch that will fix indirect access using the second index of load_per_vertex_input Fixes: 37ae4df3e4d ("glsl: remove most IO optimizations that are replaced by nir_opt_varyings") Signed-off-by: Gert Wollny Part-of: (cherry picked from commit 9c8d8cfa07ad077f67133e476bf412fedb0b98ae) --- .pick_status.json | 2 +- .../drivers/r600/sfn/sfn_shader_gs.cpp | 23 ++++++++++++------- src/gallium/drivers/r600/sfn/sfn_shader_gs.h | 1 + 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index dd94f6b745e..b7f89a100f6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3634,7 +3634,7 @@ "description": "r600/sfn: factor out adding an input in GS", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "37ae4df3e4d90a2a474e313d4a563a0bb4c00cfe", "notes": null diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_gs.cpp b/src/gallium/drivers/r600/sfn/sfn_shader_gs.cpp index 679098fa481..db315cf35aa 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader_gs.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_shader_gs.cpp @@ -103,19 +103,26 @@ GeometryShader::process_load_input(nir_intrinsic_instr *instr) (location >= VARYING_SLOT_VAR0 && location <= VARYING_SLOT_VAR31) || (location >= VARYING_SLOT_TEX0 && location <= VARYING_SLOT_TEX7)) { - uint64_t bit = 1ull << location; - if (!(bit & m_input_mask)) { - ShaderInput input(driver_location, location); - input.set_ring_offset(16 * driver_location); - add_input(input); - m_next_input_ring_offset += 16; - m_input_mask |= bit; - } + add_input_at(location, driver_location); return true; } + return false; } +void +GeometryShader::add_input_at(gl_varying_slot location, unsigned driver_location) +{ + uint64_t bit = 1ull << location; + if (!(bit & m_input_mask)) { + ShaderInput input(driver_location, location); + input.set_ring_offset(16 * driver_location); + add_input(input); + m_next_input_ring_offset += 16; + m_input_mask |= bit; + } +} + int GeometryShader::do_allocate_reserved_registers() { diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_gs.h b/src/gallium/drivers/r600/sfn/sfn_shader_gs.h index fe3d590c125..5cb31bf92a4 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader_gs.h +++ b/src/gallium/drivers/r600/sfn/sfn_shader_gs.h @@ -24,6 +24,7 @@ private: bool process_store_output(nir_intrinsic_instr *intr); bool process_load_input(nir_intrinsic_instr *intr); + void add_input_at(gl_varying_slot location, unsigned driver_location); void do_finalize() override;