From ff9db1a4cc0eefece2d0485a169b2a289b2ff6ef Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 21 Sep 2017 15:51:55 -0700 Subject: [PATCH] nir/spirv: Add support for device groups MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Samuel Iglesias Gonsálvez --- src/compiler/nir/nir.h | 2 ++ src/compiler/nir/nir_lower_system_values.c | 5 +++++ src/compiler/shader_enums.c | 1 + src/compiler/shader_enums.h | 3 +++ src/compiler/shader_info.h | 1 + src/compiler/spirv/spirv_to_nir.c | 4 ++++ src/compiler/spirv/vtn_variables.c | 4 ++++ 7 files changed, 20 insertions(+) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index c676331000f..804a6561bff 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -1888,6 +1888,8 @@ typedef struct nir_shader_compiler_options { bool lower_cs_local_index_from_id; + bool lower_device_index_to_zero; + /** * Should nir_lower_io() create load_interpolated_input intrinsics? * diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c index 3594f4ae5ce..fb560ee21bb 100644 --- a/src/compiler/nir/nir_lower_system_values.c +++ b/src/compiler/nir/nir_lower_system_values.c @@ -133,6 +133,11 @@ convert_block(nir_block *block, nir_builder *b) break; } + case SYSTEM_VALUE_DEVICE_INDEX: + if (b->shader->options->lower_device_index_to_zero) + sysval = nir_imm_int(b, 0); + break; + default: break; } diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 2179c475abd..62c1ac1f073 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -232,6 +232,7 @@ gl_system_value_name(gl_system_value sysval) ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID), ENUM(SYSTEM_VALUE_WORK_GROUP_ID), ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS), + 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 ac83c65b30c..64fb68828ed 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -558,6 +558,9 @@ typedef enum SYSTEM_VALUE_LOCAL_GROUP_SIZE, /*@}*/ + /** Required for VK_KHR_device_group */ + SYSTEM_VALUE_DEVICE_INDEX, + /** Required for VK_KHX_multiview */ SYSTEM_VALUE_VIEW_INDEX, diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 2fcbde74bee..00aee77c002 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -36,6 +36,7 @@ struct spirv_supported_capabilities { bool float64; bool image_ms_array; bool tessellation; + bool device_group; bool draw_parameters; bool image_read_without_format; bool image_write_without_format; diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 1c52f7ff615..f0122a43424 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -3283,6 +3283,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, spv_check_supported(image_write_without_format, cap); break; + case SpvCapabilityDeviceGroup: + spv_check_supported(device_group, cap); + break; + case SpvCapabilityMultiView: spv_check_supported(multiview, cap); break; diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 11d2aabac8c..da511a44b08 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -1293,6 +1293,10 @@ vtn_get_builtin_location(struct vtn_builder *b, *location = SYSTEM_VALUE_DRAW_ID; set_mode_system_value(b, mode); break; + case SpvBuiltInDeviceIndex: + *location = SYSTEM_VALUE_DEVICE_INDEX; + set_mode_system_value(b, mode); + break; case SpvBuiltInViewIndex: *location = SYSTEM_VALUE_VIEW_INDEX; set_mode_system_value(b, mode); -- 2.30.2