blorp: fix hangs with mesh enabled

Move mesh URB allocations together with the other stages.

This fixes a hang that started happening with mesh enabled after
419531c5d9 ("intel/blorp: add a new flag to communicate PSS sync need")

Bspec 45352 says:
  L3 Space allocation can only be changed when the GPU pipeline is
  completely flushed.

It's likely that the PIPE_CONTROL added in that commit was breaking that
assumption and the URB allocation happening afterwards at the end of the
pipeline emission would then hang. And before that, we were probably
just getting lucky.

Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25047>
This commit is contained in:
Iván Briano
2023-08-24 10:20:31 -07:00
committed by Marge Bot
parent 079604e41e
commit bcde58ea86

View File

@@ -272,6 +272,14 @@ emit_urb_config(struct blorp_batch *batch,
urb.VSNumberofURBEntries = entries[i];
}
}
if (batch->blorp->config.use_mesh_shading) {
#if GFX_VERx10 >= 125
blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_MESH), zero);
blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_TASK), zero);
#endif
}
#else /* GFX_VER < 7 */
blorp_emit_urb_config(batch, vs_entry_size, sf_entry_size);
#endif
@@ -1430,9 +1438,6 @@ blorp_emit_pipeline(struct blorp_batch *batch,
if (batch->blorp->config.use_mesh_shading) {
#if GFX_VERx10 >= 125
blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_MESH), zero);
blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_TASK), zero);
blorp_emit(batch, GENX(3DSTATE_MESH_CONTROL), zero);
blorp_emit(batch, GENX(3DSTATE_TASK_CONTROL), zero);
#endif