VK_EXT_private_data promoted structures This CL adds support for VK_EXT_private_data's promoted structures, with the main feature still turned off. Tests: dEQP-VK.wsi.*.swapchain.private_data.* Bug: b/204502114 Change-Id: Id94548897b217aae5d05184981ce5f45c6db326c Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/64008 Kokoro-Result: kokoro <noreply+kokoro@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp index 01aae1b..60c2318 100644 --- a/src/Vulkan/VkPhysicalDevice.cpp +++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -308,6 +308,12 @@ } template<typename T> +static void getPhysicalDevicePrivateDataFeatures(T *features) +{ + features->privateData = VK_FALSE; +} + +template<typename T> static void getPhysicalDeviceTextureCompressionASTCHDRFeatures(T *features) { features->textureCompressionASTC_HDR = VK_FALSE; @@ -499,6 +505,9 @@ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT: getPhysicalDeviceExtendedDynamicStateFeaturesExt(reinterpret_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *>(curExtension)); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: + getPhysicalDevicePrivateDataFeatures(reinterpret_cast<VkPhysicalDevicePrivateDataFeatures *>(curExtension)); + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: getPhysicalDeviceTextureCompressionASTCHDRFeatures(reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeatures *>(curExtension)); break; @@ -1388,6 +1397,13 @@ return CheckFeature(requested, supported, extendedDynamicState); } +bool PhysicalDevice::hasExtendedFeatures(const VkPhysicalDevicePrivateDataFeatures *requested) const +{ + auto supported = getSupportedFeatures(requested); + + return CheckFeature(requested, supported, privateData); +} + bool PhysicalDevice::hasExtendedFeatures(const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *requested) const { auto supported = getSupportedFeatures(requested);
diff --git a/src/Vulkan/VkPhysicalDevice.hpp b/src/Vulkan/VkPhysicalDevice.hpp index ffbb5c7..ae527fb 100644 --- a/src/Vulkan/VkPhysicalDevice.hpp +++ b/src/Vulkan/VkPhysicalDevice.hpp
@@ -45,6 +45,7 @@ bool hasExtendedFeatures(const VkPhysicalDeviceDepthClipEnableFeaturesEXT *features) const; bool hasExtendedFeatures(const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *features) const; bool hasExtendedFeatures(const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *features) const; + bool hasExtendedFeatures(const VkPhysicalDevicePrivateDataFeatures *features) const; bool hasExtendedFeatures(const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *features) const; bool hasExtendedFeatures(const VkPhysicalDeviceSubgroupSizeControlFeatures *requested) const; bool hasExtendedFeatures(const VkPhysicalDeviceInlineUniformBlockFeatures *features) const;
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp index d209d7b..795f218 100644 --- a/src/Vulkan/libVulkan.cpp +++ b/src/Vulkan/libVulkan.cpp
@@ -959,6 +959,22 @@ } } break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: + { + const auto *privateDataFeatures = reinterpret_cast<const VkPhysicalDevicePrivateDataFeatures *>(extensionCreateInfo); + bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(privateDataFeatures); + if(!hasFeatures) + { + return VK_ERROR_FEATURE_NOT_PRESENT; + } + } + break; + case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: + { + const auto *privateDataCreateInfo = reinterpret_cast<const VkDevicePrivateDataCreateInfo *>(extensionCreateInfo); + (void)privateDataCreateInfo->privateDataSlotRequestCount; + } + break; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES: { const auto *textureCompressionASTCHDRFeatures = reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *>(extensionCreateInfo);