From 4d53e512636fbf952c359ebda1668dfcef23a928 Mon Sep 17 00:00:00 2001 From: JPikachu Date: Fri, 9 May 2025 16:57:52 +0100 Subject: [PATCH] vulkan: Enable required descriptor indexing features ready for blindless texture tracking --- src/video_core/vulkan_common/vulkan_device.cpp | 11 ++++++++++- src/video_core/vulkan_common/vulkan_device.h | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index f0b3ed4e6b..ff62b95919 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -1092,7 +1092,16 @@ bool Device::GetSuitability(bool requires_swapchain) { #undef EXT_FEATURE #undef FEATURE - // Perform the feature test. + if (extensions.descriptor_indexing) { + features.descriptor_indexing.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT; + features.descriptor_indexing.pNext = nullptr; + features.descriptor_indexing.descriptorBindingVariableDescriptorCount = VK_TRUE; + features.descriptor_indexing.runtimeDescriptorArray = VK_TRUE; + features.descriptor_indexing.descriptorBindingPartiallyBound = VK_TRUE; + SetNext(next, features.descriptor_indexing); + } + + // Perform the feature test. physical.GetFeatures2(features2); // Base Vulkan 1.0 features are always valid regardless of instance version. diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index ddc9451a7e..2a12219d48 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -42,6 +42,7 @@ VK_DEFINE_HANDLE(VmaAllocator) #define FOR_EACH_VK_FEATURE_EXT(FEATURE) \ FEATURE(EXT, CustomBorderColor, CUSTOM_BORDER_COLOR, custom_border_color) \ FEATURE(EXT, DepthBiasControl, DEPTH_BIAS_CONTROL, depth_bias_control) \ + FEATURE(EXT, DescriptorIndexing, DESCRIPTOR_INDEXING, descriptor_indexing) \ FEATURE(EXT, DepthClipControl, DEPTH_CLIP_CONTROL, depth_clip_control) \ FEATURE(EXT, ExtendedDynamicState, EXTENDED_DYNAMIC_STATE, extended_dynamic_state) \ FEATURE(EXT, ExtendedDynamicState2, EXTENDED_DYNAMIC_STATE_2, extended_dynamic_state2) \ @@ -100,6 +101,7 @@ VK_DEFINE_HANDLE(VmaAllocator) EXTENSION_NAME(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME) \ EXTENSION_NAME(VK_EXT_DEPTH_BIAS_CONTROL_EXTENSION_NAME) \ EXTENSION_NAME(VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME) \ + EXTENSION_NAME(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME) \ EXTENSION_NAME(VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME) \ EXTENSION_NAME(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME) \ EXTENSION_NAME(VK_EXT_EXTENDED_DYNAMIC_STATE_3_EXTENSION_NAME) \ @@ -154,6 +156,13 @@ VK_DEFINE_HANDLE(VmaAllocator) FEATURE_NAME(depth_bias_control, depthBiasControl) \ FEATURE_NAME(depth_bias_control, leastRepresentableValueForceUnormRepresentation) \ FEATURE_NAME(depth_bias_control, depthBiasExact) \ + FEATURE_NAME(descriptor_indexing, descriptorBindingPartiallyBound) \ + FEATURE_NAME(descriptor_indexing, descriptorBindingVariableDescriptorCount) \ + FEATURE_NAME(descriptor_indexing, runtimeDescriptorArray) \ + FEATURE_NAME(descriptor_indexing, descriptorBindingVariableDescriptorCount) \ + FEATURE_NAME(descriptor_indexing, shaderSampledImageArrayNonUniformIndexing) \ + FEATURE_NAME(descriptor_indexing, shaderStorageBufferArrayNonUniformIndexing) \ + FEATURE_NAME(descriptor_indexing, shaderStorageImageArrayNonUniformIndexing) \ FEATURE_NAME(extended_dynamic_state, extendedDynamicState) \ FEATURE_NAME(format_a4b4g4r4, formatA4B4G4R4) \ FEATURE_NAME(index_type_uint8, indexTypeUint8) \