From f5797212fb286b48e11a4124a24b4c691166e73f Mon Sep 17 00:00:00 2001 From: Michael Lentine Date: Wed, 27 Jan 2016 11:25:05 -0600 Subject: layers: MR166, Avoid duplicate queueFamilyIndices in param_checker --- layers/param_checker.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'layers/param_checker.cpp') diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 5f17cf47..800b093c 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "vk_loader_platform.h" @@ -2049,6 +2050,18 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties( PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties); } +void validateDeviceCreateInfo(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo) { + std::unordered_set set; + for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) { + if (set.count(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex)) { + log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", + "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex, is not unique within this structure.", i); + } else { + set.insert(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex); + } + } +} + VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice( VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, @@ -2082,6 +2095,8 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice( my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map); + validateDeviceCreateInfo(physicalDevice, pCreateInfo); + return result; } -- cgit v1.2.3