From 427a3dbdb14ae424158454985860e03d57d84c27 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Thu, 8 Mar 2018 14:18:59 -0500 Subject: [PATCH] nir/spirv: implement BuiltInWorkDim Reviewed-by: Jason Ekstrand Signed-off-by: Karol Herbst --- src/compiler/nir/nir.c | 2 ++ src/compiler/nir/nir_intrinsics.py | 1 + src/compiler/shader_enums.c | 1 + src/compiler/shader_enums.h | 1 + src/compiler/spirv/vtn_variables.c | 4 ++++ 5 files changed, 9 insertions(+) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index c515a30..ca89a46 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 919aa60..1a03a6a 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 4eade25..a874083 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 280bf1d..f8e2292 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 67b4d59..6bd7aa1 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); -- 2.7.4