radv: implement has_vgt_flush_ngg_legacy_bug for ESO

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27880>
This commit is contained in:
Samuel Pitoiset
2024-02-29 14:22:42 +01:00
committed by Marge Bot
parent 62e6132284
commit 86e4c56dbb

View File

@@ -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]