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 <lionel.g.landwerlin@intel.com> Reviewed-by: Ivan Briano <ivan.briano@intel.com> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17247>
This commit is contained in:
committed by
Marge Bot
parent
d17bf881ea
commit
11bc2bde83
@@ -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:
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user