freedreno/ir3: implement load_work_dim intrinsic
authorRob Clark <robdclark@gmail.com>
Thu, 8 Mar 2018 19:22:45 +0000 (14:22 -0500)
committerMarge Bot <eric+marge@anholt.net>
Thu, 21 Oct 2021 18:59:57 +0000 (18:59 +0000)
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13300>

src/freedreno/ir3/ir3_compiler_nir.c
src/freedreno/ir3/ir3_shader.h
src/gallium/drivers/freedreno/ir3/ir3_const.h

index 2efee27..46d8996 100644 (file)
@@ -2036,6 +2036,9 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
    case nir_intrinsic_load_subgroup_id_shift_ir3:
       dst[0] = create_driver_param(ctx, IR3_DP_SUBGROUP_ID_SHIFT);
       break;
+   case nir_intrinsic_load_work_dim:
+      dst[0] = create_driver_param(ctx, IR3_DP_WORK_DIM);
+      break;
    case nir_intrinsic_discard_if:
    case nir_intrinsic_discard:
    case nir_intrinsic_demote:
index 26af7f2..6191ab8 100644 (file)
@@ -45,6 +45,7 @@ enum ir3_driver_param {
    IR3_DP_NUM_WORK_GROUPS_X = 0,
    IR3_DP_NUM_WORK_GROUPS_Y = 1,
    IR3_DP_NUM_WORK_GROUPS_Z = 2,
+   IR3_DP_WORK_DIM          = 3,
    IR3_DP_BASE_GROUP_X = 4,
    IR3_DP_BASE_GROUP_Y = 5,
    IR3_DP_BASE_GROUP_Z = 6,
index ceed8c8..8186552 100644 (file)
@@ -592,6 +592,7 @@ ir3_emit_cs_consts(const struct ir3_shader_variant *v,
             [IR3_DP_NUM_WORK_GROUPS_X] = info->grid[0],
             [IR3_DP_NUM_WORK_GROUPS_Y] = info->grid[1],
             [IR3_DP_NUM_WORK_GROUPS_Z] = info->grid[2],
+            [IR3_DP_WORK_DIM]          = info->work_dim,
             [IR3_DP_LOCAL_GROUP_SIZE_X] = info->block[0],
             [IR3_DP_LOCAL_GROUP_SIZE_Y] = info->block[1],
             [IR3_DP_LOCAL_GROUP_SIZE_Z] = info->block[2],