From 752e9697030389e5b09553d55f9c4fc68edf08a2 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Sat, 30 Sep 2017 14:50:40 -0700 Subject: [PATCH] compiler: Add two new system values for subgroups MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This will be required for SPIR-V subgroup support Reviewed-by: Lionel Landwerlin Reviewed-by: Samuel Iglesias Gonsálvez Reviewed-by: Iago Toral Quiroga --- src/compiler/nir/nir.c | 8 ++++++++ src/compiler/nir/nir_intrinsics.h | 1 + src/compiler/shader_enums.c | 2 ++ src/compiler/shader_enums.h | 8 ++++++++ 4 files changed, 19 insertions(+) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index bdd8960403c..f5fd1dc586b 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1969,6 +1969,10 @@ nir_intrinsic_from_system_value(gl_system_value val) return nir_intrinsic_load_subgroup_le_mask; case SYSTEM_VALUE_SUBGROUP_LT_MASK: return nir_intrinsic_load_subgroup_lt_mask; + case SYSTEM_VALUE_NUM_SUBGROUPS: + return nir_intrinsic_load_num_subgroups; + case SYSTEM_VALUE_SUBGROUP_ID: + return nir_intrinsic_load_subgroup_id; case SYSTEM_VALUE_LOCAL_GROUP_SIZE: return nir_intrinsic_load_local_group_size; default: @@ -2040,6 +2044,10 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin) return SYSTEM_VALUE_SUBGROUP_LE_MASK; case nir_intrinsic_load_subgroup_lt_mask: return SYSTEM_VALUE_SUBGROUP_LT_MASK; + case nir_intrinsic_load_num_subgroups: + return SYSTEM_VALUE_NUM_SUBGROUPS; + case nir_intrinsic_load_subgroup_id: + return SYSTEM_VALUE_SUBGROUP_ID; case nir_intrinsic_load_local_group_size: return SYSTEM_VALUE_LOCAL_GROUP_SIZE; default: diff --git a/src/compiler/nir/nir_intrinsics.h b/src/compiler/nir/nir_intrinsics.h index b8a67355900..1a816b46792 100644 --- a/src/compiler/nir/nir_intrinsics.h +++ b/src/compiler/nir/nir_intrinsics.h @@ -381,6 +381,7 @@ SYSTEM_VALUE(subgroup_ge_mask, 0, 0, xx, xx, xx) SYSTEM_VALUE(subgroup_gt_mask, 0, 0, xx, xx, xx) SYSTEM_VALUE(subgroup_le_mask, 0, 0, xx, xx, xx) SYSTEM_VALUE(subgroup_lt_mask, 0, 0, xx, xx, xx) +SYSTEM_VALUE(num_subgroups, 1, 0, xx, xx, xx) SYSTEM_VALUE(subgroup_id, 1, 0, xx, xx, xx) SYSTEM_VALUE(local_group_size, 3, 0, xx, xx, xx) diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 62c1ac1f073..d0ff11b41e2 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -210,6 +210,8 @@ gl_system_value_name(gl_system_value sysval) ENUM(SYSTEM_VALUE_SUBGROUP_GT_MASK), ENUM(SYSTEM_VALUE_SUBGROUP_LE_MASK), ENUM(SYSTEM_VALUE_SUBGROUP_LT_MASK), + ENUM(SYSTEM_VALUE_NUM_SUBGROUPS), + ENUM(SYSTEM_VALUE_SUBGROUP_ID), ENUM(SYSTEM_VALUE_VERTEX_ID), ENUM(SYSTEM_VALUE_INSTANCE_ID), ENUM(SYSTEM_VALUE_INSTANCE_INDEX), diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index 64fb68828ed..2aedbb9b3fa 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -397,6 +397,14 @@ typedef enum SYSTEM_VALUE_SUBGROUP_LT_MASK, /*@}*/ + /** + * Builtin variables added by VK_KHR_subgroups + */ + /*@{*/ + SYSTEM_VALUE_NUM_SUBGROUPS, + SYSTEM_VALUE_SUBGROUP_ID, + /*@}*/ + /*@}*/ /** -- 2.30.2