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