diff options
author | Piers Daniell <pdaniell-nv@users.noreply.github.com> | 2022-01-27 10:20:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-27 17:20:29 +0000 |
commit | 615ab4863f7d2e31d3037d0c6a0f641fd6fc0d07 (patch) | |
tree | f0a6e7eddc2f74f9400e922ba007566e597fab41 | |
parent | 4e83b3aaf5368fe28aa3da2acad07b36532c4042 (diff) | |
download | amber-615ab4863f7d2e31d3037d0c6a0f641fd6fc0d07.tar.gz |
Add support for Vulkan 1.3 features/properties (#975)
-rw-r--r-- | src/vulkan/device.cc | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index 5e18277..d951f49 100644 --- a/src/vulkan/device.cc +++ b/src/vulkan/device.cc @@ -467,6 +467,7 @@ Result Device::Initialize( VkPhysicalDevice16BitStorageFeaturesKHR* storage16_ptrs = nullptr; VkPhysicalDeviceVulkan11Features* vulkan11_ptrs = nullptr; VkPhysicalDeviceVulkan12Features* vulkan12_ptrs = nullptr; + VkPhysicalDeviceVulkan13Features* vulkan13_ptrs = nullptr; VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* subgroup_size_control_features = nullptr; void* ptr = available_features2.pNext; @@ -499,6 +500,9 @@ Result Device::Initialize( case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES: vulkan12_ptrs = static_cast<VkPhysicalDeviceVulkan12Features*>(ptr); break; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES: + vulkan13_ptrs = static_cast<VkPhysicalDeviceVulkan13Features*>(ptr); + break; default: break; } @@ -543,7 +547,7 @@ Result Device::Initialize( "Shader 8-bit storage requested but feature not returned"); } if ((feature == kSubgroupSizeControl || feature == kComputeFullSubgroups) && - subgroup_size_control_features == nullptr) { + subgroup_size_control_features == nullptr && vulkan13_ptrs == nullptr) { return amber::Result("Missing subgroup size control features"); } @@ -652,13 +656,25 @@ Result Device::Initialize( } } - if (feature == kSubgroupSizeControl && - subgroup_size_control_features->subgroupSizeControl != VK_TRUE) { - return amber::Result("Missing subgroup size control feature"); - } - if (feature == kComputeFullSubgroups && - subgroup_size_control_features->computeFullSubgroups != VK_TRUE) { - return amber::Result("Missing compute full subgroups feature"); + // If Vulkan 1.3 structure exists the features are set there. + if (vulkan13_ptrs) { + if (feature == kSubgroupSizeControl && + vulkan13_ptrs->subgroupSizeControl != VK_TRUE) { + return amber::Result("Missing subgroup size control feature"); + } + if (feature == kComputeFullSubgroups && + vulkan13_ptrs->computeFullSubgroups != VK_TRUE) { + return amber::Result("Missing compute full subgroups feature"); + } + } else { + if (feature == kSubgroupSizeControl && + subgroup_size_control_features->subgroupSizeControl != VK_TRUE) { + return amber::Result("Missing subgroup size control feature"); + } + if (feature == kComputeFullSubgroups && + subgroup_size_control_features->computeFullSubgroups != VK_TRUE) { + return amber::Result("Missing compute full subgroups feature"); + } } } |