diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 1f791681dca..3e7ebae558e 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -396,6 +396,7 @@ iris_setup_uniforms(const struct brw_compiler *compiler, unsigned ucp_idx[IRIS_MAX_CLIP_PLANES]; unsigned img_idx[PIPE_MAX_SHADER_IMAGES]; unsigned variable_group_size_idx = -1; + unsigned work_dim_idx = -1; memset(ucp_idx, -1, sizeof(ucp_idx)); memset(img_idx, -1, sizeof(img_idx)); @@ -539,6 +540,16 @@ iris_setup_uniforms(const struct brw_compiler *compiler, variable_group_size_idx * sizeof(uint32_t)); break; } + case nir_intrinsic_load_work_dim: { + if (work_dim_idx == -1) { + work_dim_idx = num_system_values++; + system_values[work_dim_idx] = BRW_PARAM_BUILTIN_WORK_DIM; + } + b.cursor = nir_before_instr(instr); + offset = nir_imm_int(&b, system_values_start + + work_dim_idx * sizeof(uint32_t)); + break; + } case nir_intrinsic_load_kernel_input: { assert(nir_intrinsic_base(intrin) + nir_intrinsic_range(intrin) <= kernel_input_size); diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index e96e471a129..37faf5fada5 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -3314,6 +3314,8 @@ upload_sysvals(struct iris_context *ice, sysval <= BRW_PARAM_BUILTIN_WORK_GROUP_SIZE_Z) { unsigned i = sysval - BRW_PARAM_BUILTIN_WORK_GROUP_SIZE_X; value = ice->state.last_block[i]; + } else if (sysval == BRW_PARAM_BUILTIN_WORK_DIM) { + value = grid->work_dim; } else { assert(!"unhandled system value"); } diff --git a/src/intel/compiler/brw_compiler.h b/src/intel/compiler/brw_compiler.h index 6a3fedec13d..a0d06613aa1 100644 --- a/src/intel/compiler/brw_compiler.h +++ b/src/intel/compiler/brw_compiler.h @@ -629,6 +629,7 @@ enum brw_param_builtin { BRW_PARAM_BUILTIN_WORK_GROUP_SIZE_X, BRW_PARAM_BUILTIN_WORK_GROUP_SIZE_Y, BRW_PARAM_BUILTIN_WORK_GROUP_SIZE_Z, + BRW_PARAM_BUILTIN_WORK_DIM, }; #define BRW_PARAM_BUILTIN_CLIP_PLANE(idx, comp) \