Module: Mesa Branch: staging/20.3 Commit: 97365ce754ed26414d8162a3bda9d0d909c59563 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=97365ce754ed26414d8162a3bda9d0d909c59563
Author: Pavel Asyutchenko <svent...@yandex.ru> Date: Wed Dec 23 00:05:54 2020 +0300 vulkan/overay: fix violation of VUID-VkDeviceCreateInfo-pNext-00373 We can't use VkDeviceCreateInfo::pEnabledFeatures when VkPhysicalDeviceFeatures2 is present in pNext chain. Fixes: ea7a6fa98055ad ("vulkan/overlay: add pipeline statistic & timestamps support") Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8208> (cherry picked from commit 208538143293466c5a90f6dc8a5aaa67849e3557) --- .pick_status.json | 2 +- src/vulkan/overlay-layer/overlay.cpp | 27 ++++++++++++++++++++------- src/vulkan/util/gen_enum_to_str.py | 3 +++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 878f5f5b4f9..9b8c9d7f885 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -697,7 +697,7 @@ "description": "vulkan/overay: fix violation of VUID-VkDeviceCreateInfo-pNext-00373", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "ea7a6fa98055ada285894ddea106d8292db55393" }, diff --git a/src/vulkan/overlay-layer/overlay.cpp b/src/vulkan/overlay-layer/overlay.cpp index c415d6a8205..c3a86a68ca7 100644 --- a/src/vulkan/overlay-layer/overlay.cpp +++ b/src/vulkan/overlay-layer/overlay.cpp @@ -2466,18 +2466,31 @@ static VkResult overlay_CreateDevice( chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; VkPhysicalDeviceFeatures device_features = {}; - VkDeviceCreateInfo device_info = *pCreateInfo; + VkPhysicalDeviceFeatures *device_features_ptr = NULL; + + VkDeviceCreateInfo *device_info = (VkDeviceCreateInfo *) + clone_chain((const struct VkBaseInStructure *)pCreateInfo); + + VkPhysicalDeviceFeatures2 *device_features2 = (VkPhysicalDeviceFeatures2 *) + vk_find_struct(device_info, PHYSICAL_DEVICE_FEATURES_2); + if (device_features2) { + /* Can't use device_info->pEnabledFeatures when VkPhysicalDeviceFeatures2 is present */ + device_features_ptr = &device_features2->features; + } else { + if (device_info->pEnabledFeatures) + device_features = *(device_info->pEnabledFeatures); + device_features_ptr = &device_features; + device_info->pEnabledFeatures = &device_features; + } - if (pCreateInfo->pEnabledFeatures) - device_features = *(pCreateInfo->pEnabledFeatures); if (instance_data->pipeline_statistics_enabled) { - device_features.inheritedQueries = true; - device_features.pipelineStatisticsQuery = true; + device_features_ptr->inheritedQueries = true; + device_features_ptr->pipelineStatisticsQuery = true; } - device_info.pEnabledFeatures = &device_features; - VkResult result = fpCreateDevice(physicalDevice, &device_info, pAllocator, pDevice); + VkResult result = fpCreateDevice(physicalDevice, device_info, pAllocator, pDevice); + free_chain((struct VkBaseOutStructure *)device_info); if (result != VK_SUCCESS) return result; struct device_data *device_data = new_device_data(*pDevice, instance_data); diff --git a/src/vulkan/util/gen_enum_to_str.py b/src/vulkan/util/gen_enum_to_str.py index ebaf2a1a0cc..cbd2790cb3f 100644 --- a/src/vulkan/util/gen_enum_to_str.py +++ b/src/vulkan/util/gen_enum_to_str.py @@ -60,6 +60,7 @@ C_TEMPLATE = Template(textwrap.dedent(u"""\ #include <string.h> #include <vulkan/vulkan.h> #include <vulkan/vk_android_native_buffer.h> + #include <vulkan/vk_layer.h> #include "util/macros.h" #include "vk_enum_to_str.h" @@ -102,6 +103,8 @@ C_TEMPLATE = Template(textwrap.dedent(u"""\ case ${struct.stype}: return sizeof(${struct.name}); % endif %endfor + case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO: return sizeof(VkLayerInstanceCreateInfo); + case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO: return sizeof(VkLayerDeviceCreateInfo); } #pragma GCC diagnostic pop unreachable("Undefined struct type."); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit