From: Lionel Landwerlin Date: Sun, 12 Jun 2022 20:59:05 +0000 (+0300) Subject: anv: force MEDIA_INTERFACE_DESCRIPTOR_LOAD reemit after 3D->GPGPU switch X-Git-Tag: upstream/23.3.3~11912 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=11bc2bde8365682ae0a06741aff00c12130f7dcb;p=platform%2Fupstream%2Fmesa.git anv: force MEDIA_INTERFACE_DESCRIPTOR_LOAD reemit after 3D->GPGPU switch Seems to fix a hang in the following titles : - Age of Empire 4 - Monster Hunter Rise where the HW is hung on a PIPE_CONTROL after a GPGPU_WALKER but no MEDIA_INTERFACE_DESCRIPTOR_LOAD was emitted since the switch from 3D to GPGPU. This would happen in the following case : vkCmdBindPipeline(COMPUTE, cs_pipeline); vkCmdDispatch(...); vkCmdBindPipeline(GRAPHICS, gfx_pipeline); vkCmdDraw(...); vkCmdDispatch(...); Signed-off-by: Lionel Landwerlin Reviewed-by: Ivan Briano Cc: mesa-stable Part-of: --- diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 19cb294..d28852d 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -6470,6 +6470,20 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer, anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_CC_STATE_POINTERS), t); #endif +#if GFX_VERx10 == 120 + /* Undocumented workaround to force the re-emission of + * MEDIA_INTERFACE_DESCRIPTOR_LOAD when switching from 3D to Compute + * pipeline without rebinding a pipeline : + * vkCmdBindPipeline(COMPUTE, cs_pipeline); + * vkCmdDispatch(...); + * vkCmdBindPipeline(GRAPHICS, gfx_pipeline); + * vkCmdDraw(...); + * vkCmdDispatch(...); + */ + if (pipeline == _3D) + cmd_buffer->state.compute.pipeline_dirty = true; +#endif + #if GFX_VER >= 12 /* From Tigerlake PRM, Volume 2a, PIPELINE_SELECT: *