From 86e4c56dbb0af18c2f3ca5bcf61508aeb66a2704 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 29 Feb 2024 14:22:42 +0100 Subject: [PATCH] radv: implement has_vgt_flush_ngg_legacy_bug for ESO Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 1b776377689..2a0cdc5a14b 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -6778,8 +6778,8 @@ radv_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline cmd_buffer->state.prefetch_L2_mask |= RADV_PREFETCH_SHADERS; if (cmd_buffer->device->physical_device->rad_info.has_vgt_flush_ngg_legacy_bug && - cmd_buffer->state.emitted_graphics_pipeline && cmd_buffer->state.emitted_graphics_pipeline->is_ngg && - !cmd_buffer->state.graphics_pipeline->is_ngg) { + (!cmd_buffer->state.emitted_graphics_pipeline || + (cmd_buffer->state.emitted_graphics_pipeline->is_ngg && !cmd_buffer->state.graphics_pipeline->is_ngg))) { /* Transitioning from NGG to legacy GS requires * VGT_FLUSH on GFX10 and Navi21. VGT_FLUSH * is also emitted at the beginning of IBs when legacy @@ -9370,6 +9370,15 @@ radv_bind_graphics_shaders(struct radv_cmd_buffer *cmd_buffer) const gl_shader_stage last_vgt_api_stage = radv_cmdbuf_get_last_vgt_api_stage(cmd_buffer); assume(last_vgt_api_stage != MESA_SHADER_NONE); + if (device->physical_device->rad_info.has_vgt_flush_ngg_legacy_bug && + (!cmd_buffer->state.last_vgt_shader || (cmd_buffer->state.last_vgt_shader->info.is_ngg && + !cmd_buffer->state.shaders[last_vgt_api_stage]->info.is_ngg))) { + /* Transitioning from NGG to legacy GS requires VGT_FLUSH on GFX10 and Navi21. VGT_FLUSH is + * also emitted at the beginning of IBs when legacy GS ring pointers are set. + */ + cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_VGT_FLUSH; + } + cmd_buffer->state.last_vgt_shader = cmd_buffer->state.shaders[last_vgt_api_stage]; cmd_buffer->state.gs_copy_shader = cmd_buffer->state.shader_objs[MESA_SHADER_GEOMETRY]