From 9d059a60f566e424f1787036851868162aec7cdc Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 27 Mar 2026 09:23:41 +0100 Subject: [PATCH] nir: introduce nir_descriptor_type for Vulkan like descriptors This removes a Vulkan dependency in NIR core. Signed-off-by: Samuel Pitoiset Part-of: --- .../nir/radv_nir_apply_pipeline_layout.c | 8 ++-- src/asahi/vulkan/hk_nir_lower_descriptors.c | 17 +++++---- src/broadcom/vulkan/v3dv_event.c | 4 +- src/broadcom/vulkan/v3dv_query.c | 8 ++-- src/compiler/nir/nir.h | 9 +++++ src/compiler/nir/nir_intrinsics.py | 4 +- src/compiler/nir/nir_print.c | 37 +++---------------- .../nir/tests/load_store_vectorizer_tests.cpp | 2 +- src/compiler/spirv/vtn_variables.c | 16 ++++---- .../vulkan/anv_nir_apply_pipeline_layout.c | 32 ++++++++++++---- .../anv_nir_apply_pipeline_layout.c | 30 +++++++++++---- .../vulkan/kk_nir_lower_descriptors.c | 17 +++++---- src/microsoft/compiler/dxil_nir.c | 2 +- src/microsoft/compiler/nir_to_dxil.c | 4 +- src/microsoft/spirv_to_dxil/dxil_spirv_nir.c | 16 ++++---- .../dxil_spirv_nir_lower_bindless.c | 6 +-- src/microsoft/vulkan/dzn_nir.c | 10 ++--- .../vulkan/nvk_nir_lower_descriptors.c | 12 +++--- .../vulkan/panvk_vX_nir_lower_descriptors.c | 8 ++-- 19 files changed, 130 insertions(+), 112 deletions(-) diff --git a/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c b/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c index 67033727996..2b410af0d8f 100644 --- a/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c +++ b/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c @@ -136,8 +136,8 @@ visit_vulkan_resource_index(nir_builder *b, apply_layout_state *state, nir_intri static void visit_vulkan_resource_reindex(nir_builder *b, apply_layout_state *state, nir_intrinsic_instr *intrin) { - VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type == VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) { + nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type == nir_descriptor_type_acceleration_structure) { nir_def *set_ptr = nir_unpack_64_2x32_split_x(b, intrin->src[0].ssa); nir_def *binding_ptr = nir_unpack_64_2x32_split_y(b, intrin->src[0].ssa); @@ -147,7 +147,7 @@ visit_vulkan_resource_reindex(nir_builder *b, apply_layout_state *state, nir_int nir_def_rewrite_uses(&intrin->def, nir_pack_64_2x32_split(b, set_ptr, binding_ptr)); } else { - assert(desc_type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER || desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + assert(desc_type == nir_descriptor_type_uniform_buffer || desc_type == nir_descriptor_type_storage_buffer); nir_def *binding_ptr = nir_channel(b, intrin->src[0].ssa, 1); nir_def *stride = nir_channel(b, intrin->src[0].ssa, 2); @@ -163,7 +163,7 @@ visit_vulkan_resource_reindex(nir_builder *b, apply_layout_state *state, nir_int static void visit_load_vulkan_descriptor(nir_builder *b, apply_layout_state *state, nir_intrinsic_instr *intrin) { - if (nir_intrinsic_desc_type(intrin) == VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) { + if (nir_intrinsic_desc_type(intrin) == nir_descriptor_type_acceleration_structure) { nir_def *addr = convert_pointer_to_64_bit(b, state, nir_iadd(b, nir_unpack_64_2x32_split_x(b, intrin->src[0].ssa), nir_unpack_64_2x32_split_y(b, intrin->src[0].ssa))); diff --git a/src/asahi/vulkan/hk_nir_lower_descriptors.c b/src/asahi/vulkan/hk_nir_lower_descriptors.c index eb7c132d66f..3a985b2eb34 100644 --- a/src/asahi/vulkan/hk_nir_lower_descriptors.c +++ b/src/asahi/vulkan/hk_nir_lower_descriptors.c @@ -219,12 +219,13 @@ static bool try_lower_load_vulkan_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - ASSERTED const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + ASSERTED const nir_descriptor_type desc_type = + nir_intrinsic_desc_type(intrin); b->cursor = nir_before_instr(&intrin->instr); nir_intrinsic_instr *idx_intrin = nir_src_as_intrinsic(intrin->src[0]); if (idx_intrin == NULL || !is_idx_intrin(idx_intrin)) { - assert(desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + assert(desc_type == nir_descriptor_type_storage_buffer); return false; } @@ -748,8 +749,8 @@ static bool lower_ssbo_resource_index(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type != VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type != nir_descriptor_type_storage_buffer) return false; b->cursor = nir_instr_remove(&intrin->instr); @@ -818,8 +819,8 @@ static bool lower_ssbo_resource_reindex(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type != VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type != nir_descriptor_type_storage_buffer) return false; b->cursor = nir_instr_remove(&intrin->instr); @@ -842,8 +843,8 @@ static bool lower_load_ssbo_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type != VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type != nir_descriptor_type_storage_buffer) return false; b->cursor = nir_instr_remove(&intrin->instr); diff --git a/src/broadcom/vulkan/v3dv_event.c b/src/broadcom/vulkan/v3dv_event.c index 2223b0a4dd3..cdba269dcff 100644 --- a/src/broadcom/vulkan/v3dv_event.c +++ b/src/broadcom/vulkan/v3dv_event.c @@ -38,7 +38,7 @@ get_set_event_cs(const nir_shader_compiler_options *options) nir_vulkan_resource_index(&b, 2, 32, nir_imm_int(&b, 0), .desc_set = 0, .binding = 0, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); nir_def *offset = nir_load_push_constant(&b, 1, 32, nir_imm_int(&b, 0), .base = 0, .range = 4); @@ -62,7 +62,7 @@ get_wait_event_cs(const nir_shader_compiler_options *options) nir_vulkan_resource_index(&b, 2, 32, nir_imm_int(&b, 0), .desc_set = 0, .binding = 0, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); nir_def *offset = nir_load_push_constant(&b, 1, 32, nir_imm_int(&b, 0), .base = 0, .range = 4); diff --git a/src/broadcom/vulkan/v3dv_query.c b/src/broadcom/vulkan/v3dv_query.c index 1c25c5bce97..f5146ca5cce 100644 --- a/src/broadcom/vulkan/v3dv_query.c +++ b/src/broadcom/vulkan/v3dv_query.c @@ -1454,7 +1454,7 @@ get_set_query_availability_cs(const nir_shader_compiler_options *options) nir_vulkan_resource_index(&b, 2, 32, nir_imm_int(&b, 0), .desc_set = 0, .binding = 0, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); /* This assumes a local size of 1 and a horizontal-only dispatch. If we * ever change any of these parameters we need to update how we compute the @@ -1517,7 +1517,7 @@ get_reset_occlusion_query_cs(const nir_shader_compiler_options *options) nir_vulkan_resource_index(&b, 2, 32, nir_imm_int(&b, 0), .desc_set = 0, .binding = 0, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); /* This assumes a local size of 1 and a horizontal-only dispatch. If we * ever change any of these parameters we need to update how we compute the @@ -1573,13 +1573,13 @@ get_copy_query_results_cs(const nir_shader_compiler_options *options, nir_vulkan_resource_index(&b, 2, 32, nir_imm_int(&b, 0), .desc_set = 0, .binding = 0, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); nir_def *buf_out = nir_vulkan_resource_index(&b, 2, 32, nir_imm_int(&b, 0), .desc_set = 1, .binding = 0, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); /* Read push constants */ nir_def *avail_offset = diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index c13d0cfac95..35c4a06cce4 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -196,6 +196,15 @@ typedef enum { nir_resource_type_acceleration_structure = 1u << 8, } nir_resource_type; +/** + * Descriptor types. + */ +typedef enum { + nir_descriptor_type_uniform_buffer = 0, + nir_descriptor_type_storage_buffer = 1, + nir_descriptor_type_acceleration_structure = 2, +} nir_descriptor_type; + /** * Rounding modes. */ diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 0f820fef5e4..f0ceb85a05b 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -248,8 +248,8 @@ index("unsigned", "offset_shift") # Similar to offset_shift except it is applied only to the non uniform offset src, not the base. index("unsigned", "offset_shift_nv") -# The Vulkan descriptor type for a vulkan_resource_[re]index intrinsic. -index("unsigned", "desc_type") +# The NIR descriptor type for a vulkan_resource_[re]index intrinsic. +index("nir_descriptor_type", "desc_type") # The NIR resource type according to VkSpirvResourceTypeFlagsKHR. index("nir_resource_type", "resource_type") diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index 83e559891eb..f44d8ba95e3 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -34,7 +34,6 @@ #include "util/memstream.h" #include "util/mesa-blake3.h" #include "util/ralloc.h" -#include "vulkan/vulkan_core.h" #include "nir.h" #include "nir_builder.h" @@ -1203,39 +1202,15 @@ print_deref_instr(nir_deref_instr *instr, print_state *state) } static const char * -vulkan_descriptor_type_name(VkDescriptorType type) +nir_descriptor_type_name(nir_descriptor_type type) { switch (type) { - case VK_DESCRIPTOR_TYPE_SAMPLER: - return "sampler"; - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - return "texture+sampler"; - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: - return "texture"; - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - return "image"; - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: - return "texture-buffer"; - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - return "image-buffer"; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case nir_descriptor_type_uniform_buffer: return "UBO"; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case nir_descriptor_type_storage_buffer: return "SSBO"; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - return "UBO"; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - return "SSBO"; - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - return "input-att"; - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: - return "inline-UBO"; - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: + case nir_descriptor_type_acceleration_structure: return "accel-struct"; - case VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM: - return "sample-weight-image"; - case VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM: - return "block-match-image"; default: return "unknown"; } @@ -1450,8 +1425,8 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) } case NIR_INTRINSIC_DESC_TYPE: { - VkDescriptorType desc_type = nir_intrinsic_desc_type(instr); - fprintf(fp, "desc_type=%s", vulkan_descriptor_type_name(desc_type)); + nir_descriptor_type desc_type = nir_intrinsic_desc_type(instr); + fprintf(fp, "desc_type=%s", nir_descriptor_type_name(desc_type)); break; } diff --git a/src/compiler/nir/tests/load_store_vectorizer_tests.cpp b/src/compiler/nir/tests/load_store_vectorizer_tests.cpp index 9a51452ff91..dff518df71b 100644 --- a/src/compiler/nir/tests/load_store_vectorizer_tests.cpp +++ b/src/compiler/nir/tests/load_store_vectorizer_tests.cpp @@ -171,7 +171,7 @@ nir_load_store_vectorize_test::get_resource(uint32_t binding, bool ssbo) res->num_components = 1; res->src[0] = nir_src_for_ssa(nir_imm_zero(b, 1, 32)); nir_intrinsic_set_desc_type( - res, ssbo ? 7/*VK_DESCRIPTOR_TYPE_STORAGE_BUFFER*/ : 6/*VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER*/); + res, ssbo ? nir_descriptor_type_storage_buffer : nir_descriptor_type_uniform_buffer); nir_intrinsic_set_desc_set(res, 0); nir_intrinsic_set_binding(res, binding); nir_builder_instr_insert(b, &res->instr); diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 94daba8fa6f..fa5f0fff188 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -206,16 +206,16 @@ vtn_access_link_as_ssa(struct vtn_builder *b, struct vtn_access_link link, } } -static VkDescriptorType -vk_desc_type_for_mode(struct vtn_builder *b, enum vtn_variable_mode mode) +static nir_descriptor_type +nir_desc_type_for_mode(struct vtn_builder *b, enum vtn_variable_mode mode) { switch (mode) { case vtn_variable_mode_ubo: - return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + return nir_descriptor_type_uniform_buffer; case vtn_variable_mode_ssbo: - return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + return nir_descriptor_type_storage_buffer; case vtn_variable_mode_accel_struct: - return VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR; + return nir_descriptor_type_acceleration_structure; default: vtn_fail("Invalid mode for vulkan_resource_index"); } @@ -241,7 +241,7 @@ vtn_variable_resource_index(struct vtn_builder *b, struct vtn_variable *var, instr->src[0] = nir_src_for_ssa(desc_array_index); nir_intrinsic_set_desc_set(instr, var->descriptor_set); nir_intrinsic_set_binding(instr, var->binding); - nir_intrinsic_set_desc_type(instr, vk_desc_type_for_mode(b, var->mode)); + nir_intrinsic_set_desc_type(instr, nir_desc_type_for_mode(b, var->mode)); nir_intrinsic_set_resource_type(instr, var->var->data.resource_type); nir_address_format addr_format = vtn_mode_to_address_format(b, var->mode); @@ -265,7 +265,7 @@ vtn_resource_reindex(struct vtn_builder *b, enum vtn_variable_mode mode, nir_intrinsic_vulkan_resource_reindex); instr->src[0] = nir_src_for_ssa(base_index); instr->src[1] = nir_src_for_ssa(offset_index); - nir_intrinsic_set_desc_type(instr, vk_desc_type_for_mode(b, mode)); + nir_intrinsic_set_desc_type(instr, nir_desc_type_for_mode(b, mode)); nir_address_format addr_format = vtn_mode_to_address_format(b, mode); nir_def_init(&instr->instr, &instr->def, @@ -287,7 +287,7 @@ vtn_descriptor_load(struct vtn_builder *b, enum vtn_variable_mode mode, nir_intrinsic_instr_create(b->nb.shader, nir_intrinsic_load_vulkan_descriptor); desc_load->src[0] = nir_src_for_ssa(desc_index); - nir_intrinsic_set_desc_type(desc_load, vk_desc_type_for_mode(b, mode)); + nir_intrinsic_set_desc_type(desc_load, nir_desc_type_for_mode(b, mode)); nir_address_format addr_format = vtn_mode_to_address_format(b, mode); nir_def_init(&desc_load->instr, &desc_load->def, diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c index 7511515e94f..d3f5af7afc7 100644 --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c @@ -114,14 +114,14 @@ bti_multiplier(const struct apply_pipeline_layout_state *state, } static nir_address_format -addr_format_for_desc_type(VkDescriptorType desc_type, +addr_format_for_desc_type(nir_descriptor_type desc_type, struct apply_pipeline_layout_state *state) { switch (desc_type) { - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case nir_descriptor_type_storage_buffer: return state->ssbo_addr_format; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case nir_descriptor_type_uniform_buffer: return state->ubo_addr_format; default: @@ -186,7 +186,7 @@ const VkDescriptorBindingFlags non_pushable_binding_flags = static void add_binding_type(struct apply_pipeline_layout_state *state, - uint32_t set, uint32_t binding, VkDescriptorType type) + uint32_t set, uint32_t binding, nir_descriptor_type type) { add_binding(state, set, binding, false); @@ -207,7 +207,7 @@ add_binding_type(struct apply_pipeline_layout_state *state, set_layout->binding[binding].type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC || set_layout->binding[binding].type == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK || set_layout->binding[binding].type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) && - type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) + type == nir_descriptor_type_uniform_buffer) state->set[set].binding[binding].properties |= BINDING_PROPERTY_PUSHABLE; } @@ -1588,7 +1588,7 @@ lower_direct_buffer_instr(nir_builder *b, nir_instr *instr, void *_state) case nir_intrinsic_load_vulkan_descriptor: if (nir_intrinsic_desc_type(intrin) == - VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) + nir_descriptor_type_acceleration_structure) return lower_load_accel_struct_desc(b, intrin, state); return false; @@ -1633,18 +1633,34 @@ lower_res_reindex_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, return true; } +static VkDescriptorType +nir_to_vk_descriptor_type(nir_descriptor_type type) +{ + switch (type) { + case nir_descriptor_type_uniform_buffer: + return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + case nir_descriptor_type_storage_buffer: + return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + case nir_descriptor_type_acceleration_structure: + return VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR; + default: + UNREACHABLE("Invalid nir_descriptor_type"); + } +} + static bool lower_load_vulkan_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, struct apply_pipeline_layout_state *state) { b->cursor = nir_before_instr(&intrin->instr); - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + const VkDescriptorType vk_desc_type = nir_to_vk_descriptor_type(desc_type); nir_address_format addr_format = addr_format_for_desc_type(desc_type, state); nir_def *desc = build_buffer_addr_for_res_index(b, - desc_type, intrin->src[0].ssa, + vk_desc_type, intrin->src[0].ssa, addr_format, state); assert(intrin->def.bit_size == desc->bit_size); diff --git a/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c index 30d8cf05171..6cbbcb26fda 100644 --- a/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan_hasvk/anv_nir_apply_pipeline_layout.c @@ -59,14 +59,14 @@ struct apply_pipeline_layout_state { }; static nir_address_format -addr_format_for_desc_type(VkDescriptorType desc_type, +addr_format_for_desc_type(nir_descriptor_type desc_type, struct apply_pipeline_layout_state *state) { switch (desc_type) { - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case nir_descriptor_type_storage_buffer: return state->ssbo_addr_format; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case nir_descriptor_type_uniform_buffer: return state->ubo_addr_format; default: @@ -723,7 +723,7 @@ lower_direct_buffer_instr(nir_builder *b, nir_instr *instr, void *_state) case nir_intrinsic_load_vulkan_descriptor: if (nir_intrinsic_desc_type(intrin) == - VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) + nir_descriptor_type_acceleration_structure) return lower_load_accel_struct_desc(b, intrin, state); return false; @@ -775,17 +775,33 @@ lower_res_reindex_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, return true; } +static VkDescriptorType +nir_to_vk_descriptor_type(nir_descriptor_type type) +{ + switch (type) { + case nir_descriptor_type_uniform_buffer: + return VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + case nir_descriptor_type_storage_buffer: + return VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + case nir_descriptor_type_acceleration_structure: + return VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR; + default: + UNREACHABLE("Invalid nir_descriptor_type"); + } +} + static bool lower_load_vulkan_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, struct apply_pipeline_layout_state *state) { b->cursor = nir_before_instr(&intrin->instr); - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + const VkDescriptorType vk_desc_type = nir_to_vk_descriptor_type(desc_type); nir_address_format addr_format = addr_format_for_desc_type(desc_type, state); nir_def *desc = - build_buffer_addr_for_res_index(b, desc_type, intrin->src[0].ssa, + build_buffer_addr_for_res_index(b, vk_desc_type, intrin->src[0].ssa, addr_format, state); assert(intrin->def.bit_size == desc->bit_size); @@ -805,7 +821,7 @@ lower_get_ssbo_size(nir_builder *b, nir_intrinsic_instr *intrin, b->cursor = nir_before_instr(&intrin->instr); nir_address_format addr_format = - addr_format_for_desc_type(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, state); + addr_format_for_desc_type(nir_descriptor_type_storage_buffer, state); nir_def *desc = build_buffer_addr_for_res_index(b, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, diff --git a/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c b/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c index 66eb3e95bd1..736a0955bed 100644 --- a/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c +++ b/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c @@ -238,12 +238,13 @@ static bool try_lower_load_vulkan_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - ASSERTED const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + ASSERTED const nir_descriptor_type desc_type = + nir_intrinsic_desc_type(intrin); b->cursor = nir_before_instr(&intrin->instr); nir_intrinsic_instr *idx_intrin = nir_src_as_intrinsic(intrin->src[0]); if (idx_intrin == NULL || !is_idx_intrin(idx_intrin)) { - assert(desc_type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + assert(desc_type == nir_descriptor_type_storage_buffer); return false; } @@ -578,8 +579,8 @@ static bool lower_ssbo_resource_index(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type != VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type != nir_descriptor_type_storage_buffer) return false; b->cursor = nir_instr_remove(&intrin->instr); @@ -644,8 +645,8 @@ static bool lower_ssbo_resource_reindex(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type != VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type != nir_descriptor_type_storage_buffer) return false; b->cursor = nir_instr_remove(&intrin->instr); @@ -668,8 +669,8 @@ static bool lower_load_ssbo_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); - if (desc_type != VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); + if (desc_type != nir_descriptor_type_storage_buffer) return false; b->cursor = nir_instr_remove(&intrin->instr); diff --git a/src/microsoft/compiler/dxil_nir.c b/src/microsoft/compiler/dxil_nir.c index 48f7996279a..c84b6c34278 100644 --- a/src/microsoft/compiler/dxil_nir.c +++ b/src/microsoft/compiler/dxil_nir.c @@ -1544,7 +1544,7 @@ lower_ubo_array_one_to_static(struct nir_builder *b, if (nir_src_is_const(index->src[0]) && nir_src_as_uint(index->src[0]) == 0) return false; - if (nir_intrinsic_desc_type(index) != VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) + if (nir_intrinsic_desc_type(index) != nir_descriptor_type_uniform_buffer) return false; b->cursor = nir_instr_remove(&index->instr); diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index ba63c38f341..9f11158abe8 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -4473,11 +4473,11 @@ emit_load_vulkan_descriptor(struct ntd_context *ctx, nir_intrinsic_instr *intr) enum dxil_resource_class resource_class; enum dxil_resource_kind resource_kind; switch (nir_intrinsic_desc_type(intr)) { - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case nir_descriptor_type_uniform_buffer: resource_class = DXIL_RESOURCE_CLASS_CBV; resource_kind = DXIL_RESOURCE_KIND_CBUFFER; break; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case nir_descriptor_type_storage_buffer: resource_class = DXIL_RESOURCE_CLASS_UAV; resource_kind = DXIL_RESOURCE_KIND_RAW_BUFFER; break; diff --git a/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c b/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c index ceadc777592..460af16e43b 100644 --- a/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c +++ b/src/microsoft/spirv_to_dxil/dxil_spirv_nir.c @@ -284,12 +284,12 @@ lower_shader_system_values(struct nir_builder *builder, nir_instr *instr, nir_imm_int(builder, 0), .desc_set = conf->runtime_data_cbv.register_space, .binding = conf->runtime_data_cbv.base_shader_register, - .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + .desc_type = nir_descriptor_type_uniform_buffer); nir_def *load_desc = nir_load_vulkan_descriptor( builder, nir_address_format_num_components(ubo_format), nir_address_format_bit_size(ubo_format), - index, .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + index, .desc_type = nir_descriptor_type_uniform_buffer); nir_def *load_data = nir_load_ubo( builder, @@ -371,12 +371,12 @@ lower_load_push_constant(struct nir_builder *builder, nir_instr *instr, nir_address_format_bit_size(ubo_format), nir_imm_int(builder, 0), .desc_set = data->desc_set, .binding = data->binding, - .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + .desc_type = nir_descriptor_type_uniform_buffer); nir_def *load_desc = nir_load_vulkan_descriptor( builder, nir_address_format_num_components(ubo_format), nir_address_format_bit_size(ubo_format), - index, .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + index, .desc_type = nir_descriptor_type_uniform_buffer); nir_def *offset = intrin->src[0].ssa; nir_def *load_data = nir_load_ubo( @@ -465,12 +465,12 @@ lower_yz_flip(struct nir_builder *builder, nir_instr *instr, nir_imm_int(builder, 0), .desc_set = rt_conf->runtime_data_cbv.register_space, .binding = rt_conf->runtime_data_cbv.base_shader_register, - .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + .desc_type = nir_descriptor_type_uniform_buffer); nir_def *load_desc = nir_load_vulkan_descriptor( builder, nir_address_format_num_components(ubo_format), nir_address_format_bit_size(ubo_format), - index, .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + index, .desc_type = nir_descriptor_type_uniform_buffer); dyn_yz_flip_mask = nir_load_ubo(builder, 1, 32, @@ -620,12 +620,12 @@ write_pntc_with_pos(nir_builder *b, nir_instr *instr, void *_data) nir_imm_int(b, 0), .desc_set = data->conf->runtime_data_cbv.register_space, .binding = data->conf->runtime_data_cbv.base_shader_register, - .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + .desc_type = nir_descriptor_type_uniform_buffer); nir_def *load_desc = nir_load_vulkan_descriptor( b, nir_address_format_num_components(ubo_format), nir_address_format_bit_size(ubo_format), - index, .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + index, .desc_type = nir_descriptor_type_uniform_buffer); nir_def *transform = nir_channels(b, nir_load_ubo(b, 4, 32, diff --git a/src/microsoft/spirv_to_dxil/dxil_spirv_nir_lower_bindless.c b/src/microsoft/spirv_to_dxil/dxil_spirv_nir_lower_bindless.c index e6716a2631d..8b9bcd4f9ef 100644 --- a/src/microsoft/spirv_to_dxil/dxil_spirv_nir_lower_bindless.c +++ b/src/microsoft/spirv_to_dxil/dxil_spirv_nir_lower_bindless.c @@ -50,10 +50,10 @@ load_vulkan_ssbo(nir_builder *b, unsigned buf_idx, nir_imm_int(b, 0), .desc_set = 0, .binding = buf_idx, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); nir_def *descriptor = nir_load_vulkan_descriptor(b, 2, 32, res_index, - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); return nir_load_ssbo(b, num_comps, 32, nir_channel(b, descriptor, 0), offset, @@ -287,7 +287,7 @@ lower_buffer_device_address(nir_builder *b, nir_intrinsic_instr *intr, void *dat nir_def *index = nir_iand_imm(b, nir_unpack_64_2x32_split_y(b, pointer), 0xffffff); nir_def *descriptor = nir_load_vulkan_descriptor(b, 2, 32, nir_vec2(b, index, offset), - .desc_type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER); + .desc_type = nir_descriptor_type_storage_buffer); nir_deref_instr *head = nir_build_deref_cast_with_alignment(b, descriptor, nir_var_mem_ssbo, old_head->type, old_head->cast.ptr_stride, old_head->cast.align_mul, diff --git a/src/microsoft/vulkan/dzn_nir.c b/src/microsoft/vulkan/dzn_nir.c index 196e82a88a4..a0ce5bc8a5e 100644 --- a/src/microsoft/vulkan/dzn_nir.c +++ b/src/microsoft/vulkan/dzn_nir.c @@ -59,10 +59,10 @@ dzn_nir_create_bo_desc(nir_builder *b, else b->shader->info.num_ssbos++; - VkDescriptorType desc_type = + nir_descriptor_type desc_type = var->data.mode == nir_var_mem_ubo ? - VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER : - VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; + nir_descriptor_type_uniform_buffer : + nir_descriptor_type_storage_buffer; nir_address_format addr_format = nir_address_format_32bit_index_offset; nir_def *index = nir_vulkan_resource_index(b, @@ -813,12 +813,12 @@ load_dynamic_depth_bias(nir_builder *b, struct dzn_nir_point_gs_info *info) nir_imm_int(b, 0), .desc_set = info->runtime_data_cbv.register_space, .binding = info->runtime_data_cbv.base_shader_register, - .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + .desc_type = nir_descriptor_type_uniform_buffer); nir_def *load_desc = nir_load_vulkan_descriptor( b, nir_address_format_num_components(ubo_format), nir_address_format_bit_size(ubo_format), - index, .desc_type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); + index, .desc_type = nir_descriptor_type_uniform_buffer); return nir_load_ubo( b, 1, 32, diff --git a/src/nouveau/vulkan/nvk_nir_lower_descriptors.c b/src/nouveau/vulkan/nvk_nir_lower_descriptors.c index 7bf6e985a67..f5c0349c840 100644 --- a/src/nouveau/vulkan/nvk_nir_lower_descriptors.c +++ b/src/nouveau/vulkan/nvk_nir_lower_descriptors.c @@ -68,10 +68,10 @@ struct lower_descriptors_ctx { }; static bool -descriptor_type_is_ubo(VkDescriptorType desc_type) +descriptor_type_is_ubo(nir_descriptor_type desc_type) { switch (desc_type) { - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case nir_descriptor_type_uniform_buffer: return true; default: @@ -80,10 +80,10 @@ descriptor_type_is_ubo(VkDescriptorType desc_type) } static bool -descriptor_type_is_ssbo(VkDescriptorType desc_type) +descriptor_type_is_ssbo(nir_descriptor_type desc_type) { switch (desc_type) { - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case nir_descriptor_type_storage_buffer: return true; default: @@ -723,7 +723,7 @@ load_descriptor_for_idx_intrin(nir_builder *b, nir_intrinsic_instr *intrin, uint32_t binding = nir_intrinsic_binding(intrin); index = nir_iadd(b, index, intrin->src[0].ssa); - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); if (descriptor_type_is_ubo(desc_type) && ctx->use_bindless_cbuf) { nir_def *desc = load_descriptor(b, 1, 64, set, binding, index, 0, ctx); @@ -746,7 +746,7 @@ static bool try_lower_load_vulkan_descriptor(nir_builder *b, nir_intrinsic_instr *intrin, const struct lower_descriptors_ctx *ctx) { - ASSERTED const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + ASSERTED const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); b->cursor = nir_before_instr(&intrin->instr); nir_intrinsic_instr *idx_intrin = nir_src_as_intrinsic(intrin->src[0]); diff --git a/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c b/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c index 69fe964d11d..c4e5d1f8085 100644 --- a/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c +++ b/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c @@ -60,14 +60,14 @@ struct lower_desc_ctx { }; static nir_address_format -addr_format_for_desc_type(VkDescriptorType desc_type, +addr_format_for_desc_type(nir_descriptor_type desc_type, const struct lower_desc_ctx *ctx) { switch (desc_type) { - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: + case nir_descriptor_type_uniform_buffer: return ctx->ubo_addr_format; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: + case nir_descriptor_type_storage_buffer: return ctx->ssbo_addr_format; default: @@ -433,7 +433,7 @@ lower_res_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, { b->cursor = nir_before_instr(&intrin->instr); - const VkDescriptorType desc_type = nir_intrinsic_desc_type(intrin); + const nir_descriptor_type desc_type = nir_intrinsic_desc_type(intrin); nir_address_format addr_format = addr_format_for_desc_type(desc_type, ctx); nir_def *res;