Home | History | Annotate | Download | only in include
      1 /*
      2 ** Copyright (c) 2015-2016 The Khronos Group Inc.
      3 **
      4 ** Licensed under the Apache License, Version 2.0 (the "License");
      5 ** you may not use this file except in compliance with the License.
      6 ** You may obtain a copy of the License at
      7 **
      8 **     http://www.apache.org/licenses/LICENSE-2.0
      9 **
     10 ** Unless required by applicable law or agreed to in writing, software
     11 ** distributed under the License is distributed on an "AS IS" BASIS,
     12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 ** See the License for the specific language governing permissions and
     14 ** limitations under the License.
     15 */
     16 
     17 /*
     18 ** This header is generated from the Khronos Vulkan XML API Registry.
     19 **
     20 */
     21 
     22 #ifndef PARAMETER_VALIDATION_H
     23 #define PARAMETER_VALIDATION_H 1
     24 
     25 #include <string>
     26 
     27 #include "vulkan/vulkan.h"
     28 #include "vk_layer_extension_utils.h"
     29 #include "parameter_validation_utils.h"
     30 
     31 #ifndef UNUSED_PARAMETER
     32 #define UNUSED_PARAMETER(x) (void)(x)
     33 #endif // UNUSED_PARAMETER
     34 
     35 namespace parameter_validation {
     36 
     37 const uint32_t GeneratedHeaderVersion = 31;
     38 
     39 const VkAccessFlags AllVkAccessFlagBits = VK_ACCESS_INDIRECT_COMMAND_READ_BIT|VK_ACCESS_INDEX_READ_BIT|VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT|VK_ACCESS_UNIFORM_READ_BIT|VK_ACCESS_INPUT_ATTACHMENT_READ_BIT|VK_ACCESS_SHADER_READ_BIT|VK_ACCESS_SHADER_WRITE_BIT|VK_ACCESS_COLOR_ATTACHMENT_READ_BIT|VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT|VK_ACCESS_TRANSFER_READ_BIT|VK_ACCESS_TRANSFER_WRITE_BIT|VK_ACCESS_HOST_READ_BIT|VK_ACCESS_HOST_WRITE_BIT|VK_ACCESS_MEMORY_READ_BIT|VK_ACCESS_MEMORY_WRITE_BIT;
     40 const VkAttachmentDescriptionFlags AllVkAttachmentDescriptionFlagBits = VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT;
     41 const VkBufferCreateFlags AllVkBufferCreateFlagBits = VK_BUFFER_CREATE_SPARSE_BINDING_BIT|VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT|VK_BUFFER_CREATE_SPARSE_ALIASED_BIT;
     42 const VkBufferUsageFlags AllVkBufferUsageFlagBits = VK_BUFFER_USAGE_TRANSFER_SRC_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT|VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT|VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT|VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT|VK_BUFFER_USAGE_STORAGE_BUFFER_BIT|VK_BUFFER_USAGE_INDEX_BUFFER_BIT|VK_BUFFER_USAGE_VERTEX_BUFFER_BIT|VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT;
     43 const VkColorComponentFlags AllVkColorComponentFlagBits = VK_COLOR_COMPONENT_R_BIT|VK_COLOR_COMPONENT_G_BIT|VK_COLOR_COMPONENT_B_BIT|VK_COLOR_COMPONENT_A_BIT;
     44 const VkCommandBufferResetFlags AllVkCommandBufferResetFlagBits = VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT;
     45 const VkCommandBufferUsageFlags AllVkCommandBufferUsageFlagBits = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT|VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT|VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
     46 const VkCommandPoolCreateFlags AllVkCommandPoolCreateFlagBits = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT|VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
     47 const VkCommandPoolResetFlags AllVkCommandPoolResetFlagBits = VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT;
     48 const VkCullModeFlags AllVkCullModeFlagBits = VK_CULL_MODE_NONE|VK_CULL_MODE_FRONT_BIT|VK_CULL_MODE_BACK_BIT|VK_CULL_MODE_FRONT_AND_BACK;
     49 const VkDependencyFlags AllVkDependencyFlagBits = VK_DEPENDENCY_BY_REGION_BIT;
     50 const VkDescriptorPoolCreateFlags AllVkDescriptorPoolCreateFlagBits = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
     51 const VkFenceCreateFlags AllVkFenceCreateFlagBits = VK_FENCE_CREATE_SIGNALED_BIT;
     52 const VkFormatFeatureFlags AllVkFormatFeatureFlagBits = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT|VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT|VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT|VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT|VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT|VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT|VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT|VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT|VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT|VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_FORMAT_FEATURE_BLIT_SRC_BIT|VK_FORMAT_FEATURE_BLIT_DST_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT|VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG;
     53 const VkImageAspectFlags AllVkImageAspectFlagBits = VK_IMAGE_ASPECT_COLOR_BIT|VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT|VK_IMAGE_ASPECT_METADATA_BIT;
     54 const VkImageCreateFlags AllVkImageCreateFlagBits = VK_IMAGE_CREATE_SPARSE_BINDING_BIT|VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT|VK_IMAGE_CREATE_SPARSE_ALIASED_BIT|VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT|VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
     55 const VkImageUsageFlags AllVkImageUsageFlagBits = VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_STORAGE_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT|VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
     56 const VkMemoryHeapFlags AllVkMemoryHeapFlagBits = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
     57 const VkMemoryPropertyFlags AllVkMemoryPropertyFlagBits = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT|VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT|VK_MEMORY_PROPERTY_HOST_COHERENT_BIT|VK_MEMORY_PROPERTY_HOST_CACHED_BIT|VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
     58 const VkPipelineCreateFlags AllVkPipelineCreateFlagBits = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT|VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT|VK_PIPELINE_CREATE_DERIVATIVE_BIT;
     59 const VkPipelineStageFlags AllVkPipelineStageFlagBits = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT|VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT|VK_PIPELINE_STAGE_VERTEX_INPUT_BIT|VK_PIPELINE_STAGE_VERTEX_SHADER_BIT|VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT|VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT|VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT|VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT|VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT|VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT|VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT|VK_PIPELINE_STAGE_TRANSFER_BIT|VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT|VK_PIPELINE_STAGE_HOST_BIT|VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT|VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
     60 const VkQueryControlFlags AllVkQueryControlFlagBits = VK_QUERY_CONTROL_PRECISE_BIT;
     61 const VkQueryPipelineStatisticFlags AllVkQueryPipelineStatisticFlagBits = VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT|VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT|VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT|VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT|VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT|VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT|VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT;
     62 const VkQueryResultFlags AllVkQueryResultFlagBits = VK_QUERY_RESULT_64_BIT|VK_QUERY_RESULT_WAIT_BIT|VK_QUERY_RESULT_WITH_AVAILABILITY_BIT|VK_QUERY_RESULT_PARTIAL_BIT;
     63 const VkQueueFlags AllVkQueueFlagBits = VK_QUEUE_GRAPHICS_BIT|VK_QUEUE_COMPUTE_BIT|VK_QUEUE_TRANSFER_BIT|VK_QUEUE_SPARSE_BINDING_BIT;
     64 const VkSampleCountFlags AllVkSampleCountFlagBits = VK_SAMPLE_COUNT_1_BIT|VK_SAMPLE_COUNT_2_BIT|VK_SAMPLE_COUNT_4_BIT|VK_SAMPLE_COUNT_8_BIT|VK_SAMPLE_COUNT_16_BIT|VK_SAMPLE_COUNT_32_BIT|VK_SAMPLE_COUNT_64_BIT;
     65 const VkShaderStageFlags AllVkShaderStageFlagBits = VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT|VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT|VK_SHADER_STAGE_GEOMETRY_BIT|VK_SHADER_STAGE_FRAGMENT_BIT|VK_SHADER_STAGE_COMPUTE_BIT|VK_SHADER_STAGE_ALL_GRAPHICS|VK_SHADER_STAGE_ALL;
     66 const VkSparseImageFormatFlags AllVkSparseImageFormatFlagBits = VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT|VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT|VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT;
     67 const VkSparseMemoryBindFlags AllVkSparseMemoryBindFlagBits = VK_SPARSE_MEMORY_BIND_METADATA_BIT;
     68 const VkStencilFaceFlags AllVkStencilFaceFlagBits = VK_STENCIL_FACE_FRONT_BIT|VK_STENCIL_FACE_BACK_BIT|VK_STENCIL_FRONT_AND_BACK;
     69 
     70 static bool parameter_validation_vkCreateInstance(
     71     debug_report_data*                          report_data,
     72     const VkInstanceCreateInfo*                 pCreateInfo,
     73     const VkAllocationCallbacks*                pAllocator,
     74     VkInstance*                                 pInstance)
     75 {
     76     bool skipCall = false;
     77 
     78     skipCall |= validate_struct_type(report_data, "vkCreateInstance", "pCreateInfo", "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, true);
     79 
     80     if (pCreateInfo != NULL)
     81     {
     82         skipCall |= validate_reserved_flags(report_data, "vkCreateInstance", "pCreateInfo->flags", pCreateInfo->flags);
     83 
     84         skipCall |= validate_struct_type(report_data, "vkCreateInstance", "pCreateInfo->pApplicationInfo", "VK_STRUCTURE_TYPE_APPLICATION_INFO", pCreateInfo->pApplicationInfo, VK_STRUCTURE_TYPE_APPLICATION_INFO, false);
     85 
     86         if (pCreateInfo->pApplicationInfo != NULL)
     87         {
     88             skipCall |= validate_struct_pnext(report_data, "vkCreateInstance", "pCreateInfo->pApplicationInfo->pNext", NULL, pCreateInfo->pApplicationInfo->pNext, 0, NULL, GeneratedHeaderVersion);
     89         }
     90 
     91         skipCall |= validate_string_array(report_data, "vkCreateInstance", "pCreateInfo->enabledLayerCount", "pCreateInfo->ppEnabledLayerNames", pCreateInfo->enabledLayerCount, pCreateInfo->ppEnabledLayerNames, false, true);
     92 
     93         skipCall |= validate_string_array(report_data, "vkCreateInstance", "pCreateInfo->enabledExtensionCount", "pCreateInfo->ppEnabledExtensionNames", pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames, false, true);
     94     }
     95 
     96     if (pAllocator != NULL)
     97     {
     98         skipCall |= validate_required_pointer(report_data, "vkCreateInstance", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
     99 
    100         skipCall |= validate_required_pointer(report_data, "vkCreateInstance", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    101 
    102         skipCall |= validate_required_pointer(report_data, "vkCreateInstance", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    103     }
    104 
    105     skipCall |= validate_required_pointer(report_data, "vkCreateInstance", "pInstance", pInstance);
    106 
    107     return skipCall;
    108 }
    109 
    110 static bool parameter_validation_vkDestroyInstance(
    111     debug_report_data*                          report_data,
    112     const VkAllocationCallbacks*                pAllocator)
    113 {
    114     bool skipCall = false;
    115 
    116     if (pAllocator != NULL)
    117     {
    118         skipCall |= validate_required_pointer(report_data, "vkDestroyInstance", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    119 
    120         skipCall |= validate_required_pointer(report_data, "vkDestroyInstance", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    121 
    122         skipCall |= validate_required_pointer(report_data, "vkDestroyInstance", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    123     }
    124 
    125     return skipCall;
    126 }
    127 
    128 static bool parameter_validation_vkEnumeratePhysicalDevices(
    129     debug_report_data*                          report_data,
    130     uint32_t*                                   pPhysicalDeviceCount,
    131     VkPhysicalDevice*                           pPhysicalDevices)
    132 {
    133     bool skipCall = false;
    134 
    135     skipCall |= validate_array(report_data, "vkEnumeratePhysicalDevices", "pPhysicalDeviceCount", "pPhysicalDevices", pPhysicalDeviceCount, pPhysicalDevices, true, false, false);
    136 
    137     return skipCall;
    138 }
    139 
    140 static bool parameter_validation_vkGetPhysicalDeviceFeatures(
    141     debug_report_data*                          report_data,
    142     VkPhysicalDeviceFeatures*                   pFeatures)
    143 {
    144     bool skipCall = false;
    145 
    146     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceFeatures", "pFeatures", pFeatures);
    147 
    148     return skipCall;
    149 }
    150 
    151 static bool parameter_validation_vkGetPhysicalDeviceFormatProperties(
    152     debug_report_data*                          report_data,
    153     VkFormat                                    format,
    154     VkFormatProperties*                         pFormatProperties)
    155 {
    156     bool skipCall = false;
    157 
    158     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceFormatProperties", "format", "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, format);
    159 
    160     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceFormatProperties", "pFormatProperties", pFormatProperties);
    161 
    162     return skipCall;
    163 }
    164 
    165 static bool parameter_validation_vkGetPhysicalDeviceImageFormatProperties(
    166     debug_report_data*                          report_data,
    167     VkFormat                                    format,
    168     VkImageType                                 type,
    169     VkImageTiling                               tiling,
    170     VkImageUsageFlags                           usage,
    171     VkImageCreateFlags                          flags,
    172     VkImageFormatProperties*                    pImageFormatProperties)
    173 {
    174     bool skipCall = false;
    175 
    176     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceImageFormatProperties", "format", "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, format);
    177 
    178     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceImageFormatProperties", "type", "VkImageType", VK_IMAGE_TYPE_BEGIN_RANGE, VK_IMAGE_TYPE_END_RANGE, type);
    179 
    180     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceImageFormatProperties", "tiling", "VkImageTiling", VK_IMAGE_TILING_BEGIN_RANGE, VK_IMAGE_TILING_END_RANGE, tiling);
    181 
    182     skipCall |= validate_flags(report_data, "vkGetPhysicalDeviceImageFormatProperties", "usage", "VkImageUsageFlagBits", AllVkImageUsageFlagBits, usage, true);
    183 
    184     skipCall |= validate_flags(report_data, "vkGetPhysicalDeviceImageFormatProperties", "flags", "VkImageCreateFlagBits", AllVkImageCreateFlagBits, flags, false);
    185 
    186     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceImageFormatProperties", "pImageFormatProperties", pImageFormatProperties);
    187 
    188     return skipCall;
    189 }
    190 
    191 static bool parameter_validation_vkGetPhysicalDeviceProperties(
    192     debug_report_data*                          report_data,
    193     VkPhysicalDeviceProperties*                 pProperties)
    194 {
    195     bool skipCall = false;
    196 
    197     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceProperties", "pProperties", pProperties);
    198 
    199     return skipCall;
    200 }
    201 
    202 static bool parameter_validation_vkGetPhysicalDeviceQueueFamilyProperties(
    203     debug_report_data*                          report_data,
    204     uint32_t*                                   pQueueFamilyPropertyCount,
    205     VkQueueFamilyProperties*                    pQueueFamilyProperties)
    206 {
    207     bool skipCall = false;
    208 
    209     skipCall |= validate_array(report_data, "vkGetPhysicalDeviceQueueFamilyProperties", "pQueueFamilyPropertyCount", "pQueueFamilyProperties", pQueueFamilyPropertyCount, pQueueFamilyProperties, true, false, false);
    210 
    211     return skipCall;
    212 }
    213 
    214 static bool parameter_validation_vkGetPhysicalDeviceMemoryProperties(
    215     debug_report_data*                          report_data,
    216     VkPhysicalDeviceMemoryProperties*           pMemoryProperties)
    217 {
    218     bool skipCall = false;
    219 
    220     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceMemoryProperties", "pMemoryProperties", pMemoryProperties);
    221 
    222     return skipCall;
    223 }
    224 
    225 static bool parameter_validation_vkCreateDevice(
    226     debug_report_data*                          report_data,
    227     const VkDeviceCreateInfo*                   pCreateInfo,
    228     const VkAllocationCallbacks*                pAllocator,
    229     VkDevice*                                   pDevice)
    230 {
    231     bool skipCall = false;
    232 
    233     skipCall |= validate_struct_type(report_data, "vkCreateDevice", "pCreateInfo", "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, true);
    234 
    235     if (pCreateInfo != NULL)
    236     {
    237         skipCall |= validate_reserved_flags(report_data, "vkCreateDevice", "pCreateInfo->flags", pCreateInfo->flags);
    238 
    239         skipCall |= validate_struct_type_array(report_data, "vkCreateDevice", "pCreateInfo->queueCreateInfoCount", "pCreateInfo->pQueueCreateInfos", "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO", pCreateInfo->queueCreateInfoCount, pCreateInfo->pQueueCreateInfos, VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, true, true);
    240 
    241         if (pCreateInfo->pQueueCreateInfos != NULL)
    242         {
    243             for (uint32_t queueCreateInfoIndex = 0; queueCreateInfoIndex < pCreateInfo->queueCreateInfoCount; ++queueCreateInfoIndex)
    244             {
    245                 skipCall |= validate_struct_pnext(report_data, "vkCreateDevice", ParameterName("pCreateInfo->pQueueCreateInfos[%i].pNext", ParameterName::IndexVector{ queueCreateInfoIndex }), NULL, pCreateInfo->pQueueCreateInfos[queueCreateInfoIndex].pNext, 0, NULL, GeneratedHeaderVersion);
    246 
    247                 skipCall |= validate_reserved_flags(report_data, "vkCreateDevice", ParameterName("pCreateInfo->pQueueCreateInfos[%i].flags", ParameterName::IndexVector{ queueCreateInfoIndex }), pCreateInfo->pQueueCreateInfos[queueCreateInfoIndex].flags);
    248 
    249                 skipCall |= validate_array(report_data, "vkCreateDevice", ParameterName("pCreateInfo->pQueueCreateInfos[%i].queueCount", ParameterName::IndexVector{ queueCreateInfoIndex }), ParameterName("pCreateInfo->pQueueCreateInfos[%i].pQueuePriorities", ParameterName::IndexVector{ queueCreateInfoIndex }), pCreateInfo->pQueueCreateInfos[queueCreateInfoIndex].queueCount, pCreateInfo->pQueueCreateInfos[queueCreateInfoIndex].pQueuePriorities, true, true);
    250             }
    251         }
    252 
    253         skipCall |= validate_string_array(report_data, "vkCreateDevice", "pCreateInfo->enabledLayerCount", "pCreateInfo->ppEnabledLayerNames", pCreateInfo->enabledLayerCount, pCreateInfo->ppEnabledLayerNames, false, true);
    254 
    255         skipCall |= validate_string_array(report_data, "vkCreateDevice", "pCreateInfo->enabledExtensionCount", "pCreateInfo->ppEnabledExtensionNames", pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames, false, true);
    256 
    257         if (pCreateInfo->pEnabledFeatures != NULL)
    258         {
    259             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->robustBufferAccess", pCreateInfo->pEnabledFeatures->robustBufferAccess);
    260 
    261             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->fullDrawIndexUint32", pCreateInfo->pEnabledFeatures->fullDrawIndexUint32);
    262 
    263             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->imageCubeArray", pCreateInfo->pEnabledFeatures->imageCubeArray);
    264 
    265             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->independentBlend", pCreateInfo->pEnabledFeatures->independentBlend);
    266 
    267             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->geometryShader", pCreateInfo->pEnabledFeatures->geometryShader);
    268 
    269             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->tessellationShader", pCreateInfo->pEnabledFeatures->tessellationShader);
    270 
    271             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sampleRateShading", pCreateInfo->pEnabledFeatures->sampleRateShading);
    272 
    273             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->dualSrcBlend", pCreateInfo->pEnabledFeatures->dualSrcBlend);
    274 
    275             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->logicOp", pCreateInfo->pEnabledFeatures->logicOp);
    276 
    277             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->multiDrawIndirect", pCreateInfo->pEnabledFeatures->multiDrawIndirect);
    278 
    279             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->drawIndirectFirstInstance", pCreateInfo->pEnabledFeatures->drawIndirectFirstInstance);
    280 
    281             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->depthClamp", pCreateInfo->pEnabledFeatures->depthClamp);
    282 
    283             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->depthBiasClamp", pCreateInfo->pEnabledFeatures->depthBiasClamp);
    284 
    285             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->fillModeNonSolid", pCreateInfo->pEnabledFeatures->fillModeNonSolid);
    286 
    287             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->depthBounds", pCreateInfo->pEnabledFeatures->depthBounds);
    288 
    289             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->wideLines", pCreateInfo->pEnabledFeatures->wideLines);
    290 
    291             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->largePoints", pCreateInfo->pEnabledFeatures->largePoints);
    292 
    293             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->alphaToOne", pCreateInfo->pEnabledFeatures->alphaToOne);
    294 
    295             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->multiViewport", pCreateInfo->pEnabledFeatures->multiViewport);
    296 
    297             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->samplerAnisotropy", pCreateInfo->pEnabledFeatures->samplerAnisotropy);
    298 
    299             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->textureCompressionETC2", pCreateInfo->pEnabledFeatures->textureCompressionETC2);
    300 
    301             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->textureCompressionASTC_LDR", pCreateInfo->pEnabledFeatures->textureCompressionASTC_LDR);
    302 
    303             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->textureCompressionBC", pCreateInfo->pEnabledFeatures->textureCompressionBC);
    304 
    305             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->occlusionQueryPrecise", pCreateInfo->pEnabledFeatures->occlusionQueryPrecise);
    306 
    307             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->pipelineStatisticsQuery", pCreateInfo->pEnabledFeatures->pipelineStatisticsQuery);
    308 
    309             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->vertexPipelineStoresAndAtomics", pCreateInfo->pEnabledFeatures->vertexPipelineStoresAndAtomics);
    310 
    311             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->fragmentStoresAndAtomics", pCreateInfo->pEnabledFeatures->fragmentStoresAndAtomics);
    312 
    313             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderTessellationAndGeometryPointSize", pCreateInfo->pEnabledFeatures->shaderTessellationAndGeometryPointSize);
    314 
    315             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderImageGatherExtended", pCreateInfo->pEnabledFeatures->shaderImageGatherExtended);
    316 
    317             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderStorageImageExtendedFormats", pCreateInfo->pEnabledFeatures->shaderStorageImageExtendedFormats);
    318 
    319             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderStorageImageMultisample", pCreateInfo->pEnabledFeatures->shaderStorageImageMultisample);
    320 
    321             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderStorageImageReadWithoutFormat", pCreateInfo->pEnabledFeatures->shaderStorageImageReadWithoutFormat);
    322 
    323             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderStorageImageWriteWithoutFormat", pCreateInfo->pEnabledFeatures->shaderStorageImageWriteWithoutFormat);
    324 
    325             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderUniformBufferArrayDynamicIndexing", pCreateInfo->pEnabledFeatures->shaderUniformBufferArrayDynamicIndexing);
    326 
    327             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderSampledImageArrayDynamicIndexing", pCreateInfo->pEnabledFeatures->shaderSampledImageArrayDynamicIndexing);
    328 
    329             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderStorageBufferArrayDynamicIndexing", pCreateInfo->pEnabledFeatures->shaderStorageBufferArrayDynamicIndexing);
    330 
    331             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderStorageImageArrayDynamicIndexing", pCreateInfo->pEnabledFeatures->shaderStorageImageArrayDynamicIndexing);
    332 
    333             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderClipDistance", pCreateInfo->pEnabledFeatures->shaderClipDistance);
    334 
    335             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderCullDistance", pCreateInfo->pEnabledFeatures->shaderCullDistance);
    336 
    337             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderFloat64", pCreateInfo->pEnabledFeatures->shaderFloat64);
    338 
    339             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderInt64", pCreateInfo->pEnabledFeatures->shaderInt64);
    340 
    341             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderInt16", pCreateInfo->pEnabledFeatures->shaderInt16);
    342 
    343             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderResourceResidency", pCreateInfo->pEnabledFeatures->shaderResourceResidency);
    344 
    345             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->shaderResourceMinLod", pCreateInfo->pEnabledFeatures->shaderResourceMinLod);
    346 
    347             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseBinding", pCreateInfo->pEnabledFeatures->sparseBinding);
    348 
    349             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidencyBuffer", pCreateInfo->pEnabledFeatures->sparseResidencyBuffer);
    350 
    351             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidencyImage2D", pCreateInfo->pEnabledFeatures->sparseResidencyImage2D);
    352 
    353             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidencyImage3D", pCreateInfo->pEnabledFeatures->sparseResidencyImage3D);
    354 
    355             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidency2Samples", pCreateInfo->pEnabledFeatures->sparseResidency2Samples);
    356 
    357             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidency4Samples", pCreateInfo->pEnabledFeatures->sparseResidency4Samples);
    358 
    359             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidency8Samples", pCreateInfo->pEnabledFeatures->sparseResidency8Samples);
    360 
    361             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidency16Samples", pCreateInfo->pEnabledFeatures->sparseResidency16Samples);
    362 
    363             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->sparseResidencyAliased", pCreateInfo->pEnabledFeatures->sparseResidencyAliased);
    364 
    365             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->variableMultisampleRate", pCreateInfo->pEnabledFeatures->variableMultisampleRate);
    366 
    367             skipCall |= validate_bool32(report_data, "vkCreateDevice", "pCreateInfo->pEnabledFeatures->inheritedQueries", pCreateInfo->pEnabledFeatures->inheritedQueries);
    368         }
    369     }
    370 
    371     if (pAllocator != NULL)
    372     {
    373         skipCall |= validate_required_pointer(report_data, "vkCreateDevice", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    374 
    375         skipCall |= validate_required_pointer(report_data, "vkCreateDevice", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    376 
    377         skipCall |= validate_required_pointer(report_data, "vkCreateDevice", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    378     }
    379 
    380     skipCall |= validate_required_pointer(report_data, "vkCreateDevice", "pDevice", pDevice);
    381 
    382     return skipCall;
    383 }
    384 
    385 static bool parameter_validation_vkDestroyDevice(
    386     debug_report_data*                          report_data,
    387     const VkAllocationCallbacks*                pAllocator)
    388 {
    389     bool skipCall = false;
    390 
    391     if (pAllocator != NULL)
    392     {
    393         skipCall |= validate_required_pointer(report_data, "vkDestroyDevice", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    394 
    395         skipCall |= validate_required_pointer(report_data, "vkDestroyDevice", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    396 
    397         skipCall |= validate_required_pointer(report_data, "vkDestroyDevice", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    398     }
    399 
    400     return skipCall;
    401 }
    402 
    403 static bool parameter_validation_vkEnumerateInstanceExtensionProperties(
    404     debug_report_data*                          report_data,
    405     uint32_t*                                   pPropertyCount,
    406     VkExtensionProperties*                      pProperties)
    407 {
    408     bool skipCall = false;
    409 
    410     skipCall |= validate_array(report_data, "vkEnumerateInstanceExtensionProperties", "pPropertyCount", "pProperties", pPropertyCount, pProperties, true, false, false);
    411 
    412     return skipCall;
    413 }
    414 
    415 static bool parameter_validation_vkEnumerateDeviceExtensionProperties(
    416     debug_report_data*                          report_data,
    417     const char*                                 pLayerName,
    418     uint32_t*                                   pPropertyCount,
    419     VkExtensionProperties*                      pProperties)
    420 {
    421     UNUSED_PARAMETER(pLayerName);
    422 
    423     bool skipCall = false;
    424 
    425     skipCall |= validate_array(report_data, "vkEnumerateDeviceExtensionProperties", "pPropertyCount", "pProperties", pPropertyCount, pProperties, true, false, false);
    426 
    427     return skipCall;
    428 }
    429 
    430 static bool parameter_validation_vkGetDeviceQueue(
    431     debug_report_data*                          report_data,
    432     uint32_t                                    queueFamilyIndex,
    433     uint32_t                                    queueIndex,
    434     VkQueue*                                    pQueue)
    435 {
    436     UNUSED_PARAMETER(queueFamilyIndex);
    437     UNUSED_PARAMETER(queueIndex);
    438 
    439     bool skipCall = false;
    440 
    441     skipCall |= validate_required_pointer(report_data, "vkGetDeviceQueue", "pQueue", pQueue);
    442 
    443     return skipCall;
    444 }
    445 
    446 static bool parameter_validation_vkQueueSubmit(
    447     debug_report_data*                          report_data,
    448     uint32_t                                    submitCount,
    449     const VkSubmitInfo*                         pSubmits,
    450     VkFence                                     fence)
    451 {
    452     UNUSED_PARAMETER(fence);
    453 
    454     bool skipCall = false;
    455 
    456     skipCall |= validate_struct_type_array(report_data, "vkQueueSubmit", "submitCount", "pSubmits", "VK_STRUCTURE_TYPE_SUBMIT_INFO", submitCount, pSubmits, VK_STRUCTURE_TYPE_SUBMIT_INFO, false, true);
    457 
    458     if (pSubmits != NULL)
    459     {
    460         for (uint32_t submitIndex = 0; submitIndex < submitCount; ++submitIndex)
    461         {
    462             skipCall |= validate_struct_pnext(report_data, "vkQueueSubmit", ParameterName("pSubmits[%i].pNext", ParameterName::IndexVector{ submitIndex }), NULL, pSubmits[submitIndex].pNext, 0, NULL, GeneratedHeaderVersion);
    463 
    464             skipCall |= validate_array(report_data, "vkQueueSubmit", ParameterName("pSubmits[%i].waitSemaphoreCount", ParameterName::IndexVector{ submitIndex }), ParameterName("pSubmits[%i].pWaitSemaphores", ParameterName::IndexVector{ submitIndex }), pSubmits[submitIndex].waitSemaphoreCount, pSubmits[submitIndex].pWaitSemaphores, false, true);
    465 
    466             skipCall |= validate_flags_array(report_data, "vkQueueSubmit", ParameterName("pSubmits[%i].waitSemaphoreCount", ParameterName::IndexVector{ submitIndex }), ParameterName("pSubmits[%i].pWaitDstStageMask", ParameterName::IndexVector{ submitIndex }), "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, pSubmits[submitIndex].waitSemaphoreCount, pSubmits[submitIndex].pWaitDstStageMask, false, true);
    467 
    468             skipCall |= validate_array(report_data, "vkQueueSubmit", ParameterName("pSubmits[%i].commandBufferCount", ParameterName::IndexVector{ submitIndex }), ParameterName("pSubmits[%i].pCommandBuffers", ParameterName::IndexVector{ submitIndex }), pSubmits[submitIndex].commandBufferCount, pSubmits[submitIndex].pCommandBuffers, false, true);
    469 
    470             skipCall |= validate_array(report_data, "vkQueueSubmit", ParameterName("pSubmits[%i].signalSemaphoreCount", ParameterName::IndexVector{ submitIndex }), ParameterName("pSubmits[%i].pSignalSemaphores", ParameterName::IndexVector{ submitIndex }), pSubmits[submitIndex].signalSemaphoreCount, pSubmits[submitIndex].pSignalSemaphores, false, true);
    471         }
    472     }
    473 
    474     return skipCall;
    475 }
    476 
    477 static bool parameter_validation_vkAllocateMemory(
    478     debug_report_data*                          report_data,
    479     const VkMemoryAllocateInfo*                 pAllocateInfo,
    480     const VkAllocationCallbacks*                pAllocator,
    481     VkDeviceMemory*                             pMemory)
    482 {
    483     bool skipCall = false;
    484 
    485     skipCall |= validate_struct_type(report_data, "vkAllocateMemory", "pAllocateInfo", "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO", pAllocateInfo, VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, true);
    486 
    487     if (pAllocateInfo != NULL)
    488     {
    489         const VkStructureType allowedStructs[] = {VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV};
    490 
    491         skipCall |= validate_struct_pnext(report_data, "vkAllocateMemory", "pAllocateInfo->pNext", "VkDedicatedAllocationMemoryAllocateInfoNV", pAllocateInfo->pNext, ARRAY_SIZE(allowedStructs), allowedStructs, GeneratedHeaderVersion);
    492     }
    493 
    494     if (pAllocator != NULL)
    495     {
    496         skipCall |= validate_required_pointer(report_data, "vkAllocateMemory", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    497 
    498         skipCall |= validate_required_pointer(report_data, "vkAllocateMemory", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    499 
    500         skipCall |= validate_required_pointer(report_data, "vkAllocateMemory", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    501     }
    502 
    503     skipCall |= validate_required_pointer(report_data, "vkAllocateMemory", "pMemory", pMemory);
    504 
    505     return skipCall;
    506 }
    507 
    508 static bool parameter_validation_vkFreeMemory(
    509     debug_report_data*                          report_data,
    510     VkDeviceMemory                              memory,
    511     const VkAllocationCallbacks*                pAllocator)
    512 {
    513     UNUSED_PARAMETER(memory);
    514 
    515     bool skipCall = false;
    516 
    517     if (pAllocator != NULL)
    518     {
    519         skipCall |= validate_required_pointer(report_data, "vkFreeMemory", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    520 
    521         skipCall |= validate_required_pointer(report_data, "vkFreeMemory", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    522 
    523         skipCall |= validate_required_pointer(report_data, "vkFreeMemory", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    524     }
    525 
    526     return skipCall;
    527 }
    528 
    529 static bool parameter_validation_vkMapMemory(
    530     debug_report_data*                          report_data,
    531     VkDeviceMemory                              memory,
    532     VkDeviceSize                                offset,
    533     VkDeviceSize                                size,
    534     VkMemoryMapFlags                            flags,
    535     void**                                      ppData)
    536 {
    537     UNUSED_PARAMETER(offset);
    538     UNUSED_PARAMETER(size);
    539 
    540     bool skipCall = false;
    541 
    542     skipCall |= validate_required_handle(report_data, "vkMapMemory", "memory", memory);
    543 
    544     skipCall |= validate_reserved_flags(report_data, "vkMapMemory", "flags", flags);
    545 
    546     skipCall |= validate_required_pointer(report_data, "vkMapMemory", "ppData", ppData);
    547 
    548     return skipCall;
    549 }
    550 
    551 static bool parameter_validation_vkUnmapMemory(
    552     debug_report_data*                          report_data,
    553     VkDeviceMemory                              memory)
    554 {
    555     bool skipCall = false;
    556 
    557     skipCall |= validate_required_handle(report_data, "vkUnmapMemory", "memory", memory);
    558 
    559     return skipCall;
    560 }
    561 
    562 static bool parameter_validation_vkFlushMappedMemoryRanges(
    563     debug_report_data*                          report_data,
    564     uint32_t                                    memoryRangeCount,
    565     const VkMappedMemoryRange*                  pMemoryRanges)
    566 {
    567     bool skipCall = false;
    568 
    569     skipCall |= validate_struct_type_array(report_data, "vkFlushMappedMemoryRanges", "memoryRangeCount", "pMemoryRanges", "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE", memoryRangeCount, pMemoryRanges, VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, true, true);
    570 
    571     if (pMemoryRanges != NULL)
    572     {
    573         for (uint32_t memoryRangeIndex = 0; memoryRangeIndex < memoryRangeCount; ++memoryRangeIndex)
    574         {
    575             skipCall |= validate_struct_pnext(report_data, "vkFlushMappedMemoryRanges", ParameterName("pMemoryRanges[%i].pNext", ParameterName::IndexVector{ memoryRangeIndex }), NULL, pMemoryRanges[memoryRangeIndex].pNext, 0, NULL, GeneratedHeaderVersion);
    576 
    577             skipCall |= validate_required_handle(report_data, "vkFlushMappedMemoryRanges", ParameterName("pMemoryRanges[%i].memory", ParameterName::IndexVector{ memoryRangeIndex }), pMemoryRanges[memoryRangeIndex].memory);
    578         }
    579     }
    580 
    581     return skipCall;
    582 }
    583 
    584 static bool parameter_validation_vkInvalidateMappedMemoryRanges(
    585     debug_report_data*                          report_data,
    586     uint32_t                                    memoryRangeCount,
    587     const VkMappedMemoryRange*                  pMemoryRanges)
    588 {
    589     bool skipCall = false;
    590 
    591     skipCall |= validate_struct_type_array(report_data, "vkInvalidateMappedMemoryRanges", "memoryRangeCount", "pMemoryRanges", "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE", memoryRangeCount, pMemoryRanges, VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, true, true);
    592 
    593     if (pMemoryRanges != NULL)
    594     {
    595         for (uint32_t memoryRangeIndex = 0; memoryRangeIndex < memoryRangeCount; ++memoryRangeIndex)
    596         {
    597             skipCall |= validate_struct_pnext(report_data, "vkInvalidateMappedMemoryRanges", ParameterName("pMemoryRanges[%i].pNext", ParameterName::IndexVector{ memoryRangeIndex }), NULL, pMemoryRanges[memoryRangeIndex].pNext, 0, NULL, GeneratedHeaderVersion);
    598 
    599             skipCall |= validate_required_handle(report_data, "vkInvalidateMappedMemoryRanges", ParameterName("pMemoryRanges[%i].memory", ParameterName::IndexVector{ memoryRangeIndex }), pMemoryRanges[memoryRangeIndex].memory);
    600         }
    601     }
    602 
    603     return skipCall;
    604 }
    605 
    606 static bool parameter_validation_vkGetDeviceMemoryCommitment(
    607     debug_report_data*                          report_data,
    608     VkDeviceMemory                              memory,
    609     VkDeviceSize*                               pCommittedMemoryInBytes)
    610 {
    611     bool skipCall = false;
    612 
    613     skipCall |= validate_required_handle(report_data, "vkGetDeviceMemoryCommitment", "memory", memory);
    614 
    615     skipCall |= validate_required_pointer(report_data, "vkGetDeviceMemoryCommitment", "pCommittedMemoryInBytes", pCommittedMemoryInBytes);
    616 
    617     return skipCall;
    618 }
    619 
    620 static bool parameter_validation_vkBindBufferMemory(
    621     debug_report_data*                          report_data,
    622     VkBuffer                                    buffer,
    623     VkDeviceMemory                              memory,
    624     VkDeviceSize                                memoryOffset)
    625 {
    626     UNUSED_PARAMETER(memoryOffset);
    627 
    628     bool skipCall = false;
    629 
    630     skipCall |= validate_required_handle(report_data, "vkBindBufferMemory", "buffer", buffer);
    631 
    632     skipCall |= validate_required_handle(report_data, "vkBindBufferMemory", "memory", memory);
    633 
    634     return skipCall;
    635 }
    636 
    637 static bool parameter_validation_vkBindImageMemory(
    638     debug_report_data*                          report_data,
    639     VkImage                                     image,
    640     VkDeviceMemory                              memory,
    641     VkDeviceSize                                memoryOffset)
    642 {
    643     UNUSED_PARAMETER(memoryOffset);
    644 
    645     bool skipCall = false;
    646 
    647     skipCall |= validate_required_handle(report_data, "vkBindImageMemory", "image", image);
    648 
    649     skipCall |= validate_required_handle(report_data, "vkBindImageMemory", "memory", memory);
    650 
    651     return skipCall;
    652 }
    653 
    654 static bool parameter_validation_vkGetBufferMemoryRequirements(
    655     debug_report_data*                          report_data,
    656     VkBuffer                                    buffer,
    657     VkMemoryRequirements*                       pMemoryRequirements)
    658 {
    659     bool skipCall = false;
    660 
    661     skipCall |= validate_required_handle(report_data, "vkGetBufferMemoryRequirements", "buffer", buffer);
    662 
    663     skipCall |= validate_required_pointer(report_data, "vkGetBufferMemoryRequirements", "pMemoryRequirements", pMemoryRequirements);
    664 
    665     return skipCall;
    666 }
    667 
    668 static bool parameter_validation_vkGetImageMemoryRequirements(
    669     debug_report_data*                          report_data,
    670     VkImage                                     image,
    671     VkMemoryRequirements*                       pMemoryRequirements)
    672 {
    673     bool skipCall = false;
    674 
    675     skipCall |= validate_required_handle(report_data, "vkGetImageMemoryRequirements", "image", image);
    676 
    677     skipCall |= validate_required_pointer(report_data, "vkGetImageMemoryRequirements", "pMemoryRequirements", pMemoryRequirements);
    678 
    679     return skipCall;
    680 }
    681 
    682 static bool parameter_validation_vkGetImageSparseMemoryRequirements(
    683     debug_report_data*                          report_data,
    684     VkImage                                     image,
    685     uint32_t*                                   pSparseMemoryRequirementCount,
    686     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements)
    687 {
    688     bool skipCall = false;
    689 
    690     skipCall |= validate_required_handle(report_data, "vkGetImageSparseMemoryRequirements", "image", image);
    691 
    692     skipCall |= validate_array(report_data, "vkGetImageSparseMemoryRequirements", "pSparseMemoryRequirementCount", "pSparseMemoryRequirements", pSparseMemoryRequirementCount, pSparseMemoryRequirements, true, false, false);
    693 
    694     return skipCall;
    695 }
    696 
    697 static bool parameter_validation_vkGetPhysicalDeviceSparseImageFormatProperties(
    698     debug_report_data*                          report_data,
    699     VkFormat                                    format,
    700     VkImageType                                 type,
    701     VkSampleCountFlagBits                       samples,
    702     VkImageUsageFlags                           usage,
    703     VkImageTiling                               tiling,
    704     uint32_t*                                   pPropertyCount,
    705     VkSparseImageFormatProperties*              pProperties)
    706 {
    707     UNUSED_PARAMETER(samples);
    708 
    709     bool skipCall = false;
    710 
    711     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceSparseImageFormatProperties", "format", "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, format);
    712 
    713     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceSparseImageFormatProperties", "type", "VkImageType", VK_IMAGE_TYPE_BEGIN_RANGE, VK_IMAGE_TYPE_END_RANGE, type);
    714 
    715     skipCall |= validate_flags(report_data, "vkGetPhysicalDeviceSparseImageFormatProperties", "usage", "VkImageUsageFlagBits", AllVkImageUsageFlagBits, usage, true);
    716 
    717     skipCall |= validate_ranged_enum(report_data, "vkGetPhysicalDeviceSparseImageFormatProperties", "tiling", "VkImageTiling", VK_IMAGE_TILING_BEGIN_RANGE, VK_IMAGE_TILING_END_RANGE, tiling);
    718 
    719     skipCall |= validate_array(report_data, "vkGetPhysicalDeviceSparseImageFormatProperties", "pPropertyCount", "pProperties", pPropertyCount, pProperties, true, false, false);
    720 
    721     return skipCall;
    722 }
    723 
    724 static bool parameter_validation_vkQueueBindSparse(
    725     debug_report_data*                          report_data,
    726     uint32_t                                    bindInfoCount,
    727     const VkBindSparseInfo*                     pBindInfo,
    728     VkFence                                     fence)
    729 {
    730     UNUSED_PARAMETER(fence);
    731 
    732     bool skipCall = false;
    733 
    734     skipCall |= validate_struct_type_array(report_data, "vkQueueBindSparse", "bindInfoCount", "pBindInfo", "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO", bindInfoCount, pBindInfo, VK_STRUCTURE_TYPE_BIND_SPARSE_INFO, false, true);
    735 
    736     if (pBindInfo != NULL)
    737     {
    738         for (uint32_t bindInfoIndex = 0; bindInfoIndex < bindInfoCount; ++bindInfoIndex)
    739         {
    740             skipCall |= validate_struct_pnext(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pNext", ParameterName::IndexVector{ bindInfoIndex }), NULL, pBindInfo[bindInfoIndex].pNext, 0, NULL, GeneratedHeaderVersion);
    741 
    742             skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].waitSemaphoreCount", ParameterName::IndexVector{ bindInfoIndex }), ParameterName("pBindInfo[%i].pWaitSemaphores", ParameterName::IndexVector{ bindInfoIndex }), pBindInfo[bindInfoIndex].waitSemaphoreCount, pBindInfo[bindInfoIndex].pWaitSemaphores, false, true);
    743 
    744             skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].bufferBindCount", ParameterName::IndexVector{ bindInfoIndex }), ParameterName("pBindInfo[%i].pBufferBinds", ParameterName::IndexVector{ bindInfoIndex }), pBindInfo[bindInfoIndex].bufferBindCount, pBindInfo[bindInfoIndex].pBufferBinds, false, true);
    745 
    746             if (pBindInfo[bindInfoIndex].pBufferBinds != NULL)
    747             {
    748                 for (uint32_t bufferBindIndex = 0; bufferBindIndex < pBindInfo[bindInfoIndex].bufferBindCount; ++bufferBindIndex)
    749                 {
    750                     skipCall |= validate_required_handle(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pBufferBinds[%i].buffer", ParameterName::IndexVector{ bindInfoIndex, bufferBindIndex }), pBindInfo[bindInfoIndex].pBufferBinds[bufferBindIndex].buffer);
    751 
    752                     skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pBufferBinds[%i].bindCount", ParameterName::IndexVector{ bindInfoIndex, bufferBindIndex }), ParameterName("pBindInfo[%i].pBufferBinds[%i].pBinds", ParameterName::IndexVector{ bindInfoIndex, bufferBindIndex }), pBindInfo[bindInfoIndex].pBufferBinds[bufferBindIndex].bindCount, pBindInfo[bindInfoIndex].pBufferBinds[bufferBindIndex].pBinds, true, true);
    753 
    754                     if (pBindInfo[bindInfoIndex].pBufferBinds[bufferBindIndex].pBinds != NULL)
    755                     {
    756                         for (uint32_t bindIndex = 0; bindIndex < pBindInfo[bindInfoIndex].pBufferBinds[bufferBindIndex].bindCount; ++bindIndex)
    757                         {
    758                             skipCall |= validate_flags(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pBufferBinds[%i].pBinds[%i].flags", ParameterName::IndexVector{ bindInfoIndex, bufferBindIndex, bindIndex }), "VkSparseMemoryBindFlagBits", AllVkSparseMemoryBindFlagBits, pBindInfo[bindInfoIndex].pBufferBinds[bufferBindIndex].pBinds[bindIndex].flags, false);
    759                         }
    760                     }
    761                 }
    762             }
    763 
    764             skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].imageOpaqueBindCount", ParameterName::IndexVector{ bindInfoIndex }), ParameterName("pBindInfo[%i].pImageOpaqueBinds", ParameterName::IndexVector{ bindInfoIndex }), pBindInfo[bindInfoIndex].imageOpaqueBindCount, pBindInfo[bindInfoIndex].pImageOpaqueBinds, false, true);
    765 
    766             if (pBindInfo[bindInfoIndex].pImageOpaqueBinds != NULL)
    767             {
    768                 for (uint32_t imageOpaqueBindIndex = 0; imageOpaqueBindIndex < pBindInfo[bindInfoIndex].imageOpaqueBindCount; ++imageOpaqueBindIndex)
    769                 {
    770                     skipCall |= validate_required_handle(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageOpaqueBinds[%i].image", ParameterName::IndexVector{ bindInfoIndex, imageOpaqueBindIndex }), pBindInfo[bindInfoIndex].pImageOpaqueBinds[imageOpaqueBindIndex].image);
    771 
    772                     skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageOpaqueBinds[%i].bindCount", ParameterName::IndexVector{ bindInfoIndex, imageOpaqueBindIndex }), ParameterName("pBindInfo[%i].pImageOpaqueBinds[%i].pBinds", ParameterName::IndexVector{ bindInfoIndex, imageOpaqueBindIndex }), pBindInfo[bindInfoIndex].pImageOpaqueBinds[imageOpaqueBindIndex].bindCount, pBindInfo[bindInfoIndex].pImageOpaqueBinds[imageOpaqueBindIndex].pBinds, true, true);
    773 
    774                     if (pBindInfo[bindInfoIndex].pImageOpaqueBinds[imageOpaqueBindIndex].pBinds != NULL)
    775                     {
    776                         for (uint32_t bindIndex = 0; bindIndex < pBindInfo[bindInfoIndex].pImageOpaqueBinds[imageOpaqueBindIndex].bindCount; ++bindIndex)
    777                         {
    778                             skipCall |= validate_flags(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageOpaqueBinds[%i].pBinds[%i].flags", ParameterName::IndexVector{ bindInfoIndex, imageOpaqueBindIndex, bindIndex }), "VkSparseMemoryBindFlagBits", AllVkSparseMemoryBindFlagBits, pBindInfo[bindInfoIndex].pImageOpaqueBinds[imageOpaqueBindIndex].pBinds[bindIndex].flags, false);
    779                         }
    780                     }
    781                 }
    782             }
    783 
    784             skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].imageBindCount", ParameterName::IndexVector{ bindInfoIndex }), ParameterName("pBindInfo[%i].pImageBinds", ParameterName::IndexVector{ bindInfoIndex }), pBindInfo[bindInfoIndex].imageBindCount, pBindInfo[bindInfoIndex].pImageBinds, false, true);
    785 
    786             if (pBindInfo[bindInfoIndex].pImageBinds != NULL)
    787             {
    788                 for (uint32_t imageBindIndex = 0; imageBindIndex < pBindInfo[bindInfoIndex].imageBindCount; ++imageBindIndex)
    789                 {
    790                     skipCall |= validate_required_handle(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageBinds[%i].image", ParameterName::IndexVector{ bindInfoIndex, imageBindIndex }), pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].image);
    791 
    792                     skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageBinds[%i].bindCount", ParameterName::IndexVector{ bindInfoIndex, imageBindIndex }), ParameterName("pBindInfo[%i].pImageBinds[%i].pBinds", ParameterName::IndexVector{ bindInfoIndex, imageBindIndex }), pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].bindCount, pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].pBinds, true, true);
    793 
    794                     if (pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].pBinds != NULL)
    795                     {
    796                         for (uint32_t bindIndex = 0; bindIndex < pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].bindCount; ++bindIndex)
    797                         {
    798                             skipCall |= validate_flags(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageBinds[%i].pBinds[%i].subresource.aspectMask", ParameterName::IndexVector{ bindInfoIndex, imageBindIndex, bindIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].pBinds[bindIndex].subresource.aspectMask, true);
    799 
    800                             skipCall |= validate_flags(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].pImageBinds[%i].pBinds[%i].flags", ParameterName::IndexVector{ bindInfoIndex, imageBindIndex, bindIndex }), "VkSparseMemoryBindFlagBits", AllVkSparseMemoryBindFlagBits, pBindInfo[bindInfoIndex].pImageBinds[imageBindIndex].pBinds[bindIndex].flags, false);
    801                         }
    802                     }
    803                 }
    804             }
    805 
    806             skipCall |= validate_array(report_data, "vkQueueBindSparse", ParameterName("pBindInfo[%i].signalSemaphoreCount", ParameterName::IndexVector{ bindInfoIndex }), ParameterName("pBindInfo[%i].pSignalSemaphores", ParameterName::IndexVector{ bindInfoIndex }), pBindInfo[bindInfoIndex].signalSemaphoreCount, pBindInfo[bindInfoIndex].pSignalSemaphores, false, true);
    807         }
    808     }
    809 
    810     return skipCall;
    811 }
    812 
    813 static bool parameter_validation_vkCreateFence(
    814     debug_report_data*                          report_data,
    815     const VkFenceCreateInfo*                    pCreateInfo,
    816     const VkAllocationCallbacks*                pAllocator,
    817     VkFence*                                    pFence)
    818 {
    819     bool skipCall = false;
    820 
    821     skipCall |= validate_struct_type(report_data, "vkCreateFence", "pCreateInfo", "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, true);
    822 
    823     if (pCreateInfo != NULL)
    824     {
    825         skipCall |= validate_struct_pnext(report_data, "vkCreateFence", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
    826 
    827         skipCall |= validate_flags(report_data, "vkCreateFence", "pCreateInfo->flags", "VkFenceCreateFlagBits", AllVkFenceCreateFlagBits, pCreateInfo->flags, false);
    828     }
    829 
    830     if (pAllocator != NULL)
    831     {
    832         skipCall |= validate_required_pointer(report_data, "vkCreateFence", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    833 
    834         skipCall |= validate_required_pointer(report_data, "vkCreateFence", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    835 
    836         skipCall |= validate_required_pointer(report_data, "vkCreateFence", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    837     }
    838 
    839     skipCall |= validate_required_pointer(report_data, "vkCreateFence", "pFence", pFence);
    840 
    841     return skipCall;
    842 }
    843 
    844 static bool parameter_validation_vkDestroyFence(
    845     debug_report_data*                          report_data,
    846     VkFence                                     fence,
    847     const VkAllocationCallbacks*                pAllocator)
    848 {
    849     UNUSED_PARAMETER(fence);
    850 
    851     bool skipCall = false;
    852 
    853     if (pAllocator != NULL)
    854     {
    855         skipCall |= validate_required_pointer(report_data, "vkDestroyFence", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    856 
    857         skipCall |= validate_required_pointer(report_data, "vkDestroyFence", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    858 
    859         skipCall |= validate_required_pointer(report_data, "vkDestroyFence", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    860     }
    861 
    862     return skipCall;
    863 }
    864 
    865 static bool parameter_validation_vkResetFences(
    866     debug_report_data*                          report_data,
    867     uint32_t                                    fenceCount,
    868     const VkFence*                              pFences)
    869 {
    870     bool skipCall = false;
    871 
    872     skipCall |= validate_handle_array(report_data, "vkResetFences", "fenceCount", "pFences", fenceCount, pFences, true, true);
    873 
    874     return skipCall;
    875 }
    876 
    877 static bool parameter_validation_vkGetFenceStatus(
    878     debug_report_data*                          report_data,
    879     VkFence                                     fence)
    880 {
    881     bool skipCall = false;
    882 
    883     skipCall |= validate_required_handle(report_data, "vkGetFenceStatus", "fence", fence);
    884 
    885     return skipCall;
    886 }
    887 
    888 static bool parameter_validation_vkWaitForFences(
    889     debug_report_data*                          report_data,
    890     uint32_t                                    fenceCount,
    891     const VkFence*                              pFences,
    892     VkBool32                                    waitAll,
    893     uint64_t                                    timeout)
    894 {
    895     UNUSED_PARAMETER(timeout);
    896 
    897     bool skipCall = false;
    898 
    899     skipCall |= validate_handle_array(report_data, "vkWaitForFences", "fenceCount", "pFences", fenceCount, pFences, true, true);
    900 
    901     skipCall |= validate_bool32(report_data, "vkWaitForFences", "waitAll", waitAll);
    902 
    903     return skipCall;
    904 }
    905 
    906 static bool parameter_validation_vkCreateSemaphore(
    907     debug_report_data*                          report_data,
    908     const VkSemaphoreCreateInfo*                pCreateInfo,
    909     const VkAllocationCallbacks*                pAllocator,
    910     VkSemaphore*                                pSemaphore)
    911 {
    912     bool skipCall = false;
    913 
    914     skipCall |= validate_struct_type(report_data, "vkCreateSemaphore", "pCreateInfo", "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, true);
    915 
    916     if (pCreateInfo != NULL)
    917     {
    918         skipCall |= validate_struct_pnext(report_data, "vkCreateSemaphore", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
    919 
    920         skipCall |= validate_reserved_flags(report_data, "vkCreateSemaphore", "pCreateInfo->flags", pCreateInfo->flags);
    921     }
    922 
    923     if (pAllocator != NULL)
    924     {
    925         skipCall |= validate_required_pointer(report_data, "vkCreateSemaphore", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    926 
    927         skipCall |= validate_required_pointer(report_data, "vkCreateSemaphore", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    928 
    929         skipCall |= validate_required_pointer(report_data, "vkCreateSemaphore", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    930     }
    931 
    932     skipCall |= validate_required_pointer(report_data, "vkCreateSemaphore", "pSemaphore", pSemaphore);
    933 
    934     return skipCall;
    935 }
    936 
    937 static bool parameter_validation_vkDestroySemaphore(
    938     debug_report_data*                          report_data,
    939     VkSemaphore                                 semaphore,
    940     const VkAllocationCallbacks*                pAllocator)
    941 {
    942     UNUSED_PARAMETER(semaphore);
    943 
    944     bool skipCall = false;
    945 
    946     if (pAllocator != NULL)
    947     {
    948         skipCall |= validate_required_pointer(report_data, "vkDestroySemaphore", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    949 
    950         skipCall |= validate_required_pointer(report_data, "vkDestroySemaphore", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    951 
    952         skipCall |= validate_required_pointer(report_data, "vkDestroySemaphore", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    953     }
    954 
    955     return skipCall;
    956 }
    957 
    958 static bool parameter_validation_vkCreateEvent(
    959     debug_report_data*                          report_data,
    960     const VkEventCreateInfo*                    pCreateInfo,
    961     const VkAllocationCallbacks*                pAllocator,
    962     VkEvent*                                    pEvent)
    963 {
    964     bool skipCall = false;
    965 
    966     skipCall |= validate_struct_type(report_data, "vkCreateEvent", "pCreateInfo", "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_EVENT_CREATE_INFO, true);
    967 
    968     if (pCreateInfo != NULL)
    969     {
    970         skipCall |= validate_struct_pnext(report_data, "vkCreateEvent", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
    971 
    972         skipCall |= validate_reserved_flags(report_data, "vkCreateEvent", "pCreateInfo->flags", pCreateInfo->flags);
    973     }
    974 
    975     if (pAllocator != NULL)
    976     {
    977         skipCall |= validate_required_pointer(report_data, "vkCreateEvent", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
    978 
    979         skipCall |= validate_required_pointer(report_data, "vkCreateEvent", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
    980 
    981         skipCall |= validate_required_pointer(report_data, "vkCreateEvent", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
    982     }
    983 
    984     skipCall |= validate_required_pointer(report_data, "vkCreateEvent", "pEvent", pEvent);
    985 
    986     return skipCall;
    987 }
    988 
    989 static bool parameter_validation_vkDestroyEvent(
    990     debug_report_data*                          report_data,
    991     VkEvent                                     event,
    992     const VkAllocationCallbacks*                pAllocator)
    993 {
    994     UNUSED_PARAMETER(event);
    995 
    996     bool skipCall = false;
    997 
    998     if (pAllocator != NULL)
    999     {
   1000         skipCall |= validate_required_pointer(report_data, "vkDestroyEvent", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1001 
   1002         skipCall |= validate_required_pointer(report_data, "vkDestroyEvent", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1003 
   1004         skipCall |= validate_required_pointer(report_data, "vkDestroyEvent", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1005     }
   1006 
   1007     return skipCall;
   1008 }
   1009 
   1010 static bool parameter_validation_vkGetEventStatus(
   1011     debug_report_data*                          report_data,
   1012     VkEvent                                     event)
   1013 {
   1014     bool skipCall = false;
   1015 
   1016     skipCall |= validate_required_handle(report_data, "vkGetEventStatus", "event", event);
   1017 
   1018     return skipCall;
   1019 }
   1020 
   1021 static bool parameter_validation_vkSetEvent(
   1022     debug_report_data*                          report_data,
   1023     VkEvent                                     event)
   1024 {
   1025     bool skipCall = false;
   1026 
   1027     skipCall |= validate_required_handle(report_data, "vkSetEvent", "event", event);
   1028 
   1029     return skipCall;
   1030 }
   1031 
   1032 static bool parameter_validation_vkResetEvent(
   1033     debug_report_data*                          report_data,
   1034     VkEvent                                     event)
   1035 {
   1036     bool skipCall = false;
   1037 
   1038     skipCall |= validate_required_handle(report_data, "vkResetEvent", "event", event);
   1039 
   1040     return skipCall;
   1041 }
   1042 
   1043 static bool parameter_validation_vkCreateQueryPool(
   1044     debug_report_data*                          report_data,
   1045     const VkQueryPoolCreateInfo*                pCreateInfo,
   1046     const VkAllocationCallbacks*                pAllocator,
   1047     VkQueryPool*                                pQueryPool)
   1048 {
   1049     bool skipCall = false;
   1050 
   1051     skipCall |= validate_struct_type(report_data, "vkCreateQueryPool", "pCreateInfo", "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO, true);
   1052 
   1053     if (pCreateInfo != NULL)
   1054     {
   1055         skipCall |= validate_struct_pnext(report_data, "vkCreateQueryPool", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1056 
   1057         skipCall |= validate_reserved_flags(report_data, "vkCreateQueryPool", "pCreateInfo->flags", pCreateInfo->flags);
   1058 
   1059         skipCall |= validate_ranged_enum(report_data, "vkCreateQueryPool", "pCreateInfo->queryType", "VkQueryType", VK_QUERY_TYPE_BEGIN_RANGE, VK_QUERY_TYPE_END_RANGE, pCreateInfo->queryType);
   1060     }
   1061 
   1062     if (pAllocator != NULL)
   1063     {
   1064         skipCall |= validate_required_pointer(report_data, "vkCreateQueryPool", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1065 
   1066         skipCall |= validate_required_pointer(report_data, "vkCreateQueryPool", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1067 
   1068         skipCall |= validate_required_pointer(report_data, "vkCreateQueryPool", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1069     }
   1070 
   1071     skipCall |= validate_required_pointer(report_data, "vkCreateQueryPool", "pQueryPool", pQueryPool);
   1072 
   1073     return skipCall;
   1074 }
   1075 
   1076 static bool parameter_validation_vkDestroyQueryPool(
   1077     debug_report_data*                          report_data,
   1078     VkQueryPool                                 queryPool,
   1079     const VkAllocationCallbacks*                pAllocator)
   1080 {
   1081     UNUSED_PARAMETER(queryPool);
   1082 
   1083     bool skipCall = false;
   1084 
   1085     if (pAllocator != NULL)
   1086     {
   1087         skipCall |= validate_required_pointer(report_data, "vkDestroyQueryPool", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1088 
   1089         skipCall |= validate_required_pointer(report_data, "vkDestroyQueryPool", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1090 
   1091         skipCall |= validate_required_pointer(report_data, "vkDestroyQueryPool", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1092     }
   1093 
   1094     return skipCall;
   1095 }
   1096 
   1097 static bool parameter_validation_vkGetQueryPoolResults(
   1098     debug_report_data*                          report_data,
   1099     VkQueryPool                                 queryPool,
   1100     uint32_t                                    firstQuery,
   1101     uint32_t                                    queryCount,
   1102     size_t                                      dataSize,
   1103     void*                                       pData,
   1104     VkDeviceSize                                stride,
   1105     VkQueryResultFlags                          flags)
   1106 {
   1107     UNUSED_PARAMETER(firstQuery);
   1108     UNUSED_PARAMETER(queryCount);
   1109     UNUSED_PARAMETER(stride);
   1110 
   1111     bool skipCall = false;
   1112 
   1113     skipCall |= validate_required_handle(report_data, "vkGetQueryPoolResults", "queryPool", queryPool);
   1114 
   1115     skipCall |= validate_array(report_data, "vkGetQueryPoolResults", "dataSize", "pData", dataSize, pData, true, true);
   1116 
   1117     skipCall |= validate_flags(report_data, "vkGetQueryPoolResults", "flags", "VkQueryResultFlagBits", AllVkQueryResultFlagBits, flags, false);
   1118 
   1119     return skipCall;
   1120 }
   1121 
   1122 static bool parameter_validation_vkCreateBuffer(
   1123     debug_report_data*                          report_data,
   1124     const VkBufferCreateInfo*                   pCreateInfo,
   1125     const VkAllocationCallbacks*                pAllocator,
   1126     VkBuffer*                                   pBuffer)
   1127 {
   1128     bool skipCall = false;
   1129 
   1130     skipCall |= validate_struct_type(report_data, "vkCreateBuffer", "pCreateInfo", "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, true);
   1131 
   1132     if (pCreateInfo != NULL)
   1133     {
   1134         const VkStructureType allowedStructs[] = {VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV};
   1135 
   1136         skipCall |= validate_struct_pnext(report_data, "vkCreateBuffer", "pCreateInfo->pNext", "VkDedicatedAllocationBufferCreateInfoNV", pCreateInfo->pNext, ARRAY_SIZE(allowedStructs), allowedStructs, GeneratedHeaderVersion);
   1137 
   1138         skipCall |= validate_flags(report_data, "vkCreateBuffer", "pCreateInfo->flags", "VkBufferCreateFlagBits", AllVkBufferCreateFlagBits, pCreateInfo->flags, false);
   1139 
   1140         skipCall |= validate_flags(report_data, "vkCreateBuffer", "pCreateInfo->usage", "VkBufferUsageFlagBits", AllVkBufferUsageFlagBits, pCreateInfo->usage, true);
   1141 
   1142         skipCall |= validate_ranged_enum(report_data, "vkCreateBuffer", "pCreateInfo->sharingMode", "VkSharingMode", VK_SHARING_MODE_BEGIN_RANGE, VK_SHARING_MODE_END_RANGE, pCreateInfo->sharingMode);
   1143     }
   1144 
   1145     if (pAllocator != NULL)
   1146     {
   1147         skipCall |= validate_required_pointer(report_data, "vkCreateBuffer", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1148 
   1149         skipCall |= validate_required_pointer(report_data, "vkCreateBuffer", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1150 
   1151         skipCall |= validate_required_pointer(report_data, "vkCreateBuffer", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1152     }
   1153 
   1154     skipCall |= validate_required_pointer(report_data, "vkCreateBuffer", "pBuffer", pBuffer);
   1155 
   1156     return skipCall;
   1157 }
   1158 
   1159 static bool parameter_validation_vkDestroyBuffer(
   1160     debug_report_data*                          report_data,
   1161     VkBuffer                                    buffer,
   1162     const VkAllocationCallbacks*                pAllocator)
   1163 {
   1164     UNUSED_PARAMETER(buffer);
   1165 
   1166     bool skipCall = false;
   1167 
   1168     if (pAllocator != NULL)
   1169     {
   1170         skipCall |= validate_required_pointer(report_data, "vkDestroyBuffer", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1171 
   1172         skipCall |= validate_required_pointer(report_data, "vkDestroyBuffer", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1173 
   1174         skipCall |= validate_required_pointer(report_data, "vkDestroyBuffer", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1175     }
   1176 
   1177     return skipCall;
   1178 }
   1179 
   1180 static bool parameter_validation_vkCreateBufferView(
   1181     debug_report_data*                          report_data,
   1182     const VkBufferViewCreateInfo*               pCreateInfo,
   1183     const VkAllocationCallbacks*                pAllocator,
   1184     VkBufferView*                               pView)
   1185 {
   1186     bool skipCall = false;
   1187 
   1188     skipCall |= validate_struct_type(report_data, "vkCreateBufferView", "pCreateInfo", "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO, true);
   1189 
   1190     if (pCreateInfo != NULL)
   1191     {
   1192         skipCall |= validate_struct_pnext(report_data, "vkCreateBufferView", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1193 
   1194         skipCall |= validate_reserved_flags(report_data, "vkCreateBufferView", "pCreateInfo->flags", pCreateInfo->flags);
   1195 
   1196         skipCall |= validate_required_handle(report_data, "vkCreateBufferView", "pCreateInfo->buffer", pCreateInfo->buffer);
   1197 
   1198         skipCall |= validate_ranged_enum(report_data, "vkCreateBufferView", "pCreateInfo->format", "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, pCreateInfo->format);
   1199     }
   1200 
   1201     if (pAllocator != NULL)
   1202     {
   1203         skipCall |= validate_required_pointer(report_data, "vkCreateBufferView", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1204 
   1205         skipCall |= validate_required_pointer(report_data, "vkCreateBufferView", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1206 
   1207         skipCall |= validate_required_pointer(report_data, "vkCreateBufferView", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1208     }
   1209 
   1210     skipCall |= validate_required_pointer(report_data, "vkCreateBufferView", "pView", pView);
   1211 
   1212     return skipCall;
   1213 }
   1214 
   1215 static bool parameter_validation_vkDestroyBufferView(
   1216     debug_report_data*                          report_data,
   1217     VkBufferView                                bufferView,
   1218     const VkAllocationCallbacks*                pAllocator)
   1219 {
   1220     UNUSED_PARAMETER(bufferView);
   1221 
   1222     bool skipCall = false;
   1223 
   1224     if (pAllocator != NULL)
   1225     {
   1226         skipCall |= validate_required_pointer(report_data, "vkDestroyBufferView", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1227 
   1228         skipCall |= validate_required_pointer(report_data, "vkDestroyBufferView", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1229 
   1230         skipCall |= validate_required_pointer(report_data, "vkDestroyBufferView", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1231     }
   1232 
   1233     return skipCall;
   1234 }
   1235 
   1236 static bool parameter_validation_vkCreateImage(
   1237     debug_report_data*                          report_data,
   1238     const VkImageCreateInfo*                    pCreateInfo,
   1239     const VkAllocationCallbacks*                pAllocator,
   1240     VkImage*                                    pImage)
   1241 {
   1242     bool skipCall = false;
   1243 
   1244     skipCall |= validate_struct_type(report_data, "vkCreateImage", "pCreateInfo", "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, true);
   1245 
   1246     if (pCreateInfo != NULL)
   1247     {
   1248         const VkStructureType allowedStructs[] = {VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV};
   1249 
   1250         skipCall |= validate_struct_pnext(report_data, "vkCreateImage", "pCreateInfo->pNext", "VkDedicatedAllocationImageCreateInfoNV", pCreateInfo->pNext, ARRAY_SIZE(allowedStructs), allowedStructs, GeneratedHeaderVersion);
   1251 
   1252         skipCall |= validate_flags(report_data, "vkCreateImage", "pCreateInfo->flags", "VkImageCreateFlagBits", AllVkImageCreateFlagBits, pCreateInfo->flags, false);
   1253 
   1254         skipCall |= validate_ranged_enum(report_data, "vkCreateImage", "pCreateInfo->imageType", "VkImageType", VK_IMAGE_TYPE_BEGIN_RANGE, VK_IMAGE_TYPE_END_RANGE, pCreateInfo->imageType);
   1255 
   1256         skipCall |= validate_ranged_enum(report_data, "vkCreateImage", "pCreateInfo->format", "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, pCreateInfo->format);
   1257 
   1258         skipCall |= validate_ranged_enum(report_data, "vkCreateImage", "pCreateInfo->tiling", "VkImageTiling", VK_IMAGE_TILING_BEGIN_RANGE, VK_IMAGE_TILING_END_RANGE, pCreateInfo->tiling);
   1259 
   1260         skipCall |= validate_flags(report_data, "vkCreateImage", "pCreateInfo->usage", "VkImageUsageFlagBits", AllVkImageUsageFlagBits, pCreateInfo->usage, true);
   1261 
   1262         skipCall |= validate_ranged_enum(report_data, "vkCreateImage", "pCreateInfo->sharingMode", "VkSharingMode", VK_SHARING_MODE_BEGIN_RANGE, VK_SHARING_MODE_END_RANGE, pCreateInfo->sharingMode);
   1263 
   1264         skipCall |= validate_ranged_enum(report_data, "vkCreateImage", "pCreateInfo->initialLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->initialLayout);
   1265     }
   1266 
   1267     if (pAllocator != NULL)
   1268     {
   1269         skipCall |= validate_required_pointer(report_data, "vkCreateImage", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1270 
   1271         skipCall |= validate_required_pointer(report_data, "vkCreateImage", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1272 
   1273         skipCall |= validate_required_pointer(report_data, "vkCreateImage", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1274     }
   1275 
   1276     skipCall |= validate_required_pointer(report_data, "vkCreateImage", "pImage", pImage);
   1277 
   1278     return skipCall;
   1279 }
   1280 
   1281 static bool parameter_validation_vkDestroyImage(
   1282     debug_report_data*                          report_data,
   1283     VkImage                                     image,
   1284     const VkAllocationCallbacks*                pAllocator)
   1285 {
   1286     UNUSED_PARAMETER(image);
   1287 
   1288     bool skipCall = false;
   1289 
   1290     if (pAllocator != NULL)
   1291     {
   1292         skipCall |= validate_required_pointer(report_data, "vkDestroyImage", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1293 
   1294         skipCall |= validate_required_pointer(report_data, "vkDestroyImage", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1295 
   1296         skipCall |= validate_required_pointer(report_data, "vkDestroyImage", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1297     }
   1298 
   1299     return skipCall;
   1300 }
   1301 
   1302 static bool parameter_validation_vkGetImageSubresourceLayout(
   1303     debug_report_data*                          report_data,
   1304     VkImage                                     image,
   1305     const VkImageSubresource*                   pSubresource,
   1306     VkSubresourceLayout*                        pLayout)
   1307 {
   1308     bool skipCall = false;
   1309 
   1310     skipCall |= validate_required_handle(report_data, "vkGetImageSubresourceLayout", "image", image);
   1311 
   1312     skipCall |= validate_required_pointer(report_data, "vkGetImageSubresourceLayout", "pSubresource", pSubresource);
   1313 
   1314     if (pSubresource != NULL)
   1315     {
   1316         skipCall |= validate_flags(report_data, "vkGetImageSubresourceLayout", "pSubresource->aspectMask", "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pSubresource->aspectMask, true);
   1317     }
   1318 
   1319     skipCall |= validate_required_pointer(report_data, "vkGetImageSubresourceLayout", "pLayout", pLayout);
   1320 
   1321     return skipCall;
   1322 }
   1323 
   1324 static bool parameter_validation_vkCreateImageView(
   1325     debug_report_data*                          report_data,
   1326     const VkImageViewCreateInfo*                pCreateInfo,
   1327     const VkAllocationCallbacks*                pAllocator,
   1328     VkImageView*                                pView)
   1329 {
   1330     bool skipCall = false;
   1331 
   1332     skipCall |= validate_struct_type(report_data, "vkCreateImageView", "pCreateInfo", "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, true);
   1333 
   1334     if (pCreateInfo != NULL)
   1335     {
   1336         skipCall |= validate_struct_pnext(report_data, "vkCreateImageView", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1337 
   1338         skipCall |= validate_reserved_flags(report_data, "vkCreateImageView", "pCreateInfo->flags", pCreateInfo->flags);
   1339 
   1340         skipCall |= validate_required_handle(report_data, "vkCreateImageView", "pCreateInfo->image", pCreateInfo->image);
   1341 
   1342         skipCall |= validate_ranged_enum(report_data, "vkCreateImageView", "pCreateInfo->viewType", "VkImageViewType", VK_IMAGE_VIEW_TYPE_BEGIN_RANGE, VK_IMAGE_VIEW_TYPE_END_RANGE, pCreateInfo->viewType);
   1343 
   1344         skipCall |= validate_ranged_enum(report_data, "vkCreateImageView", "pCreateInfo->format", "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, pCreateInfo->format);
   1345 
   1346         skipCall |= validate_ranged_enum(report_data, "vkCreateImageView", "pCreateInfo->components.r", "VkComponentSwizzle", VK_COMPONENT_SWIZZLE_BEGIN_RANGE, VK_COMPONENT_SWIZZLE_END_RANGE, pCreateInfo->components.r);
   1347 
   1348         skipCall |= validate_ranged_enum(report_data, "vkCreateImageView", "pCreateInfo->components.g", "VkComponentSwizzle", VK_COMPONENT_SWIZZLE_BEGIN_RANGE, VK_COMPONENT_SWIZZLE_END_RANGE, pCreateInfo->components.g);
   1349 
   1350         skipCall |= validate_ranged_enum(report_data, "vkCreateImageView", "pCreateInfo->components.b", "VkComponentSwizzle", VK_COMPONENT_SWIZZLE_BEGIN_RANGE, VK_COMPONENT_SWIZZLE_END_RANGE, pCreateInfo->components.b);
   1351 
   1352         skipCall |= validate_ranged_enum(report_data, "vkCreateImageView", "pCreateInfo->components.a", "VkComponentSwizzle", VK_COMPONENT_SWIZZLE_BEGIN_RANGE, VK_COMPONENT_SWIZZLE_END_RANGE, pCreateInfo->components.a);
   1353 
   1354         skipCall |= validate_flags(report_data, "vkCreateImageView", "pCreateInfo->subresourceRange.aspectMask", "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pCreateInfo->subresourceRange.aspectMask, true);
   1355     }
   1356 
   1357     if (pAllocator != NULL)
   1358     {
   1359         skipCall |= validate_required_pointer(report_data, "vkCreateImageView", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1360 
   1361         skipCall |= validate_required_pointer(report_data, "vkCreateImageView", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1362 
   1363         skipCall |= validate_required_pointer(report_data, "vkCreateImageView", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1364     }
   1365 
   1366     skipCall |= validate_required_pointer(report_data, "vkCreateImageView", "pView", pView);
   1367 
   1368     return skipCall;
   1369 }
   1370 
   1371 static bool parameter_validation_vkDestroyImageView(
   1372     debug_report_data*                          report_data,
   1373     VkImageView                                 imageView,
   1374     const VkAllocationCallbacks*                pAllocator)
   1375 {
   1376     UNUSED_PARAMETER(imageView);
   1377 
   1378     bool skipCall = false;
   1379 
   1380     if (pAllocator != NULL)
   1381     {
   1382         skipCall |= validate_required_pointer(report_data, "vkDestroyImageView", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1383 
   1384         skipCall |= validate_required_pointer(report_data, "vkDestroyImageView", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1385 
   1386         skipCall |= validate_required_pointer(report_data, "vkDestroyImageView", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1387     }
   1388 
   1389     return skipCall;
   1390 }
   1391 
   1392 static bool parameter_validation_vkCreateShaderModule(
   1393     debug_report_data*                          report_data,
   1394     const VkShaderModuleCreateInfo*             pCreateInfo,
   1395     const VkAllocationCallbacks*                pAllocator,
   1396     VkShaderModule*                             pShaderModule)
   1397 {
   1398     bool skipCall = false;
   1399 
   1400     skipCall |= validate_struct_type(report_data, "vkCreateShaderModule", "pCreateInfo", "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, true);
   1401 
   1402     if (pCreateInfo != NULL)
   1403     {
   1404         skipCall |= validate_struct_pnext(report_data, "vkCreateShaderModule", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1405 
   1406         skipCall |= validate_reserved_flags(report_data, "vkCreateShaderModule", "pCreateInfo->flags", pCreateInfo->flags);
   1407 
   1408         skipCall |= validate_array(report_data, "vkCreateShaderModule", "pCreateInfo->codeSize", "pCreateInfo->pCode", pCreateInfo->codeSize, pCreateInfo->pCode, true, true);
   1409     }
   1410 
   1411     if (pAllocator != NULL)
   1412     {
   1413         skipCall |= validate_required_pointer(report_data, "vkCreateShaderModule", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1414 
   1415         skipCall |= validate_required_pointer(report_data, "vkCreateShaderModule", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1416 
   1417         skipCall |= validate_required_pointer(report_data, "vkCreateShaderModule", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1418     }
   1419 
   1420     skipCall |= validate_required_pointer(report_data, "vkCreateShaderModule", "pShaderModule", pShaderModule);
   1421 
   1422     return skipCall;
   1423 }
   1424 
   1425 static bool parameter_validation_vkDestroyShaderModule(
   1426     debug_report_data*                          report_data,
   1427     VkShaderModule                              shaderModule,
   1428     const VkAllocationCallbacks*                pAllocator)
   1429 {
   1430     UNUSED_PARAMETER(shaderModule);
   1431 
   1432     bool skipCall = false;
   1433 
   1434     if (pAllocator != NULL)
   1435     {
   1436         skipCall |= validate_required_pointer(report_data, "vkDestroyShaderModule", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1437 
   1438         skipCall |= validate_required_pointer(report_data, "vkDestroyShaderModule", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1439 
   1440         skipCall |= validate_required_pointer(report_data, "vkDestroyShaderModule", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1441     }
   1442 
   1443     return skipCall;
   1444 }
   1445 
   1446 static bool parameter_validation_vkCreatePipelineCache(
   1447     debug_report_data*                          report_data,
   1448     const VkPipelineCacheCreateInfo*            pCreateInfo,
   1449     const VkAllocationCallbacks*                pAllocator,
   1450     VkPipelineCache*                            pPipelineCache)
   1451 {
   1452     bool skipCall = false;
   1453 
   1454     skipCall |= validate_struct_type(report_data, "vkCreatePipelineCache", "pCreateInfo", "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO, true);
   1455 
   1456     if (pCreateInfo != NULL)
   1457     {
   1458         skipCall |= validate_struct_pnext(report_data, "vkCreatePipelineCache", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1459 
   1460         skipCall |= validate_reserved_flags(report_data, "vkCreatePipelineCache", "pCreateInfo->flags", pCreateInfo->flags);
   1461 
   1462         skipCall |= validate_array(report_data, "vkCreatePipelineCache", "pCreateInfo->initialDataSize", "pCreateInfo->pInitialData", pCreateInfo->initialDataSize, pCreateInfo->pInitialData, false, true);
   1463     }
   1464 
   1465     if (pAllocator != NULL)
   1466     {
   1467         skipCall |= validate_required_pointer(report_data, "vkCreatePipelineCache", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1468 
   1469         skipCall |= validate_required_pointer(report_data, "vkCreatePipelineCache", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1470 
   1471         skipCall |= validate_required_pointer(report_data, "vkCreatePipelineCache", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1472     }
   1473 
   1474     skipCall |= validate_required_pointer(report_data, "vkCreatePipelineCache", "pPipelineCache", pPipelineCache);
   1475 
   1476     return skipCall;
   1477 }
   1478 
   1479 static bool parameter_validation_vkDestroyPipelineCache(
   1480     debug_report_data*                          report_data,
   1481     VkPipelineCache                             pipelineCache,
   1482     const VkAllocationCallbacks*                pAllocator)
   1483 {
   1484     UNUSED_PARAMETER(pipelineCache);
   1485 
   1486     bool skipCall = false;
   1487 
   1488     if (pAllocator != NULL)
   1489     {
   1490         skipCall |= validate_required_pointer(report_data, "vkDestroyPipelineCache", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1491 
   1492         skipCall |= validate_required_pointer(report_data, "vkDestroyPipelineCache", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1493 
   1494         skipCall |= validate_required_pointer(report_data, "vkDestroyPipelineCache", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1495     }
   1496 
   1497     return skipCall;
   1498 }
   1499 
   1500 static bool parameter_validation_vkGetPipelineCacheData(
   1501     debug_report_data*                          report_data,
   1502     VkPipelineCache                             pipelineCache,
   1503     size_t*                                     pDataSize,
   1504     void*                                       pData)
   1505 {
   1506     bool skipCall = false;
   1507 
   1508     skipCall |= validate_required_handle(report_data, "vkGetPipelineCacheData", "pipelineCache", pipelineCache);
   1509 
   1510     skipCall |= validate_array(report_data, "vkGetPipelineCacheData", "pDataSize", "pData", pDataSize, pData, true, false, false);
   1511 
   1512     return skipCall;
   1513 }
   1514 
   1515 static bool parameter_validation_vkMergePipelineCaches(
   1516     debug_report_data*                          report_data,
   1517     VkPipelineCache                             dstCache,
   1518     uint32_t                                    srcCacheCount,
   1519     const VkPipelineCache*                      pSrcCaches)
   1520 {
   1521     bool skipCall = false;
   1522 
   1523     skipCall |= validate_required_handle(report_data, "vkMergePipelineCaches", "dstCache", dstCache);
   1524 
   1525     skipCall |= validate_handle_array(report_data, "vkMergePipelineCaches", "srcCacheCount", "pSrcCaches", srcCacheCount, pSrcCaches, true, true);
   1526 
   1527     return skipCall;
   1528 }
   1529 
   1530 static bool parameter_validation_vkCreateGraphicsPipelines(
   1531     debug_report_data*                          report_data,
   1532     VkPipelineCache                             pipelineCache,
   1533     uint32_t                                    createInfoCount,
   1534     const VkGraphicsPipelineCreateInfo*         pCreateInfos,
   1535     const VkAllocationCallbacks*                pAllocator,
   1536     VkPipeline*                                 pPipelines)
   1537 {
   1538     UNUSED_PARAMETER(pipelineCache);
   1539 
   1540     bool skipCall = false;
   1541 
   1542     skipCall |= validate_struct_type_array(report_data, "vkCreateGraphicsPipelines", "createInfoCount", "pCreateInfos", "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO", createInfoCount, pCreateInfos, VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, true, true);
   1543 
   1544     if (pCreateInfos != NULL)
   1545     {
   1546         for (uint32_t createInfoIndex = 0; createInfoIndex < createInfoCount; ++createInfoIndex)
   1547         {
   1548             skipCall |= validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pNext", ParameterName::IndexVector{ createInfoIndex }), NULL, pCreateInfos[createInfoIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   1549 
   1550             skipCall |= validate_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].flags", ParameterName::IndexVector{ createInfoIndex }), "VkPipelineCreateFlagBits", AllVkPipelineCreateFlagBits, pCreateInfos[createInfoIndex].flags, false);
   1551 
   1552             skipCall |= validate_struct_type_array(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].stageCount", ParameterName::IndexVector{ createInfoIndex }), ParameterName("pCreateInfos[%i].pStages", ParameterName::IndexVector{ createInfoIndex }), "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", pCreateInfos[createInfoIndex].stageCount, pCreateInfos[createInfoIndex].pStages, VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, true, true);
   1553 
   1554             if (pCreateInfos[createInfoIndex].pStages != NULL)
   1555             {
   1556                 for (uint32_t stageIndex = 0; stageIndex < pCreateInfos[createInfoIndex].stageCount; ++stageIndex)
   1557                 {
   1558                     skipCall |= validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pStages[%i].pNext", ParameterName::IndexVector{ createInfoIndex, stageIndex }), NULL, pCreateInfos[createInfoIndex].pStages[stageIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   1559 
   1560                     skipCall |= validate_reserved_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pStages[%i].flags", ParameterName::IndexVector{ createInfoIndex, stageIndex }), pCreateInfos[createInfoIndex].pStages[stageIndex].flags);
   1561 
   1562                     skipCall |= validate_required_handle(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pStages[%i].module", ParameterName::IndexVector{ createInfoIndex, stageIndex }), pCreateInfos[createInfoIndex].pStages[stageIndex].module);
   1563 
   1564                     skipCall |= validate_required_pointer(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pStages[%i].pName", ParameterName::IndexVector{ createInfoIndex, stageIndex }), pCreateInfos[createInfoIndex].pStages[stageIndex].pName);
   1565 
   1566                     if (pCreateInfos[createInfoIndex].pStages[stageIndex].pSpecializationInfo != NULL)
   1567                     {
   1568                         skipCall |= validate_array(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pStages[%i].pSpecializationInfo->mapEntryCount", ParameterName::IndexVector{ createInfoIndex, stageIndex }), ParameterName("pCreateInfos[%i].pStages[%i].pSpecializationInfo->pMapEntries", ParameterName::IndexVector{ createInfoIndex, stageIndex }), pCreateInfos[createInfoIndex].pStages[stageIndex].pSpecializationInfo->mapEntryCount, pCreateInfos[createInfoIndex].pStages[stageIndex].pSpecializationInfo->pMapEntries, false, true);
   1569 
   1570                         skipCall |= validate_array(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pStages[%i].pSpecializationInfo->dataSize", ParameterName::IndexVector{ createInfoIndex, stageIndex }), ParameterName("pCreateInfos[%i].pStages[%i].pSpecializationInfo->pData", ParameterName::IndexVector{ createInfoIndex, stageIndex }), pCreateInfos[createInfoIndex].pStages[stageIndex].pSpecializationInfo->dataSize, pCreateInfos[createInfoIndex].pStages[stageIndex].pSpecializationInfo->pData, false, true);
   1571                     }
   1572                 }
   1573             }
   1574 
   1575             skipCall |= validate_struct_type(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState", ParameterName::IndexVector{ createInfoIndex }), "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", pCreateInfos[createInfoIndex].pVertexInputState, VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, true);
   1576 
   1577             if (pCreateInfos[createInfoIndex].pVertexInputState != NULL)
   1578             {
   1579                 skipCall |= validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState->pNext", ParameterName::IndexVector{ createInfoIndex }), NULL, pCreateInfos[createInfoIndex].pVertexInputState->pNext, 0, NULL, GeneratedHeaderVersion);
   1580 
   1581                 skipCall |= validate_reserved_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState->flags", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pVertexInputState->flags);
   1582 
   1583                 skipCall |= validate_array(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState->vertexBindingDescriptionCount", ParameterName::IndexVector{ createInfoIndex }), ParameterName("pCreateInfos[%i].pVertexInputState->pVertexBindingDescriptions", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pVertexInputState->vertexBindingDescriptionCount, pCreateInfos[createInfoIndex].pVertexInputState->pVertexBindingDescriptions, false, true);
   1584 
   1585                 if (pCreateInfos[createInfoIndex].pVertexInputState->pVertexBindingDescriptions != NULL)
   1586                 {
   1587                     for (uint32_t vertexBindingDescriptionIndex = 0; vertexBindingDescriptionIndex < pCreateInfos[createInfoIndex].pVertexInputState->vertexBindingDescriptionCount; ++vertexBindingDescriptionIndex)
   1588                     {
   1589                         skipCall |= validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState->pVertexBindingDescriptions[%i].inputRate", ParameterName::IndexVector{ createInfoIndex, vertexBindingDescriptionIndex }), "VkVertexInputRate", VK_VERTEX_INPUT_RATE_BEGIN_RANGE, VK_VERTEX_INPUT_RATE_END_RANGE, pCreateInfos[createInfoIndex].pVertexInputState->pVertexBindingDescriptions[vertexBindingDescriptionIndex].inputRate);
   1590                     }
   1591                 }
   1592 
   1593                 skipCall |= validate_array(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState->vertexAttributeDescriptionCount", ParameterName::IndexVector{ createInfoIndex }), ParameterName("pCreateInfos[%i].pVertexInputState->pVertexAttributeDescriptions", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pVertexInputState->vertexAttributeDescriptionCount, pCreateInfos[createInfoIndex].pVertexInputState->pVertexAttributeDescriptions, false, true);
   1594 
   1595                 if (pCreateInfos[createInfoIndex].pVertexInputState->pVertexAttributeDescriptions != NULL)
   1596                 {
   1597                     for (uint32_t vertexAttributeDescriptionIndex = 0; vertexAttributeDescriptionIndex < pCreateInfos[createInfoIndex].pVertexInputState->vertexAttributeDescriptionCount; ++vertexAttributeDescriptionIndex)
   1598                     {
   1599                         skipCall |= validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pVertexInputState->pVertexAttributeDescriptions[%i].format", ParameterName::IndexVector{ createInfoIndex, vertexAttributeDescriptionIndex }), "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, pCreateInfos[createInfoIndex].pVertexInputState->pVertexAttributeDescriptions[vertexAttributeDescriptionIndex].format);
   1600                     }
   1601                 }
   1602             }
   1603 
   1604             skipCall |= validate_struct_type(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pInputAssemblyState", ParameterName::IndexVector{ createInfoIndex }), "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", pCreateInfos[createInfoIndex].pInputAssemblyState, VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, true);
   1605 
   1606             if (pCreateInfos[createInfoIndex].pInputAssemblyState != NULL)
   1607             {
   1608                 skipCall |= validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pInputAssemblyState->pNext", ParameterName::IndexVector{ createInfoIndex }), NULL, pCreateInfos[createInfoIndex].pInputAssemblyState->pNext, 0, NULL, GeneratedHeaderVersion);
   1609 
   1610                 skipCall |= validate_reserved_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pInputAssemblyState->flags", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pInputAssemblyState->flags);
   1611 
   1612                 skipCall |= validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pInputAssemblyState->topology", ParameterName::IndexVector{ createInfoIndex }), "VkPrimitiveTopology", VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE, VK_PRIMITIVE_TOPOLOGY_END_RANGE, pCreateInfos[createInfoIndex].pInputAssemblyState->topology);
   1613 
   1614                 skipCall |= validate_bool32(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pInputAssemblyState->primitiveRestartEnable", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pInputAssemblyState->primitiveRestartEnable);
   1615             }
   1616 
   1617             skipCall |= validate_struct_type(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState", ParameterName::IndexVector{ createInfoIndex }), "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO", pCreateInfos[createInfoIndex].pRasterizationState, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, true);
   1618 
   1619             if (pCreateInfos[createInfoIndex].pRasterizationState != NULL)
   1620             {
   1621                 const VkStructureType allowedStructs[] = {VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD};
   1622 
   1623                 skipCall |= validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->pNext", ParameterName::IndexVector{ createInfoIndex }), "VkPipelineRasterizationStateRasterizationOrderAMD", pCreateInfos[createInfoIndex].pRasterizationState->pNext, ARRAY_SIZE(allowedStructs), allowedStructs, GeneratedHeaderVersion);
   1624 
   1625                 skipCall |= validate_reserved_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->flags", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pRasterizationState->flags);
   1626 
   1627                 skipCall |= validate_bool32(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->depthClampEnable", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pRasterizationState->depthClampEnable);
   1628 
   1629                 skipCall |= validate_bool32(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->rasterizerDiscardEnable", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pRasterizationState->rasterizerDiscardEnable);
   1630 
   1631                 skipCall |= validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->polygonMode", ParameterName::IndexVector{ createInfoIndex }), "VkPolygonMode", VK_POLYGON_MODE_BEGIN_RANGE, VK_POLYGON_MODE_END_RANGE, pCreateInfos[createInfoIndex].pRasterizationState->polygonMode);
   1632 
   1633                 skipCall |= validate_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->cullMode", ParameterName::IndexVector{ createInfoIndex }), "VkCullModeFlagBits", AllVkCullModeFlagBits, pCreateInfos[createInfoIndex].pRasterizationState->cullMode, false);
   1634 
   1635                 skipCall |= validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->frontFace", ParameterName::IndexVector{ createInfoIndex }), "VkFrontFace", VK_FRONT_FACE_BEGIN_RANGE, VK_FRONT_FACE_END_RANGE, pCreateInfos[createInfoIndex].pRasterizationState->frontFace);
   1636 
   1637                 skipCall |= validate_bool32(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pRasterizationState->depthBiasEnable", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pRasterizationState->depthBiasEnable);
   1638             }
   1639 
   1640             skipCall |= validate_struct_type(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pDynamicState", ParameterName::IndexVector{ createInfoIndex }), "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO", pCreateInfos[createInfoIndex].pDynamicState, VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, false);
   1641 
   1642             if (pCreateInfos[createInfoIndex].pDynamicState != NULL)
   1643             {
   1644                 skipCall |= validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pDynamicState->pNext", ParameterName::IndexVector{ createInfoIndex }), NULL, pCreateInfos[createInfoIndex].pDynamicState->pNext, 0, NULL, GeneratedHeaderVersion);
   1645 
   1646                 skipCall |= validate_reserved_flags(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pDynamicState->flags", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].pDynamicState->flags);
   1647 
   1648                 skipCall |= validate_ranged_enum_array(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].pDynamicState->dynamicStateCount", ParameterName::IndexVector{ createInfoIndex }), ParameterName("pCreateInfos[%i].pDynamicState->pDynamicStates", ParameterName::IndexVector{ createInfoIndex }), "VkDynamicState", VK_DYNAMIC_STATE_BEGIN_RANGE, VK_DYNAMIC_STATE_END_RANGE, pCreateInfos[createInfoIndex].pDynamicState->dynamicStateCount, pCreateInfos[createInfoIndex].pDynamicState->pDynamicStates, true, true);
   1649             }
   1650 
   1651             skipCall |= validate_required_handle(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].layout", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].layout);
   1652 
   1653             skipCall |= validate_required_handle(report_data, "vkCreateGraphicsPipelines", ParameterName("pCreateInfos[%i].renderPass", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].renderPass);
   1654         }
   1655     }
   1656 
   1657     if (pAllocator != NULL)
   1658     {
   1659         skipCall |= validate_required_pointer(report_data, "vkCreateGraphicsPipelines", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1660 
   1661         skipCall |= validate_required_pointer(report_data, "vkCreateGraphicsPipelines", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1662 
   1663         skipCall |= validate_required_pointer(report_data, "vkCreateGraphicsPipelines", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1664     }
   1665 
   1666     skipCall |= validate_array(report_data, "vkCreateGraphicsPipelines", "createInfoCount", "pPipelines", createInfoCount, pPipelines, true, true);
   1667 
   1668     return skipCall;
   1669 }
   1670 
   1671 static bool parameter_validation_vkCreateComputePipelines(
   1672     debug_report_data*                          report_data,
   1673     VkPipelineCache                             pipelineCache,
   1674     uint32_t                                    createInfoCount,
   1675     const VkComputePipelineCreateInfo*          pCreateInfos,
   1676     const VkAllocationCallbacks*                pAllocator,
   1677     VkPipeline*                                 pPipelines)
   1678 {
   1679     UNUSED_PARAMETER(pipelineCache);
   1680 
   1681     bool skipCall = false;
   1682 
   1683     skipCall |= validate_struct_type_array(report_data, "vkCreateComputePipelines", "createInfoCount", "pCreateInfos", "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO", createInfoCount, pCreateInfos, VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, true, true);
   1684 
   1685     if (pCreateInfos != NULL)
   1686     {
   1687         for (uint32_t createInfoIndex = 0; createInfoIndex < createInfoCount; ++createInfoIndex)
   1688         {
   1689             skipCall |= validate_struct_pnext(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].pNext", ParameterName::IndexVector{ createInfoIndex }), NULL, pCreateInfos[createInfoIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   1690 
   1691             skipCall |= validate_flags(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].flags", ParameterName::IndexVector{ createInfoIndex }), "VkPipelineCreateFlagBits", AllVkPipelineCreateFlagBits, pCreateInfos[createInfoIndex].flags, false);
   1692 
   1693             skipCall |= validate_struct_type(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage", ParameterName::IndexVector{ createInfoIndex }), "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", &(pCreateInfos[createInfoIndex].stage), VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, false);
   1694 
   1695             skipCall |= validate_struct_pnext(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage.pNext", ParameterName::IndexVector{ createInfoIndex }), NULL, pCreateInfos[createInfoIndex].stage.pNext, 0, NULL, GeneratedHeaderVersion);
   1696 
   1697             skipCall |= validate_reserved_flags(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage.flags", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].stage.flags);
   1698 
   1699             skipCall |= validate_required_handle(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage.module", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].stage.module);
   1700 
   1701             skipCall |= validate_required_pointer(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage.pName", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].stage.pName);
   1702 
   1703             if (pCreateInfos[createInfoIndex].stage.pSpecializationInfo != NULL)
   1704             {
   1705                 skipCall |= validate_array(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage.pSpecializationInfo->mapEntryCount", ParameterName::IndexVector{ createInfoIndex }), ParameterName("pCreateInfos[%i].stage.pSpecializationInfo->pMapEntries", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].stage.pSpecializationInfo->mapEntryCount, pCreateInfos[createInfoIndex].stage.pSpecializationInfo->pMapEntries, false, true);
   1706 
   1707                 skipCall |= validate_array(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].stage.pSpecializationInfo->dataSize", ParameterName::IndexVector{ createInfoIndex }), ParameterName("pCreateInfos[%i].stage.pSpecializationInfo->pData", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].stage.pSpecializationInfo->dataSize, pCreateInfos[createInfoIndex].stage.pSpecializationInfo->pData, false, true);
   1708             }
   1709 
   1710             skipCall |= validate_required_handle(report_data, "vkCreateComputePipelines", ParameterName("pCreateInfos[%i].layout", ParameterName::IndexVector{ createInfoIndex }), pCreateInfos[createInfoIndex].layout);
   1711         }
   1712     }
   1713 
   1714     if (pAllocator != NULL)
   1715     {
   1716         skipCall |= validate_required_pointer(report_data, "vkCreateComputePipelines", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1717 
   1718         skipCall |= validate_required_pointer(report_data, "vkCreateComputePipelines", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1719 
   1720         skipCall |= validate_required_pointer(report_data, "vkCreateComputePipelines", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1721     }
   1722 
   1723     skipCall |= validate_array(report_data, "vkCreateComputePipelines", "createInfoCount", "pPipelines", createInfoCount, pPipelines, true, true);
   1724 
   1725     return skipCall;
   1726 }
   1727 
   1728 static bool parameter_validation_vkDestroyPipeline(
   1729     debug_report_data*                          report_data,
   1730     VkPipeline                                  pipeline,
   1731     const VkAllocationCallbacks*                pAllocator)
   1732 {
   1733     UNUSED_PARAMETER(pipeline);
   1734 
   1735     bool skipCall = false;
   1736 
   1737     if (pAllocator != NULL)
   1738     {
   1739         skipCall |= validate_required_pointer(report_data, "vkDestroyPipeline", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1740 
   1741         skipCall |= validate_required_pointer(report_data, "vkDestroyPipeline", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1742 
   1743         skipCall |= validate_required_pointer(report_data, "vkDestroyPipeline", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1744     }
   1745 
   1746     return skipCall;
   1747 }
   1748 
   1749 static bool parameter_validation_vkCreatePipelineLayout(
   1750     debug_report_data*                          report_data,
   1751     const VkPipelineLayoutCreateInfo*           pCreateInfo,
   1752     const VkAllocationCallbacks*                pAllocator,
   1753     VkPipelineLayout*                           pPipelineLayout)
   1754 {
   1755     bool skipCall = false;
   1756 
   1757     skipCall |= validate_struct_type(report_data, "vkCreatePipelineLayout", "pCreateInfo", "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, true);
   1758 
   1759     if (pCreateInfo != NULL)
   1760     {
   1761         skipCall |= validate_struct_pnext(report_data, "vkCreatePipelineLayout", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1762 
   1763         skipCall |= validate_reserved_flags(report_data, "vkCreatePipelineLayout", "pCreateInfo->flags", pCreateInfo->flags);
   1764 
   1765         skipCall |= validate_array(report_data, "vkCreatePipelineLayout", "pCreateInfo->setLayoutCount", "pCreateInfo->pSetLayouts", pCreateInfo->setLayoutCount, pCreateInfo->pSetLayouts, false, true);
   1766 
   1767         skipCall |= validate_array(report_data, "vkCreatePipelineLayout", "pCreateInfo->pushConstantRangeCount", "pCreateInfo->pPushConstantRanges", pCreateInfo->pushConstantRangeCount, pCreateInfo->pPushConstantRanges, false, true);
   1768 
   1769         if (pCreateInfo->pPushConstantRanges != NULL)
   1770         {
   1771             for (uint32_t pushConstantRangeIndex = 0; pushConstantRangeIndex < pCreateInfo->pushConstantRangeCount; ++pushConstantRangeIndex)
   1772             {
   1773                 skipCall |= validate_flags(report_data, "vkCreatePipelineLayout", ParameterName("pCreateInfo->pPushConstantRanges[%i].stageFlags", ParameterName::IndexVector{ pushConstantRangeIndex }), "VkShaderStageFlagBits", AllVkShaderStageFlagBits, pCreateInfo->pPushConstantRanges[pushConstantRangeIndex].stageFlags, true);
   1774             }
   1775         }
   1776     }
   1777 
   1778     if (pAllocator != NULL)
   1779     {
   1780         skipCall |= validate_required_pointer(report_data, "vkCreatePipelineLayout", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1781 
   1782         skipCall |= validate_required_pointer(report_data, "vkCreatePipelineLayout", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1783 
   1784         skipCall |= validate_required_pointer(report_data, "vkCreatePipelineLayout", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1785     }
   1786 
   1787     skipCall |= validate_required_pointer(report_data, "vkCreatePipelineLayout", "pPipelineLayout", pPipelineLayout);
   1788 
   1789     return skipCall;
   1790 }
   1791 
   1792 static bool parameter_validation_vkDestroyPipelineLayout(
   1793     debug_report_data*                          report_data,
   1794     VkPipelineLayout                            pipelineLayout,
   1795     const VkAllocationCallbacks*                pAllocator)
   1796 {
   1797     UNUSED_PARAMETER(pipelineLayout);
   1798 
   1799     bool skipCall = false;
   1800 
   1801     if (pAllocator != NULL)
   1802     {
   1803         skipCall |= validate_required_pointer(report_data, "vkDestroyPipelineLayout", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1804 
   1805         skipCall |= validate_required_pointer(report_data, "vkDestroyPipelineLayout", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1806 
   1807         skipCall |= validate_required_pointer(report_data, "vkDestroyPipelineLayout", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1808     }
   1809 
   1810     return skipCall;
   1811 }
   1812 
   1813 static bool parameter_validation_vkCreateSampler(
   1814     debug_report_data*                          report_data,
   1815     const VkSamplerCreateInfo*                  pCreateInfo,
   1816     const VkAllocationCallbacks*                pAllocator,
   1817     VkSampler*                                  pSampler)
   1818 {
   1819     bool skipCall = false;
   1820 
   1821     skipCall |= validate_struct_type(report_data, "vkCreateSampler", "pCreateInfo", "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, true);
   1822 
   1823     if (pCreateInfo != NULL)
   1824     {
   1825         skipCall |= validate_struct_pnext(report_data, "vkCreateSampler", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1826 
   1827         skipCall |= validate_reserved_flags(report_data, "vkCreateSampler", "pCreateInfo->flags", pCreateInfo->flags);
   1828 
   1829         skipCall |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->magFilter", "VkFilter", VK_FILTER_BEGIN_RANGE, VK_FILTER_END_RANGE, pCreateInfo->magFilter);
   1830 
   1831         skipCall |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->minFilter", "VkFilter", VK_FILTER_BEGIN_RANGE, VK_FILTER_END_RANGE, pCreateInfo->minFilter);
   1832 
   1833         skipCall |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->mipmapMode", "VkSamplerMipmapMode", VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE, VK_SAMPLER_MIPMAP_MODE_END_RANGE, pCreateInfo->mipmapMode);
   1834 
   1835         skipCall |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->addressModeU", "VkSamplerAddressMode", VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE, VK_SAMPLER_ADDRESS_MODE_END_RANGE, pCreateInfo->addressModeU);
   1836 
   1837         skipCall |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->addressModeV", "VkSamplerAddressMode", VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE, VK_SAMPLER_ADDRESS_MODE_END_RANGE, pCreateInfo->addressModeV);
   1838 
   1839         skipCall |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->addressModeW", "VkSamplerAddressMode", VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE, VK_SAMPLER_ADDRESS_MODE_END_RANGE, pCreateInfo->addressModeW);
   1840 
   1841         skipCall |= validate_bool32(report_data, "vkCreateSampler", "pCreateInfo->anisotropyEnable", pCreateInfo->anisotropyEnable);
   1842 
   1843         skipCall |= validate_bool32(report_data, "vkCreateSampler", "pCreateInfo->compareEnable", pCreateInfo->compareEnable);
   1844 
   1845         skipCall |= validate_bool32(report_data, "vkCreateSampler", "pCreateInfo->unnormalizedCoordinates", pCreateInfo->unnormalizedCoordinates);
   1846     }
   1847 
   1848     if (pAllocator != NULL)
   1849     {
   1850         skipCall |= validate_required_pointer(report_data, "vkCreateSampler", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1851 
   1852         skipCall |= validate_required_pointer(report_data, "vkCreateSampler", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1853 
   1854         skipCall |= validate_required_pointer(report_data, "vkCreateSampler", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1855     }
   1856 
   1857     skipCall |= validate_required_pointer(report_data, "vkCreateSampler", "pSampler", pSampler);
   1858 
   1859     return skipCall;
   1860 }
   1861 
   1862 static bool parameter_validation_vkDestroySampler(
   1863     debug_report_data*                          report_data,
   1864     VkSampler                                   sampler,
   1865     const VkAllocationCallbacks*                pAllocator)
   1866 {
   1867     UNUSED_PARAMETER(sampler);
   1868 
   1869     bool skipCall = false;
   1870 
   1871     if (pAllocator != NULL)
   1872     {
   1873         skipCall |= validate_required_pointer(report_data, "vkDestroySampler", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1874 
   1875         skipCall |= validate_required_pointer(report_data, "vkDestroySampler", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1876 
   1877         skipCall |= validate_required_pointer(report_data, "vkDestroySampler", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1878     }
   1879 
   1880     return skipCall;
   1881 }
   1882 
   1883 static bool parameter_validation_vkCreateDescriptorSetLayout(
   1884     debug_report_data*                          report_data,
   1885     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
   1886     const VkAllocationCallbacks*                pAllocator,
   1887     VkDescriptorSetLayout*                      pSetLayout)
   1888 {
   1889     bool skipCall = false;
   1890 
   1891     skipCall |= validate_struct_type(report_data, "vkCreateDescriptorSetLayout", "pCreateInfo", "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, true);
   1892 
   1893     if (pCreateInfo != NULL)
   1894     {
   1895         skipCall |= validate_struct_pnext(report_data, "vkCreateDescriptorSetLayout", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1896 
   1897         skipCall |= validate_reserved_flags(report_data, "vkCreateDescriptorSetLayout", "pCreateInfo->flags", pCreateInfo->flags);
   1898 
   1899         skipCall |= validate_array(report_data, "vkCreateDescriptorSetLayout", "pCreateInfo->bindingCount", "pCreateInfo->pBindings", pCreateInfo->bindingCount, pCreateInfo->pBindings, false, true);
   1900 
   1901         if (pCreateInfo->pBindings != NULL)
   1902         {
   1903             for (uint32_t bindingIndex = 0; bindingIndex < pCreateInfo->bindingCount; ++bindingIndex)
   1904             {
   1905                 skipCall |= validate_ranged_enum(report_data, "vkCreateDescriptorSetLayout", ParameterName("pCreateInfo->pBindings[%i].descriptorType", ParameterName::IndexVector{ bindingIndex }), "VkDescriptorType", VK_DESCRIPTOR_TYPE_BEGIN_RANGE, VK_DESCRIPTOR_TYPE_END_RANGE, pCreateInfo->pBindings[bindingIndex].descriptorType);
   1906             }
   1907         }
   1908     }
   1909 
   1910     if (pAllocator != NULL)
   1911     {
   1912         skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorSetLayout", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1913 
   1914         skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorSetLayout", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1915 
   1916         skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorSetLayout", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1917     }
   1918 
   1919     skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorSetLayout", "pSetLayout", pSetLayout);
   1920 
   1921     return skipCall;
   1922 }
   1923 
   1924 static bool parameter_validation_vkDestroyDescriptorSetLayout(
   1925     debug_report_data*                          report_data,
   1926     VkDescriptorSetLayout                       descriptorSetLayout,
   1927     const VkAllocationCallbacks*                pAllocator)
   1928 {
   1929     UNUSED_PARAMETER(descriptorSetLayout);
   1930 
   1931     bool skipCall = false;
   1932 
   1933     if (pAllocator != NULL)
   1934     {
   1935         skipCall |= validate_required_pointer(report_data, "vkDestroyDescriptorSetLayout", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1936 
   1937         skipCall |= validate_required_pointer(report_data, "vkDestroyDescriptorSetLayout", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1938 
   1939         skipCall |= validate_required_pointer(report_data, "vkDestroyDescriptorSetLayout", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1940     }
   1941 
   1942     return skipCall;
   1943 }
   1944 
   1945 static bool parameter_validation_vkCreateDescriptorPool(
   1946     debug_report_data*                          report_data,
   1947     const VkDescriptorPoolCreateInfo*           pCreateInfo,
   1948     const VkAllocationCallbacks*                pAllocator,
   1949     VkDescriptorPool*                           pDescriptorPool)
   1950 {
   1951     bool skipCall = false;
   1952 
   1953     skipCall |= validate_struct_type(report_data, "vkCreateDescriptorPool", "pCreateInfo", "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, true);
   1954 
   1955     if (pCreateInfo != NULL)
   1956     {
   1957         skipCall |= validate_struct_pnext(report_data, "vkCreateDescriptorPool", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   1958 
   1959         skipCall |= validate_flags(report_data, "vkCreateDescriptorPool", "pCreateInfo->flags", "VkDescriptorPoolCreateFlagBits", AllVkDescriptorPoolCreateFlagBits, pCreateInfo->flags, false);
   1960 
   1961         skipCall |= validate_array(report_data, "vkCreateDescriptorPool", "pCreateInfo->poolSizeCount", "pCreateInfo->pPoolSizes", pCreateInfo->poolSizeCount, pCreateInfo->pPoolSizes, true, true);
   1962 
   1963         if (pCreateInfo->pPoolSizes != NULL)
   1964         {
   1965             for (uint32_t poolSizeIndex = 0; poolSizeIndex < pCreateInfo->poolSizeCount; ++poolSizeIndex)
   1966             {
   1967                 skipCall |= validate_ranged_enum(report_data, "vkCreateDescriptorPool", ParameterName("pCreateInfo->pPoolSizes[%i].type", ParameterName::IndexVector{ poolSizeIndex }), "VkDescriptorType", VK_DESCRIPTOR_TYPE_BEGIN_RANGE, VK_DESCRIPTOR_TYPE_END_RANGE, pCreateInfo->pPoolSizes[poolSizeIndex].type);
   1968             }
   1969         }
   1970     }
   1971 
   1972     if (pAllocator != NULL)
   1973     {
   1974         skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorPool", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1975 
   1976         skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorPool", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   1977 
   1978         skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorPool", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   1979     }
   1980 
   1981     skipCall |= validate_required_pointer(report_data, "vkCreateDescriptorPool", "pDescriptorPool", pDescriptorPool);
   1982 
   1983     return skipCall;
   1984 }
   1985 
   1986 static bool parameter_validation_vkDestroyDescriptorPool(
   1987     debug_report_data*                          report_data,
   1988     VkDescriptorPool                            descriptorPool,
   1989     const VkAllocationCallbacks*                pAllocator)
   1990 {
   1991     UNUSED_PARAMETER(descriptorPool);
   1992 
   1993     bool skipCall = false;
   1994 
   1995     if (pAllocator != NULL)
   1996     {
   1997         skipCall |= validate_required_pointer(report_data, "vkDestroyDescriptorPool", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   1998 
   1999         skipCall |= validate_required_pointer(report_data, "vkDestroyDescriptorPool", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2000 
   2001         skipCall |= validate_required_pointer(report_data, "vkDestroyDescriptorPool", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2002     }
   2003 
   2004     return skipCall;
   2005 }
   2006 
   2007 static bool parameter_validation_vkResetDescriptorPool(
   2008     debug_report_data*                          report_data,
   2009     VkDescriptorPool                            descriptorPool,
   2010     VkDescriptorPoolResetFlags                  flags)
   2011 {
   2012     bool skipCall = false;
   2013 
   2014     skipCall |= validate_required_handle(report_data, "vkResetDescriptorPool", "descriptorPool", descriptorPool);
   2015 
   2016     skipCall |= validate_reserved_flags(report_data, "vkResetDescriptorPool", "flags", flags);
   2017 
   2018     return skipCall;
   2019 }
   2020 
   2021 static bool parameter_validation_vkAllocateDescriptorSets(
   2022     debug_report_data*                          report_data,
   2023     const VkDescriptorSetAllocateInfo*          pAllocateInfo,
   2024     VkDescriptorSet*                            pDescriptorSets)
   2025 {
   2026     bool skipCall = false;
   2027 
   2028     skipCall |= validate_struct_type(report_data, "vkAllocateDescriptorSets", "pAllocateInfo", "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO", pAllocateInfo, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, true);
   2029 
   2030     if (pAllocateInfo != NULL)
   2031     {
   2032         skipCall |= validate_struct_pnext(report_data, "vkAllocateDescriptorSets", "pAllocateInfo->pNext", NULL, pAllocateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   2033 
   2034         skipCall |= validate_required_handle(report_data, "vkAllocateDescriptorSets", "pAllocateInfo->descriptorPool", pAllocateInfo->descriptorPool);
   2035 
   2036         skipCall |= validate_handle_array(report_data, "vkAllocateDescriptorSets", "pAllocateInfo->descriptorSetCount", "pAllocateInfo->pSetLayouts", pAllocateInfo->descriptorSetCount, pAllocateInfo->pSetLayouts, true, true);
   2037     }
   2038 
   2039     if (pAllocateInfo != NULL) {
   2040         skipCall |= validate_array(report_data, "vkAllocateDescriptorSets", "pAllocateInfo->descriptorSetCount", "pDescriptorSets", pAllocateInfo->descriptorSetCount, pDescriptorSets, true, true);
   2041     }
   2042 
   2043     return skipCall;
   2044 }
   2045 
   2046 static bool parameter_validation_vkFreeDescriptorSets(
   2047     debug_report_data*                          report_data,
   2048     VkDescriptorPool                            descriptorPool,
   2049     uint32_t                                    descriptorSetCount,
   2050     const VkDescriptorSet*                      pDescriptorSets)
   2051 {
   2052     UNUSED_PARAMETER(pDescriptorSets);
   2053 
   2054     bool skipCall = false;
   2055 
   2056     skipCall |= validate_required_handle(report_data, "vkFreeDescriptorSets", "descriptorPool", descriptorPool);
   2057 
   2058     return skipCall;
   2059 }
   2060 
   2061 static bool parameter_validation_vkUpdateDescriptorSets(
   2062     debug_report_data*                          report_data,
   2063     uint32_t                                    descriptorWriteCount,
   2064     const VkWriteDescriptorSet*                 pDescriptorWrites,
   2065     uint32_t                                    descriptorCopyCount,
   2066     const VkCopyDescriptorSet*                  pDescriptorCopies)
   2067 {
   2068     bool skipCall = false;
   2069 
   2070     skipCall |= validate_struct_type_array(report_data, "vkUpdateDescriptorSets", "descriptorWriteCount", "pDescriptorWrites", "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET", descriptorWriteCount, pDescriptorWrites, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, false, true);
   2071 
   2072     if (pDescriptorWrites != NULL)
   2073     {
   2074         for (uint32_t descriptorWriteIndex = 0; descriptorWriteIndex < descriptorWriteCount; ++descriptorWriteIndex)
   2075         {
   2076             skipCall |= validate_struct_pnext(report_data, "vkUpdateDescriptorSets", ParameterName("pDescriptorWrites[%i].pNext", ParameterName::IndexVector{ descriptorWriteIndex }), NULL, pDescriptorWrites[descriptorWriteIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   2077 
   2078             skipCall |= validate_required_handle(report_data, "vkUpdateDescriptorSets", ParameterName("pDescriptorWrites[%i].dstSet", ParameterName::IndexVector{ descriptorWriteIndex }), pDescriptorWrites[descriptorWriteIndex].dstSet);
   2079 
   2080             skipCall |= validate_ranged_enum(report_data, "vkUpdateDescriptorSets", ParameterName("pDescriptorWrites[%i].descriptorType", ParameterName::IndexVector{ descriptorWriteIndex }), "VkDescriptorType", VK_DESCRIPTOR_TYPE_BEGIN_RANGE, VK_DESCRIPTOR_TYPE_END_RANGE, pDescriptorWrites[descriptorWriteIndex].descriptorType);
   2081         }
   2082     }
   2083 
   2084     skipCall |= validate_struct_type_array(report_data, "vkUpdateDescriptorSets", "descriptorCopyCount", "pDescriptorCopies", "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET", descriptorCopyCount, pDescriptorCopies, VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET, false, true);
   2085 
   2086     if (pDescriptorCopies != NULL)
   2087     {
   2088         for (uint32_t descriptorCopyIndex = 0; descriptorCopyIndex < descriptorCopyCount; ++descriptorCopyIndex)
   2089         {
   2090             skipCall |= validate_struct_pnext(report_data, "vkUpdateDescriptorSets", ParameterName("pDescriptorCopies[%i].pNext", ParameterName::IndexVector{ descriptorCopyIndex }), NULL, pDescriptorCopies[descriptorCopyIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   2091 
   2092             skipCall |= validate_required_handle(report_data, "vkUpdateDescriptorSets", ParameterName("pDescriptorCopies[%i].srcSet", ParameterName::IndexVector{ descriptorCopyIndex }), pDescriptorCopies[descriptorCopyIndex].srcSet);
   2093 
   2094             skipCall |= validate_required_handle(report_data, "vkUpdateDescriptorSets", ParameterName("pDescriptorCopies[%i].dstSet", ParameterName::IndexVector{ descriptorCopyIndex }), pDescriptorCopies[descriptorCopyIndex].dstSet);
   2095         }
   2096     }
   2097 
   2098     return skipCall;
   2099 }
   2100 
   2101 static bool parameter_validation_vkCreateFramebuffer(
   2102     debug_report_data*                          report_data,
   2103     const VkFramebufferCreateInfo*              pCreateInfo,
   2104     const VkAllocationCallbacks*                pAllocator,
   2105     VkFramebuffer*                              pFramebuffer)
   2106 {
   2107     bool skipCall = false;
   2108 
   2109     skipCall |= validate_struct_type(report_data, "vkCreateFramebuffer", "pCreateInfo", "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, true);
   2110 
   2111     if (pCreateInfo != NULL)
   2112     {
   2113         skipCall |= validate_struct_pnext(report_data, "vkCreateFramebuffer", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   2114 
   2115         skipCall |= validate_reserved_flags(report_data, "vkCreateFramebuffer", "pCreateInfo->flags", pCreateInfo->flags);
   2116 
   2117         skipCall |= validate_required_handle(report_data, "vkCreateFramebuffer", "pCreateInfo->renderPass", pCreateInfo->renderPass);
   2118 
   2119         skipCall |= validate_array(report_data, "vkCreateFramebuffer", "pCreateInfo->attachmentCount", "pCreateInfo->pAttachments", pCreateInfo->attachmentCount, pCreateInfo->pAttachments, false, true);
   2120     }
   2121 
   2122     if (pAllocator != NULL)
   2123     {
   2124         skipCall |= validate_required_pointer(report_data, "vkCreateFramebuffer", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   2125 
   2126         skipCall |= validate_required_pointer(report_data, "vkCreateFramebuffer", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2127 
   2128         skipCall |= validate_required_pointer(report_data, "vkCreateFramebuffer", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2129     }
   2130 
   2131     skipCall |= validate_required_pointer(report_data, "vkCreateFramebuffer", "pFramebuffer", pFramebuffer);
   2132 
   2133     return skipCall;
   2134 }
   2135 
   2136 static bool parameter_validation_vkDestroyFramebuffer(
   2137     debug_report_data*                          report_data,
   2138     VkFramebuffer                               framebuffer,
   2139     const VkAllocationCallbacks*                pAllocator)
   2140 {
   2141     UNUSED_PARAMETER(framebuffer);
   2142 
   2143     bool skipCall = false;
   2144 
   2145     if (pAllocator != NULL)
   2146     {
   2147         skipCall |= validate_required_pointer(report_data, "vkDestroyFramebuffer", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   2148 
   2149         skipCall |= validate_required_pointer(report_data, "vkDestroyFramebuffer", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2150 
   2151         skipCall |= validate_required_pointer(report_data, "vkDestroyFramebuffer", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2152     }
   2153 
   2154     return skipCall;
   2155 }
   2156 
   2157 static bool parameter_validation_vkCreateRenderPass(
   2158     debug_report_data*                          report_data,
   2159     const VkRenderPassCreateInfo*               pCreateInfo,
   2160     const VkAllocationCallbacks*                pAllocator,
   2161     VkRenderPass*                               pRenderPass)
   2162 {
   2163     bool skipCall = false;
   2164 
   2165     skipCall |= validate_struct_type(report_data, "vkCreateRenderPass", "pCreateInfo", "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, true);
   2166 
   2167     if (pCreateInfo != NULL)
   2168     {
   2169         skipCall |= validate_struct_pnext(report_data, "vkCreateRenderPass", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   2170 
   2171         skipCall |= validate_reserved_flags(report_data, "vkCreateRenderPass", "pCreateInfo->flags", pCreateInfo->flags);
   2172 
   2173         skipCall |= validate_array(report_data, "vkCreateRenderPass", "pCreateInfo->attachmentCount", "pCreateInfo->pAttachments", pCreateInfo->attachmentCount, pCreateInfo->pAttachments, false, true);
   2174 
   2175         if (pCreateInfo->pAttachments != NULL)
   2176         {
   2177             for (uint32_t attachmentIndex = 0; attachmentIndex < pCreateInfo->attachmentCount; ++attachmentIndex)
   2178             {
   2179                 skipCall |= validate_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].flags", ParameterName::IndexVector{ attachmentIndex }), "VkAttachmentDescriptionFlagBits", AllVkAttachmentDescriptionFlagBits, pCreateInfo->pAttachments[attachmentIndex].flags, false);
   2180 
   2181                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].format", ParameterName::IndexVector{ attachmentIndex }), "VkFormat", VK_FORMAT_BEGIN_RANGE, VK_FORMAT_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].format);
   2182 
   2183                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].loadOp", ParameterName::IndexVector{ attachmentIndex }), "VkAttachmentLoadOp", VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE, VK_ATTACHMENT_LOAD_OP_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].loadOp);
   2184 
   2185                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].storeOp", ParameterName::IndexVector{ attachmentIndex }), "VkAttachmentStoreOp", VK_ATTACHMENT_STORE_OP_BEGIN_RANGE, VK_ATTACHMENT_STORE_OP_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].storeOp);
   2186 
   2187                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].stencilLoadOp", ParameterName::IndexVector{ attachmentIndex }), "VkAttachmentLoadOp", VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE, VK_ATTACHMENT_LOAD_OP_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].stencilLoadOp);
   2188 
   2189                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].stencilStoreOp", ParameterName::IndexVector{ attachmentIndex }), "VkAttachmentStoreOp", VK_ATTACHMENT_STORE_OP_BEGIN_RANGE, VK_ATTACHMENT_STORE_OP_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].stencilStoreOp);
   2190 
   2191                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].initialLayout", ParameterName::IndexVector{ attachmentIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].initialLayout);
   2192 
   2193                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pAttachments[%i].finalLayout", ParameterName::IndexVector{ attachmentIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->pAttachments[attachmentIndex].finalLayout);
   2194             }
   2195         }
   2196 
   2197         skipCall |= validate_array(report_data, "vkCreateRenderPass", "pCreateInfo->subpassCount", "pCreateInfo->pSubpasses", pCreateInfo->subpassCount, pCreateInfo->pSubpasses, true, true);
   2198 
   2199         if (pCreateInfo->pSubpasses != NULL)
   2200         {
   2201             for (uint32_t subpassIndex = 0; subpassIndex < pCreateInfo->subpassCount; ++subpassIndex)
   2202             {
   2203                 skipCall |= validate_reserved_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].flags", ParameterName::IndexVector{ subpassIndex }), pCreateInfo->pSubpasses[subpassIndex].flags);
   2204 
   2205                 skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].pipelineBindPoint", ParameterName::IndexVector{ subpassIndex }), "VkPipelineBindPoint", VK_PIPELINE_BIND_POINT_BEGIN_RANGE, VK_PIPELINE_BIND_POINT_END_RANGE, pCreateInfo->pSubpasses[subpassIndex].pipelineBindPoint);
   2206 
   2207                 skipCall |= validate_array(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].inputAttachmentCount", ParameterName::IndexVector{ subpassIndex }), ParameterName("pCreateInfo->pSubpasses[%i].pInputAttachments", ParameterName::IndexVector{ subpassIndex }), pCreateInfo->pSubpasses[subpassIndex].inputAttachmentCount, pCreateInfo->pSubpasses[subpassIndex].pInputAttachments, false, true);
   2208 
   2209                 if (pCreateInfo->pSubpasses[subpassIndex].pInputAttachments != NULL)
   2210                 {
   2211                     for (uint32_t inputAttachmentIndex = 0; inputAttachmentIndex < pCreateInfo->pSubpasses[subpassIndex].inputAttachmentCount; ++inputAttachmentIndex)
   2212                     {
   2213                         skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].pInputAttachments[%i].layout", ParameterName::IndexVector{ subpassIndex, inputAttachmentIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->pSubpasses[subpassIndex].pInputAttachments[inputAttachmentIndex].layout);
   2214                     }
   2215                 }
   2216 
   2217                 skipCall |= validate_array(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].colorAttachmentCount", ParameterName::IndexVector{ subpassIndex }), ParameterName("pCreateInfo->pSubpasses[%i].pColorAttachments", ParameterName::IndexVector{ subpassIndex }), pCreateInfo->pSubpasses[subpassIndex].colorAttachmentCount, pCreateInfo->pSubpasses[subpassIndex].pColorAttachments, false, true);
   2218 
   2219                 if (pCreateInfo->pSubpasses[subpassIndex].pColorAttachments != NULL)
   2220                 {
   2221                     for (uint32_t colorAttachmentIndex = 0; colorAttachmentIndex < pCreateInfo->pSubpasses[subpassIndex].colorAttachmentCount; ++colorAttachmentIndex)
   2222                     {
   2223                         skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].pColorAttachments[%i].layout", ParameterName::IndexVector{ subpassIndex, colorAttachmentIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->pSubpasses[subpassIndex].pColorAttachments[colorAttachmentIndex].layout);
   2224                     }
   2225                 }
   2226 
   2227                 if (pCreateInfo->pSubpasses[subpassIndex].pResolveAttachments != NULL)
   2228                 {
   2229                     for (uint32_t colorAttachmentIndex = 0; colorAttachmentIndex < pCreateInfo->pSubpasses[subpassIndex].colorAttachmentCount; ++colorAttachmentIndex)
   2230                     {
   2231                         skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].pResolveAttachments[%i].layout", ParameterName::IndexVector{ subpassIndex, colorAttachmentIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->pSubpasses[subpassIndex].pResolveAttachments[colorAttachmentIndex].layout);
   2232                     }
   2233                 }
   2234 
   2235                 if (pCreateInfo->pSubpasses[subpassIndex].pDepthStencilAttachment != NULL)
   2236                 {
   2237                     skipCall |= validate_ranged_enum(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].pDepthStencilAttachment->layout", ParameterName::IndexVector{ subpassIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pCreateInfo->pSubpasses[subpassIndex].pDepthStencilAttachment->layout);
   2238                 }
   2239 
   2240                 skipCall |= validate_array(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pSubpasses[%i].preserveAttachmentCount", ParameterName::IndexVector{ subpassIndex }), ParameterName("pCreateInfo->pSubpasses[%i].pPreserveAttachments", ParameterName::IndexVector{ subpassIndex }), pCreateInfo->pSubpasses[subpassIndex].preserveAttachmentCount, pCreateInfo->pSubpasses[subpassIndex].pPreserveAttachments, false, true);
   2241             }
   2242         }
   2243 
   2244         skipCall |= validate_array(report_data, "vkCreateRenderPass", "pCreateInfo->dependencyCount", "pCreateInfo->pDependencies", pCreateInfo->dependencyCount, pCreateInfo->pDependencies, false, true);
   2245 
   2246         if (pCreateInfo->pDependencies != NULL)
   2247         {
   2248             for (uint32_t dependencyIndex = 0; dependencyIndex < pCreateInfo->dependencyCount; ++dependencyIndex)
   2249             {
   2250                 skipCall |= validate_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pDependencies[%i].srcStageMask", ParameterName::IndexVector{ dependencyIndex }), "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, pCreateInfo->pDependencies[dependencyIndex].srcStageMask, true);
   2251 
   2252                 skipCall |= validate_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pDependencies[%i].dstStageMask", ParameterName::IndexVector{ dependencyIndex }), "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, pCreateInfo->pDependencies[dependencyIndex].dstStageMask, true);
   2253 
   2254                 skipCall |= validate_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pDependencies[%i].srcAccessMask", ParameterName::IndexVector{ dependencyIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pCreateInfo->pDependencies[dependencyIndex].srcAccessMask, false);
   2255 
   2256                 skipCall |= validate_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pDependencies[%i].dstAccessMask", ParameterName::IndexVector{ dependencyIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pCreateInfo->pDependencies[dependencyIndex].dstAccessMask, false);
   2257 
   2258                 skipCall |= validate_flags(report_data, "vkCreateRenderPass", ParameterName("pCreateInfo->pDependencies[%i].dependencyFlags", ParameterName::IndexVector{ dependencyIndex }), "VkDependencyFlagBits", AllVkDependencyFlagBits, pCreateInfo->pDependencies[dependencyIndex].dependencyFlags, false);
   2259             }
   2260         }
   2261     }
   2262 
   2263     if (pAllocator != NULL)
   2264     {
   2265         skipCall |= validate_required_pointer(report_data, "vkCreateRenderPass", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   2266 
   2267         skipCall |= validate_required_pointer(report_data, "vkCreateRenderPass", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2268 
   2269         skipCall |= validate_required_pointer(report_data, "vkCreateRenderPass", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2270     }
   2271 
   2272     skipCall |= validate_required_pointer(report_data, "vkCreateRenderPass", "pRenderPass", pRenderPass);
   2273 
   2274     return skipCall;
   2275 }
   2276 
   2277 static bool parameter_validation_vkDestroyRenderPass(
   2278     debug_report_data*                          report_data,
   2279     VkRenderPass                                renderPass,
   2280     const VkAllocationCallbacks*                pAllocator)
   2281 {
   2282     UNUSED_PARAMETER(renderPass);
   2283 
   2284     bool skipCall = false;
   2285 
   2286     if (pAllocator != NULL)
   2287     {
   2288         skipCall |= validate_required_pointer(report_data, "vkDestroyRenderPass", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   2289 
   2290         skipCall |= validate_required_pointer(report_data, "vkDestroyRenderPass", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2291 
   2292         skipCall |= validate_required_pointer(report_data, "vkDestroyRenderPass", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2293     }
   2294 
   2295     return skipCall;
   2296 }
   2297 
   2298 static bool parameter_validation_vkGetRenderAreaGranularity(
   2299     debug_report_data*                          report_data,
   2300     VkRenderPass                                renderPass,
   2301     VkExtent2D*                                 pGranularity)
   2302 {
   2303     bool skipCall = false;
   2304 
   2305     skipCall |= validate_required_handle(report_data, "vkGetRenderAreaGranularity", "renderPass", renderPass);
   2306 
   2307     skipCall |= validate_required_pointer(report_data, "vkGetRenderAreaGranularity", "pGranularity", pGranularity);
   2308 
   2309     return skipCall;
   2310 }
   2311 
   2312 static bool parameter_validation_vkCreateCommandPool(
   2313     debug_report_data*                          report_data,
   2314     const VkCommandPoolCreateInfo*              pCreateInfo,
   2315     const VkAllocationCallbacks*                pAllocator,
   2316     VkCommandPool*                              pCommandPool)
   2317 {
   2318     bool skipCall = false;
   2319 
   2320     skipCall |= validate_struct_type(report_data, "vkCreateCommandPool", "pCreateInfo", "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO", pCreateInfo, VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, true);
   2321 
   2322     if (pCreateInfo != NULL)
   2323     {
   2324         skipCall |= validate_struct_pnext(report_data, "vkCreateCommandPool", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   2325 
   2326         skipCall |= validate_flags(report_data, "vkCreateCommandPool", "pCreateInfo->flags", "VkCommandPoolCreateFlagBits", AllVkCommandPoolCreateFlagBits, pCreateInfo->flags, false);
   2327     }
   2328 
   2329     if (pAllocator != NULL)
   2330     {
   2331         skipCall |= validate_required_pointer(report_data, "vkCreateCommandPool", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   2332 
   2333         skipCall |= validate_required_pointer(report_data, "vkCreateCommandPool", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2334 
   2335         skipCall |= validate_required_pointer(report_data, "vkCreateCommandPool", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2336     }
   2337 
   2338     skipCall |= validate_required_pointer(report_data, "vkCreateCommandPool", "pCommandPool", pCommandPool);
   2339 
   2340     return skipCall;
   2341 }
   2342 
   2343 static bool parameter_validation_vkDestroyCommandPool(
   2344     debug_report_data*                          report_data,
   2345     VkCommandPool                               commandPool,
   2346     const VkAllocationCallbacks*                pAllocator)
   2347 {
   2348     UNUSED_PARAMETER(commandPool);
   2349 
   2350     bool skipCall = false;
   2351 
   2352     if (pAllocator != NULL)
   2353     {
   2354         skipCall |= validate_required_pointer(report_data, "vkDestroyCommandPool", "pAllocator->pfnAllocation", reinterpret_cast<const void*>(pAllocator->pfnAllocation));
   2355 
   2356         skipCall |= validate_required_pointer(report_data, "vkDestroyCommandPool", "pAllocator->pfnReallocation", reinterpret_cast<const void*>(pAllocator->pfnReallocation));
   2357 
   2358         skipCall |= validate_required_pointer(report_data, "vkDestroyCommandPool", "pAllocator->pfnFree", reinterpret_cast<const void*>(pAllocator->pfnFree));
   2359     }
   2360 
   2361     return skipCall;
   2362 }
   2363 
   2364 static bool parameter_validation_vkResetCommandPool(
   2365     debug_report_data*                          report_data,
   2366     VkCommandPool                               commandPool,
   2367     VkCommandPoolResetFlags                     flags)
   2368 {
   2369     bool skipCall = false;
   2370 
   2371     skipCall |= validate_required_handle(report_data, "vkResetCommandPool", "commandPool", commandPool);
   2372 
   2373     skipCall |= validate_flags(report_data, "vkResetCommandPool", "flags", "VkCommandPoolResetFlagBits", AllVkCommandPoolResetFlagBits, flags, false);
   2374 
   2375     return skipCall;
   2376 }
   2377 
   2378 static bool parameter_validation_vkAllocateCommandBuffers(
   2379     debug_report_data*                          report_data,
   2380     const VkCommandBufferAllocateInfo*          pAllocateInfo,
   2381     VkCommandBuffer*                            pCommandBuffers)
   2382 {
   2383     bool skipCall = false;
   2384 
   2385     skipCall |= validate_struct_type(report_data, "vkAllocateCommandBuffers", "pAllocateInfo", "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO", pAllocateInfo, VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, true);
   2386 
   2387     if (pAllocateInfo != NULL)
   2388     {
   2389         skipCall |= validate_struct_pnext(report_data, "vkAllocateCommandBuffers", "pAllocateInfo->pNext", NULL, pAllocateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   2390 
   2391         skipCall |= validate_required_handle(report_data, "vkAllocateCommandBuffers", "pAllocateInfo->commandPool", pAllocateInfo->commandPool);
   2392 
   2393         skipCall |= validate_ranged_enum(report_data, "vkAllocateCommandBuffers", "pAllocateInfo->level", "VkCommandBufferLevel", VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE, VK_COMMAND_BUFFER_LEVEL_END_RANGE, pAllocateInfo->level);
   2394     }
   2395 
   2396     if (pAllocateInfo != NULL) {
   2397         skipCall |= validate_array(report_data, "vkAllocateCommandBuffers", "pAllocateInfo->commandBufferCount", "pCommandBuffers", pAllocateInfo->commandBufferCount, pCommandBuffers, true, true);
   2398     }
   2399 
   2400     return skipCall;
   2401 }
   2402 
   2403 static bool parameter_validation_vkFreeCommandBuffers(
   2404     debug_report_data*                          report_data,
   2405     VkCommandPool                               commandPool,
   2406     uint32_t                                    commandBufferCount,
   2407     const VkCommandBuffer*                      pCommandBuffers)
   2408 {
   2409     UNUSED_PARAMETER(pCommandBuffers);
   2410 
   2411     bool skipCall = false;
   2412 
   2413     skipCall |= validate_required_handle(report_data, "vkFreeCommandBuffers", "commandPool", commandPool);
   2414 
   2415     return skipCall;
   2416 }
   2417 
   2418 static bool parameter_validation_vkBeginCommandBuffer(
   2419     debug_report_data*                          report_data,
   2420     const VkCommandBufferBeginInfo*             pBeginInfo)
   2421 {
   2422     bool skipCall = false;
   2423 
   2424     skipCall |= validate_struct_type(report_data, "vkBeginCommandBuffer", "pBeginInfo", "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO", pBeginInfo, VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, true);
   2425 
   2426     if (pBeginInfo != NULL)
   2427     {
   2428         skipCall |= validate_struct_pnext(report_data, "vkBeginCommandBuffer", "pBeginInfo->pNext", NULL, pBeginInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   2429 
   2430         skipCall |= validate_flags(report_data, "vkBeginCommandBuffer", "pBeginInfo->flags", "VkCommandBufferUsageFlagBits", AllVkCommandBufferUsageFlagBits, pBeginInfo->flags, false);
   2431     }
   2432 
   2433     return skipCall;
   2434 }
   2435 
   2436 static bool parameter_validation_vkResetCommandBuffer(
   2437     debug_report_data*                          report_data,
   2438     VkCommandBufferResetFlags                   flags)
   2439 {
   2440     bool skipCall = false;
   2441 
   2442     skipCall |= validate_flags(report_data, "vkResetCommandBuffer", "flags", "VkCommandBufferResetFlagBits", AllVkCommandBufferResetFlagBits, flags, false);
   2443 
   2444     return skipCall;
   2445 }
   2446 
   2447 static bool parameter_validation_vkCmdBindPipeline(
   2448     debug_report_data*                          report_data,
   2449     VkPipelineBindPoint                         pipelineBindPoint,
   2450     VkPipeline                                  pipeline)
   2451 {
   2452     bool skipCall = false;
   2453 
   2454     skipCall |= validate_ranged_enum(report_data, "vkCmdBindPipeline", "pipelineBindPoint", "VkPipelineBindPoint", VK_PIPELINE_BIND_POINT_BEGIN_RANGE, VK_PIPELINE_BIND_POINT_END_RANGE, pipelineBindPoint);
   2455 
   2456     skipCall |= validate_required_handle(report_data, "vkCmdBindPipeline", "pipeline", pipeline);
   2457 
   2458     return skipCall;
   2459 }
   2460 
   2461 static bool parameter_validation_vkCmdSetViewport(
   2462     debug_report_data*                          report_data,
   2463     uint32_t                                    firstViewport,
   2464     uint32_t                                    viewportCount,
   2465     const VkViewport*                           pViewports)
   2466 {
   2467     UNUSED_PARAMETER(firstViewport);
   2468 
   2469     bool skipCall = false;
   2470 
   2471     skipCall |= validate_array(report_data, "vkCmdSetViewport", "viewportCount", "pViewports", viewportCount, pViewports, true, true);
   2472 
   2473     return skipCall;
   2474 }
   2475 
   2476 static bool parameter_validation_vkCmdSetScissor(
   2477     debug_report_data*                          report_data,
   2478     uint32_t                                    firstScissor,
   2479     uint32_t                                    scissorCount,
   2480     const VkRect2D*                             pScissors)
   2481 {
   2482     UNUSED_PARAMETER(firstScissor);
   2483 
   2484     bool skipCall = false;
   2485 
   2486     skipCall |= validate_array(report_data, "vkCmdSetScissor", "scissorCount", "pScissors", scissorCount, pScissors, true, true);
   2487 
   2488     return skipCall;
   2489 }
   2490 
   2491 static bool parameter_validation_vkCmdSetBlendConstants(
   2492     debug_report_data*                          report_data,
   2493     const float                                 blendConstants[4])
   2494 {
   2495     bool skipCall = false;
   2496 
   2497     skipCall |= validate_required_pointer(report_data, "vkCmdSetBlendConstants", "blendConstants", blendConstants);
   2498 
   2499     return skipCall;
   2500 }
   2501 
   2502 static bool parameter_validation_vkCmdSetStencilCompareMask(
   2503     debug_report_data*                          report_data,
   2504     VkStencilFaceFlags                          faceMask,
   2505     uint32_t                                    compareMask)
   2506 {
   2507     UNUSED_PARAMETER(compareMask);
   2508 
   2509     bool skipCall = false;
   2510 
   2511     skipCall |= validate_flags(report_data, "vkCmdSetStencilCompareMask", "faceMask", "VkStencilFaceFlagBits", AllVkStencilFaceFlagBits, faceMask, true);
   2512 
   2513     return skipCall;
   2514 }
   2515 
   2516 static bool parameter_validation_vkCmdSetStencilWriteMask(
   2517     debug_report_data*                          report_data,
   2518     VkStencilFaceFlags                          faceMask,
   2519     uint32_t                                    writeMask)
   2520 {
   2521     UNUSED_PARAMETER(writeMask);
   2522 
   2523     bool skipCall = false;
   2524 
   2525     skipCall |= validate_flags(report_data, "vkCmdSetStencilWriteMask", "faceMask", "VkStencilFaceFlagBits", AllVkStencilFaceFlagBits, faceMask, true);
   2526 
   2527     return skipCall;
   2528 }
   2529 
   2530 static bool parameter_validation_vkCmdSetStencilReference(
   2531     debug_report_data*                          report_data,
   2532     VkStencilFaceFlags                          faceMask,
   2533     uint32_t                                    reference)
   2534 {
   2535     UNUSED_PARAMETER(reference);
   2536 
   2537     bool skipCall = false;
   2538 
   2539     skipCall |= validate_flags(report_data, "vkCmdSetStencilReference", "faceMask", "VkStencilFaceFlagBits", AllVkStencilFaceFlagBits, faceMask, true);
   2540 
   2541     return skipCall;
   2542 }
   2543 
   2544 static bool parameter_validation_vkCmdBindDescriptorSets(
   2545     debug_report_data*                          report_data,
   2546     VkPipelineBindPoint                         pipelineBindPoint,
   2547     VkPipelineLayout                            layout,
   2548     uint32_t                                    firstSet,
   2549     uint32_t                                    descriptorSetCount,
   2550     const VkDescriptorSet*                      pDescriptorSets,
   2551     uint32_t                                    dynamicOffsetCount,
   2552     const uint32_t*                             pDynamicOffsets)
   2553 {
   2554     UNUSED_PARAMETER(firstSet);
   2555 
   2556     bool skipCall = false;
   2557 
   2558     skipCall |= validate_ranged_enum(report_data, "vkCmdBindDescriptorSets", "pipelineBindPoint", "VkPipelineBindPoint", VK_PIPELINE_BIND_POINT_BEGIN_RANGE, VK_PIPELINE_BIND_POINT_END_RANGE, pipelineBindPoint);
   2559 
   2560     skipCall |= validate_required_handle(report_data, "vkCmdBindDescriptorSets", "layout", layout);
   2561 
   2562     skipCall |= validate_handle_array(report_data, "vkCmdBindDescriptorSets", "descriptorSetCount", "pDescriptorSets", descriptorSetCount, pDescriptorSets, true, true);
   2563 
   2564     skipCall |= validate_array(report_data, "vkCmdBindDescriptorSets", "dynamicOffsetCount", "pDynamicOffsets", dynamicOffsetCount, pDynamicOffsets, false, true);
   2565 
   2566     return skipCall;
   2567 }
   2568 
   2569 static bool parameter_validation_vkCmdBindIndexBuffer(
   2570     debug_report_data*                          report_data,
   2571     VkBuffer                                    buffer,
   2572     VkDeviceSize                                offset,
   2573     VkIndexType                                 indexType)
   2574 {
   2575     UNUSED_PARAMETER(offset);
   2576 
   2577     bool skipCall = false;
   2578 
   2579     skipCall |= validate_required_handle(report_data, "vkCmdBindIndexBuffer", "buffer", buffer);
   2580 
   2581     skipCall |= validate_ranged_enum(report_data, "vkCmdBindIndexBuffer", "indexType", "VkIndexType", VK_INDEX_TYPE_BEGIN_RANGE, VK_INDEX_TYPE_END_RANGE, indexType);
   2582 
   2583     return skipCall;
   2584 }
   2585 
   2586 static bool parameter_validation_vkCmdBindVertexBuffers(
   2587     debug_report_data*                          report_data,
   2588     uint32_t                                    firstBinding,
   2589     uint32_t                                    bindingCount,
   2590     const VkBuffer*                             pBuffers,
   2591     const VkDeviceSize*                         pOffsets)
   2592 {
   2593     UNUSED_PARAMETER(firstBinding);
   2594 
   2595     bool skipCall = false;
   2596 
   2597     skipCall |= validate_handle_array(report_data, "vkCmdBindVertexBuffers", "bindingCount", "pBuffers", bindingCount, pBuffers, true, true);
   2598 
   2599     skipCall |= validate_array(report_data, "vkCmdBindVertexBuffers", "bindingCount", "pOffsets", bindingCount, pOffsets, true, true);
   2600 
   2601     return skipCall;
   2602 }
   2603 
   2604 static bool parameter_validation_vkCmdDrawIndirect(
   2605     debug_report_data*                          report_data,
   2606     VkBuffer                                    buffer,
   2607     VkDeviceSize                                offset,
   2608     uint32_t                                    drawCount,
   2609     uint32_t                                    stride)
   2610 {
   2611     UNUSED_PARAMETER(offset);
   2612     UNUSED_PARAMETER(drawCount);
   2613     UNUSED_PARAMETER(stride);
   2614 
   2615     bool skipCall = false;
   2616 
   2617     skipCall |= validate_required_handle(report_data, "vkCmdDrawIndirect", "buffer", buffer);
   2618 
   2619     return skipCall;
   2620 }
   2621 
   2622 static bool parameter_validation_vkCmdDrawIndexedIndirect(
   2623     debug_report_data*                          report_data,
   2624     VkBuffer                                    buffer,
   2625     VkDeviceSize                                offset,
   2626     uint32_t                                    drawCount,
   2627     uint32_t                                    stride)
   2628 {
   2629     UNUSED_PARAMETER(offset);
   2630     UNUSED_PARAMETER(drawCount);
   2631     UNUSED_PARAMETER(stride);
   2632 
   2633     bool skipCall = false;
   2634 
   2635     skipCall |= validate_required_handle(report_data, "vkCmdDrawIndexedIndirect", "buffer", buffer);
   2636 
   2637     return skipCall;
   2638 }
   2639 
   2640 static bool parameter_validation_vkCmdDispatchIndirect(
   2641     debug_report_data*                          report_data,
   2642     VkBuffer                                    buffer,
   2643     VkDeviceSize                                offset)
   2644 {
   2645     UNUSED_PARAMETER(offset);
   2646 
   2647     bool skipCall = false;
   2648 
   2649     skipCall |= validate_required_handle(report_data, "vkCmdDispatchIndirect", "buffer", buffer);
   2650 
   2651     return skipCall;
   2652 }
   2653 
   2654 static bool parameter_validation_vkCmdCopyBuffer(
   2655     debug_report_data*                          report_data,
   2656     VkBuffer                                    srcBuffer,
   2657     VkBuffer                                    dstBuffer,
   2658     uint32_t                                    regionCount,
   2659     const VkBufferCopy*                         pRegions)
   2660 {
   2661     bool skipCall = false;
   2662 
   2663     skipCall |= validate_required_handle(report_data, "vkCmdCopyBuffer", "srcBuffer", srcBuffer);
   2664 
   2665     skipCall |= validate_required_handle(report_data, "vkCmdCopyBuffer", "dstBuffer", dstBuffer);
   2666 
   2667     skipCall |= validate_array(report_data, "vkCmdCopyBuffer", "regionCount", "pRegions", regionCount, pRegions, true, true);
   2668 
   2669     return skipCall;
   2670 }
   2671 
   2672 static bool parameter_validation_vkCmdCopyImage(
   2673     debug_report_data*                          report_data,
   2674     VkImage                                     srcImage,
   2675     VkImageLayout                               srcImageLayout,
   2676     VkImage                                     dstImage,
   2677     VkImageLayout                               dstImageLayout,
   2678     uint32_t                                    regionCount,
   2679     const VkImageCopy*                          pRegions)
   2680 {
   2681     bool skipCall = false;
   2682 
   2683     skipCall |= validate_required_handle(report_data, "vkCmdCopyImage", "srcImage", srcImage);
   2684 
   2685     skipCall |= validate_ranged_enum(report_data, "vkCmdCopyImage", "srcImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, srcImageLayout);
   2686 
   2687     skipCall |= validate_required_handle(report_data, "vkCmdCopyImage", "dstImage", dstImage);
   2688 
   2689     skipCall |= validate_ranged_enum(report_data, "vkCmdCopyImage", "dstImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, dstImageLayout);
   2690 
   2691     skipCall |= validate_array(report_data, "vkCmdCopyImage", "regionCount", "pRegions", regionCount, pRegions, true, true);
   2692 
   2693     if (pRegions != NULL)
   2694     {
   2695         for (uint32_t regionIndex = 0; regionIndex < regionCount; ++regionIndex)
   2696         {
   2697             skipCall |= validate_flags(report_data, "vkCmdCopyImage", ParameterName("pRegions[%i].srcSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].srcSubresource.aspectMask, true);
   2698 
   2699             skipCall |= validate_flags(report_data, "vkCmdCopyImage", ParameterName("pRegions[%i].dstSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].dstSubresource.aspectMask, true);
   2700         }
   2701     }
   2702 
   2703     return skipCall;
   2704 }
   2705 
   2706 static bool parameter_validation_vkCmdBlitImage(
   2707     debug_report_data*                          report_data,
   2708     VkImage                                     srcImage,
   2709     VkImageLayout                               srcImageLayout,
   2710     VkImage                                     dstImage,
   2711     VkImageLayout                               dstImageLayout,
   2712     uint32_t                                    regionCount,
   2713     const VkImageBlit*                          pRegions,
   2714     VkFilter                                    filter)
   2715 {
   2716     bool skipCall = false;
   2717 
   2718     skipCall |= validate_required_handle(report_data, "vkCmdBlitImage", "srcImage", srcImage);
   2719 
   2720     skipCall |= validate_ranged_enum(report_data, "vkCmdBlitImage", "srcImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, srcImageLayout);
   2721 
   2722     skipCall |= validate_required_handle(report_data, "vkCmdBlitImage", "dstImage", dstImage);
   2723 
   2724     skipCall |= validate_ranged_enum(report_data, "vkCmdBlitImage", "dstImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, dstImageLayout);
   2725 
   2726     skipCall |= validate_array(report_data, "vkCmdBlitImage", "regionCount", "pRegions", regionCount, pRegions, true, true);
   2727 
   2728     if (pRegions != NULL)
   2729     {
   2730         for (uint32_t regionIndex = 0; regionIndex < regionCount; ++regionIndex)
   2731         {
   2732             skipCall |= validate_flags(report_data, "vkCmdBlitImage", ParameterName("pRegions[%i].srcSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].srcSubresource.aspectMask, true);
   2733 
   2734             skipCall |= validate_flags(report_data, "vkCmdBlitImage", ParameterName("pRegions[%i].dstSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].dstSubresource.aspectMask, true);
   2735         }
   2736     }
   2737 
   2738     skipCall |= validate_ranged_enum(report_data, "vkCmdBlitImage", "filter", "VkFilter", VK_FILTER_BEGIN_RANGE, VK_FILTER_END_RANGE, filter);
   2739 
   2740     return skipCall;
   2741 }
   2742 
   2743 static bool parameter_validation_vkCmdCopyBufferToImage(
   2744     debug_report_data*                          report_data,
   2745     VkBuffer                                    srcBuffer,
   2746     VkImage                                     dstImage,
   2747     VkImageLayout                               dstImageLayout,
   2748     uint32_t                                    regionCount,
   2749     const VkBufferImageCopy*                    pRegions)
   2750 {
   2751     bool skipCall = false;
   2752 
   2753     skipCall |= validate_required_handle(report_data, "vkCmdCopyBufferToImage", "srcBuffer", srcBuffer);
   2754 
   2755     skipCall |= validate_required_handle(report_data, "vkCmdCopyBufferToImage", "dstImage", dstImage);
   2756 
   2757     skipCall |= validate_ranged_enum(report_data, "vkCmdCopyBufferToImage", "dstImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, dstImageLayout);
   2758 
   2759     skipCall |= validate_array(report_data, "vkCmdCopyBufferToImage", "regionCount", "pRegions", regionCount, pRegions, true, true);
   2760 
   2761     if (pRegions != NULL)
   2762     {
   2763         for (uint32_t regionIndex = 0; regionIndex < regionCount; ++regionIndex)
   2764         {
   2765             skipCall |= validate_flags(report_data, "vkCmdCopyBufferToImage", ParameterName("pRegions[%i].imageSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].imageSubresource.aspectMask, true);
   2766         }
   2767     }
   2768 
   2769     return skipCall;
   2770 }
   2771 
   2772 static bool parameter_validation_vkCmdCopyImageToBuffer(
   2773     debug_report_data*                          report_data,
   2774     VkImage                                     srcImage,
   2775     VkImageLayout                               srcImageLayout,
   2776     VkBuffer                                    dstBuffer,
   2777     uint32_t                                    regionCount,
   2778     const VkBufferImageCopy*                    pRegions)
   2779 {
   2780     bool skipCall = false;
   2781 
   2782     skipCall |= validate_required_handle(report_data, "vkCmdCopyImageToBuffer", "srcImage", srcImage);
   2783 
   2784     skipCall |= validate_ranged_enum(report_data, "vkCmdCopyImageToBuffer", "srcImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, srcImageLayout);
   2785 
   2786     skipCall |= validate_required_handle(report_data, "vkCmdCopyImageToBuffer", "dstBuffer", dstBuffer);
   2787 
   2788     skipCall |= validate_array(report_data, "vkCmdCopyImageToBuffer", "regionCount", "pRegions", regionCount, pRegions, true, true);
   2789 
   2790     if (pRegions != NULL)
   2791     {
   2792         for (uint32_t regionIndex = 0; regionIndex < regionCount; ++regionIndex)
   2793         {
   2794             skipCall |= validate_flags(report_data, "vkCmdCopyImageToBuffer", ParameterName("pRegions[%i].imageSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].imageSubresource.aspectMask, true);
   2795         }
   2796     }
   2797 
   2798     return skipCall;
   2799 }
   2800 
   2801 static bool parameter_validation_vkCmdUpdateBuffer(
   2802     debug_report_data*                          report_data,
   2803     VkBuffer                                    dstBuffer,
   2804     VkDeviceSize                                dstOffset,
   2805     VkDeviceSize                                dataSize,
   2806     const void*                                 pData)
   2807 {
   2808     UNUSED_PARAMETER(dstOffset);
   2809 
   2810     bool skipCall = false;
   2811 
   2812     skipCall |= validate_required_handle(report_data, "vkCmdUpdateBuffer", "dstBuffer", dstBuffer);
   2813 
   2814     skipCall |= validate_array(report_data, "vkCmdUpdateBuffer", "dataSize", "pData", dataSize, pData, true, true);
   2815 
   2816     return skipCall;
   2817 }
   2818 
   2819 static bool parameter_validation_vkCmdFillBuffer(
   2820     debug_report_data*                          report_data,
   2821     VkBuffer                                    dstBuffer,
   2822     VkDeviceSize                                dstOffset,
   2823     VkDeviceSize                                size,
   2824     uint32_t                                    data)
   2825 {
   2826     UNUSED_PARAMETER(dstOffset);
   2827     UNUSED_PARAMETER(size);
   2828     UNUSED_PARAMETER(data);
   2829 
   2830     bool skipCall = false;
   2831 
   2832     skipCall |= validate_required_handle(report_data, "vkCmdFillBuffer", "dstBuffer", dstBuffer);
   2833 
   2834     return skipCall;
   2835 }
   2836 
   2837 static bool parameter_validation_vkCmdClearColorImage(
   2838     debug_report_data*                          report_data,
   2839     VkImage                                     image,
   2840     VkImageLayout                               imageLayout,
   2841     const VkClearColorValue*                    pColor,
   2842     uint32_t                                    rangeCount,
   2843     const VkImageSubresourceRange*              pRanges)
   2844 {
   2845     bool skipCall = false;
   2846 
   2847     skipCall |= validate_required_handle(report_data, "vkCmdClearColorImage", "image", image);
   2848 
   2849     skipCall |= validate_ranged_enum(report_data, "vkCmdClearColorImage", "imageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, imageLayout);
   2850 
   2851     skipCall |= validate_required_pointer(report_data, "vkCmdClearColorImage", "pColor", pColor);
   2852 
   2853     skipCall |= validate_array(report_data, "vkCmdClearColorImage", "rangeCount", "pRanges", rangeCount, pRanges, true, true);
   2854 
   2855     if (pRanges != NULL)
   2856     {
   2857         for (uint32_t rangeIndex = 0; rangeIndex < rangeCount; ++rangeIndex)
   2858         {
   2859             skipCall |= validate_flags(report_data, "vkCmdClearColorImage", ParameterName("pRanges[%i].aspectMask", ParameterName::IndexVector{ rangeIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRanges[rangeIndex].aspectMask, true);
   2860         }
   2861     }
   2862 
   2863     return skipCall;
   2864 }
   2865 
   2866 static bool parameter_validation_vkCmdClearDepthStencilImage(
   2867     debug_report_data*                          report_data,
   2868     VkImage                                     image,
   2869     VkImageLayout                               imageLayout,
   2870     const VkClearDepthStencilValue*             pDepthStencil,
   2871     uint32_t                                    rangeCount,
   2872     const VkImageSubresourceRange*              pRanges)
   2873 {
   2874     bool skipCall = false;
   2875 
   2876     skipCall |= validate_required_handle(report_data, "vkCmdClearDepthStencilImage", "image", image);
   2877 
   2878     skipCall |= validate_ranged_enum(report_data, "vkCmdClearDepthStencilImage", "imageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, imageLayout);
   2879 
   2880     skipCall |= validate_required_pointer(report_data, "vkCmdClearDepthStencilImage", "pDepthStencil", pDepthStencil);
   2881 
   2882     skipCall |= validate_array(report_data, "vkCmdClearDepthStencilImage", "rangeCount", "pRanges", rangeCount, pRanges, true, true);
   2883 
   2884     if (pRanges != NULL)
   2885     {
   2886         for (uint32_t rangeIndex = 0; rangeIndex < rangeCount; ++rangeIndex)
   2887         {
   2888             skipCall |= validate_flags(report_data, "vkCmdClearDepthStencilImage", ParameterName("pRanges[%i].aspectMask", ParameterName::IndexVector{ rangeIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRanges[rangeIndex].aspectMask, true);
   2889         }
   2890     }
   2891 
   2892     return skipCall;
   2893 }
   2894 
   2895 static bool parameter_validation_vkCmdClearAttachments(
   2896     debug_report_data*                          report_data,
   2897     uint32_t                                    attachmentCount,
   2898     const VkClearAttachment*                    pAttachments,
   2899     uint32_t                                    rectCount,
   2900     const VkClearRect*                          pRects)
   2901 {
   2902     bool skipCall = false;
   2903 
   2904     skipCall |= validate_array(report_data, "vkCmdClearAttachments", "attachmentCount", "pAttachments", attachmentCount, pAttachments, true, true);
   2905 
   2906     if (pAttachments != NULL)
   2907     {
   2908         for (uint32_t attachmentIndex = 0; attachmentIndex < attachmentCount; ++attachmentIndex)
   2909         {
   2910             skipCall |= validate_flags(report_data, "vkCmdClearAttachments", ParameterName("pAttachments[%i].aspectMask", ParameterName::IndexVector{ attachmentIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pAttachments[attachmentIndex].aspectMask, true);
   2911         }
   2912     }
   2913 
   2914     skipCall |= validate_array(report_data, "vkCmdClearAttachments", "rectCount", "pRects", rectCount, pRects, true, true);
   2915 
   2916     return skipCall;
   2917 }
   2918 
   2919 static bool parameter_validation_vkCmdResolveImage(
   2920     debug_report_data*                          report_data,
   2921     VkImage                                     srcImage,
   2922     VkImageLayout                               srcImageLayout,
   2923     VkImage                                     dstImage,
   2924     VkImageLayout                               dstImageLayout,
   2925     uint32_t                                    regionCount,
   2926     const VkImageResolve*                       pRegions)
   2927 {
   2928     bool skipCall = false;
   2929 
   2930     skipCall |= validate_required_handle(report_data, "vkCmdResolveImage", "srcImage", srcImage);
   2931 
   2932     skipCall |= validate_ranged_enum(report_data, "vkCmdResolveImage", "srcImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, srcImageLayout);
   2933 
   2934     skipCall |= validate_required_handle(report_data, "vkCmdResolveImage", "dstImage", dstImage);
   2935 
   2936     skipCall |= validate_ranged_enum(report_data, "vkCmdResolveImage", "dstImageLayout", "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, dstImageLayout);
   2937 
   2938     skipCall |= validate_array(report_data, "vkCmdResolveImage", "regionCount", "pRegions", regionCount, pRegions, true, true);
   2939 
   2940     if (pRegions != NULL)
   2941     {
   2942         for (uint32_t regionIndex = 0; regionIndex < regionCount; ++regionIndex)
   2943         {
   2944             skipCall |= validate_flags(report_data, "vkCmdResolveImage", ParameterName("pRegions[%i].srcSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].srcSubresource.aspectMask, true);
   2945 
   2946             skipCall |= validate_flags(report_data, "vkCmdResolveImage", ParameterName("pRegions[%i].dstSubresource.aspectMask", ParameterName::IndexVector{ regionIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pRegions[regionIndex].dstSubresource.aspectMask, true);
   2947         }
   2948     }
   2949 
   2950     return skipCall;
   2951 }
   2952 
   2953 static bool parameter_validation_vkCmdSetEvent(
   2954     debug_report_data*                          report_data,
   2955     VkEvent                                     event,
   2956     VkPipelineStageFlags                        stageMask)
   2957 {
   2958     bool skipCall = false;
   2959 
   2960     skipCall |= validate_required_handle(report_data, "vkCmdSetEvent", "event", event);
   2961 
   2962     skipCall |= validate_flags(report_data, "vkCmdSetEvent", "stageMask", "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, stageMask, true);
   2963 
   2964     return skipCall;
   2965 }
   2966 
   2967 static bool parameter_validation_vkCmdResetEvent(
   2968     debug_report_data*                          report_data,
   2969     VkEvent                                     event,
   2970     VkPipelineStageFlags                        stageMask)
   2971 {
   2972     bool skipCall = false;
   2973 
   2974     skipCall |= validate_required_handle(report_data, "vkCmdResetEvent", "event", event);
   2975 
   2976     skipCall |= validate_flags(report_data, "vkCmdResetEvent", "stageMask", "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, stageMask, true);
   2977 
   2978     return skipCall;
   2979 }
   2980 
   2981 static bool parameter_validation_vkCmdWaitEvents(
   2982     debug_report_data*                          report_data,
   2983     uint32_t                                    eventCount,
   2984     const VkEvent*                              pEvents,
   2985     VkPipelineStageFlags                        srcStageMask,
   2986     VkPipelineStageFlags                        dstStageMask,
   2987     uint32_t                                    memoryBarrierCount,
   2988     const VkMemoryBarrier*                      pMemoryBarriers,
   2989     uint32_t                                    bufferMemoryBarrierCount,
   2990     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
   2991     uint32_t                                    imageMemoryBarrierCount,
   2992     const VkImageMemoryBarrier*                 pImageMemoryBarriers)
   2993 {
   2994     bool skipCall = false;
   2995 
   2996     skipCall |= validate_handle_array(report_data, "vkCmdWaitEvents", "eventCount", "pEvents", eventCount, pEvents, true, true);
   2997 
   2998     skipCall |= validate_flags(report_data, "vkCmdWaitEvents", "srcStageMask", "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, srcStageMask, true);
   2999 
   3000     skipCall |= validate_flags(report_data, "vkCmdWaitEvents", "dstStageMask", "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, dstStageMask, true);
   3001 
   3002     skipCall |= validate_struct_type_array(report_data, "vkCmdWaitEvents", "memoryBarrierCount", "pMemoryBarriers", "VK_STRUCTURE_TYPE_MEMORY_BARRIER", memoryBarrierCount, pMemoryBarriers, VK_STRUCTURE_TYPE_MEMORY_BARRIER, false, true);
   3003 
   3004     if (pMemoryBarriers != NULL)
   3005     {
   3006         for (uint32_t memoryBarrierIndex = 0; memoryBarrierIndex < memoryBarrierCount; ++memoryBarrierIndex)
   3007         {
   3008             skipCall |= validate_struct_pnext(report_data, "vkCmdWaitEvents", ParameterName("pMemoryBarriers[%i].pNext", ParameterName::IndexVector{ memoryBarrierIndex }), NULL, pMemoryBarriers[memoryBarrierIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   3009 
   3010             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pMemoryBarriers[%i].srcAccessMask", ParameterName::IndexVector{ memoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pMemoryBarriers[memoryBarrierIndex].srcAccessMask, false);
   3011 
   3012             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pMemoryBarriers[%i].dstAccessMask", ParameterName::IndexVector{ memoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pMemoryBarriers[memoryBarrierIndex].dstAccessMask, false);
   3013         }
   3014     }
   3015 
   3016     skipCall |= validate_struct_type_array(report_data, "vkCmdWaitEvents", "bufferMemoryBarrierCount", "pBufferMemoryBarriers", "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", bufferMemoryBarrierCount, pBufferMemoryBarriers, VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, false, true);
   3017 
   3018     if (pBufferMemoryBarriers != NULL)
   3019     {
   3020         for (uint32_t bufferMemoryBarrierIndex = 0; bufferMemoryBarrierIndex < bufferMemoryBarrierCount; ++bufferMemoryBarrierIndex)
   3021         {
   3022             skipCall |= validate_struct_pnext(report_data, "vkCmdWaitEvents", ParameterName("pBufferMemoryBarriers[%i].pNext", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), NULL, pBufferMemoryBarriers[bufferMemoryBarrierIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   3023 
   3024             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pBufferMemoryBarriers[%i].srcAccessMask", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pBufferMemoryBarriers[bufferMemoryBarrierIndex].srcAccessMask, false);
   3025 
   3026             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pBufferMemoryBarriers[%i].dstAccessMask", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pBufferMemoryBarriers[bufferMemoryBarrierIndex].dstAccessMask, false);
   3027 
   3028             skipCall |= validate_required_handle(report_data, "vkCmdWaitEvents", ParameterName("pBufferMemoryBarriers[%i].buffer", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), pBufferMemoryBarriers[bufferMemoryBarrierIndex].buffer);
   3029         }
   3030     }
   3031 
   3032     skipCall |= validate_struct_type_array(report_data, "vkCmdWaitEvents", "imageMemoryBarrierCount", "pImageMemoryBarriers", "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", imageMemoryBarrierCount, pImageMemoryBarriers, VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, false, true);
   3033 
   3034     if (pImageMemoryBarriers != NULL)
   3035     {
   3036         for (uint32_t imageMemoryBarrierIndex = 0; imageMemoryBarrierIndex < imageMemoryBarrierCount; ++imageMemoryBarrierIndex)
   3037         {
   3038             skipCall |= validate_struct_pnext(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].pNext", ParameterName::IndexVector{ imageMemoryBarrierIndex }), NULL, pImageMemoryBarriers[imageMemoryBarrierIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   3039 
   3040             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].srcAccessMask", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pImageMemoryBarriers[imageMemoryBarrierIndex].srcAccessMask, false);
   3041 
   3042             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].dstAccessMask", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pImageMemoryBarriers[imageMemoryBarrierIndex].dstAccessMask, false);
   3043 
   3044             skipCall |= validate_ranged_enum(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].oldLayout", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pImageMemoryBarriers[imageMemoryBarrierIndex].oldLayout);
   3045 
   3046             skipCall |= validate_ranged_enum(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].newLayout", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pImageMemoryBarriers[imageMemoryBarrierIndex].newLayout);
   3047 
   3048             skipCall |= validate_required_handle(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].image", ParameterName::IndexVector{ imageMemoryBarrierIndex }), pImageMemoryBarriers[imageMemoryBarrierIndex].image);
   3049 
   3050             skipCall |= validate_flags(report_data, "vkCmdWaitEvents", ParameterName("pImageMemoryBarriers[%i].subresourceRange.aspectMask", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pImageMemoryBarriers[imageMemoryBarrierIndex].subresourceRange.aspectMask, true);
   3051         }
   3052     }
   3053 
   3054     return skipCall;
   3055 }
   3056 
   3057 static bool parameter_validation_vkCmdPipelineBarrier(
   3058     debug_report_data*                          report_data,
   3059     VkPipelineStageFlags                        srcStageMask,
   3060     VkPipelineStageFlags                        dstStageMask,
   3061     VkDependencyFlags                           dependencyFlags,
   3062     uint32_t                                    memoryBarrierCount,
   3063     const VkMemoryBarrier*                      pMemoryBarriers,
   3064     uint32_t                                    bufferMemoryBarrierCount,
   3065     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
   3066     uint32_t                                    imageMemoryBarrierCount,
   3067     const VkImageMemoryBarrier*                 pImageMemoryBarriers)
   3068 {
   3069     bool skipCall = false;
   3070 
   3071     skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", "srcStageMask", "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, srcStageMask, true);
   3072 
   3073     skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", "dstStageMask", "VkPipelineStageFlagBits", AllVkPipelineStageFlagBits, dstStageMask, true);
   3074 
   3075     skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", "dependencyFlags", "VkDependencyFlagBits", AllVkDependencyFlagBits, dependencyFlags, false);
   3076 
   3077     skipCall |= validate_struct_type_array(report_data, "vkCmdPipelineBarrier", "memoryBarrierCount", "pMemoryBarriers", "VK_STRUCTURE_TYPE_MEMORY_BARRIER", memoryBarrierCount, pMemoryBarriers, VK_STRUCTURE_TYPE_MEMORY_BARRIER, false, true);
   3078 
   3079     if (pMemoryBarriers != NULL)
   3080     {
   3081         for (uint32_t memoryBarrierIndex = 0; memoryBarrierIndex < memoryBarrierCount; ++memoryBarrierIndex)
   3082         {
   3083             skipCall |= validate_struct_pnext(report_data, "vkCmdPipelineBarrier", ParameterName("pMemoryBarriers[%i].pNext", ParameterName::IndexVector{ memoryBarrierIndex }), NULL, pMemoryBarriers[memoryBarrierIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   3084 
   3085             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pMemoryBarriers[%i].srcAccessMask", ParameterName::IndexVector{ memoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pMemoryBarriers[memoryBarrierIndex].srcAccessMask, false);
   3086 
   3087             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pMemoryBarriers[%i].dstAccessMask", ParameterName::IndexVector{ memoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pMemoryBarriers[memoryBarrierIndex].dstAccessMask, false);
   3088         }
   3089     }
   3090 
   3091     skipCall |= validate_struct_type_array(report_data, "vkCmdPipelineBarrier", "bufferMemoryBarrierCount", "pBufferMemoryBarriers", "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", bufferMemoryBarrierCount, pBufferMemoryBarriers, VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, false, true);
   3092 
   3093     if (pBufferMemoryBarriers != NULL)
   3094     {
   3095         for (uint32_t bufferMemoryBarrierIndex = 0; bufferMemoryBarrierIndex < bufferMemoryBarrierCount; ++bufferMemoryBarrierIndex)
   3096         {
   3097             skipCall |= validate_struct_pnext(report_data, "vkCmdPipelineBarrier", ParameterName("pBufferMemoryBarriers[%i].pNext", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), NULL, pBufferMemoryBarriers[bufferMemoryBarrierIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   3098 
   3099             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pBufferMemoryBarriers[%i].srcAccessMask", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pBufferMemoryBarriers[bufferMemoryBarrierIndex].srcAccessMask, false);
   3100 
   3101             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pBufferMemoryBarriers[%i].dstAccessMask", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pBufferMemoryBarriers[bufferMemoryBarrierIndex].dstAccessMask, false);
   3102 
   3103             skipCall |= validate_required_handle(report_data, "vkCmdPipelineBarrier", ParameterName("pBufferMemoryBarriers[%i].buffer", ParameterName::IndexVector{ bufferMemoryBarrierIndex }), pBufferMemoryBarriers[bufferMemoryBarrierIndex].buffer);
   3104         }
   3105     }
   3106 
   3107     skipCall |= validate_struct_type_array(report_data, "vkCmdPipelineBarrier", "imageMemoryBarrierCount", "pImageMemoryBarriers", "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", imageMemoryBarrierCount, pImageMemoryBarriers, VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, false, true);
   3108 
   3109     if (pImageMemoryBarriers != NULL)
   3110     {
   3111         for (uint32_t imageMemoryBarrierIndex = 0; imageMemoryBarrierIndex < imageMemoryBarrierCount; ++imageMemoryBarrierIndex)
   3112         {
   3113             skipCall |= validate_struct_pnext(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].pNext", ParameterName::IndexVector{ imageMemoryBarrierIndex }), NULL, pImageMemoryBarriers[imageMemoryBarrierIndex].pNext, 0, NULL, GeneratedHeaderVersion);
   3114 
   3115             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].srcAccessMask", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pImageMemoryBarriers[imageMemoryBarrierIndex].srcAccessMask, false);
   3116 
   3117             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].dstAccessMask", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkAccessFlagBits", AllVkAccessFlagBits, pImageMemoryBarriers[imageMemoryBarrierIndex].dstAccessMask, false);
   3118 
   3119             skipCall |= validate_ranged_enum(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].oldLayout", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pImageMemoryBarriers[imageMemoryBarrierIndex].oldLayout);
   3120 
   3121             skipCall |= validate_ranged_enum(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].newLayout", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, pImageMemoryBarriers[imageMemoryBarrierIndex].newLayout);
   3122 
   3123             skipCall |= validate_required_handle(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].image", ParameterName::IndexVector{ imageMemoryBarrierIndex }), pImageMemoryBarriers[imageMemoryBarrierIndex].image);
   3124 
   3125             skipCall |= validate_flags(report_data, "vkCmdPipelineBarrier", ParameterName("pImageMemoryBarriers[%i].subresourceRange.aspectMask", ParameterName::IndexVector{ imageMemoryBarrierIndex }), "VkImageAspectFlagBits", AllVkImageAspectFlagBits, pImageMemoryBarriers[imageMemoryBarrierIndex].subresourceRange.aspectMask, true);
   3126         }
   3127     }
   3128 
   3129     return skipCall;
   3130 }
   3131 
   3132 static bool parameter_validation_vkCmdBeginQuery(
   3133     debug_report_data*                          report_data,
   3134     VkQueryPool                                 queryPool,
   3135     uint32_t                                    query,
   3136     VkQueryControlFlags                         flags)
   3137 {
   3138     UNUSED_PARAMETER(query);
   3139 
   3140     bool skipCall = false;
   3141 
   3142     skipCall |= validate_required_handle(report_data, "vkCmdBeginQuery", "queryPool", queryPool);
   3143 
   3144     skipCall |= validate_flags(report_data, "vkCmdBeginQuery", "flags", "VkQueryControlFlagBits", AllVkQueryControlFlagBits, flags, false);
   3145 
   3146     return skipCall;
   3147 }
   3148 
   3149 static bool parameter_validation_vkCmdEndQuery(
   3150     debug_report_data*                          report_data,
   3151     VkQueryPool                                 queryPool,
   3152     uint32_t                                    query)
   3153 {
   3154     UNUSED_PARAMETER(query);
   3155 
   3156     bool skipCall = false;
   3157 
   3158     skipCall |= validate_required_handle(report_data, "vkCmdEndQuery", "queryPool", queryPool);
   3159 
   3160     return skipCall;
   3161 }
   3162 
   3163 static bool parameter_validation_vkCmdResetQueryPool(
   3164     debug_report_data*                          report_data,
   3165     VkQueryPool                                 queryPool,
   3166     uint32_t                                    firstQuery,
   3167     uint32_t                                    queryCount)
   3168 {
   3169     UNUSED_PARAMETER(firstQuery);
   3170     UNUSED_PARAMETER(queryCount);
   3171 
   3172     bool skipCall = false;
   3173 
   3174     skipCall |= validate_required_handle(report_data, "vkCmdResetQueryPool", "queryPool", queryPool);
   3175 
   3176     return skipCall;
   3177 }
   3178 
   3179 static bool parameter_validation_vkCmdWriteTimestamp(
   3180     debug_report_data*                          report_data,
   3181     VkPipelineStageFlagBits                     pipelineStage,
   3182     VkQueryPool                                 queryPool,
   3183     uint32_t                                    query)
   3184 {
   3185     UNUSED_PARAMETER(pipelineStage);
   3186     UNUSED_PARAMETER(query);
   3187 
   3188     bool skipCall = false;
   3189 
   3190     skipCall |= validate_required_handle(report_data, "vkCmdWriteTimestamp", "queryPool", queryPool);
   3191 
   3192     return skipCall;
   3193 }
   3194 
   3195 static bool parameter_validation_vkCmdCopyQueryPoolResults(
   3196     debug_report_data*                          report_data,
   3197     VkQueryPool                                 queryPool,
   3198     uint32_t                                    firstQuery,
   3199     uint32_t                                    queryCount,
   3200     VkBuffer                                    dstBuffer,
   3201     VkDeviceSize                                dstOffset,
   3202     VkDeviceSize                                stride,
   3203     VkQueryResultFlags                          flags)
   3204 {
   3205     UNUSED_PARAMETER(firstQuery);
   3206     UNUSED_PARAMETER(queryCount);
   3207     UNUSED_PARAMETER(dstOffset);
   3208     UNUSED_PARAMETER(stride);
   3209 
   3210     bool skipCall = false;
   3211 
   3212     skipCall |= validate_required_handle(report_data, "vkCmdCopyQueryPoolResults", "queryPool", queryPool);
   3213 
   3214     skipCall |= validate_required_handle(report_data, "vkCmdCopyQueryPoolResults", "dstBuffer", dstBuffer);
   3215 
   3216     skipCall |= validate_flags(report_data, "vkCmdCopyQueryPoolResults", "flags", "VkQueryResultFlagBits", AllVkQueryResultFlagBits, flags, false);
   3217 
   3218     return skipCall;
   3219 }
   3220 
   3221 static bool parameter_validation_vkCmdPushConstants(
   3222     debug_report_data*                          report_data,
   3223     VkPipelineLayout                            layout,
   3224     VkShaderStageFlags                          stageFlags,
   3225     uint32_t                                    offset,
   3226     uint32_t                                    size,
   3227     const void*                                 pValues)
   3228 {
   3229     UNUSED_PARAMETER(offset);
   3230 
   3231     bool skipCall = false;
   3232 
   3233     skipCall |= validate_required_handle(report_data, "vkCmdPushConstants", "layout", layout);
   3234 
   3235     skipCall |= validate_flags(report_data, "vkCmdPushConstants", "stageFlags", "VkShaderStageFlagBits", AllVkShaderStageFlagBits, stageFlags, true);
   3236 
   3237     skipCall |= validate_array(report_data, "vkCmdPushConstants", "size", "pValues", size, pValues, true, true);
   3238 
   3239     return skipCall;
   3240 }
   3241 
   3242 static bool parameter_validation_vkCmdBeginRenderPass(
   3243     debug_report_data*                          report_data,
   3244     const VkRenderPassBeginInfo*                pRenderPassBegin,
   3245     VkSubpassContents                           contents)
   3246 {
   3247     bool skipCall = false;
   3248 
   3249     skipCall |= validate_struct_type(report_data, "vkCmdBeginRenderPass", "pRenderPassBegin", "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO", pRenderPassBegin, VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, true);
   3250 
   3251     if (pRenderPassBegin != NULL)
   3252     {
   3253         skipCall |= validate_struct_pnext(report_data, "vkCmdBeginRenderPass", "pRenderPassBegin->pNext", NULL, pRenderPassBegin->pNext, 0, NULL, GeneratedHeaderVersion);
   3254 
   3255         skipCall |= validate_required_handle(report_data, "vkCmdBeginRenderPass", "pRenderPassBegin->renderPass", pRenderPassBegin->renderPass);
   3256 
   3257         skipCall |= validate_required_handle(report_data, "vkCmdBeginRenderPass", "pRenderPassBegin->framebuffer", pRenderPassBegin->framebuffer);
   3258 
   3259         skipCall |= validate_array(report_data, "vkCmdBeginRenderPass", "pRenderPassBegin->clearValueCount", "pRenderPassBegin->pClearValues", pRenderPassBegin->clearValueCount, pRenderPassBegin->pClearValues, false, true);
   3260     }
   3261 
   3262     skipCall |= validate_ranged_enum(report_data, "vkCmdBeginRenderPass", "contents", "VkSubpassContents", VK_SUBPASS_CONTENTS_BEGIN_RANGE, VK_SUBPASS_CONTENTS_END_RANGE, contents);
   3263 
   3264     return skipCall;
   3265 }
   3266 
   3267 static bool parameter_validation_vkCmdNextSubpass(
   3268     debug_report_data*                          report_data,
   3269     VkSubpassContents                           contents)
   3270 {
   3271     bool skipCall = false;
   3272 
   3273     skipCall |= validate_ranged_enum(report_data, "vkCmdNextSubpass", "contents", "VkSubpassContents", VK_SUBPASS_CONTENTS_BEGIN_RANGE, VK_SUBPASS_CONTENTS_END_RANGE, contents);
   3274 
   3275     return skipCall;
   3276 }
   3277 
   3278 static bool parameter_validation_vkCmdExecuteCommands(
   3279     debug_report_data*                          report_data,
   3280     uint32_t                                    commandBufferCount,
   3281     const VkCommandBuffer*                      pCommandBuffers)
   3282 {
   3283     bool skipCall = false;
   3284 
   3285     skipCall |= validate_handle_array(report_data, "vkCmdExecuteCommands", "commandBufferCount", "pCommandBuffers", commandBufferCount, pCommandBuffers, true, true);
   3286 
   3287     return skipCall;
   3288 }
   3289 
   3290 
   3291 const VkCompositeAlphaFlagsKHR AllVkCompositeAlphaFlagBitsKHR = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR|VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR|VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR|VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
   3292 const VkSurfaceTransformFlagsKHR AllVkSurfaceTransformFlagBitsKHR = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR|VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR|VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR|VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR|VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR|VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR;
   3293 
   3294 static bool parameter_validation_vkGetPhysicalDeviceSurfaceSupportKHR(
   3295     debug_report_data*                          report_data,
   3296     uint32_t                                    queueFamilyIndex,
   3297     VkSurfaceKHR                                surface,
   3298     VkBool32*                                   pSupported)
   3299 {
   3300     UNUSED_PARAMETER(queueFamilyIndex);
   3301 
   3302     bool skipCall = false;
   3303 
   3304     skipCall |= validate_required_handle(report_data, "vkGetPhysicalDeviceSurfaceSupportKHR", "surface", surface);
   3305 
   3306     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceSurfaceSupportKHR", "pSupported", pSupported);
   3307 
   3308     return skipCall;
   3309 }
   3310 
   3311 static bool parameter_validation_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
   3312     debug_report_data*                          report_data,
   3313     VkSurfaceKHR                                surface,
   3314     VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities)
   3315 {
   3316     bool skipCall = false;
   3317 
   3318     skipCall |= validate_required_handle(report_data, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", "surface", surface);
   3319 
   3320     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", "pSurfaceCapabilities", pSurfaceCapabilities);
   3321 
   3322     return skipCall;
   3323 }
   3324 
   3325 static bool parameter_validation_vkGetPhysicalDeviceSurfaceFormatsKHR(
   3326     debug_report_data*                          report_data,
   3327     VkSurfaceKHR                                surface,
   3328     uint32_t*                                   pSurfaceFormatCount,
   3329     VkSurfaceFormatKHR*                         pSurfaceFormats)
   3330 {
   3331     bool skipCall = false;
   3332 
   3333     skipCall |= validate_required_handle(report_data, "vkGetPhysicalDeviceSurfaceFormatsKHR", "surface", surface);
   3334 
   3335     skipCall |= validate_array(report_data, "vkGetPhysicalDeviceSurfaceFormatsKHR", "pSurfaceFormatCount", "pSurfaceFormats", pSurfaceFormatCount, pSurfaceFormats, true, false, false);
   3336 
   3337     return skipCall;
   3338 }
   3339 
   3340 static bool parameter_validation_vkGetPhysicalDeviceSurfacePresentModesKHR(
   3341     debug_report_data*                          report_data,
   3342     VkSurfaceKHR                                surface,
   3343     uint32_t*                                   pPresentModeCount,
   3344     VkPresentModeKHR*                           pPresentModes)
   3345 {
   3346     bool skipCall = false;
   3347 
   3348     skipCall |= validate_required_handle(report_data, "vkGetPhysicalDeviceSurfacePresentModesKHR", "surface", surface);
   3349 
   3350     skipCall |= validate_array(report_data, "vkGetPhysicalDeviceSurfacePresentModesKHR", "pPresentModeCount", "pPresentModes", pPresentModeCount, pPresentModes, true, false, false);
   3351 
   3352     return skipCall;
   3353 }
   3354 
   3355 
   3356 
   3357 static bool parameter_validation_vkCreateSwapchainKHR(
   3358     debug_report_data*                          report_data,
   3359     const VkSwapchainCreateInfoKHR*             pCreateInfo,
   3360     const VkAllocationCallbacks*                pAllocator,
   3361     VkSwapchainKHR*                             pSwapchain)
   3362 {
   3363     UNUSED_PARAMETER(pAllocator);
   3364 
   3365     bool skipCall = false;
   3366 
   3367     skipCall |= validate_struct_type(report_data, "vkCreateSwapchainKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, true);
   3368 
   3369     if (pCreateInfo != NULL)
   3370     {
   3371         skipCall |= validate_struct_pnext(report_data, "vkCreateSwapchainKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3372 
   3373         skipCall |= validate_reserved_flags(report_data, "vkCreateSwapchainKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3374 
   3375         skipCall |= validate_bool32(report_data, "vkCreateSwapchainKHR", "pCreateInfo->clipped", pCreateInfo->clipped);
   3376     }
   3377 
   3378     skipCall |= validate_required_pointer(report_data, "vkCreateSwapchainKHR", "pSwapchain", pSwapchain);
   3379 
   3380     return skipCall;
   3381 }
   3382 
   3383 static bool parameter_validation_vkGetSwapchainImagesKHR(
   3384     debug_report_data*                          report_data,
   3385     VkSwapchainKHR                              swapchain,
   3386     uint32_t*                                   pSwapchainImageCount,
   3387     VkImage*                                    pSwapchainImages)
   3388 {
   3389     bool skipCall = false;
   3390 
   3391     skipCall |= validate_required_handle(report_data, "vkGetSwapchainImagesKHR", "swapchain", swapchain);
   3392 
   3393     skipCall |= validate_array(report_data, "vkGetSwapchainImagesKHR", "pSwapchainImageCount", "pSwapchainImages", pSwapchainImageCount, pSwapchainImages, true, false, false);
   3394 
   3395     return skipCall;
   3396 }
   3397 
   3398 static bool parameter_validation_vkAcquireNextImageKHR(
   3399     debug_report_data*                          report_data,
   3400     VkSwapchainKHR                              swapchain,
   3401     uint64_t                                    timeout,
   3402     VkSemaphore                                 semaphore,
   3403     VkFence                                     fence,
   3404     uint32_t*                                   pImageIndex)
   3405 {
   3406     UNUSED_PARAMETER(timeout);
   3407     UNUSED_PARAMETER(semaphore);
   3408     UNUSED_PARAMETER(fence);
   3409 
   3410     bool skipCall = false;
   3411 
   3412     skipCall |= validate_required_handle(report_data, "vkAcquireNextImageKHR", "swapchain", swapchain);
   3413 
   3414     skipCall |= validate_required_pointer(report_data, "vkAcquireNextImageKHR", "pImageIndex", pImageIndex);
   3415 
   3416     return skipCall;
   3417 }
   3418 
   3419 static bool parameter_validation_vkQueuePresentKHR(
   3420     debug_report_data*                          report_data,
   3421     const VkPresentInfoKHR*                     pPresentInfo)
   3422 {
   3423     bool skipCall = false;
   3424 
   3425     skipCall |= validate_struct_type(report_data, "vkQueuePresentKHR", "pPresentInfo", "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR", pPresentInfo, VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, true);
   3426 
   3427     if (pPresentInfo != NULL)
   3428     {
   3429         skipCall |= validate_struct_pnext(report_data, "vkQueuePresentKHR", "pPresentInfo->pNext", NULL, pPresentInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3430 
   3431         skipCall |= validate_handle_array(report_data, "vkQueuePresentKHR", "pPresentInfo->swapchainCount", "pPresentInfo->pSwapchains", pPresentInfo->swapchainCount, pPresentInfo->pSwapchains, true, true);
   3432 
   3433         skipCall |= validate_array(report_data, "vkQueuePresentKHR", "pPresentInfo->swapchainCount", "pPresentInfo->pImageIndices", pPresentInfo->swapchainCount, pPresentInfo->pImageIndices, true, true);
   3434 
   3435         skipCall |= validate_array(report_data, "vkQueuePresentKHR", "pPresentInfo->swapchainCount", "pPresentInfo->pResults", pPresentInfo->swapchainCount, pPresentInfo->pResults, true, false);
   3436     }
   3437 
   3438     return skipCall;
   3439 }
   3440 
   3441 
   3442 const VkDisplayPlaneAlphaFlagsKHR AllVkDisplayPlaneAlphaFlagBitsKHR = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR|VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR|VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR|VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR;
   3443 
   3444 static bool parameter_validation_vkGetPhysicalDeviceDisplayPropertiesKHR(
   3445     debug_report_data*                          report_data,
   3446     uint32_t*                                   pPropertyCount,
   3447     VkDisplayPropertiesKHR*                     pProperties)
   3448 {
   3449     bool skipCall = false;
   3450 
   3451     skipCall |= validate_array(report_data, "vkGetPhysicalDeviceDisplayPropertiesKHR", "pPropertyCount", "pProperties", pPropertyCount, pProperties, true, false, false);
   3452 
   3453     return skipCall;
   3454 }
   3455 
   3456 static bool parameter_validation_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
   3457     debug_report_data*                          report_data,
   3458     uint32_t*                                   pPropertyCount,
   3459     VkDisplayPlanePropertiesKHR*                pProperties)
   3460 {
   3461     bool skipCall = false;
   3462 
   3463     skipCall |= validate_array(report_data, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR", "pPropertyCount", "pProperties", pPropertyCount, pProperties, true, false, false);
   3464 
   3465     return skipCall;
   3466 }
   3467 
   3468 static bool parameter_validation_vkGetDisplayPlaneSupportedDisplaysKHR(
   3469     debug_report_data*                          report_data,
   3470     uint32_t                                    planeIndex,
   3471     uint32_t*                                   pDisplayCount,
   3472     VkDisplayKHR*                               pDisplays)
   3473 {
   3474     UNUSED_PARAMETER(planeIndex);
   3475 
   3476     bool skipCall = false;
   3477 
   3478     skipCall |= validate_array(report_data, "vkGetDisplayPlaneSupportedDisplaysKHR", "pDisplayCount", "pDisplays", pDisplayCount, pDisplays, true, false, false);
   3479 
   3480     return skipCall;
   3481 }
   3482 
   3483 static bool parameter_validation_vkGetDisplayModePropertiesKHR(
   3484     debug_report_data*                          report_data,
   3485     VkDisplayKHR                                display,
   3486     uint32_t*                                   pPropertyCount,
   3487     VkDisplayModePropertiesKHR*                 pProperties)
   3488 {
   3489     bool skipCall = false;
   3490 
   3491     skipCall |= validate_required_handle(report_data, "vkGetDisplayModePropertiesKHR", "display", display);
   3492 
   3493     skipCall |= validate_array(report_data, "vkGetDisplayModePropertiesKHR", "pPropertyCount", "pProperties", pPropertyCount, pProperties, true, false, false);
   3494 
   3495     return skipCall;
   3496 }
   3497 
   3498 static bool parameter_validation_vkCreateDisplayModeKHR(
   3499     debug_report_data*                          report_data,
   3500     VkDisplayKHR                                display,
   3501     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
   3502     const VkAllocationCallbacks*                pAllocator,
   3503     VkDisplayModeKHR*                           pMode)
   3504 {
   3505     UNUSED_PARAMETER(pAllocator);
   3506 
   3507     bool skipCall = false;
   3508 
   3509     skipCall |= validate_required_handle(report_data, "vkCreateDisplayModeKHR", "display", display);
   3510 
   3511     skipCall |= validate_struct_type(report_data, "vkCreateDisplayModeKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR, true);
   3512 
   3513     if (pCreateInfo != NULL)
   3514     {
   3515         skipCall |= validate_struct_pnext(report_data, "vkCreateDisplayModeKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3516 
   3517         skipCall |= validate_reserved_flags(report_data, "vkCreateDisplayModeKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3518     }
   3519 
   3520     skipCall |= validate_required_pointer(report_data, "vkCreateDisplayModeKHR", "pMode", pMode);
   3521 
   3522     return skipCall;
   3523 }
   3524 
   3525 static bool parameter_validation_vkGetDisplayPlaneCapabilitiesKHR(
   3526     debug_report_data*                          report_data,
   3527     VkDisplayModeKHR                            mode,
   3528     uint32_t                                    planeIndex,
   3529     VkDisplayPlaneCapabilitiesKHR*              pCapabilities)
   3530 {
   3531     UNUSED_PARAMETER(planeIndex);
   3532 
   3533     bool skipCall = false;
   3534 
   3535     skipCall |= validate_required_handle(report_data, "vkGetDisplayPlaneCapabilitiesKHR", "mode", mode);
   3536 
   3537     skipCall |= validate_required_pointer(report_data, "vkGetDisplayPlaneCapabilitiesKHR", "pCapabilities", pCapabilities);
   3538 
   3539     return skipCall;
   3540 }
   3541 
   3542 static bool parameter_validation_vkCreateDisplayPlaneSurfaceKHR(
   3543     debug_report_data*                          report_data,
   3544     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
   3545     const VkAllocationCallbacks*                pAllocator,
   3546     VkSurfaceKHR*                               pSurface)
   3547 {
   3548     UNUSED_PARAMETER(pAllocator);
   3549 
   3550     bool skipCall = false;
   3551 
   3552     skipCall |= validate_struct_type(report_data, "vkCreateDisplayPlaneSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR, true);
   3553 
   3554     if (pCreateInfo != NULL)
   3555     {
   3556         skipCall |= validate_struct_pnext(report_data, "vkCreateDisplayPlaneSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3557 
   3558         skipCall |= validate_reserved_flags(report_data, "vkCreateDisplayPlaneSurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3559 
   3560         skipCall |= validate_required_handle(report_data, "vkCreateDisplayPlaneSurfaceKHR", "pCreateInfo->displayMode", pCreateInfo->displayMode);
   3561     }
   3562 
   3563     skipCall |= validate_required_pointer(report_data, "vkCreateDisplayPlaneSurfaceKHR", "pSurface", pSurface);
   3564 
   3565     return skipCall;
   3566 }
   3567 
   3568 
   3569 
   3570 static bool parameter_validation_vkCreateSharedSwapchainsKHR(
   3571     debug_report_data*                          report_data,
   3572     uint32_t                                    swapchainCount,
   3573     const VkSwapchainCreateInfoKHR*             pCreateInfos,
   3574     const VkAllocationCallbacks*                pAllocator,
   3575     VkSwapchainKHR*                             pSwapchains)
   3576 {
   3577     UNUSED_PARAMETER(pAllocator);
   3578 
   3579     bool skipCall = false;
   3580 
   3581     skipCall |= validate_array(report_data, "vkCreateSharedSwapchainsKHR", "swapchainCount", "pCreateInfos", swapchainCount, pCreateInfos, true, true);
   3582 
   3583     skipCall |= validate_array(report_data, "vkCreateSharedSwapchainsKHR", "swapchainCount", "pSwapchains", swapchainCount, pSwapchains, true, true);
   3584 
   3585     return skipCall;
   3586 }
   3587 
   3588 
   3589 #ifdef VK_USE_PLATFORM_XLIB_KHR
   3590 
   3591 static bool parameter_validation_vkCreateXlibSurfaceKHR(
   3592     debug_report_data*                          report_data,
   3593     const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
   3594     const VkAllocationCallbacks*                pAllocator,
   3595     VkSurfaceKHR*                               pSurface)
   3596 {
   3597     UNUSED_PARAMETER(pAllocator);
   3598 
   3599     bool skipCall = false;
   3600 
   3601     skipCall |= validate_struct_type(report_data, "vkCreateXlibSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR, true);
   3602 
   3603     if (pCreateInfo != NULL)
   3604     {
   3605         skipCall |= validate_struct_pnext(report_data, "vkCreateXlibSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3606 
   3607         skipCall |= validate_reserved_flags(report_data, "vkCreateXlibSurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3608 
   3609         skipCall |= validate_required_pointer(report_data, "vkCreateXlibSurfaceKHR", "pCreateInfo->dpy", pCreateInfo->dpy);
   3610     }
   3611 
   3612     skipCall |= validate_required_pointer(report_data, "vkCreateXlibSurfaceKHR", "pSurface", pSurface);
   3613 
   3614     return skipCall;
   3615 }
   3616 
   3617 static bool parameter_validation_vkGetPhysicalDeviceXlibPresentationSupportKHR(
   3618     debug_report_data*                          report_data,
   3619     uint32_t                                    queueFamilyIndex,
   3620     Display*                                    dpy,
   3621     VisualID                                    visualID)
   3622 {
   3623     UNUSED_PARAMETER(queueFamilyIndex);
   3624     UNUSED_PARAMETER(visualID);
   3625 
   3626     bool skipCall = false;
   3627 
   3628     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceXlibPresentationSupportKHR", "dpy", dpy);
   3629 
   3630     return skipCall;
   3631 }
   3632 #endif /* VK_USE_PLATFORM_XLIB_KHR */
   3633 
   3634 #ifdef VK_USE_PLATFORM_XCB_KHR
   3635 
   3636 static bool parameter_validation_vkCreateXcbSurfaceKHR(
   3637     debug_report_data*                          report_data,
   3638     const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
   3639     const VkAllocationCallbacks*                pAllocator,
   3640     VkSurfaceKHR*                               pSurface)
   3641 {
   3642     UNUSED_PARAMETER(pAllocator);
   3643 
   3644     bool skipCall = false;
   3645 
   3646     skipCall |= validate_struct_type(report_data, "vkCreateXcbSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR, true);
   3647 
   3648     if (pCreateInfo != NULL)
   3649     {
   3650         skipCall |= validate_struct_pnext(report_data, "vkCreateXcbSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3651 
   3652         skipCall |= validate_reserved_flags(report_data, "vkCreateXcbSurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3653 
   3654         skipCall |= validate_required_pointer(report_data, "vkCreateXcbSurfaceKHR", "pCreateInfo->connection", pCreateInfo->connection);
   3655     }
   3656 
   3657     skipCall |= validate_required_pointer(report_data, "vkCreateXcbSurfaceKHR", "pSurface", pSurface);
   3658 
   3659     return skipCall;
   3660 }
   3661 
   3662 static bool parameter_validation_vkGetPhysicalDeviceXcbPresentationSupportKHR(
   3663     debug_report_data*                          report_data,
   3664     uint32_t                                    queueFamilyIndex,
   3665     xcb_connection_t*                           connection,
   3666     xcb_visualid_t                              visual_id)
   3667 {
   3668     UNUSED_PARAMETER(queueFamilyIndex);
   3669     UNUSED_PARAMETER(visual_id);
   3670 
   3671     bool skipCall = false;
   3672 
   3673     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceXcbPresentationSupportKHR", "connection", connection);
   3674 
   3675     return skipCall;
   3676 }
   3677 #endif /* VK_USE_PLATFORM_XCB_KHR */
   3678 
   3679 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
   3680 
   3681 static bool parameter_validation_vkCreateWaylandSurfaceKHR(
   3682     debug_report_data*                          report_data,
   3683     const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
   3684     const VkAllocationCallbacks*                pAllocator,
   3685     VkSurfaceKHR*                               pSurface)
   3686 {
   3687     UNUSED_PARAMETER(pAllocator);
   3688 
   3689     bool skipCall = false;
   3690 
   3691     skipCall |= validate_struct_type(report_data, "vkCreateWaylandSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR, true);
   3692 
   3693     if (pCreateInfo != NULL)
   3694     {
   3695         skipCall |= validate_struct_pnext(report_data, "vkCreateWaylandSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3696 
   3697         skipCall |= validate_reserved_flags(report_data, "vkCreateWaylandSurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3698 
   3699         skipCall |= validate_required_pointer(report_data, "vkCreateWaylandSurfaceKHR", "pCreateInfo->display", pCreateInfo->display);
   3700 
   3701         skipCall |= validate_required_pointer(report_data, "vkCreateWaylandSurfaceKHR", "pCreateInfo->surface", pCreateInfo->surface);
   3702     }
   3703 
   3704     skipCall |= validate_required_pointer(report_data, "vkCreateWaylandSurfaceKHR", "pSurface", pSurface);
   3705 
   3706     return skipCall;
   3707 }
   3708 
   3709 static bool parameter_validation_vkGetPhysicalDeviceWaylandPresentationSupportKHR(
   3710     debug_report_data*                          report_data,
   3711     uint32_t                                    queueFamilyIndex,
   3712     struct wl_display*                          display)
   3713 {
   3714     UNUSED_PARAMETER(queueFamilyIndex);
   3715 
   3716     bool skipCall = false;
   3717 
   3718     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceWaylandPresentationSupportKHR", "display", display);
   3719 
   3720     return skipCall;
   3721 }
   3722 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
   3723 
   3724 #ifdef VK_USE_PLATFORM_MIR_KHR
   3725 
   3726 static bool parameter_validation_vkCreateMirSurfaceKHR(
   3727     debug_report_data*                          report_data,
   3728     const VkMirSurfaceCreateInfoKHR*            pCreateInfo,
   3729     const VkAllocationCallbacks*                pAllocator,
   3730     VkSurfaceKHR*                               pSurface)
   3731 {
   3732     UNUSED_PARAMETER(pAllocator);
   3733 
   3734     bool skipCall = false;
   3735 
   3736     skipCall |= validate_struct_type(report_data, "vkCreateMirSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR, true);
   3737 
   3738     if (pCreateInfo != NULL)
   3739     {
   3740         skipCall |= validate_struct_pnext(report_data, "vkCreateMirSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3741 
   3742         skipCall |= validate_reserved_flags(report_data, "vkCreateMirSurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3743 
   3744         skipCall |= validate_required_pointer(report_data, "vkCreateMirSurfaceKHR", "pCreateInfo->connection", pCreateInfo->connection);
   3745 
   3746         skipCall |= validate_required_pointer(report_data, "vkCreateMirSurfaceKHR", "pCreateInfo->mirSurface", pCreateInfo->mirSurface);
   3747     }
   3748 
   3749     skipCall |= validate_required_pointer(report_data, "vkCreateMirSurfaceKHR", "pSurface", pSurface);
   3750 
   3751     return skipCall;
   3752 }
   3753 
   3754 static bool parameter_validation_vkGetPhysicalDeviceMirPresentationSupportKHR(
   3755     debug_report_data*                          report_data,
   3756     uint32_t                                    queueFamilyIndex,
   3757     MirConnection*                              connection)
   3758 {
   3759     UNUSED_PARAMETER(queueFamilyIndex);
   3760 
   3761     bool skipCall = false;
   3762 
   3763     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceMirPresentationSupportKHR", "connection", connection);
   3764 
   3765     return skipCall;
   3766 }
   3767 #endif /* VK_USE_PLATFORM_MIR_KHR */
   3768 
   3769 #ifdef VK_USE_PLATFORM_ANDROID_KHR
   3770 
   3771 static bool parameter_validation_vkCreateAndroidSurfaceKHR(
   3772     debug_report_data*                          report_data,
   3773     const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
   3774     const VkAllocationCallbacks*                pAllocator,
   3775     VkSurfaceKHR*                               pSurface)
   3776 {
   3777     UNUSED_PARAMETER(pAllocator);
   3778 
   3779     bool skipCall = false;
   3780 
   3781     skipCall |= validate_struct_type(report_data, "vkCreateAndroidSurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR, true);
   3782 
   3783     if (pCreateInfo != NULL)
   3784     {
   3785         skipCall |= validate_struct_pnext(report_data, "vkCreateAndroidSurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3786 
   3787         skipCall |= validate_reserved_flags(report_data, "vkCreateAndroidSurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3788 
   3789         skipCall |= validate_required_pointer(report_data, "vkCreateAndroidSurfaceKHR", "pCreateInfo->window", pCreateInfo->window);
   3790     }
   3791 
   3792     skipCall |= validate_required_pointer(report_data, "vkCreateAndroidSurfaceKHR", "pSurface", pSurface);
   3793 
   3794     return skipCall;
   3795 }
   3796 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
   3797 
   3798 #ifdef VK_USE_PLATFORM_WIN32_KHR
   3799 
   3800 static bool parameter_validation_vkCreateWin32SurfaceKHR(
   3801     debug_report_data*                          report_data,
   3802     const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
   3803     const VkAllocationCallbacks*                pAllocator,
   3804     VkSurfaceKHR*                               pSurface)
   3805 {
   3806     UNUSED_PARAMETER(pAllocator);
   3807 
   3808     bool skipCall = false;
   3809 
   3810     skipCall |= validate_struct_type(report_data, "vkCreateWin32SurfaceKHR", "pCreateInfo", "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR", pCreateInfo, VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR, true);
   3811 
   3812     if (pCreateInfo != NULL)
   3813     {
   3814         skipCall |= validate_struct_pnext(report_data, "vkCreateWin32SurfaceKHR", "pCreateInfo->pNext", NULL, pCreateInfo->pNext, 0, NULL, GeneratedHeaderVersion);
   3815 
   3816         skipCall |= validate_reserved_flags(report_data, "vkCreateWin32SurfaceKHR", "pCreateInfo->flags", pCreateInfo->flags);
   3817     }
   3818 
   3819     skipCall |= validate_required_pointer(report_data, "vkCreateWin32SurfaceKHR", "pSurface", pSurface);
   3820 
   3821     return skipCall;
   3822 }
   3823 #endif /* VK_USE_PLATFORM_WIN32_KHR */
   3824 
   3825 
   3826 
   3827 
   3828 const VkDebugReportFlagsEXT AllVkDebugReportFlagBitsEXT = VK_DEBUG_REPORT_INFORMATION_BIT_EXT|VK_DEBUG_REPORT_WARNING_BIT_EXT|VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT|VK_DEBUG_REPORT_ERROR_BIT_EXT|VK_DEBUG_REPORT_DEBUG_BIT_EXT;
   3829 
   3830 static bool parameter_validation_vkDestroyDebugReportCallbackEXT(
   3831     debug_report_data*                          report_data,
   3832     VkDebugReportCallbackEXT                    callback,
   3833     const VkAllocationCallbacks*                pAllocator)
   3834 {
   3835     UNUSED_PARAMETER(pAllocator);
   3836 
   3837     bool skipCall = false;
   3838 
   3839     skipCall |= validate_required_handle(report_data, "vkDestroyDebugReportCallbackEXT", "callback", callback);
   3840 
   3841     return skipCall;
   3842 }
   3843 
   3844 
   3845 
   3846 
   3847 
   3848 
   3849 
   3850 
   3851 
   3852 
   3853 
   3854 
   3855 
   3856 
   3857 
   3858 
   3859 
   3860 
   3861 static bool parameter_validation_vkDebugMarkerSetObjectTagEXT(
   3862     debug_report_data*                          report_data,
   3863     VkDebugMarkerObjectTagInfoEXT*              pTagInfo)
   3864 {
   3865     bool skipCall = false;
   3866 
   3867     skipCall |= validate_struct_type(report_data, "vkDebugMarkerSetObjectTagEXT", "pTagInfo", "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT", pTagInfo, VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT, true);
   3868 
   3869     return skipCall;
   3870 }
   3871 
   3872 static bool parameter_validation_vkDebugMarkerSetObjectNameEXT(
   3873     debug_report_data*                          report_data,
   3874     VkDebugMarkerObjectNameInfoEXT*             pNameInfo)
   3875 {
   3876     bool skipCall = false;
   3877 
   3878     skipCall |= validate_struct_type(report_data, "vkDebugMarkerSetObjectNameEXT", "pNameInfo", "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT", pNameInfo, VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT, true);
   3879 
   3880     return skipCall;
   3881 }
   3882 
   3883 static bool parameter_validation_vkCmdDebugMarkerBeginEXT(
   3884     debug_report_data*                          report_data,
   3885     VkDebugMarkerMarkerInfoEXT*                 pMarkerInfo)
   3886 {
   3887     bool skipCall = false;
   3888 
   3889     skipCall |= validate_struct_type(report_data, "vkCmdDebugMarkerBeginEXT", "pMarkerInfo", "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT", pMarkerInfo, VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, true);
   3890 
   3891     return skipCall;
   3892 }
   3893 
   3894 static bool parameter_validation_vkCmdDebugMarkerInsertEXT(
   3895     debug_report_data*                          report_data,
   3896     VkDebugMarkerMarkerInfoEXT*                 pMarkerInfo)
   3897 {
   3898     bool skipCall = false;
   3899 
   3900     skipCall |= validate_struct_type(report_data, "vkCmdDebugMarkerInsertEXT", "pMarkerInfo", "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT", pMarkerInfo, VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT, true);
   3901 
   3902     return skipCall;
   3903 }
   3904 
   3905 
   3906 
   3907 
   3908 
   3909 
   3910 
   3911 
   3912 
   3913 
   3914 
   3915 
   3916 
   3917 
   3918 
   3919 
   3920 
   3921 
   3922 
   3923 
   3924 
   3925 
   3926 
   3927 const VkExternalMemoryFeatureFlagsNV AllVkExternalMemoryFeatureFlagBitsNV = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV|VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV|VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV;
   3928 const VkExternalMemoryHandleTypeFlagsNV AllVkExternalMemoryHandleTypeFlagBitsNV = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV|VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV;
   3929 
   3930 static bool parameter_validation_vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
   3931     debug_report_data*                          report_data,
   3932     VkFormat                                    format,
   3933     VkImageType                                 type,
   3934     VkImageTiling                               tiling,
   3935     VkImageUsageFlags                           usage,
   3936     VkImageCreateFlags                          flags,
   3937     VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
   3938     VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties)
   3939 {
   3940     UNUSED_PARAMETER(format);
   3941     UNUSED_PARAMETER(type);
   3942     UNUSED_PARAMETER(tiling);
   3943     UNUSED_PARAMETER(usage);
   3944     UNUSED_PARAMETER(flags);
   3945 
   3946     bool skipCall = false;
   3947 
   3948     skipCall |= validate_flags(report_data, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV", "externalHandleType", "VkExternalMemoryHandleTypeFlagBitsNV", AllVkExternalMemoryHandleTypeFlagBitsNV, externalHandleType, true);
   3949 
   3950     skipCall |= validate_required_pointer(report_data, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV", "pExternalImageFormatProperties", pExternalImageFormatProperties);
   3951 
   3952     return skipCall;
   3953 }
   3954 
   3955 
   3956 
   3957 
   3958 
   3959 #ifdef VK_USE_PLATFORM_WIN32_KHR
   3960 
   3961 static bool parameter_validation_vkGetMemoryWin32HandleNV(
   3962     debug_report_data*                          report_data,
   3963     VkDeviceMemory                              memory,
   3964     VkExternalMemoryHandleTypeFlagsNV           handleType,
   3965     HANDLE*                                     pHandle)
   3966 {
   3967     UNUSED_PARAMETER(memory);
   3968     UNUSED_PARAMETER(handleType);
   3969 
   3970     bool skipCall = false;
   3971 
   3972     skipCall |= validate_required_pointer(report_data, "vkGetMemoryWin32HandleNV", "pHandle", pHandle);
   3973 
   3974     return skipCall;
   3975 }
   3976 #endif /* VK_USE_PLATFORM_WIN32_KHR */
   3977 
   3978 #ifdef VK_USE_PLATFORM_WIN32_KHR
   3979 
   3980 #endif /* VK_USE_PLATFORM_WIN32_KHR */
   3981 
   3982 
   3983 
   3984 
   3985 } // namespace parameter_validation
   3986 
   3987 #endif
   3988