From 930cab7702bbdf7bcbb3e5987d1490eb92215ccb Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 24 Nov 2025 14:35:12 +0100 Subject: [PATCH] radv: fix fbfetch output with ESO This fixes a real issue when ESO uses fbfetch output because this was determined after instead of before. This solution isn't the most elegant one but binding graphics shaders earlier would require more work. Let's just handle this specific corner case for now. This fixes dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.custom_resolve.shader_objects.fragment_region* on some GPUs. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 224091fcc09..838bdedb7b3 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -15723,6 +15723,17 @@ radv_CmdBindShadersEXT(VkCommandBuffer commandBuffer, uint32_t stageCount, const radv_reset_pipeline_state(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS); radv_mark_descriptors_dirty(cmd_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS); + /* TODO: Try to bind graphics shaders earlier to remove this. */ + if (bound_stages & VK_SHADER_STAGE_FRAGMENT_BIT) { + const struct radv_shader_object *shader_obj = cmd_buffer->state.shader_objs[MESA_SHADER_FRAGMENT]; + const bool uses_fbfetch_output = shader_obj && shader_obj->shader->info.ps.uses_fbfetch_output; + + if (cmd_buffer->state.uses_fbfetch_output != uses_fbfetch_output) { + cmd_buffer->state.uses_fbfetch_output = uses_fbfetch_output; + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_FBFETCH_OUTPUT; + } + } + /* Graphics shaders are handled at draw time because of shader variants. */ }