aboutsummaryrefslogtreecommitdiff
path: root/layers/parameter_validation_utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/parameter_validation_utils.cpp')
-rw-r--r--layers/parameter_validation_utils.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/layers/parameter_validation_utils.cpp b/layers/parameter_validation_utils.cpp
index d40c7eaf..2a7511a2 100644
--- a/layers/parameter_validation_utils.cpp
+++ b/layers/parameter_validation_utils.cpp
@@ -498,8 +498,22 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, c
my_device_data->device = *pDevice;
// Save app-enabled features in this device's layer_data structure
- if (pCreateInfo->pEnabledFeatures) {
- my_device_data->physical_device_features = *pCreateInfo->pEnabledFeatures;
+ // The enabled features can come from either pEnabledFeatures, or from the pNext chain
+ const VkPhysicalDeviceFeatures *enabled_features_found = pCreateInfo->pEnabledFeatures;
+ if ((nullptr == enabled_features_found) && my_device_data->extensions.vk_khr_get_physical_device_properties_2) {
+ const GenericHeader *current = reinterpret_cast<const GenericHeader *>(pCreateInfo->pNext);
+ while (current) {
+ if (VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR == current->sType) {
+ const VkPhysicalDeviceFeatures2KHR *features2 = reinterpret_cast<const VkPhysicalDeviceFeatures2KHR *>(current);
+ enabled_features_found = &(features2->features);
+ current = nullptr;
+ } else {
+ current = reinterpret_cast<const GenericHeader *>(current->pNext);
+ }
+ }
+ }
+ if (enabled_features_found) {
+ my_device_data->physical_device_features = *enabled_features_found;
} else {
memset(&my_device_data->physical_device_features, 0, sizeof(VkPhysicalDeviceFeatures));
}