summaryrefslogtreecommitdiff
path: root/src/intel
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@collabora.com>2022-11-29 14:04:50 -0600
committerMarge Bot <emma+marge@anholt.net>2022-12-01 04:56:48 +0000
commit19ad2629d067bb38b47dcb03733bd6609a774f44 (patch)
tree793ee73048fdba91e67fa20c4cc6924e9f5b1287 /src/intel
parent3c09571f67ccb7e0804be44e8d27cc97156c0ea7 (diff)
hasvk: Implement lower_base_workgroup_id
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20068>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c
index 0dec0744516..3fa424cf4d4 100644
--- a/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c
+++ b/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c
@@ -1106,6 +1106,21 @@ lower_load_constant(nir_builder *b, nir_intrinsic_instr *intrin,
return true;
}
+static bool
+lower_base_workgroup_id(nir_builder *b, nir_intrinsic_instr *intrin,
+ struct apply_pipeline_layout_state *state)
+{
+ b->cursor = nir_instr_remove(&intrin->instr);
+
+ nir_ssa_def *base_workgroup_id =
+ nir_load_push_constant(b, 3, 32, nir_imm_int(b, 0),
+ .base = offsetof(struct anv_push_constants, cs.base_work_group_id),
+ .range = 3 * sizeof(uint32_t));
+ nir_ssa_def_rewrite_uses(&intrin->dest.ssa, base_workgroup_id);
+
+ return true;
+}
+
static void
lower_tex_deref(nir_builder *b, nir_tex_instr *tex,
nir_tex_src_type deref_src_type,
@@ -1377,6 +1392,8 @@ apply_pipeline_layout(nir_builder *b, nir_instr *instr, void *_state)
return lower_image_intrinsic(b, intrin, state);
case nir_intrinsic_load_constant:
return lower_load_constant(b, intrin, state);
+ case nir_intrinsic_load_base_workgroup_id:
+ return lower_base_workgroup_id(b, intrin, state);
case nir_intrinsic_load_ray_query_global_intel:
return lower_ray_query_globals(b, intrin, state);
default: