aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiers Daniell <pdaniell-nv@users.noreply.github.com>2022-01-27 10:20:29 -0700
committerGitHub <noreply@github.com>2022-01-27 17:20:29 +0000
commit615ab4863f7d2e31d3037d0c6a0f641fd6fc0d07 (patch)
treef0a6e7eddc2f74f9400e922ba007566e597fab41
parent4e83b3aaf5368fe28aa3da2acad07b36532c4042 (diff)
downloadamber-615ab4863f7d2e31d3037d0c6a0f641fd6fc0d07.tar.gz
Add support for Vulkan 1.3 features/properties (#975)
-rw-r--r--src/vulkan/device.cc32
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");
+ }
}
}