aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Weiblen <mikew@lunarg.com>2016-12-09 17:36:28 -0700
committerMike Weiblen <mikew@lunarg.com>2016-12-15 13:09:12 -0700
commitfe543f83a6dc9f2bbded8e30eb2afea8ba6c6038 (patch)
treeeff01553fcf5437e106b9b896303a10f489d4072
parent225d54a5fedc1ce56703fe0f44b33dd4deb3bbf4 (diff)
downloadusermoji-fe543f83a6dc9f2bbded8e30eb2afea8ba6c6038.tar.xz
layers: Update Valid Usage enums (VL-70)
Reviewed the following 5 files' invocation of log_msg() for opportunities to update for Valid Usage enums. layers/threading.h layers/vk_layer_logging.h layers/descriptor_sets.cpp layers/swapchain.cpp layers/unique_objects.cpp Split some composite checks apart, to better match the meaning of individual VUs. Added VU enums to a new file, and expanded the stats collection script to include the new file. Changed some placeholder uses of msgCode=="0" to "VALIDATION_ERROR_UNDEFINED". (0 is the value of the enum VALIDATION_ERROR_00000 which was misleading) When Valid Usage enums were referenced, also updated the VU database. Tweak #include order for Windows, to undo clang-format reordering. Completes Jira task VL-70. Change-Id: I550922b194e733f41316ae493098f70a54cbd64e
-rw-r--r--layers/swapchain.cpp113
-rw-r--r--layers/unique_objects.cpp21
-rw-r--r--layers/vk_validation_error_database.txt24
-rwxr-xr-xlayers/vk_validation_stats.py3
4 files changed, 100 insertions, 61 deletions
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp
index 9cc65ab3..c7f1ca0f 100644
--- a/layers/swapchain.cpp
+++ b/layers/swapchain.cpp
@@ -19,15 +19,18 @@
* Author: Ian Elliott <ianelliott@google.com>
*/
-#include <mutex>
-#include <stdio.h>
-#include <string.h>
+// For Windows, this #include must come before other Vk headers.
#include <vk_loader_platform.h>
-#include <vulkan/vk_icd.h>
+
#include "swapchain.h"
-#include "vk_layer_extension_utils.h"
#include "vk_enum_string_helper.h"
+#include "vk_layer_extension_utils.h"
#include "vk_layer_utils.h"
+#include "vk_validation_error_messages.h"
+#include <mutex>
+#include <stdio.h>
+#include <string.h>
+#include <vulkan/vk_icd.h>
namespace swapchain {
@@ -58,8 +61,8 @@ static void checkDeviceRegisterExtensions(VkPhysicalDevice physicalDevice, const
// TBD: Should we leave error in (since Swapchain really needs this
// link)?
log_msg(my_instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
- reinterpret_cast<uint64_t>(physicalDevice), __LINE__, SWAPCHAIN_INVALID_HANDLE, "Swapchain",
- "vkCreateDevice() called with a non-valid VkPhysicalDevice.");
+ reinterpret_cast<uint64_t>(physicalDevice), __LINE__, VALIDATION_ERROR_00031, "Swapchain",
+ "vkCreateDevice() called with a non-valid VkPhysicalDevice. %s", validation_error_map[VALIDATION_ERROR_00031]);
}
my_device_data->deviceMap[device].device = device;
}
@@ -105,6 +108,8 @@ static const char *sharingModeStr(VkSharingMode value) {
return string_VkSharingMode(value);
}
+// TODO This overload is only preserved for validateCreateSwapchainKHR(), which doesn't have a VU msgCode defined yet.
+// When a VU msgCode is defined, this overload can be deleted, and the latter form used instead.
static bool ValidateQueueFamilyIndex(layer_data *my_data, uint32_t queue_family_index, uint32_t queue_family_count,
VkPhysicalDevice physical_device, const char *function) {
bool skip_call = false;
@@ -119,6 +124,20 @@ static bool ValidateQueueFamilyIndex(layer_data *my_data, uint32_t queue_family_
return skip_call;
}
+static bool ValidateQueueFamilyIndex(layer_data *my_data, uint32_t queue_family_index, uint32_t queue_family_count,
+ VkPhysicalDevice physical_device, const char *function,
+ /*enum*/ UNIQUE_VALIDATION_ERROR_CODE msgCode) {
+ bool skip_call = false;
+ if (queue_family_index >= queue_family_count) {
+ skip_call = log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
+ reinterpret_cast<uint64_t>(physical_device), __LINE__, msgCode, swapchain_layer_name,
+ "%s() called with a queueFamilyIndex that is too large (i.e. %d). The maximum value (returned by "
+ "vkGetPhysicalDeviceQueueFamilyProperties) is only %d. %s",
+ function, queue_family_index, queue_family_count, validation_error_map[msgCode]);
+ }
+ return skip_call;
+}
+
VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
VkInstance *pInstance) {
VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
@@ -187,9 +206,10 @@ VKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocati
if (pPhysicalDevice) {
if (pPhysicalDevice->pDevice) {
log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
- reinterpret_cast<uint64_t>(pPhysicalDevice->pDevice->device), __LINE__,
- SWAPCHAIN_DEL_OBJECT_BEFORE_CHILDREN, swapchain_layer_name,
- "VkDestroyInstance() called before all of its associated VkDevices were destroyed.");
+ reinterpret_cast<uint64_t>(pPhysicalDevice->pDevice->device), __LINE__, VALIDATION_ERROR_00018,
+ swapchain_layer_name,
+ "VkDestroyInstance() called before all of its associated VkDevices were destroyed. %s",
+ validation_error_map[VALIDATION_ERROR_00018]);
}
}
@@ -203,9 +223,9 @@ VKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocati
SwpSurface *pSurface = it->second;
if (pSurface) {
log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
- reinterpret_cast<uint64_t>(pInstance->instance), __LINE__, SWAPCHAIN_DEL_OBJECT_BEFORE_CHILDREN,
- swapchain_layer_name,
- "VkDestroyInstance() called before all of its associated VkSurfaceKHRs were destroyed.");
+ reinterpret_cast<uint64_t>(pInstance->instance), __LINE__, VALIDATION_ERROR_00018, swapchain_layer_name,
+ "VkDestroyInstance() called before all of its associated VkSurfaceKHRs were destroyed. %s",
+ validation_error_map[VALIDATION_ERROR_00018]);
}
}
my_data->instanceMap.erase(instance);
@@ -356,7 +376,8 @@ VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceMirPresentationSupportKHR(VkPhys
if (pPhysicalDevice->gotQueueFamilyPropertyCount) {
skip_call |= ValidateQueueFamilyIndex(my_data, queueFamilyIndex, pPhysicalDevice->numOfQueueFamilies,
- pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceMirPresentationSupportKHR");
+ pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceMirPresentationSupportKHR",
+ VALIDATION_ERROR_01893);
}
lock.unlock();
@@ -425,7 +446,8 @@ VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(Vk
if (pPhysicalDevice->gotQueueFamilyPropertyCount) {
skip_call |= ValidateQueueFamilyIndex(my_data, queueFamilyIndex, pPhysicalDevice->numOfQueueFamilies,
- pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceWaylandPresentationSupportKHR");
+ pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceWaylandPresentationSupportKHR",
+ VALIDATION_ERROR_01896);
}
lock.unlock();
@@ -493,7 +515,8 @@ VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(VkPh
if (pPhysicalDevice->gotQueueFamilyPropertyCount) {
skip_call |= ValidateQueueFamilyIndex(my_data, queueFamilyIndex, pPhysicalDevice->numOfQueueFamilies,
- pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
+ pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceWin32PresentationSupportKHR",
+ VALIDATION_ERROR_01899);
}
lock.unlock();
@@ -561,7 +584,8 @@ VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(VkPhys
if (pPhysicalDevice->gotQueueFamilyPropertyCount) {
skip_call |= ValidateQueueFamilyIndex(my_data, queueFamilyIndex, pPhysicalDevice->numOfQueueFamilies,
- pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceXcbPresentationSupportKHR");
+ pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceXcbPresentationSupportKHR",
+ VALIDATION_ERROR_01901);
}
lock.unlock();
@@ -630,7 +654,8 @@ VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(VkPhy
if (pPhysicalDevice->gotQueueFamilyPropertyCount) {
skip_call |= ValidateQueueFamilyIndex(my_data, queueFamilyIndex, pPhysicalDevice->numOfQueueFamilies,
- pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceXlibPresentationSupportKHR");
+ pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceXlibPresentationSupportKHR",
+ VALIDATION_ERROR_01904);
}
lock.unlock();
@@ -696,11 +721,11 @@ VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDev
if (pPhysicalDevice->gotDisplayPlanePropertyCount && planeIndex >= pPhysicalDevice->displayPlanePropertyCount) {
skip_call |=
log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
- reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, SWAPCHAIN_PLANE_INDEX_TOO_LARGE,
+ reinterpret_cast<uint64_t>(pPhysicalDevice->pInstance->instance), __LINE__, VALIDATION_ERROR_01857,
swapchain_layer_name,
"vkGetDisplayPlaneSupportedDisplaysKHR(): planeIndex must be in the range [0, %d] that was returned by "
- "vkGetPhysicalDeviceDisplayPlanePropertiesKHR. Do you have the plane index hardcoded?",
- pPhysicalDevice->displayPlanePropertyCount - 1);
+ "vkGetPhysicalDeviceDisplayPlanePropertiesKHR. Do you have the plane index hardcoded? %s",
+ pPhysicalDevice->displayPlanePropertyCount - 1, validation_error_map[VALIDATION_ERROR_01857]);
}
lock.unlock();
@@ -802,10 +827,10 @@ VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR s
pSurface->pInstance->surfaces.erase(surface);
}
if (!pSurface->swapchains.empty()) {
- skip_call |=
- log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
- reinterpret_cast<uint64_t>(instance), __LINE__, SWAPCHAIN_DEL_OBJECT_BEFORE_CHILDREN, swapchain_layer_name,
- "vkDestroySurfaceKHR() called before all of its associated VkSwapchainKHRs were destroyed.");
+ skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
+ reinterpret_cast<uint64_t>(instance), __LINE__, VALIDATION_ERROR_01844, swapchain_layer_name,
+ "vkDestroySurfaceKHR() called before all of its associated VkSwapchainKHRs were destroyed. %s",
+ validation_error_map[VALIDATION_ERROR_01844]);
// Empty and then delete all SwpSwapchains
for (auto it = pSurface->swapchains.begin(); it != pSurface->swapchains.end(); it++) {
@@ -915,8 +940,9 @@ VKAPI_ATTR void VKAPI_CALL DestroyDevice(VkDevice device, const VkAllocationCall
}
if (!pDevice->swapchains.empty()) {
log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
- reinterpret_cast<uint64_t>(device), __LINE__, SWAPCHAIN_DEL_OBJECT_BEFORE_CHILDREN, swapchain_layer_name,
- "vkDestroyDevice() called before all of its associated VkSwapchainKHRs were destroyed.");
+ reinterpret_cast<uint64_t>(device), __LINE__, VALIDATION_ERROR_00049, swapchain_layer_name,
+ "vkDestroyDevice() called before all of its associated VkSwapchainKHRs were destroyed. %s",
+ validation_error_map[VALIDATION_ERROR_00049]);
// Empty and then delete all SwpSwapchain's
for (auto it = pDevice->swapchains.begin(); it != pDevice->swapchains.end(); it++) {
@@ -957,7 +983,8 @@ VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevi
"vkGetPhysicalDeviceSurfaceSupportKHR() called before calling the vkGetPhysicalDeviceQueueFamilyProperties function.");
} else if (pPhysicalDevice->gotQueueFamilyPropertyCount) {
skip_call |= ValidateQueueFamilyIndex(my_data, queueFamilyIndex, pPhysicalDevice->numOfQueueFamilies,
- pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceSurfaceSupportKHR");
+ pPhysicalDevice->physicalDevice, "vkGetPhysicalDeviceSurfaceSupportKHR",
+ VALIDATION_ERROR_01889);
}
lock.unlock();
@@ -1032,27 +1059,35 @@ static bool validateCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateI
// surface:
SwpSurface *pSurface = ((pPhysicalDevice) ? pPhysicalDevice->supportedSurfaces[pCreateInfo->surface] : NULL);
if (!pSurface) {
- skip_call |=
- log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
- reinterpret_cast<uint64_t>(device), __LINE__, SWAPCHAIN_CREATE_UNSUPPORTED_SURFACE, swapchain_layer_name,
- "The surface in pCreateInfo->surface, that was given to vkCreateSwapchainKHR(), must be a surface "
- "that is supported by the device as determined by vkGetPhysicalDeviceSurfaceSupportKHR(). "
- "However, vkGetPhysicalDeviceSurfaceSupportKHR() was never called with this surface.");
+ skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
+ reinterpret_cast<uint64_t>(device), __LINE__, VALIDATION_ERROR_01922, swapchain_layer_name,
+ "The surface in pCreateInfo->surface, that was given to vkCreateSwapchainKHR(), must be a surface "
+ "that is supported by the device as determined by vkGetPhysicalDeviceSurfaceSupportKHR(). "
+ "However, vkGetPhysicalDeviceSurfaceSupportKHR() was never called with this surface. %s",
+ validation_error_map[VALIDATION_ERROR_01922]);
}
}
// Validate pCreateInfo->imageSharingMode and related values:
if (pCreateInfo->imageSharingMode == VK_SHARING_MODE_CONCURRENT) {
- if ((pCreateInfo->queueFamilyIndexCount <= 1) || !pCreateInfo->pQueueFamilyIndices) {
+ if (pCreateInfo->queueFamilyIndexCount <= 1) {
skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
- reinterpret_cast<uint64_t>(device), __LINE__, SWAPCHAIN_CREATE_SWAP_BAD_SHARING_VALUES,
- swapchain_layer_name,
+ reinterpret_cast<uint64_t>(device), __LINE__, VALIDATION_ERROR_02338, swapchain_layer_name,
"vkCreateSwapchainKHR() called with a supported pCreateInfo->sharingMode of (i.e. %s), but with a "
- "bad value(s) for pCreateInfo->queueFamilyIndexCount or pCreateInfo->pQueueFamilyIndices).",
- sharingModeStr(pCreateInfo->imageSharingMode));
+ "bad value(s) for pCreateInfo->queueFamilyIndexCount or pCreateInfo->pQueueFamilyIndices). %s",
+ sharingModeStr(pCreateInfo->imageSharingMode), validation_error_map[VALIDATION_ERROR_02338]);
+ }
+
+ if (!pCreateInfo->pQueueFamilyIndices) {
+ skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
+ reinterpret_cast<uint64_t>(device), __LINE__, VALIDATION_ERROR_02337, swapchain_layer_name,
+ "vkCreateSwapchainKHR() called with a supported pCreateInfo->sharingMode of (i.e. %s), but with a "
+ "bad value(s) for pCreateInfo->queueFamilyIndexCount or pCreateInfo->pQueueFamilyIndices). %s",
+ sharingModeStr(pCreateInfo->imageSharingMode), validation_error_map[VALIDATION_ERROR_02337]);
}
}
+
return skip_call;
}
diff --git a/layers/unique_objects.cpp b/layers/unique_objects.cpp
index d4aabdfe..bd9aabd8 100644
--- a/layers/unique_objects.cpp
+++ b/layers/unique_objects.cpp
@@ -28,18 +28,21 @@
#include <list>
#include <memory>
+// For Windows, this #include must come before other Vk headers.
#include "vk_loader_platform.h"
-#include "vulkan/vk_layer.h"
-#include "vk_layer_config.h"
-#include "vk_layer_extension_utils.h"
-#include "vk_layer_utils.h"
-#include "vk_layer_table.h"
-#include "vk_layer_logging.h"
+
#include "unique_objects.h"
#include "vk_dispatch_table_helper.h"
-#include "vk_struct_string_helper_cpp.h"
+#include "vk_layer_config.h"
#include "vk_layer_data.h"
+#include "vk_layer_extension_utils.h"
+#include "vk_layer_logging.h"
+#include "vk_layer_table.h"
#include "vk_layer_utils.h"
+#include "vk_layer_utils.h"
+#include "vk_struct_string_helper_cpp.h"
+#include "vk_validation_error_messages.h"
+#include "vulkan/vk_layer.h"
// This intentionally includes a cpp file
#include "vk_safe_struct.cpp"
@@ -101,7 +104,7 @@ static void checkInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateI
layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
if (!white_list(pCreateInfo->ppEnabledExtensionNames[i], kUniqueObjectsSupportedInstanceExtensions)) {
log_msg(instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
- 0, "UniqueObjects",
+ VALIDATION_ERROR_UNDEFINED, "UniqueObjects",
"Instance Extension %s is not supported by this layer. Using this extension may adversely affect "
"validation results and/or produce undefined behavior.",
pCreateInfo->ppEnabledExtensionNames[i]);
@@ -129,7 +132,7 @@ static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo
// Check for recognized device extensions
if (!white_list(pCreateInfo->ppEnabledExtensionNames[i], kUniqueObjectsSupportedDeviceExtensions)) {
log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__,
- 0, "UniqueObjects",
+ VALIDATION_ERROR_UNDEFINED, "UniqueObjects",
"Device Extension %s is not supported by this layer. Using this extension may adversely affect "
"validation results and/or produce undefined behavior.",
pCreateInfo->ppEnabledExtensionNames[i]);
diff --git a/layers/vk_validation_error_database.txt b/layers/vk_validation_error_database.txt
index fd1adee8..3125fb33 100644
--- a/layers/vk_validation_error_database.txt
+++ b/layers/vk_validation_error_database.txt
@@ -39,7 +39,7 @@ VALIDATION_ERROR_00027~^~U~^~Unknown~^~vkGetPhysicalDeviceProperties~^~For more
VALIDATION_ERROR_00028~^~Y~^~Unknown~^~vkGetPhysicalDeviceQueueFamilyProperties~^~For more information refer to Vulkan Spec Section '4.1. Physical Devices' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceQueueFamilyProperties)~^~
VALIDATION_ERROR_00029~^~U~^~Unknown~^~vkGetPhysicalDeviceQueueFamilyProperties~^~For more information refer to Vulkan Spec Section '4.1. Physical Devices' which states 'pQueueFamilyPropertyCount must be a pointer to a uint32_t value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceQueueFamilyProperties)~^~
VALIDATION_ERROR_00030~^~U~^~Unknown~^~vkGetPhysicalDeviceQueueFamilyProperties~^~For more information refer to Vulkan Spec Section '4.1. Physical Devices' which states 'If the value referenced by pQueueFamilyPropertyCount is not 0, and pQueueFamilyProperties is not NULL, pQueueFamilyProperties must be a pointer to an array of pQueueFamilyPropertyCount VkQueueFamilyProperties structures' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceQueueFamilyProperties)~^~
-VALIDATION_ERROR_00031~^~U~^~Unknown~^~vkCreateDevice~^~For more information refer to Vulkan Spec Section '4.2.1. Device Creation' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateDevice)~^~
+VALIDATION_ERROR_00031~^~Y~^~Unknown~^~vkCreateDevice~^~For more information refer to Vulkan Spec Section '4.2.1. Device Creation' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateDevice)~^~
VALIDATION_ERROR_00032~^~U~^~Unknown~^~vkCreateDevice~^~For more information refer to Vulkan Spec Section '4.2.1. Device Creation' which states 'pCreateInfo must be a pointer to a valid VkDeviceCreateInfo structure' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateDevice)~^~
VALIDATION_ERROR_00033~^~U~^~Unknown~^~vkCreateDevice~^~For more information refer to Vulkan Spec Section '4.2.1. Device Creation' which states 'If pAllocator is not NULL, pAllocator must be a pointer to a valid VkAllocationCallbacks structure' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateDevice)~^~
VALIDATION_ERROR_00034~^~U~^~Unknown~^~vkCreateDevice~^~For more information refer to Vulkan Spec Section '4.2.1. Device Creation' which states 'pDevice must be a pointer to a VkDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateDevice)~^~
@@ -1787,7 +1787,7 @@ VALIDATION_ERROR_01840~^~N~^~Unknown~^~vkCreateXlibSurfaceKHR~^~For more informa
VALIDATION_ERROR_01841~^~N~^~Unknown~^~vkCreateXlibSurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.6. Xlib Platform' which states 'pNext must be NULL' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkXlibSurfaceCreateInfoKHR)~^~TBD in parameter validation layer.
VALIDATION_ERROR_01842~^~N~^~Unknown~^~vkCreateXlibSurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.6. Xlib Platform' which states 'flags must be 0' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkXlibSurfaceCreateInfoKHR)~^~TBD in parameter validation layer.
VALIDATION_ERROR_01843~^~U~^~Unknown~^~vkCreateXlibSurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.6. Xlib Platform' which states 'dpy must point to a valid Xlib Display.' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkXlibSurfaceCreateInfoKHR)~^~
-VALIDATION_ERROR_01844~^~U~^~Unknown~^~vkDestroySurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.7. Platform-Independent Information' which states 'All VkSwapchainKHR objects created for surface must have been destroyed prior to destroying surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkDestroySurfaceKHR)~^~
+VALIDATION_ERROR_01844~^~Y~^~Unknown~^~vkDestroySurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.7. Platform-Independent Information' which states 'All VkSwapchainKHR objects created for surface must have been destroyed prior to destroying surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkDestroySurfaceKHR)~^~
VALIDATION_ERROR_01845~^~Y~^~Unknown~^~vkDestroySurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.7. Platform-Independent Information' which states 'If VkAllocationCallbacks were provided when surface was created, a compatible set of callbacks must be provided here' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkDestroySurfaceKHR)~^~
VALIDATION_ERROR_01846~^~Y~^~Unknown~^~vkDestroySurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.7. Platform-Independent Information' which states 'If no VkAllocationCallbacks were provided when surface was created, pAllocator must be NULL' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkDestroySurfaceKHR)~^~
VALIDATION_ERROR_01847~^~Y~^~None~^~vkDestroySurfaceKHR~^~For more information refer to Vulkan Spec Section '30.2.7. Platform-Independent Information' which states 'instance must be a valid VkInstance handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkDestroySurfaceKHR)~^~
@@ -1800,7 +1800,7 @@ VALIDATION_ERROR_01853~^~U~^~Unknown~^~vkGetPhysicalDeviceDisplayPropertiesKHR~^
VALIDATION_ERROR_01854~^~Y~^~Unknown~^~vkGetPhysicalDeviceDisplayPlanePropertiesKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceDisplayPlanePropertiesKHR)~^~
VALIDATION_ERROR_01855~^~U~^~Unknown~^~vkGetPhysicalDeviceDisplayPlanePropertiesKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'pPropertyCount must be a pointer to a uint32_t value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceDisplayPlanePropertiesKHR)~^~
VALIDATION_ERROR_01856~^~U~^~Unknown~^~vkGetPhysicalDeviceDisplayPlanePropertiesKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'If the value referenced by pPropertyCount is not 0, and pProperties is not NULL, pProperties must be a pointer to an array of pPropertyCount VkDisplayPlanePropertiesKHR structures' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceDisplayPlanePropertiesKHR)~^~
-VALIDATION_ERROR_01857~^~U~^~Unknown~^~vkGetDisplayPlaneSupportedDisplaysKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'planeIndex must be less than the number of display planes supported by the device as determined by calling vkGetPhysicalDeviceDisplayPlanePropertiesKHR' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetDisplayPlaneSupportedDisplaysKHR)~^~
+VALIDATION_ERROR_01857~^~Y~^~Unknown~^~vkGetDisplayPlaneSupportedDisplaysKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'planeIndex must be less than the number of display planes supported by the device as determined by calling vkGetPhysicalDeviceDisplayPlanePropertiesKHR' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetDisplayPlaneSupportedDisplaysKHR)~^~
VALIDATION_ERROR_01858~^~Y~^~Unknown~^~vkGetDisplayPlaneSupportedDisplaysKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetDisplayPlaneSupportedDisplaysKHR)~^~
VALIDATION_ERROR_01859~^~U~^~Unknown~^~vkGetDisplayPlaneSupportedDisplaysKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'pDisplayCount must be a pointer to a uint32_t value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetDisplayPlaneSupportedDisplaysKHR)~^~
VALIDATION_ERROR_01860~^~U~^~Unknown~^~vkGetDisplayPlaneSupportedDisplaysKHR~^~For more information refer to Vulkan Spec Section '30.3.1. Display Enumeration' which states 'If the value referenced by pDisplayCount is not 0, and pDisplays is not NULL, pDisplays must be a pointer to an array of pDisplayCount VkDisplayKHR handles' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetDisplayPlaneSupportedDisplaysKHR)~^~
@@ -1832,22 +1832,22 @@ VALIDATION_ERROR_01885~^~N~^~Unknown~^~vkCreateDisplayPlaneSurfaceKHR~^~For more
VALIDATION_ERROR_01886~^~U~^~Unknown~^~vkCreateDisplayPlaneSurfaceKHR~^~For more information refer to Vulkan Spec Section '30.3.2. Display Surfaces' which states 'displayMode must be a valid VkDisplayModeKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkDisplaySurfaceCreateInfoKHR)~^~
VALIDATION_ERROR_01887~^~U~^~Unknown~^~vkCreateDisplayPlaneSurfaceKHR~^~For more information refer to Vulkan Spec Section '30.3.2. Display Surfaces' which states 'transform must be a valid VkSurfaceTransformFlagBitsKHR value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkDisplaySurfaceCreateInfoKHR)~^~
VALIDATION_ERROR_01888~^~U~^~Unknown~^~vkCreateDisplayPlaneSurfaceKHR~^~For more information refer to Vulkan Spec Section '30.3.2. Display Surfaces' which states 'alphaMode must be a valid VkDisplayPlaneAlphaFlagBitsKHR value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkDisplaySurfaceCreateInfoKHR)~^~
-VALIDATION_ERROR_01889~^~U~^~Unknown~^~vkGetPhysicalDeviceSurfaceSupportKHR~^~For more information refer to Vulkan Spec Section '30.4. Querying for WSI Support' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceSurfaceSupportKHR)~^~
+VALIDATION_ERROR_01889~^~Y~^~Unknown~^~vkGetPhysicalDeviceSurfaceSupportKHR~^~For more information refer to Vulkan Spec Section '30.4. Querying for WSI Support' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceSurfaceSupportKHR)~^~
VALIDATION_ERROR_01890~^~Y~^~None~^~vkGetPhysicalDeviceSurfaceSupportKHR~^~For more information refer to Vulkan Spec Section '30.4. Querying for WSI Support' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceSurfaceSupportKHR)~^~
VALIDATION_ERROR_01891~^~Y~^~None~^~vkGetPhysicalDeviceSurfaceSupportKHR~^~For more information refer to Vulkan Spec Section '30.4. Querying for WSI Support' which states 'surface must be a valid VkSurfaceKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceSurfaceSupportKHR)~^~
VALIDATION_ERROR_01892~^~U~^~Unknown~^~vkGetPhysicalDeviceSurfaceSupportKHR~^~For more information refer to Vulkan Spec Section '30.4. Querying for WSI Support' which states 'pSupported must be a pointer to a VkBool32 value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceSurfaceSupportKHR)~^~
-VALIDATION_ERROR_01893~^~U~^~Unknown~^~vkGetPhysicalDeviceMirPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.2. Mir Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceMirPresentationSupportKHR)~^~
+VALIDATION_ERROR_01893~^~Y~^~Unknown~^~vkGetPhysicalDeviceMirPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.2. Mir Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceMirPresentationSupportKHR)~^~
VALIDATION_ERROR_01894~^~Y~^~None~^~vkGetPhysicalDeviceMirPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.2. Mir Platform' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceMirPresentationSupportKHR)~^~
VALIDATION_ERROR_01895~^~U~^~Unknown~^~vkGetPhysicalDeviceMirPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.2. Mir Platform' which states 'connection must be a pointer to a MirConnection value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceMirPresentationSupportKHR)~^~
-VALIDATION_ERROR_01896~^~U~^~Unknown~^~vkGetPhysicalDeviceWaylandPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.3. Wayland Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWaylandPresentationSupportKHR)~^~
+VALIDATION_ERROR_01896~^~Y~^~Unknown~^~vkGetPhysicalDeviceWaylandPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.3. Wayland Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWaylandPresentationSupportKHR)~^~
VALIDATION_ERROR_01897~^~Y~^~None~^~vkGetPhysicalDeviceWaylandPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.3. Wayland Platform' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWaylandPresentationSupportKHR)~^~
VALIDATION_ERROR_01898~^~U~^~Unknown~^~vkGetPhysicalDeviceWaylandPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.3. Wayland Platform' which states 'display must be a pointer to a wl_display value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWaylandPresentationSupportKHR)~^~
-VALIDATION_ERROR_01899~^~U~^~Unknown~^~vkGetPhysicalDeviceWin32PresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.4. Win32 Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWin32PresentationSupportKHR)~^~
+VALIDATION_ERROR_01899~^~Y~^~Unknown~^~vkGetPhysicalDeviceWin32PresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.4. Win32 Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWin32PresentationSupportKHR)~^~
VALIDATION_ERROR_01900~^~Y~^~None~^~vkGetPhysicalDeviceWin32PresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.4. Win32 Platform' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceWin32PresentationSupportKHR)~^~
-VALIDATION_ERROR_01901~^~U~^~Unknown~^~vkGetPhysicalDeviceXcbPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.5. XCB Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXcbPresentationSupportKHR)~^~
+VALIDATION_ERROR_01901~^~Y~^~Unknown~^~vkGetPhysicalDeviceXcbPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.5. XCB Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXcbPresentationSupportKHR)~^~
VALIDATION_ERROR_01902~^~Y~^~None~^~vkGetPhysicalDeviceXcbPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.5. XCB Platform' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXcbPresentationSupportKHR)~^~
VALIDATION_ERROR_01903~^~U~^~Unknown~^~vkGetPhysicalDeviceXcbPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.5. XCB Platform' which states 'connection must be a pointer to a xcb_connection_t value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXcbPresentationSupportKHR)~^~
-VALIDATION_ERROR_01904~^~U~^~Unknown~^~vkGetPhysicalDeviceXlibPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.6. Xlib Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXlibPresentationSupportKHR)~^~
+VALIDATION_ERROR_01904~^~Y~^~Unknown~^~vkGetPhysicalDeviceXlibPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.6. Xlib Platform' which states 'queueFamilyIndex must be less than pQueueFamilyPropertyCount returned by vkGetPhysicalDeviceQueueFamilyProperties for the given physicalDevice' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXlibPresentationSupportKHR)~^~
VALIDATION_ERROR_01905~^~Y~^~None~^~vkGetPhysicalDeviceXlibPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.6. Xlib Platform' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXlibPresentationSupportKHR)~^~
VALIDATION_ERROR_01906~^~U~^~Unknown~^~vkGetPhysicalDeviceXlibPresentationSupportKHR~^~For more information refer to Vulkan Spec Section '30.4.6. Xlib Platform' which states 'dpy must be a pointer to a Display value' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceXlibPresentationSupportKHR)~^~
VALIDATION_ERROR_01907~^~Y~^~None~^~vkGetPhysicalDeviceSurfaceCapabilitiesKHR~^~For more information refer to Vulkan Spec Section '30.5. Surface Queries' which states 'physicalDevice must be a valid VkPhysicalDevice handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkGetPhysicalDeviceSurfaceCapabilitiesKHR)~^~
@@ -1865,7 +1865,7 @@ VALIDATION_ERROR_01918~^~Y~^~None~^~vkCreateSwapchainKHR~^~For more information
VALIDATION_ERROR_01919~^~U~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'pCreateInfo must be a pointer to a valid VkSwapchainCreateInfoKHR structure' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateSwapchainKHR)~^~
VALIDATION_ERROR_01920~^~U~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'If pAllocator is not NULL, pAllocator must be a pointer to a valid VkAllocationCallbacks structure' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateSwapchainKHR)~^~
VALIDATION_ERROR_01921~^~U~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'pSwapchain must be a pointer to a VkSwapchainKHR handle' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#vkCreateSwapchainKHR)~^~
-VALIDATION_ERROR_01922~^~U~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'surface must be a surface that is supported by the device as determined using vkGetPhysicalDeviceSurfaceSupportKHR' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
+VALIDATION_ERROR_01922~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'surface must be a surface that is supported by the device as determined using vkGetPhysicalDeviceSurfaceSupportKHR' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
VALIDATION_ERROR_01923~^~N~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'sType must be VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~TBD in parameter validation layer.
VALIDATION_ERROR_01924~^~N~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'pNext must be NULL' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~TBD in parameter validation layer.
VALIDATION_ERROR_01925~^~N~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'flags must be 0' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~TBD in parameter validation layer.
@@ -2266,8 +2266,8 @@ VALIDATION_ERROR_02333~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more informati
VALIDATION_ERROR_02334~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'imageExtent must be between minImageExtent and maxImageExtent, inclusive, where minImageExtent and maxImageExtent are members of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
VALIDATION_ERROR_02335~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'imageArrayLayers must be greater than 0 and less than or equal to the maxImageArrayLayers member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
VALIDATION_ERROR_02336~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'imageUsage must be a subset of the supported usage flags present in the supportedUsageFlags member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
-VALIDATION_ERROR_02337~^~U~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'If imageSharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a pointer to an array of queueFamilyIndexCount uint32_t values' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
-VALIDATION_ERROR_02338~^~U~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'If imageSharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
+VALIDATION_ERROR_02337~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'If imageSharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a pointer to an array of queueFamilyIndexCount uint32_t values' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
+VALIDATION_ERROR_02338~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'If imageSharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
VALIDATION_ERROR_02339~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'preTransform must be one of the bits present in the supportedTransforms member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
VALIDATION_ERROR_02340~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'compositeAlpha must be one of the bits present in the supportedCompositeAlpha member of the VkSurfaceCapabilitiesKHR structure returned by vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
VALIDATION_ERROR_02341~^~Y~^~Unknown~^~vkCreateSwapchainKHR~^~For more information refer to Vulkan Spec Section '30.6. WSI Swapchain' which states 'presentMode must be one of the VkPresentModeKHR values returned by vkGetPhysicalDeviceSurfacePresentModesKHR for the surface' (https://www.khronos.org/registry/vulkan/specs/1.0-extensions/xhtml/vkspec.html#VkSwapchainCreateInfoKHR)~^~
diff --git a/layers/vk_validation_stats.py b/layers/vk_validation_stats.py
index 9019aab2..132f46c7 100755
--- a/layers/vk_validation_stats.py
+++ b/layers/vk_validation_stats.py
@@ -49,7 +49,8 @@ layer_source_files = [
'descriptor_sets.cpp',
'parameter_validation.cpp',
'object_tracker.cpp',
-'image.cpp'
+'image.cpp',
+'swapchain.cpp'
]
header_file = 'vk_validation_error_messages.h'
# TODO : Don't hardcode linux path format if we want this to run on windows