Module: Mesa
Branch: staging/23.0
Commit: 41648b0e3f132e86e18d9f504f2e86f9260bfef5
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=41648b0e3f132e86e18d9f504f2e86f9260bfef5

Author: Kenneth Graunke <[email protected]>
Date:   Thu Jan  5 11:13:12 2023 -0800

intel/blorp: Lower base_workgroup_id to zero

We don't use a base workgroup ID for BLOCS.  It needs to be lowered, or
else we'll assert fail when compiling the compute shader.

(Note for stable: this patch doesn't fix a bug in 4abdecce226
specifically, but rather is a missing patch that needed to go along with
the rest of MR 20068, on whichever branches it exists on.)

Fixes: 4abdecce226 ("iris: Lower load_base_workgroup_id to zero")
Reviewed-by: Jason Ekstrand <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20750>
(cherry picked from commit a6c6a4ad04d5e70b32c6e87126a4e8779aa6bb93)

---

 .pick_status.json       |  2 +-
 src/intel/blorp/blorp.c | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/.pick_status.json b/.pick_status.json
index c728d78d838..5eb21463d84 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -94,7 +94,7 @@
         "description": "intel/blorp: Lower base_workgroup_id to zero",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "4abdecce226db6a718dc3b44568975dee0465522"
     },
diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c
index 245baaa7462..69dcfbfc3f6 100644
--- a/src/intel/blorp/blorp.c
+++ b/src/intel/blorp/blorp.c
@@ -348,6 +348,22 @@ blorp_compile_vs(struct blorp_context *blorp, void 
*mem_ctx,
    return brw_compile_vs(compiler, mem_ctx, &params);
 }
 
+static bool
+lower_base_workgroup_id(nir_builder *b, nir_instr *instr, UNUSED void *data)
+{
+   if (instr->type != nir_instr_type_intrinsic)
+      return false;
+
+   nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
+
+   if (intrin->intrinsic != nir_intrinsic_load_base_workgroup_id)
+      return false;
+
+   b->cursor = nir_instr_remove(&intrin->instr);
+   nir_ssa_def_rewrite_uses(&intrin->dest.ssa, nir_imm_zero(b, 3, 32));
+   return true;
+}
+
 const unsigned *
 blorp_compile_cs(struct blorp_context *blorp, void *mem_ctx,
                  struct nir_shader *nir,
@@ -375,6 +391,8 @@ blorp_compile_cs(struct blorp_context *blorp, void *mem_ctx,
    cs_prog_data->base.param = rzalloc_array(NULL, uint32_t, nr_params);
 
    NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
+   NIR_PASS_V(nir, nir_shader_instructions_pass, lower_base_workgroup_id,
+              nir_metadata_block_index | nir_metadata_dominance, NULL);
 
    struct brw_compile_cs_params params = {
       .nir = nir,

Reply via email to