aboutsummaryrefslogtreecommitdiff
path: root/layers/param_checker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/param_checker.cpp')
-rw-r--r--layers/param_checker.cpp15
1 files changed, 15 insertions, 0 deletions
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 <string>
#include <sstream>
#include <unordered_map>
+#include <unordered_set>
#include <vector>
#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<uint32_t> 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;
}