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: