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:
Lionel Landwerlin
2022-06-12 23:59:05 +03:00
committed by Marge Bot
parent d17bf881ea
commit 11bc2bde83
+14
View File
@@ -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:
*