diff options
author | Rob Clark <[email protected]> | 2018-03-08 14:18:59 -0500 |
---|---|---|
committer | Karol Herbst <[email protected]> | 2018-07-15 07:51:13 +0200 |
commit | 427a3dbdb14ae424158454985860e03d57d84c27 (patch) | |
tree | eacd58bdb999a321de8fb318afb008c19592f352 /src/compiler | |
parent | 39180d39319427ddd327ab1ec18e0c6233eae9d6 (diff) |
nir/spirv: implement BuiltInWorkDim
Reviewed-by: Jason Ekstrand <[email protected]>
Signed-off-by: Karol Herbst <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir.c | 2 | ||||
-rw-r--r-- | src/compiler/nir/nir_intrinsics.py | 1 | ||||
-rw-r--r-- | src/compiler/shader_enums.c | 1 | ||||
-rw-r--r-- | src/compiler/shader_enums.h | 1 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_variables.c | 4 |
5 files changed, 9 insertions, 0 deletions
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index c515a30b626..ca89a46f7d4 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1758,6 +1758,8 @@ nir_intrinsic_from_system_value(gl_system_value val) return nir_intrinsic_load_local_group_size; case SYSTEM_VALUE_GLOBAL_INVOCATION_ID: return nir_intrinsic_load_global_invocation_id; + case SYSTEM_VALUE_WORK_DIM: + return nir_intrinsic_load_work_dim; default: unreachable("system value does not directly correspond to intrinsic"); } diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 919aa609f8a..1a03a6aa30f 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -452,6 +452,7 @@ system_value("num_subgroups", 1) system_value("subgroup_id", 1) system_value("local_group_size", 3) system_value("global_invocation_id", 3) +system_value("work_dim", 1) # Blend constant color values. Float values are clamped.# system_value("blend_const_color_r_float", 1) diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 4eade256604..a874083a0b7 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -240,6 +240,7 @@ gl_system_value_name(gl_system_value sysval) ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS), ENUM(SYSTEM_VALUE_LOCAL_GROUP_SIZE), ENUM(SYSTEM_VALUE_GLOBAL_GROUP_SIZE), + ENUM(SYSTEM_VALUE_WORK_DIM), ENUM(SYSTEM_VALUE_DEVICE_INDEX), ENUM(SYSTEM_VALUE_VIEW_INDEX), ENUM(SYSTEM_VALUE_VERTEX_CNT), diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index 280bf1d2835..f8e22925f35 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -586,6 +586,7 @@ typedef enum SYSTEM_VALUE_NUM_WORK_GROUPS, SYSTEM_VALUE_LOCAL_GROUP_SIZE, SYSTEM_VALUE_GLOBAL_GROUP_SIZE, + SYSTEM_VALUE_WORK_DIM, /*@}*/ /** Required for VK_KHR_device_group */ diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 67b4d59b9fe..6bd7aa1b0d5 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -1208,6 +1208,10 @@ vtn_get_builtin_location(struct vtn_builder *b, *location = FRAG_RESULT_STENCIL; vtn_assert(*mode == nir_var_shader_out); break; + case SpvBuiltInWorkDim: + *location = SYSTEM_VALUE_WORK_DIM; + set_mode_system_value(b, mode); + break; case SpvBuiltInGlobalSize: *location = SYSTEM_VALUE_GLOBAL_GROUP_SIZE; set_mode_system_value(b, mode); |