blorp: fix hangs with mesh enabled
authorIván Briano <ivan.briano@intel.com>
Thu, 24 Aug 2023 17:20:31 +0000 (10:20 -0700)
committerMarge Bot <emma+marge@anholt.net>
Tue, 12 Sep 2023 02:51:31 +0000 (02:51 +0000)
Move mesh URB allocations together with the other stages.

This fixes a hang that started happening with mesh enabled after
419531c5d98 ("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>

src/intel/blorp/blorp_genX_exec.h

index 1a4341d..a80d49a 100644 (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