scripts: Update codegen to use Vulkan-Object
diff --git a/icd/generated/function_declarations.h b/icd/generated/function_declarations.h
index b81bf81..c6710d0 100644
--- a/icd/generated/function_declarations.h
+++ b/icd/generated/function_declarations.h
@@ -19,9 +19,7 @@
 **
 */
 
-
 #pragma once
-
 #include <stdint.h>
 #include <cstring>
 #include <string>
@@ -29,438 +27,510 @@
 #include <vulkan/vulkan.h>
 
 namespace vkmock {
-
 // Map of instance extension name to version
 static const std::unordered_map<std::string, uint32_t> instance_extension_map = {
-    {"VK_KHR_surface", 25},
-    {"VK_KHR_display", 23},
-    {"VK_KHR_xlib_surface", 6},
-    {"VK_KHR_xcb_surface", 6},
-    {"VK_KHR_wayland_surface", 6},
-    {"VK_KHR_android_surface", 6},
-    {"VK_KHR_win32_surface", 6},
-    {"VK_EXT_debug_report", 10},
-    {"VK_GGP_stream_descriptor_surface", 1},
-    {"VK_NV_external_memory_capabilities", 1},
-    {"VK_KHR_get_physical_device_properties2", 2},
-    {"VK_EXT_validation_flags", 3},
-    {"VK_NN_vi_surface", 1},
-    {"VK_KHR_device_group_creation", 1},
-    {"VK_KHR_external_memory_capabilities", 1},
-    {"VK_KHR_external_semaphore_capabilities", 1},
-    {"VK_EXT_direct_mode_display", 1},
-    {"VK_EXT_acquire_xlib_display", 1},
-    {"VK_EXT_display_surface_counter", 1},
-    {"VK_EXT_swapchain_colorspace", 5},
-    {"VK_KHR_external_fence_capabilities", 1},
-    {"VK_KHR_get_surface_capabilities2", 1},
-    {"VK_KHR_get_display_properties2", 1},
-    {"VK_MVK_ios_surface", 3},
-    {"VK_MVK_macos_surface", 3},
-    {"VK_EXT_debug_utils", 2},
-    {"VK_FUCHSIA_imagepipe_surface", 1},
-    {"VK_EXT_metal_surface", 1},
-    {"VK_KHR_surface_protected_capabilities", 1},
-    {"VK_EXT_validation_features", 6},
-    {"VK_EXT_headless_surface", 1},
-    {"VK_EXT_surface_maintenance1", 1},
-    {"VK_EXT_acquire_drm_display", 1},
-    {"VK_EXT_directfb_surface", 1},
-    {"VK_QNX_screen_surface", 1},
-    {"VK_KHR_portability_enumeration", 1},
-    {"VK_GOOGLE_surfaceless_query", 2},
-    {"VK_LUNARG_direct_driver_loading", 1},
-    {"VK_KHR_surface_maintenance1", 1},
-    {"VK_EXT_layer_settings", 2},
-    {"VK_NV_display_stereo", 1},
-    {"VK_OHOS_surface", 1},
+    {"VK_KHR_surface", VK_KHR_SURFACE_SPEC_VERSION},
+    {"VK_KHR_display", VK_KHR_DISPLAY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+    {"VK_KHR_xlib_surface", VK_KHR_XLIB_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_XCB_KHR
+    {"VK_KHR_xcb_surface", VK_KHR_XCB_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+    {"VK_KHR_wayland_surface", VK_KHR_WAYLAND_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    {"VK_KHR_android_surface", VK_KHR_ANDROID_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_KHR_win32_surface", VK_KHR_WIN32_SURFACE_SPEC_VERSION},
+#endif
+    {"VK_KHR_get_physical_device_properties2", VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION},
+    {"VK_KHR_device_group_creation", VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION},
+    {"VK_KHR_external_memory_capabilities", VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION},
+    {"VK_KHR_external_semaphore_capabilities", VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION},
+    {"VK_KHR_external_fence_capabilities", VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION},
+    {"VK_KHR_get_surface_capabilities2", VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION},
+    {"VK_KHR_get_display_properties2", VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION},
+    {"VK_KHR_surface_protected_capabilities", VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION},
+    {"VK_KHR_portability_enumeration", VK_KHR_PORTABILITY_ENUMERATION_SPEC_VERSION},
+    {"VK_KHR_surface_maintenance1", VK_KHR_SURFACE_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_EXT_debug_report", VK_EXT_DEBUG_REPORT_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_GGP
+    {"VK_GGP_stream_descriptor_surface", VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION},
+#endif
+    {"VK_NV_external_memory_capabilities", VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION},
+    {"VK_EXT_validation_flags", VK_EXT_VALIDATION_FLAGS_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_VI_NN
+    {"VK_NN_vi_surface", VK_NN_VI_SURFACE_SPEC_VERSION},
+#endif
+    {"VK_EXT_direct_mode_display", VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
+    {"VK_EXT_acquire_xlib_display", VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION},
+#endif
+    {"VK_EXT_display_surface_counter", VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION},
+    {"VK_EXT_swapchain_colorspace", VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_IOS_MVK
+    {"VK_MVK_ios_surface", VK_MVK_IOS_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_MACOS_MVK
+    {"VK_MVK_macos_surface", VK_MVK_MACOS_SURFACE_SPEC_VERSION},
+#endif
+    {"VK_EXT_debug_utils", VK_EXT_DEBUG_UTILS_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    {"VK_FUCHSIA_imagepipe_surface", VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_METAL_EXT
+    {"VK_EXT_metal_surface", VK_EXT_METAL_SURFACE_SPEC_VERSION},
+#endif
+    {"VK_EXT_validation_features", VK_EXT_VALIDATION_FEATURES_SPEC_VERSION},
+    {"VK_EXT_headless_surface", VK_EXT_HEADLESS_SURFACE_SPEC_VERSION},
+    {"VK_EXT_surface_maintenance1", VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_EXT_acquire_drm_display", VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_DIRECTFB_EXT
+    {"VK_EXT_directfb_surface", VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+    {"VK_QNX_screen_surface", VK_QNX_SCREEN_SURFACE_SPEC_VERSION},
+#endif
+    {"VK_GOOGLE_surfaceless_query", VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION},
+    {"VK_LUNARG_direct_driver_loading", VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION},
+    {"VK_EXT_layer_settings", VK_EXT_LAYER_SETTINGS_SPEC_VERSION},
+    {"VK_NV_display_stereo", VK_NV_DISPLAY_STEREO_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_OHOS
+    {"VK_OHOS_surface", VK_OHOS_SURFACE_SPEC_VERSION},
+#endif
 };
 // Map of device extension name to version
 static const std::unordered_map<std::string, uint32_t> device_extension_map = {
-    {"VK_KHR_swapchain", 70},
-    {"VK_KHR_display_swapchain", 10},
-    {"VK_NV_glsl_shader", 1},
-    {"VK_EXT_depth_range_unrestricted", 1},
-    {"VK_KHR_sampler_mirror_clamp_to_edge", 3},
-    {"VK_IMG_filter_cubic", 1},
-    {"VK_AMD_rasterization_order", 1},
-    {"VK_AMD_shader_trinary_minmax", 1},
-    {"VK_AMD_shader_explicit_vertex_parameter", 1},
-    {"VK_EXT_debug_marker", 4},
-    {"VK_KHR_video_queue", 8},
-    {"VK_KHR_video_decode_queue", 8},
-    {"VK_AMD_gcn_shader", 1},
-    {"VK_NV_dedicated_allocation", 1},
-    {"VK_EXT_transform_feedback", 1},
-    {"VK_NVX_binary_import", 2},
-    {"VK_NVX_image_view_handle", 3},
-    {"VK_AMD_draw_indirect_count", 2},
-    {"VK_AMD_negative_viewport_height", 1},
-    {"VK_AMD_gpu_shader_half_float", 2},
-    {"VK_AMD_shader_ballot", 1},
-    {"VK_KHR_video_encode_h264", 14},
-    {"VK_KHR_video_encode_h265", 14},
-    {"VK_KHR_video_decode_h264", 9},
-    {"VK_AMD_texture_gather_bias_lod", 1},
-    {"VK_AMD_shader_info", 1},
-    {"VK_KHR_dynamic_rendering", 1},
-    {"VK_AMD_shader_image_load_store_lod", 1},
-    {"VK_NV_corner_sampled_image", 2},
-    {"VK_KHR_multiview", 1},
-    {"VK_IMG_format_pvrtc", 1},
-    {"VK_NV_external_memory", 1},
-    {"VK_NV_external_memory_win32", 1},
-    {"VK_NV_win32_keyed_mutex", 2},
-    {"VK_KHR_device_group", 4},
-    {"VK_KHR_shader_draw_parameters", 1},
-    {"VK_EXT_shader_subgroup_ballot", 1},
-    {"VK_EXT_shader_subgroup_vote", 1},
-    {"VK_EXT_texture_compression_astc_hdr", 1},
-    {"VK_EXT_astc_decode_mode", 1},
-    {"VK_EXT_pipeline_robustness", 1},
-    {"VK_KHR_maintenance1", 2},
-    {"VK_KHR_external_memory", 1},
-    {"VK_KHR_external_memory_win32", 1},
-    {"VK_KHR_external_memory_fd", 1},
-    {"VK_KHR_win32_keyed_mutex", 1},
-    {"VK_KHR_external_semaphore", 1},
-    {"VK_KHR_external_semaphore_win32", 1},
-    {"VK_KHR_external_semaphore_fd", 1},
-    {"VK_KHR_push_descriptor", 2},
-    {"VK_EXT_conditional_rendering", 2},
-    {"VK_KHR_shader_float16_int8", 1},
-    {"VK_KHR_16bit_storage", 1},
-    {"VK_KHR_incremental_present", 2},
-    {"VK_KHR_descriptor_update_template", 1},
-    {"VK_NV_clip_space_w_scaling", 1},
-    {"VK_EXT_display_control", 1},
-    {"VK_GOOGLE_display_timing", 1},
-    {"VK_NV_sample_mask_override_coverage", 1},
-    {"VK_NV_geometry_shader_passthrough", 1},
-    {"VK_NV_viewport_array2", 1},
-    {"VK_NVX_multiview_per_view_attributes", 1},
-    {"VK_NV_viewport_swizzle", 1},
-    {"VK_EXT_discard_rectangles", 2},
-    {"VK_EXT_conservative_rasterization", 1},
-    {"VK_EXT_depth_clip_enable", 1},
-    {"VK_EXT_hdr_metadata", 3},
-    {"VK_KHR_imageless_framebuffer", 1},
-    {"VK_KHR_create_renderpass2", 1},
-    {"VK_IMG_relaxed_line_rasterization", 1},
-    {"VK_KHR_shared_presentable_image", 1},
-    {"VK_KHR_external_fence", 1},
-    {"VK_KHR_external_fence_win32", 1},
-    {"VK_KHR_external_fence_fd", 1},
-    {"VK_KHR_performance_query", 1},
-    {"VK_KHR_maintenance2", 1},
-    {"VK_KHR_variable_pointers", 1},
-    {"VK_EXT_external_memory_dma_buf", 1},
-    {"VK_EXT_queue_family_foreign", 1},
-    {"VK_KHR_dedicated_allocation", 3},
-    {"VK_ANDROID_external_memory_android_hardware_buffer", 5},
-    {"VK_EXT_sampler_filter_minmax", 2},
-    {"VK_KHR_storage_buffer_storage_class", 1},
-    {"VK_AMD_gpu_shader_int16", 2},
-    {"VK_AMDX_shader_enqueue", 2},
-    {"VK_AMD_mixed_attachment_samples", 1},
-    {"VK_AMD_shader_fragment_mask", 1},
-    {"VK_EXT_inline_uniform_block", 1},
-    {"VK_EXT_shader_stencil_export", 1},
-    {"VK_KHR_shader_bfloat16", 1},
-    {"VK_EXT_sample_locations", 1},
-    {"VK_KHR_relaxed_block_layout", 1},
-    {"VK_KHR_get_memory_requirements2", 1},
-    {"VK_KHR_image_format_list", 1},
-    {"VK_EXT_blend_operation_advanced", 2},
-    {"VK_NV_fragment_coverage_to_color", 1},
-    {"VK_KHR_acceleration_structure", 13},
-    {"VK_KHR_ray_tracing_pipeline", 1},
-    {"VK_KHR_ray_query", 1},
-    {"VK_NV_framebuffer_mixed_samples", 1},
-    {"VK_NV_fill_rectangle", 1},
-    {"VK_NV_shader_sm_builtins", 1},
-    {"VK_EXT_post_depth_coverage", 1},
-    {"VK_KHR_sampler_ycbcr_conversion", 14},
-    {"VK_KHR_bind_memory2", 1},
-    {"VK_EXT_image_drm_format_modifier", 2},
-    {"VK_EXT_descriptor_indexing", 2},
-    {"VK_EXT_shader_viewport_index_layer", 1},
-    {"VK_NV_shading_rate_image", 3},
-    {"VK_NV_ray_tracing", 3},
-    {"VK_NV_representative_fragment_test", 2},
-    {"VK_KHR_maintenance3", 1},
-    {"VK_KHR_draw_indirect_count", 1},
-    {"VK_EXT_filter_cubic", 3},
-    {"VK_QCOM_render_pass_shader_resolve", 4},
-    {"VK_EXT_global_priority", 2},
-    {"VK_KHR_shader_subgroup_extended_types", 1},
-    {"VK_KHR_8bit_storage", 1},
-    {"VK_EXT_external_memory_host", 1},
-    {"VK_AMD_buffer_marker", 1},
-    {"VK_KHR_shader_atomic_int64", 1},
-    {"VK_KHR_shader_clock", 1},
-    {"VK_AMD_pipeline_compiler_control", 1},
-    {"VK_EXT_calibrated_timestamps", 2},
-    {"VK_AMD_shader_core_properties", 2},
-    {"VK_KHR_video_decode_h265", 8},
-    {"VK_KHR_global_priority", 1},
-    {"VK_AMD_memory_overallocation_behavior", 1},
-    {"VK_EXT_vertex_attribute_divisor", 3},
-    {"VK_GGP_frame_token", 1},
-    {"VK_EXT_pipeline_creation_feedback", 1},
-    {"VK_KHR_driver_properties", 1},
-    {"VK_KHR_shader_float_controls", 4},
-    {"VK_NV_shader_subgroup_partitioned", 1},
-    {"VK_KHR_depth_stencil_resolve", 1},
-    {"VK_KHR_swapchain_mutable_format", 1},
-    {"VK_NV_compute_shader_derivatives", 1},
-    {"VK_NV_mesh_shader", 1},
-    {"VK_NV_fragment_shader_barycentric", 1},
-    {"VK_NV_shader_image_footprint", 2},
-    {"VK_NV_scissor_exclusive", 2},
-    {"VK_NV_device_diagnostic_checkpoints", 2},
-    {"VK_KHR_timeline_semaphore", 2},
-    {"VK_INTEL_shader_integer_functions2", 1},
-    {"VK_INTEL_performance_query", 2},
-    {"VK_KHR_vulkan_memory_model", 3},
-    {"VK_EXT_pci_bus_info", 2},
-    {"VK_AMD_display_native_hdr", 1},
-    {"VK_KHR_shader_terminate_invocation", 1},
-    {"VK_EXT_fragment_density_map", 2},
-    {"VK_EXT_scalar_block_layout", 1},
-    {"VK_GOOGLE_hlsl_functionality1", 1},
-    {"VK_GOOGLE_decorate_string", 1},
-    {"VK_EXT_subgroup_size_control", 2},
-    {"VK_KHR_fragment_shading_rate", 2},
-    {"VK_AMD_shader_core_properties2", 1},
-    {"VK_AMD_device_coherent_memory", 1},
-    {"VK_KHR_dynamic_rendering_local_read", 1},
-    {"VK_EXT_shader_image_atomic_int64", 1},
-    {"VK_KHR_shader_quad_control", 1},
-    {"VK_KHR_spirv_1_4", 1},
-    {"VK_EXT_memory_budget", 1},
-    {"VK_EXT_memory_priority", 1},
-    {"VK_NV_dedicated_allocation_image_aliasing", 1},
-    {"VK_KHR_separate_depth_stencil_layouts", 1},
-    {"VK_EXT_buffer_device_address", 2},
-    {"VK_EXT_tooling_info", 1},
-    {"VK_EXT_separate_stencil_usage", 1},
-    {"VK_KHR_present_wait", 1},
-    {"VK_NV_cooperative_matrix", 1},
-    {"VK_NV_coverage_reduction_mode", 1},
-    {"VK_EXT_fragment_shader_interlock", 1},
-    {"VK_EXT_ycbcr_image_arrays", 1},
-    {"VK_KHR_uniform_buffer_standard_layout", 1},
-    {"VK_EXT_provoking_vertex", 1},
-    {"VK_EXT_full_screen_exclusive", 4},
-    {"VK_KHR_buffer_device_address", 1},
-    {"VK_EXT_line_rasterization", 1},
-    {"VK_EXT_shader_atomic_float", 1},
-    {"VK_EXT_host_query_reset", 1},
-    {"VK_EXT_index_type_uint8", 1},
-    {"VK_EXT_extended_dynamic_state", 1},
-    {"VK_KHR_deferred_host_operations", 4},
-    {"VK_KHR_pipeline_executable_properties", 1},
-    {"VK_EXT_host_image_copy", 1},
-    {"VK_KHR_map_memory2", 1},
-    {"VK_EXT_map_memory_placed", 1},
-    {"VK_EXT_shader_atomic_float2", 1},
-    {"VK_EXT_swapchain_maintenance1", 1},
-    {"VK_EXT_shader_demote_to_helper_invocation", 1},
-    {"VK_NV_device_generated_commands", 3},
-    {"VK_NV_inherited_viewport_scissor", 1},
-    {"VK_KHR_shader_integer_dot_product", 1},
-    {"VK_EXT_texel_buffer_alignment", 1},
-    {"VK_QCOM_render_pass_transform", 5},
-    {"VK_EXT_depth_bias_control", 1},
-    {"VK_EXT_device_memory_report", 2},
-    {"VK_EXT_robustness2", 1},
-    {"VK_EXT_custom_border_color", 12},
-    {"VK_GOOGLE_user_type", 1},
-    {"VK_KHR_pipeline_library", 1},
-    {"VK_NV_present_barrier", 1},
-    {"VK_KHR_shader_non_semantic_info", 1},
-    {"VK_KHR_present_id", 1},
-    {"VK_EXT_private_data", 1},
-    {"VK_EXT_pipeline_creation_cache_control", 3},
-    {"VK_KHR_video_encode_queue", 12},
-    {"VK_NV_device_diagnostics_config", 2},
-    {"VK_QCOM_render_pass_store_ops", 2},
-    {"VK_NV_cuda_kernel_launch", 2},
-    {"VK_QCOM_tile_shading", 2},
-    {"VK_NV_low_latency", 1},
-    {"VK_EXT_metal_objects", 2},
-    {"VK_KHR_synchronization2", 1},
-    {"VK_EXT_descriptor_buffer", 1},
-    {"VK_EXT_graphics_pipeline_library", 1},
-    {"VK_AMD_shader_early_and_late_fragment_tests", 1},
-    {"VK_KHR_fragment_shader_barycentric", 1},
-    {"VK_KHR_shader_subgroup_uniform_control_flow", 1},
-    {"VK_KHR_zero_initialize_workgroup_memory", 1},
-    {"VK_NV_fragment_shading_rate_enums", 1},
-    {"VK_NV_ray_tracing_motion_blur", 1},
-    {"VK_EXT_mesh_shader", 1},
-    {"VK_EXT_ycbcr_2plane_444_formats", 1},
-    {"VK_EXT_fragment_density_map2", 1},
-    {"VK_QCOM_rotated_copy_commands", 2},
-    {"VK_EXT_image_robustness", 1},
-    {"VK_KHR_workgroup_memory_explicit_layout", 1},
-    {"VK_KHR_copy_commands2", 1},
-    {"VK_EXT_image_compression_control", 1},
-    {"VK_EXT_attachment_feedback_loop_layout", 2},
-    {"VK_EXT_4444_formats", 1},
-    {"VK_EXT_device_fault", 2},
-    {"VK_ARM_rasterization_order_attachment_access", 1},
-    {"VK_EXT_rgba10x6_formats", 1},
-    {"VK_NV_acquire_winrt_display", 1},
-    {"VK_VALVE_mutable_descriptor_type", 1},
-    {"VK_EXT_vertex_input_dynamic_state", 2},
-    {"VK_EXT_physical_device_drm", 1},
-    {"VK_EXT_device_address_binding_report", 1},
-    {"VK_EXT_depth_clip_control", 1},
-    {"VK_EXT_primitive_topology_list_restart", 1},
-    {"VK_KHR_format_feature_flags2", 2},
-    {"VK_EXT_present_mode_fifo_latest_ready", 1},
-    {"VK_FUCHSIA_external_memory", 1},
-    {"VK_FUCHSIA_external_semaphore", 1},
-    {"VK_FUCHSIA_buffer_collection", 2},
-    {"VK_HUAWEI_subpass_shading", 3},
-    {"VK_HUAWEI_invocation_mask", 1},
-    {"VK_NV_external_memory_rdma", 1},
-    {"VK_EXT_pipeline_properties", 1},
-    {"VK_EXT_frame_boundary", 1},
-    {"VK_EXT_multisampled_render_to_single_sampled", 1},
-    {"VK_EXT_extended_dynamic_state2", 1},
-    {"VK_EXT_color_write_enable", 1},
-    {"VK_EXT_primitives_generated_query", 1},
-    {"VK_KHR_ray_tracing_maintenance1", 1},
-    {"VK_KHR_shader_untyped_pointers", 1},
-    {"VK_EXT_global_priority_query", 1},
-    {"VK_VALVE_video_encode_rgb_conversion", 1},
-    {"VK_EXT_image_view_min_lod", 1},
-    {"VK_EXT_multi_draw", 1},
-    {"VK_EXT_image_2d_view_of_3d", 1},
-    {"VK_EXT_shader_tile_image", 1},
-    {"VK_EXT_opacity_micromap", 2},
-    {"VK_NV_displacement_micromap", 2},
-    {"VK_EXT_load_store_op_none", 1},
-    {"VK_HUAWEI_cluster_culling_shader", 3},
-    {"VK_EXT_border_color_swizzle", 1},
-    {"VK_EXT_pageable_device_local_memory", 1},
-    {"VK_KHR_maintenance4", 2},
-    {"VK_ARM_shader_core_properties", 1},
-    {"VK_KHR_shader_subgroup_rotate", 2},
-    {"VK_ARM_scheduling_controls", 1},
-    {"VK_EXT_image_sliced_view_of_3d", 1},
-    {"VK_VALVE_descriptor_set_host_mapping", 1},
-    {"VK_EXT_depth_clamp_zero_one", 1},
-    {"VK_EXT_non_seamless_cube_map", 1},
-    {"VK_ARM_render_pass_striped", 1},
-    {"VK_QCOM_fragment_density_map_offset", 3},
-    {"VK_NV_copy_memory_indirect", 1},
-    {"VK_NV_memory_decompression", 1},
-    {"VK_NV_device_generated_commands_compute", 2},
-    {"VK_NV_ray_tracing_linear_swept_spheres", 1},
-    {"VK_NV_linear_color_attachment", 1},
-    {"VK_KHR_shader_maximal_reconvergence", 1},
-    {"VK_EXT_image_compression_control_swapchain", 1},
-    {"VK_QCOM_image_processing", 1},
-    {"VK_EXT_nested_command_buffer", 1},
-    {"VK_EXT_external_memory_acquire_unmodified", 1},
-    {"VK_EXT_extended_dynamic_state3", 2},
-    {"VK_EXT_subpass_merge_feedback", 2},
-    {"VK_ARM_tensors", 1},
-    {"VK_EXT_shader_module_identifier", 1},
-    {"VK_EXT_rasterization_order_attachment_access", 1},
-    {"VK_NV_optical_flow", 1},
-    {"VK_EXT_legacy_dithering", 2},
-    {"VK_EXT_pipeline_protected_access", 1},
-    {"VK_ANDROID_external_format_resolve", 1},
-    {"VK_KHR_maintenance5", 1},
-    {"VK_AMD_anti_lag", 1},
-    {"VK_AMDX_dense_geometry_format", 1},
-    {"VK_KHR_present_id2", 1},
-    {"VK_KHR_present_wait2", 1},
-    {"VK_KHR_ray_tracing_position_fetch", 1},
-    {"VK_EXT_shader_object", 1},
-    {"VK_KHR_pipeline_binary", 1},
-    {"VK_QCOM_tile_properties", 1},
-    {"VK_SEC_amigo_profiling", 1},
-    {"VK_KHR_swapchain_maintenance1", 1},
-    {"VK_QCOM_multiview_per_view_viewports", 1},
-    {"VK_NV_ray_tracing_invocation_reorder", 1},
-    {"VK_NV_cooperative_vector", 4},
-    {"VK_NV_extended_sparse_address_space", 1},
-    {"VK_EXT_mutable_descriptor_type", 1},
-    {"VK_EXT_legacy_vertex_attributes", 1},
-    {"VK_ARM_shader_core_builtins", 2},
-    {"VK_EXT_pipeline_library_group_handles", 1},
-    {"VK_EXT_dynamic_rendering_unused_attachments", 1},
-    {"VK_NV_low_latency2", 2},
-    {"VK_KHR_cooperative_matrix", 2},
-    {"VK_ARM_data_graph", 1},
-    {"VK_QCOM_multiview_per_view_render_areas", 1},
-    {"VK_KHR_compute_shader_derivatives", 1},
-    {"VK_KHR_video_decode_av1", 1},
-    {"VK_KHR_video_encode_av1", 1},
-    {"VK_KHR_video_decode_vp9", 1},
-    {"VK_KHR_video_maintenance1", 1},
-    {"VK_NV_per_stage_descriptor_set", 1},
-    {"VK_QCOM_image_processing2", 1},
-    {"VK_QCOM_filter_cubic_weights", 1},
-    {"VK_QCOM_ycbcr_degamma", 1},
-    {"VK_QCOM_filter_cubic_clamp", 1},
-    {"VK_EXT_attachment_feedback_loop_dynamic_state", 1},
-    {"VK_KHR_vertex_attribute_divisor", 1},
-    {"VK_KHR_load_store_op_none", 1},
-    {"VK_KHR_unified_image_layouts", 1},
-    {"VK_KHR_shader_float_controls2", 1},
-    {"VK_QNX_external_memory_screen_buffer", 1},
-    {"VK_MSFT_layered_driver", 1},
-    {"VK_KHR_index_type_uint8", 1},
-    {"VK_KHR_line_rasterization", 1},
-    {"VK_KHR_calibrated_timestamps", 1},
-    {"VK_KHR_shader_expect_assume", 1},
-    {"VK_KHR_maintenance6", 1},
-    {"VK_NV_descriptor_pool_overallocation", 1},
-    {"VK_QCOM_tile_memory_heap", 1},
-    {"VK_KHR_copy_memory_indirect", 1},
-    {"VK_KHR_video_encode_intra_refresh", 1},
-    {"VK_KHR_video_encode_quantization_map", 2},
-    {"VK_NV_raw_access_chains", 1},
-    {"VK_NV_external_compute_queue", 1},
-    {"VK_KHR_shader_relaxed_extended_instruction", 1},
-    {"VK_NV_command_buffer_inheritance", 1},
-    {"VK_KHR_maintenance7", 1},
-    {"VK_NV_shader_atomic_float16_vector", 1},
-    {"VK_EXT_shader_replicated_composites", 1},
-    {"VK_EXT_shader_float8", 1},
-    {"VK_NV_ray_tracing_validation", 1},
-    {"VK_NV_cluster_acceleration_structure", 4},
-    {"VK_NV_partitioned_acceleration_structure", 1},
-    {"VK_EXT_device_generated_commands", 1},
-    {"VK_KHR_maintenance8", 1},
-    {"VK_MESA_image_alignment_control", 1},
-    {"VK_EXT_depth_clamp_control", 1},
-    {"VK_KHR_maintenance9", 1},
-    {"VK_KHR_video_maintenance2", 1},
-    {"VK_HUAWEI_hdr_vivid", 1},
-    {"VK_NV_cooperative_matrix2", 1},
-    {"VK_ARM_pipeline_opacity_micromap", 1},
-    {"VK_EXT_external_memory_metal", 1},
-    {"VK_KHR_depth_clamp_zero_one", 1},
-    {"VK_EXT_vertex_attribute_robustness", 1},
-    {"VK_ARM_format_pack", 1},
-    {"VK_VALVE_fragment_density_map_layered", 1},
-    {"VK_KHR_robustness2", 1},
-    {"VK_NV_present_metering", 1},
-    {"VK_EXT_fragment_density_map_offset", 1},
-    {"VK_EXT_zero_initialize_device_memory", 1},
-    {"VK_KHR_present_mode_fifo_latest_ready", 1},
-    {"VK_SEC_pipeline_cache_incremental_mode", 1},
+    {"VK_KHR_swapchain", VK_KHR_SWAPCHAIN_SPEC_VERSION},
+    {"VK_KHR_display_swapchain", VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION},
+    {"VK_KHR_sampler_mirror_clamp_to_edge", VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION},
+    {"VK_KHR_video_queue", VK_KHR_VIDEO_QUEUE_SPEC_VERSION},
+    {"VK_KHR_video_decode_queue", VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION},
+    {"VK_KHR_video_encode_h264", VK_KHR_VIDEO_ENCODE_H264_SPEC_VERSION},
+    {"VK_KHR_video_encode_h265", VK_KHR_VIDEO_ENCODE_H265_SPEC_VERSION},
+    {"VK_KHR_video_decode_h264", VK_KHR_VIDEO_DECODE_H264_SPEC_VERSION},
+    {"VK_KHR_dynamic_rendering", VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION},
+    {"VK_KHR_multiview", VK_KHR_MULTIVIEW_SPEC_VERSION},
+    {"VK_KHR_device_group", VK_KHR_DEVICE_GROUP_SPEC_VERSION},
+    {"VK_KHR_shader_draw_parameters", VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION},
+    {"VK_KHR_maintenance1", VK_KHR_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_KHR_external_memory", VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_KHR_external_memory_win32", VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION},
+#endif
+    {"VK_KHR_external_memory_fd", VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_KHR_win32_keyed_mutex", VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION},
+#endif
+    {"VK_KHR_external_semaphore", VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_KHR_external_semaphore_win32", VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION},
+#endif
+    {"VK_KHR_external_semaphore_fd", VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION},
+    {"VK_KHR_push_descriptor", VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION},
+    {"VK_KHR_shader_float16_int8", VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION},
+    {"VK_KHR_16bit_storage", VK_KHR_16BIT_STORAGE_SPEC_VERSION},
+    {"VK_KHR_incremental_present", VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION},
+    {"VK_KHR_descriptor_update_template", VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION},
+    {"VK_KHR_imageless_framebuffer", VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION},
+    {"VK_KHR_create_renderpass2", VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION},
+    {"VK_KHR_shared_presentable_image", VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION},
+    {"VK_KHR_external_fence", VK_KHR_EXTERNAL_FENCE_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_KHR_external_fence_win32", VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION},
+#endif
+    {"VK_KHR_external_fence_fd", VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION},
+    {"VK_KHR_performance_query", VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION},
+    {"VK_KHR_maintenance2", VK_KHR_MAINTENANCE_2_SPEC_VERSION},
+    {"VK_KHR_variable_pointers", VK_KHR_VARIABLE_POINTERS_SPEC_VERSION},
+    {"VK_KHR_dedicated_allocation", VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION},
+    {"VK_KHR_storage_buffer_storage_class", VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION},
+    {"VK_KHR_shader_bfloat16", VK_KHR_SHADER_BFLOAT16_SPEC_VERSION},
+    {"VK_KHR_relaxed_block_layout", VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION},
+    {"VK_KHR_get_memory_requirements2", VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION},
+    {"VK_KHR_image_format_list", VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION},
+    {"VK_KHR_sampler_ycbcr_conversion", VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION},
+    {"VK_KHR_bind_memory2", VK_KHR_BIND_MEMORY_2_SPEC_VERSION},
+    {"VK_KHR_maintenance3", VK_KHR_MAINTENANCE_3_SPEC_VERSION},
+    {"VK_KHR_draw_indirect_count", VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION},
+    {"VK_KHR_shader_subgroup_extended_types", VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION},
+    {"VK_KHR_8bit_storage", VK_KHR_8BIT_STORAGE_SPEC_VERSION},
+    {"VK_KHR_shader_atomic_int64", VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION},
+    {"VK_KHR_shader_clock", VK_KHR_SHADER_CLOCK_SPEC_VERSION},
+    {"VK_KHR_video_decode_h265", VK_KHR_VIDEO_DECODE_H265_SPEC_VERSION},
+    {"VK_KHR_global_priority", VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION},
+    {"VK_KHR_driver_properties", VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION},
+    {"VK_KHR_shader_float_controls", VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION},
+    {"VK_KHR_depth_stencil_resolve", VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION},
+    {"VK_KHR_swapchain_mutable_format", VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION},
+    {"VK_KHR_timeline_semaphore", VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION},
+    {"VK_KHR_vulkan_memory_model", VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION},
+    {"VK_KHR_shader_terminate_invocation", VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION},
+    {"VK_KHR_fragment_shading_rate", VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION},
+    {"VK_KHR_dynamic_rendering_local_read", VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION},
+    {"VK_KHR_shader_quad_control", VK_KHR_SHADER_QUAD_CONTROL_SPEC_VERSION},
+    {"VK_KHR_spirv_1_4", VK_KHR_SPIRV_1_4_SPEC_VERSION},
+    {"VK_KHR_separate_depth_stencil_layouts", VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION},
+    {"VK_KHR_present_wait", VK_KHR_PRESENT_WAIT_SPEC_VERSION},
+    {"VK_KHR_uniform_buffer_standard_layout", VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION},
+    {"VK_KHR_buffer_device_address", VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION},
+    {"VK_KHR_deferred_host_operations", VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION},
+    {"VK_KHR_pipeline_executable_properties", VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION},
+    {"VK_KHR_map_memory2", VK_KHR_MAP_MEMORY_2_SPEC_VERSION},
+    {"VK_KHR_shader_integer_dot_product", VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION},
+    {"VK_KHR_pipeline_library", VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION},
+    {"VK_KHR_shader_non_semantic_info", VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION},
+    {"VK_KHR_present_id", VK_KHR_PRESENT_ID_SPEC_VERSION},
+    {"VK_KHR_video_encode_queue", VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION},
+    {"VK_KHR_synchronization2", VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION},
+    {"VK_KHR_fragment_shader_barycentric", VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION},
+    {"VK_KHR_shader_subgroup_uniform_control_flow", VK_KHR_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_SPEC_VERSION},
+    {"VK_KHR_zero_initialize_workgroup_memory", VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION},
+    {"VK_KHR_workgroup_memory_explicit_layout", VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION},
+    {"VK_KHR_copy_commands2", VK_KHR_COPY_COMMANDS_2_SPEC_VERSION},
+    {"VK_KHR_format_feature_flags2", VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION},
+    {"VK_KHR_ray_tracing_maintenance1", VK_KHR_RAY_TRACING_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_KHR_shader_untyped_pointers", VK_KHR_SHADER_UNTYPED_POINTERS_SPEC_VERSION},
+    {"VK_KHR_maintenance4", VK_KHR_MAINTENANCE_4_SPEC_VERSION},
+    {"VK_KHR_shader_subgroup_rotate", VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION},
+    {"VK_KHR_shader_maximal_reconvergence", VK_KHR_SHADER_MAXIMAL_RECONVERGENCE_SPEC_VERSION},
+    {"VK_KHR_maintenance5", VK_KHR_MAINTENANCE_5_SPEC_VERSION},
+    {"VK_KHR_present_id2", VK_KHR_PRESENT_ID_2_SPEC_VERSION},
+    {"VK_KHR_present_wait2", VK_KHR_PRESENT_WAIT_2_SPEC_VERSION},
+    {"VK_KHR_ray_tracing_position_fetch", VK_KHR_RAY_TRACING_POSITION_FETCH_SPEC_VERSION},
+    {"VK_KHR_pipeline_binary", VK_KHR_PIPELINE_BINARY_SPEC_VERSION},
+    {"VK_KHR_swapchain_maintenance1", VK_KHR_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_KHR_cooperative_matrix", VK_KHR_COOPERATIVE_MATRIX_SPEC_VERSION},
+    {"VK_KHR_compute_shader_derivatives", VK_KHR_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION},
+    {"VK_KHR_video_decode_av1", VK_KHR_VIDEO_DECODE_AV1_SPEC_VERSION},
+    {"VK_KHR_video_encode_av1", VK_KHR_VIDEO_ENCODE_AV1_SPEC_VERSION},
+    {"VK_KHR_video_decode_vp9", VK_KHR_VIDEO_DECODE_VP9_SPEC_VERSION},
+    {"VK_KHR_video_maintenance1", VK_KHR_VIDEO_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_KHR_vertex_attribute_divisor", VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION},
+    {"VK_KHR_load_store_op_none", VK_KHR_LOAD_STORE_OP_NONE_SPEC_VERSION},
+    {"VK_KHR_unified_image_layouts", VK_KHR_UNIFIED_IMAGE_LAYOUTS_SPEC_VERSION},
+    {"VK_KHR_shader_float_controls2", VK_KHR_SHADER_FLOAT_CONTROLS_2_SPEC_VERSION},
+    {"VK_KHR_index_type_uint8", VK_KHR_INDEX_TYPE_UINT8_SPEC_VERSION},
+    {"VK_KHR_line_rasterization", VK_KHR_LINE_RASTERIZATION_SPEC_VERSION},
+    {"VK_KHR_calibrated_timestamps", VK_KHR_CALIBRATED_TIMESTAMPS_SPEC_VERSION},
+    {"VK_KHR_shader_expect_assume", VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION},
+    {"VK_KHR_maintenance6", VK_KHR_MAINTENANCE_6_SPEC_VERSION},
+    {"VK_KHR_copy_memory_indirect", VK_KHR_COPY_MEMORY_INDIRECT_SPEC_VERSION},
+    {"VK_KHR_video_encode_intra_refresh", VK_KHR_VIDEO_ENCODE_INTRA_REFRESH_SPEC_VERSION},
+    {"VK_KHR_video_encode_quantization_map", VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_SPEC_VERSION},
+    {"VK_KHR_shader_relaxed_extended_instruction", VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION},
+    {"VK_KHR_maintenance7", VK_KHR_MAINTENANCE_7_SPEC_VERSION},
+    {"VK_KHR_maintenance8", VK_KHR_MAINTENANCE_8_SPEC_VERSION},
+    {"VK_KHR_maintenance9", VK_KHR_MAINTENANCE_9_SPEC_VERSION},
+    {"VK_KHR_video_maintenance2", VK_KHR_VIDEO_MAINTENANCE_2_SPEC_VERSION},
+    {"VK_KHR_depth_clamp_zero_one", VK_KHR_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION},
+    {"VK_KHR_robustness2", VK_KHR_ROBUSTNESS_2_SPEC_VERSION},
+    {"VK_KHR_present_mode_fifo_latest_ready", VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION},
+    {"VK_NV_glsl_shader", VK_NV_GLSL_SHADER_SPEC_VERSION},
+    {"VK_EXT_depth_range_unrestricted", VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION},
+    {"VK_IMG_filter_cubic", VK_IMG_FILTER_CUBIC_SPEC_VERSION},
+    {"VK_AMD_rasterization_order", VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION},
+    {"VK_AMD_shader_trinary_minmax", VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION},
+    {"VK_AMD_shader_explicit_vertex_parameter", VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION},
+    {"VK_EXT_debug_marker", VK_EXT_DEBUG_MARKER_SPEC_VERSION},
+    {"VK_AMD_gcn_shader", VK_AMD_GCN_SHADER_SPEC_VERSION},
+    {"VK_NV_dedicated_allocation", VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION},
+    {"VK_EXT_transform_feedback", VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION},
+    {"VK_NVX_binary_import", VK_NVX_BINARY_IMPORT_SPEC_VERSION},
+    {"VK_NVX_image_view_handle", VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION},
+    {"VK_AMD_draw_indirect_count", VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION},
+    {"VK_AMD_negative_viewport_height", VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION},
+    {"VK_AMD_gpu_shader_half_float", VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION},
+    {"VK_AMD_shader_ballot", VK_AMD_SHADER_BALLOT_SPEC_VERSION},
+    {"VK_AMD_texture_gather_bias_lod", VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION},
+    {"VK_AMD_shader_info", VK_AMD_SHADER_INFO_SPEC_VERSION},
+    {"VK_AMD_shader_image_load_store_lod", VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION},
+    {"VK_NV_corner_sampled_image", VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION},
+    {"VK_IMG_format_pvrtc", VK_IMG_FORMAT_PVRTC_SPEC_VERSION},
+    {"VK_NV_external_memory", VK_NV_EXTERNAL_MEMORY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_NV_external_memory_win32", VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_NV_win32_keyed_mutex", VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION},
+#endif
+    {"VK_EXT_shader_subgroup_ballot", VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION},
+    {"VK_EXT_shader_subgroup_vote", VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION},
+    {"VK_EXT_texture_compression_astc_hdr", VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION},
+    {"VK_EXT_astc_decode_mode", VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION},
+    {"VK_EXT_pipeline_robustness", VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION},
+    {"VK_EXT_conditional_rendering", VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION},
+    {"VK_NV_clip_space_w_scaling", VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION},
+    {"VK_EXT_display_control", VK_EXT_DISPLAY_CONTROL_SPEC_VERSION},
+    {"VK_GOOGLE_display_timing", VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION},
+    {"VK_NV_sample_mask_override_coverage", VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION},
+    {"VK_NV_geometry_shader_passthrough", VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION},
+    {"VK_NV_viewport_array2", VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION},
+    {"VK_NVX_multiview_per_view_attributes", VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION},
+    {"VK_NV_viewport_swizzle", VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION},
+    {"VK_EXT_discard_rectangles", VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION},
+    {"VK_EXT_conservative_rasterization", VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION},
+    {"VK_EXT_depth_clip_enable", VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION},
+    {"VK_EXT_hdr_metadata", VK_EXT_HDR_METADATA_SPEC_VERSION},
+    {"VK_IMG_relaxed_line_rasterization", VK_IMG_RELAXED_LINE_RASTERIZATION_SPEC_VERSION},
+    {"VK_EXT_external_memory_dma_buf", VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION},
+    {"VK_EXT_queue_family_foreign", VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    {"VK_ANDROID_external_memory_android_hardware_buffer", VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION},
+#endif
+    {"VK_EXT_sampler_filter_minmax", VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION},
+    {"VK_AMD_gpu_shader_int16", VK_AMD_GPU_SHADER_INT16_SPEC_VERSION},
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    {"VK_AMDX_shader_enqueue", VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION},
+#endif
+    {"VK_AMD_mixed_attachment_samples", VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION},
+    {"VK_AMD_shader_fragment_mask", VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION},
+    {"VK_EXT_inline_uniform_block", VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION},
+    {"VK_EXT_shader_stencil_export", VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION},
+    {"VK_EXT_sample_locations", VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION},
+    {"VK_EXT_blend_operation_advanced", VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION},
+    {"VK_NV_fragment_coverage_to_color", VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION},
+    {"VK_NV_framebuffer_mixed_samples", VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION},
+    {"VK_NV_fill_rectangle", VK_NV_FILL_RECTANGLE_SPEC_VERSION},
+    {"VK_NV_shader_sm_builtins", VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION},
+    {"VK_EXT_post_depth_coverage", VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION},
+    {"VK_EXT_image_drm_format_modifier", VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION},
+    {"VK_EXT_descriptor_indexing", VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION},
+    {"VK_EXT_shader_viewport_index_layer", VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION},
+    {"VK_NV_shading_rate_image", VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION},
+    {"VK_NV_ray_tracing", VK_NV_RAY_TRACING_SPEC_VERSION},
+    {"VK_NV_representative_fragment_test", VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION},
+    {"VK_EXT_filter_cubic", VK_EXT_FILTER_CUBIC_SPEC_VERSION},
+    {"VK_QCOM_render_pass_shader_resolve", VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION},
+    {"VK_EXT_global_priority", VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION},
+    {"VK_EXT_external_memory_host", VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION},
+    {"VK_AMD_buffer_marker", VK_AMD_BUFFER_MARKER_SPEC_VERSION},
+    {"VK_AMD_pipeline_compiler_control", VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION},
+    {"VK_EXT_calibrated_timestamps", VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION},
+    {"VK_AMD_shader_core_properties", VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION},
+    {"VK_AMD_memory_overallocation_behavior", VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION},
+    {"VK_EXT_vertex_attribute_divisor", VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_GGP
+    {"VK_GGP_frame_token", VK_GGP_FRAME_TOKEN_SPEC_VERSION},
+#endif
+    {"VK_EXT_pipeline_creation_feedback", VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION},
+    {"VK_NV_shader_subgroup_partitioned", VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION},
+    {"VK_NV_compute_shader_derivatives", VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION},
+    {"VK_NV_mesh_shader", VK_NV_MESH_SHADER_SPEC_VERSION},
+    {"VK_NV_fragment_shader_barycentric", VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION},
+    {"VK_NV_shader_image_footprint", VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION},
+    {"VK_NV_scissor_exclusive", VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION},
+    {"VK_NV_device_diagnostic_checkpoints", VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION},
+    {"VK_INTEL_shader_integer_functions2", VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION},
+    {"VK_INTEL_performance_query", VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION},
+    {"VK_EXT_pci_bus_info", VK_EXT_PCI_BUS_INFO_SPEC_VERSION},
+    {"VK_AMD_display_native_hdr", VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION},
+    {"VK_EXT_fragment_density_map", VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION},
+    {"VK_EXT_scalar_block_layout", VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION},
+    {"VK_GOOGLE_hlsl_functionality1", VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION},
+    {"VK_GOOGLE_decorate_string", VK_GOOGLE_DECORATE_STRING_SPEC_VERSION},
+    {"VK_EXT_subgroup_size_control", VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION},
+    {"VK_AMD_shader_core_properties2", VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION},
+    {"VK_AMD_device_coherent_memory", VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION},
+    {"VK_EXT_shader_image_atomic_int64", VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION},
+    {"VK_EXT_memory_budget", VK_EXT_MEMORY_BUDGET_SPEC_VERSION},
+    {"VK_EXT_memory_priority", VK_EXT_MEMORY_PRIORITY_SPEC_VERSION},
+    {"VK_NV_dedicated_allocation_image_aliasing", VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION},
+    {"VK_EXT_buffer_device_address", VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION},
+    {"VK_EXT_tooling_info", VK_EXT_TOOLING_INFO_SPEC_VERSION},
+    {"VK_EXT_separate_stencil_usage", VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION},
+    {"VK_NV_cooperative_matrix", VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION},
+    {"VK_NV_coverage_reduction_mode", VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION},
+    {"VK_EXT_fragment_shader_interlock", VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION},
+    {"VK_EXT_ycbcr_image_arrays", VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION},
+    {"VK_EXT_provoking_vertex", VK_EXT_PROVOKING_VERTEX_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_EXT_full_screen_exclusive", VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION},
+#endif
+    {"VK_EXT_line_rasterization", VK_EXT_LINE_RASTERIZATION_SPEC_VERSION},
+    {"VK_EXT_shader_atomic_float", VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION},
+    {"VK_EXT_host_query_reset", VK_EXT_HOST_QUERY_RESET_SPEC_VERSION},
+    {"VK_EXT_index_type_uint8", VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION},
+    {"VK_EXT_extended_dynamic_state", VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION},
+    {"VK_EXT_host_image_copy", VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION},
+    {"VK_EXT_map_memory_placed", VK_EXT_MAP_MEMORY_PLACED_SPEC_VERSION},
+    {"VK_EXT_shader_atomic_float2", VK_EXT_SHADER_ATOMIC_FLOAT_2_SPEC_VERSION},
+    {"VK_EXT_swapchain_maintenance1", VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION},
+    {"VK_EXT_shader_demote_to_helper_invocation", VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION},
+    {"VK_NV_device_generated_commands", VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION},
+    {"VK_NV_inherited_viewport_scissor", VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION},
+    {"VK_EXT_texel_buffer_alignment", VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION},
+    {"VK_QCOM_render_pass_transform", VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION},
+    {"VK_EXT_depth_bias_control", VK_EXT_DEPTH_BIAS_CONTROL_SPEC_VERSION},
+    {"VK_EXT_device_memory_report", VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION},
+    {"VK_EXT_robustness2", VK_EXT_ROBUSTNESS_2_SPEC_VERSION},
+    {"VK_EXT_custom_border_color", VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION},
+    {"VK_GOOGLE_user_type", VK_GOOGLE_USER_TYPE_SPEC_VERSION},
+    {"VK_NV_present_barrier", VK_NV_PRESENT_BARRIER_SPEC_VERSION},
+    {"VK_EXT_private_data", VK_EXT_PRIVATE_DATA_SPEC_VERSION},
+    {"VK_EXT_pipeline_creation_cache_control", VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION},
+    {"VK_NV_device_diagnostics_config", VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION},
+    {"VK_QCOM_render_pass_store_ops", VK_QCOM_RENDER_PASS_STORE_OPS_SPEC_VERSION},
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    {"VK_NV_cuda_kernel_launch", VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION},
+#endif
+    {"VK_QCOM_tile_shading", VK_QCOM_TILE_SHADING_SPEC_VERSION},
+    {"VK_NV_low_latency", VK_NV_LOW_LATENCY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_METAL_EXT
+    {"VK_EXT_metal_objects", VK_EXT_METAL_OBJECTS_SPEC_VERSION},
+#endif
+    {"VK_EXT_descriptor_buffer", VK_EXT_DESCRIPTOR_BUFFER_SPEC_VERSION},
+    {"VK_EXT_graphics_pipeline_library", VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION},
+    {"VK_AMD_shader_early_and_late_fragment_tests", VK_AMD_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_SPEC_VERSION},
+    {"VK_NV_fragment_shading_rate_enums", VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION},
+    {"VK_NV_ray_tracing_motion_blur", VK_NV_RAY_TRACING_MOTION_BLUR_SPEC_VERSION},
+    {"VK_EXT_ycbcr_2plane_444_formats", VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION},
+    {"VK_EXT_fragment_density_map2", VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION},
+    {"VK_QCOM_rotated_copy_commands", VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION},
+    {"VK_EXT_image_robustness", VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION},
+    {"VK_EXT_image_compression_control", VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION},
+    {"VK_EXT_attachment_feedback_loop_layout", VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION},
+    {"VK_EXT_4444_formats", VK_EXT_4444_FORMATS_SPEC_VERSION},
+    {"VK_EXT_device_fault", VK_EXT_DEVICE_FAULT_SPEC_VERSION},
+    {"VK_ARM_rasterization_order_attachment_access", VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION},
+    {"VK_EXT_rgba10x6_formats", VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+    {"VK_NV_acquire_winrt_display", VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION},
+#endif
+    {"VK_VALVE_mutable_descriptor_type", VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION},
+    {"VK_EXT_vertex_input_dynamic_state", VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION},
+    {"VK_EXT_physical_device_drm", VK_EXT_PHYSICAL_DEVICE_DRM_SPEC_VERSION},
+    {"VK_EXT_device_address_binding_report", VK_EXT_DEVICE_ADDRESS_BINDING_REPORT_SPEC_VERSION},
+    {"VK_EXT_depth_clip_control", VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION},
+    {"VK_EXT_primitive_topology_list_restart", VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION},
+    {"VK_EXT_present_mode_fifo_latest_ready", VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    {"VK_FUCHSIA_external_memory", VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    {"VK_FUCHSIA_external_semaphore", VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION},
+#endif
+#ifdef VK_USE_PLATFORM_FUCHSIA
+    {"VK_FUCHSIA_buffer_collection", VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION},
+#endif
+    {"VK_HUAWEI_subpass_shading", VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION},
+    {"VK_HUAWEI_invocation_mask", VK_HUAWEI_INVOCATION_MASK_SPEC_VERSION},
+    {"VK_NV_external_memory_rdma", VK_NV_EXTERNAL_MEMORY_RDMA_SPEC_VERSION},
+    {"VK_EXT_pipeline_properties", VK_EXT_PIPELINE_PROPERTIES_SPEC_VERSION},
+    {"VK_EXT_frame_boundary", VK_EXT_FRAME_BOUNDARY_SPEC_VERSION},
+    {"VK_EXT_multisampled_render_to_single_sampled", VK_EXT_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_SPEC_VERSION},
+    {"VK_EXT_extended_dynamic_state2", VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION},
+    {"VK_EXT_color_write_enable", VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION},
+    {"VK_EXT_primitives_generated_query", VK_EXT_PRIMITIVES_GENERATED_QUERY_SPEC_VERSION},
+    {"VK_EXT_global_priority_query", VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION},
+    {"VK_VALVE_video_encode_rgb_conversion", VK_VALVE_VIDEO_ENCODE_RGB_CONVERSION_SPEC_VERSION},
+    {"VK_EXT_image_view_min_lod", VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION},
+    {"VK_EXT_multi_draw", VK_EXT_MULTI_DRAW_SPEC_VERSION},
+    {"VK_EXT_image_2d_view_of_3d", VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION},
+    {"VK_EXT_shader_tile_image", VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION},
+    {"VK_EXT_opacity_micromap", VK_EXT_OPACITY_MICROMAP_SPEC_VERSION},
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    {"VK_NV_displacement_micromap", VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION},
+#endif
+    {"VK_EXT_load_store_op_none", VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION},
+    {"VK_HUAWEI_cluster_culling_shader", VK_HUAWEI_CLUSTER_CULLING_SHADER_SPEC_VERSION},
+    {"VK_EXT_border_color_swizzle", VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION},
+    {"VK_EXT_pageable_device_local_memory", VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION},
+    {"VK_ARM_shader_core_properties", VK_ARM_SHADER_CORE_PROPERTIES_SPEC_VERSION},
+    {"VK_ARM_scheduling_controls", VK_ARM_SCHEDULING_CONTROLS_SPEC_VERSION},
+    {"VK_EXT_image_sliced_view_of_3d", VK_EXT_IMAGE_SLICED_VIEW_OF_3D_SPEC_VERSION},
+    {"VK_VALVE_descriptor_set_host_mapping", VK_VALVE_DESCRIPTOR_SET_HOST_MAPPING_SPEC_VERSION},
+    {"VK_EXT_depth_clamp_zero_one", VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION},
+    {"VK_EXT_non_seamless_cube_map", VK_EXT_NON_SEAMLESS_CUBE_MAP_SPEC_VERSION},
+    {"VK_ARM_render_pass_striped", VK_ARM_RENDER_PASS_STRIPED_SPEC_VERSION},
+    {"VK_QCOM_fragment_density_map_offset", VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION},
+    {"VK_NV_copy_memory_indirect", VK_NV_COPY_MEMORY_INDIRECT_SPEC_VERSION},
+    {"VK_NV_memory_decompression", VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION},
+    {"VK_NV_device_generated_commands_compute", VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION},
+    {"VK_NV_ray_tracing_linear_swept_spheres", VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_SPEC_VERSION},
+    {"VK_NV_linear_color_attachment", VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION},
+    {"VK_EXT_image_compression_control_swapchain", VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION},
+    {"VK_QCOM_image_processing", VK_QCOM_IMAGE_PROCESSING_SPEC_VERSION},
+    {"VK_EXT_nested_command_buffer", VK_EXT_NESTED_COMMAND_BUFFER_SPEC_VERSION},
+    {"VK_EXT_external_memory_acquire_unmodified", VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_SPEC_VERSION},
+    {"VK_EXT_extended_dynamic_state3", VK_EXT_EXTENDED_DYNAMIC_STATE_3_SPEC_VERSION},
+    {"VK_EXT_subpass_merge_feedback", VK_EXT_SUBPASS_MERGE_FEEDBACK_SPEC_VERSION},
+    {"VK_ARM_tensors", VK_ARM_TENSORS_SPEC_VERSION},
+    {"VK_EXT_shader_module_identifier", VK_EXT_SHADER_MODULE_IDENTIFIER_SPEC_VERSION},
+    {"VK_EXT_rasterization_order_attachment_access", VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION},
+    {"VK_NV_optical_flow", VK_NV_OPTICAL_FLOW_SPEC_VERSION},
+    {"VK_EXT_legacy_dithering", VK_EXT_LEGACY_DITHERING_SPEC_VERSION},
+    {"VK_EXT_pipeline_protected_access", VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+    {"VK_ANDROID_external_format_resolve", VK_ANDROID_EXTERNAL_FORMAT_RESOLVE_SPEC_VERSION},
+#endif
+    {"VK_AMD_anti_lag", VK_AMD_ANTI_LAG_SPEC_VERSION},
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    {"VK_AMDX_dense_geometry_format", VK_AMDX_DENSE_GEOMETRY_FORMAT_SPEC_VERSION},
+#endif
+    {"VK_EXT_shader_object", VK_EXT_SHADER_OBJECT_SPEC_VERSION},
+    {"VK_QCOM_tile_properties", VK_QCOM_TILE_PROPERTIES_SPEC_VERSION},
+    {"VK_SEC_amigo_profiling", VK_SEC_AMIGO_PROFILING_SPEC_VERSION},
+    {"VK_QCOM_multiview_per_view_viewports", VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_SPEC_VERSION},
+    {"VK_NV_ray_tracing_invocation_reorder", VK_NV_RAY_TRACING_INVOCATION_REORDER_SPEC_VERSION},
+    {"VK_NV_cooperative_vector", VK_NV_COOPERATIVE_VECTOR_SPEC_VERSION},
+    {"VK_NV_extended_sparse_address_space", VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION},
+    {"VK_EXT_mutable_descriptor_type", VK_EXT_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION},
+    {"VK_EXT_legacy_vertex_attributes", VK_EXT_LEGACY_VERTEX_ATTRIBUTES_SPEC_VERSION},
+    {"VK_ARM_shader_core_builtins", VK_ARM_SHADER_CORE_BUILTINS_SPEC_VERSION},
+    {"VK_EXT_pipeline_library_group_handles", VK_EXT_PIPELINE_LIBRARY_GROUP_HANDLES_SPEC_VERSION},
+    {"VK_EXT_dynamic_rendering_unused_attachments", VK_EXT_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_SPEC_VERSION},
+    {"VK_NV_low_latency2", VK_NV_LOW_LATENCY_2_SPEC_VERSION},
+    {"VK_ARM_data_graph", VK_ARM_DATA_GRAPH_SPEC_VERSION},
+    {"VK_QCOM_multiview_per_view_render_areas", VK_QCOM_MULTIVIEW_PER_VIEW_RENDER_AREAS_SPEC_VERSION},
+    {"VK_NV_per_stage_descriptor_set", VK_NV_PER_STAGE_DESCRIPTOR_SET_SPEC_VERSION},
+    {"VK_QCOM_image_processing2", VK_QCOM_IMAGE_PROCESSING_2_SPEC_VERSION},
+    {"VK_QCOM_filter_cubic_weights", VK_QCOM_FILTER_CUBIC_WEIGHTS_SPEC_VERSION},
+    {"VK_QCOM_ycbcr_degamma", VK_QCOM_YCBCR_DEGAMMA_SPEC_VERSION},
+    {"VK_QCOM_filter_cubic_clamp", VK_QCOM_FILTER_CUBIC_CLAMP_SPEC_VERSION},
+    {"VK_EXT_attachment_feedback_loop_dynamic_state", VK_EXT_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_SCREEN_QNX
+    {"VK_QNX_external_memory_screen_buffer", VK_QNX_EXTERNAL_MEMORY_SCREEN_BUFFER_SPEC_VERSION},
+#endif
+    {"VK_MSFT_layered_driver", VK_MSFT_LAYERED_DRIVER_SPEC_VERSION},
+    {"VK_NV_descriptor_pool_overallocation", VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_SPEC_VERSION},
+    {"VK_QCOM_tile_memory_heap", VK_QCOM_TILE_MEMORY_HEAP_SPEC_VERSION},
+    {"VK_NV_raw_access_chains", VK_NV_RAW_ACCESS_CHAINS_SPEC_VERSION},
+    {"VK_NV_external_compute_queue", VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION},
+    {"VK_NV_command_buffer_inheritance", VK_NV_COMMAND_BUFFER_INHERITANCE_SPEC_VERSION},
+    {"VK_NV_shader_atomic_float16_vector", VK_NV_SHADER_ATOMIC_FLOAT16_VECTOR_SPEC_VERSION},
+    {"VK_EXT_shader_replicated_composites", VK_EXT_SHADER_REPLICATED_COMPOSITES_SPEC_VERSION},
+    {"VK_EXT_shader_float8", VK_EXT_SHADER_FLOAT8_SPEC_VERSION},
+    {"VK_NV_ray_tracing_validation", VK_NV_RAY_TRACING_VALIDATION_SPEC_VERSION},
+    {"VK_NV_cluster_acceleration_structure", VK_NV_CLUSTER_ACCELERATION_STRUCTURE_SPEC_VERSION},
+    {"VK_NV_partitioned_acceleration_structure", VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_SPEC_VERSION},
+    {"VK_EXT_device_generated_commands", VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION},
+    {"VK_MESA_image_alignment_control", VK_MESA_IMAGE_ALIGNMENT_CONTROL_SPEC_VERSION},
+    {"VK_EXT_depth_clamp_control", VK_EXT_DEPTH_CLAMP_CONTROL_SPEC_VERSION},
+    {"VK_HUAWEI_hdr_vivid", VK_HUAWEI_HDR_VIVID_SPEC_VERSION},
+    {"VK_NV_cooperative_matrix2", VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION},
+    {"VK_ARM_pipeline_opacity_micromap", VK_ARM_PIPELINE_OPACITY_MICROMAP_SPEC_VERSION},
+#ifdef VK_USE_PLATFORM_METAL_EXT
+    {"VK_EXT_external_memory_metal", VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION},
+#endif
+    {"VK_EXT_vertex_attribute_robustness", VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION},
+    {"VK_ARM_format_pack", VK_ARM_FORMAT_PACK_SPEC_VERSION},
+    {"VK_VALVE_fragment_density_map_layered", VK_VALVE_FRAGMENT_DENSITY_MAP_LAYERED_SPEC_VERSION},
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+    {"VK_NV_present_metering", VK_NV_PRESENT_METERING_SPEC_VERSION},
+#endif
+    {"VK_EXT_fragment_density_map_offset", VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION},
+    {"VK_EXT_zero_initialize_device_memory", VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_SPEC_VERSION},
+    {"VK_SEC_pipeline_cache_incremental_mode", VK_SEC_PIPELINE_CACHE_INCREMENTAL_MODE_SPEC_VERSION},
+    {"VK_KHR_acceleration_structure", VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION},
+    {"VK_KHR_ray_tracing_pipeline", VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION},
+    {"VK_KHR_ray_query", VK_KHR_RAY_QUERY_SPEC_VERSION},
+    {"VK_EXT_mesh_shader", VK_EXT_MESH_SHADER_SPEC_VERSION},
 };
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(
     const VkInstanceCreateInfo*                 pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
@@ -1258,7 +1328,6 @@
     uint32_t                                    commandBufferCount,
     const VkCommandBuffer*                      pCommandBuffers);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceVersion(
     uint32_t*                                   pApiVersion);
 
@@ -1404,7 +1473,6 @@
     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
     VkDescriptorSetLayoutSupport*               pSupport);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCount(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1475,7 +1543,6 @@
     VkDevice                                    device,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolProperties(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pToolCount,
@@ -1656,7 +1723,6 @@
     uint32_t*                                   pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStipple(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    lineStippleFactor,
@@ -1750,7 +1816,6 @@
     uint32_t                                    transitionCount,
     const VkHostImageLayoutTransitionInfo*      pTransitions);
 
-
 static VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
     VkInstance                                  instance,
     VkSurfaceKHR                                surface,
@@ -1779,7 +1844,6 @@
     uint32_t*                                   pPresentModeCount,
     VkPresentModeKHR*                           pPresentModes);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
     VkDevice                                    device,
     const VkSwapchainCreateInfoKHR*             pCreateInfo,
@@ -1829,7 +1893,6 @@
     const VkAcquireNextImageInfoKHR*            pAcquireInfo,
     uint32_t*                                   pImageIndex);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -1871,14 +1934,12 @@
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
     VkDevice                                    device,
     uint32_t                                    swapchainCount,
     const VkSwapchainCreateInfoKHR*             pCreateInfos,
     const VkAllocationCallbacks*                pAllocator,
     VkSwapchainKHR*                             pSwapchains);
-
 #ifdef VK_USE_PLATFORM_XLIB_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
@@ -1895,7 +1956,6 @@
 #endif /* VK_USE_PLATFORM_XLIB_KHR */
 
 #ifdef VK_USE_PLATFORM_XCB_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
     VkInstance                                  instance,
     const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
@@ -1910,7 +1970,6 @@
 #endif /* VK_USE_PLATFORM_XCB_KHR */
 
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
     VkInstance                                  instance,
     const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
@@ -1924,7 +1983,6 @@
 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
 
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
     VkInstance                                  instance,
     const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
@@ -1933,7 +1991,6 @@
 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
 
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
     VkInstance                                  instance,
     const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
@@ -1944,9 +2001,6 @@
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex);
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoCapabilitiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkVideoProfileInfoKHR*                pVideoProfile,
@@ -2009,15 +2063,10 @@
     VkCommandBuffer                             commandBuffer,
     const VkVideoCodingControlInfoKHR*          pCodingControlInfo);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdDecodeVideoKHR(
     VkCommandBuffer                             commandBuffer,
     const VkVideoDecodeInfoKHR*                 pDecodeInfo);
 
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderingKHR(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingInfo*                      pRenderingInfo);
@@ -2025,8 +2074,6 @@
 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderingKHR(
     VkCommandBuffer                             commandBuffer);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceFeatures2*                  pFeatures);
@@ -2060,7 +2107,6 @@
     uint32_t*                                   pPropertyCount,
     VkSparseImageFormatProperties2*             pProperties);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
     VkDevice                                    device,
     uint32_t                                    heapIndex,
@@ -2081,26 +2127,20 @@
     uint32_t                                    groupCountY,
     uint32_t                                    groupCountZ);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
     VkDevice                                    device,
     VkCommandPool                               commandPool,
     VkCommandPoolTrimFlags                      flags);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
     VkInstance                                  instance,
     uint32_t*                                   pPhysicalDeviceGroupCount,
     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
     VkExternalBufferProperties*                 pExternalBufferProperties);
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
@@ -2114,8 +2154,6 @@
     HANDLE                                      handle,
     VkMemoryWin32HandlePropertiesKHR*           pMemoryWin32HandleProperties);
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
     VkDevice                                    device,
     const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
@@ -2127,16 +2165,10 @@
     int                                         fd,
     VkMemoryFdPropertiesKHR*                    pMemoryFdProperties);
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
@@ -2148,8 +2180,6 @@
     const VkSemaphoreGetWin32HandleInfoKHR*     pGetWin32HandleInfo,
     HANDLE*                                     pHandle);
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
     VkDevice                                    device,
     const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo);
@@ -2159,7 +2189,6 @@
     const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
     int*                                        pFd);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -2175,10 +2204,6 @@
     uint32_t                                    set,
     const void*                                 pData);
 
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
     VkDevice                                    device,
     const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
@@ -2196,8 +2221,6 @@
     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
     const void*                                 pData);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
     VkDevice                                    device,
     const VkRenderPassCreateInfo2*              pCreateInfo,
@@ -2218,18 +2241,14 @@
     VkCommandBuffer                             commandBuffer,
     const VkSubpassEndInfo*                     pSubpassEndInfo);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
     VkExternalFenceProperties*                  pExternalFenceProperties);
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
@@ -2241,8 +2260,6 @@
     const VkFenceGetWin32HandleInfoKHR*         pGetWin32HandleInfo,
     HANDLE*                                     pHandle);
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
     VkDevice                                    device,
     const VkImportFenceFdInfoKHR*               pImportFenceFdInfo);
@@ -2252,7 +2269,6 @@
     const VkFenceGetFdInfoKHR*                  pGetFdInfo,
     int*                                        pFd);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -2272,8 +2288,6 @@
 static VKAPI_ATTR void VKAPI_CALL ReleaseProfilingLockKHR(
     VkDevice                                    device);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
@@ -2285,8 +2299,6 @@
     uint32_t*                                   pSurfaceFormatCount,
     VkSurfaceFormat2KHR*                        pSurfaceFormats);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -2308,11 +2320,6 @@
     const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
     VkDisplayPlaneCapabilities2KHR*             pCapabilities);
 
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
     VkDevice                                    device,
     const VkImageMemoryRequirementsInfo2*       pInfo,
@@ -2329,8 +2336,6 @@
     uint32_t*                                   pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
     VkDevice                                    device,
     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
@@ -2342,7 +2347,6 @@
     VkSamplerYcbcrConversion                    ycbcrConversion,
     const VkAllocationCallbacks*                pAllocator);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -2353,16 +2357,11 @@
     uint32_t                                    bindInfoCount,
     const VkBindImageMemoryInfo*                pBindInfos);
 
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
     VkDevice                                    device,
     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
     VkDescriptorSetLayoutSupport*               pSupport);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -2381,17 +2380,6 @@
     uint32_t                                    maxDrawCount,
     uint32_t                                    stride);
 
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValueKHR(
     VkDevice                                    device,
     VkSemaphore                                 semaphore,
@@ -2406,9 +2394,6 @@
     VkDevice                                    device,
     const VkSemaphoreSignalInfo*                pSignalInfo);
 
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceFragmentShadingRatesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pFragmentShadingRateCount,
@@ -2419,7 +2404,6 @@
     const VkExtent2D*                           pFragmentSize,
     const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingAttachmentLocationsKHR(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingAttachmentLocationInfo*    pLocationInfo);
@@ -2428,19 +2412,12 @@
     VkCommandBuffer                             commandBuffer,
     const VkRenderingInputAttachmentIndexInfo*  pInputAttachmentIndexInfo);
 
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitForPresentKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
     uint64_t                                    presentId,
     uint64_t                                    timeout);
 
-
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo);
@@ -2453,7 +2430,6 @@
     VkDevice                                    device,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDeferredOperationKHR(
     VkDevice                                    device,
     const VkAllocationCallbacks*                pAllocator,
@@ -2476,7 +2452,6 @@
     VkDevice                                    device,
     VkDeferredOperationKHR                      operation);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR(
     VkDevice                                    device,
     const VkPipelineInfoKHR*                    pPipelineInfo,
@@ -2495,7 +2470,6 @@
     uint32_t*                                   pInternalRepresentationCount,
     VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory2KHR(
     VkDevice                                    device,
     const VkMemoryMapInfo*                      pMemoryMapInfo,
@@ -2505,11 +2479,6 @@
     VkDevice                                    device,
     const VkMemoryUnmapInfo*                    pMemoryUnmapInfo);
 
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo,
@@ -2526,7 +2495,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkVideoEncodeInfoKHR*                 pEncodeInfo);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent2KHR(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -2559,11 +2527,6 @@
     const VkSubmitInfo2*                        pSubmits,
     VkFence                                     fence);
 
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyBufferInfo2*                    pCopyBufferInfo);
@@ -2588,15 +2551,10 @@
     VkCommandBuffer                             commandBuffer,
     const VkResolveImageInfo2*                  pResolveImageInfo);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirect2KHR(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             indirectDeviceAddress);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceBufferMemoryRequirementsKHR(
     VkDevice                                    device,
     const VkDeviceBufferMemoryRequirements*     pInfo,
@@ -2613,9 +2571,6 @@
     uint32_t*                                   pSparseMemoryRequirementCount,
     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer2KHR(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -2639,15 +2594,11 @@
     const VkImageSubresource2*                  pSubresource,
     VkSubresourceLayout2*                       pLayout);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitForPresent2KHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
     const VkPresentWait2InfoKHR*                pPresentWait2Info);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineBinariesKHR(
     VkDevice                                    device,
     const VkPipelineBinaryCreateInfoKHR*        pCreateInfo,
@@ -2676,35 +2627,20 @@
     const VkReleaseCapturedPipelineDataInfoKHR* pInfo,
     const VkAllocationCallbacks*                pAllocator);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesKHR(
     VkDevice                                    device,
     const VkReleaseSwapchainImagesInfoKHR*      pReleaseInfo);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
     VkCooperativeMatrixPropertiesKHR*           pProperties);
 
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    lineStippleFactor,
     uint16_t                                    lineStipplePattern);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pTimeDomainCount,
@@ -2717,8 +2653,6 @@
     uint64_t*                                   pTimestamps,
     uint64_t*                                   pMaxDeviation);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkBindDescriptorSetsInfo*             pBindDescriptorSetsInfo);
@@ -2743,7 +2677,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryIndirectKHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMemoryIndirectInfoKHR*          pCopyMemoryIndirectInfo);
@@ -2752,17 +2685,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkCopyMemoryToImageIndirectInfoKHR*   pCopyMemoryToImageIndirectInfo);
 
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
     VkInstance                                  instance,
     const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
@@ -2784,13 +2706,6 @@
     const char*                                 pLayerPrefix,
     const char*                                 pMessage);
 
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
     VkDevice                                    device,
     const VkDebugMarkerObjectTagInfoEXT*        pTagInfo);
@@ -2810,9 +2725,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstBinding,
@@ -2857,7 +2769,6 @@
     uint32_t                                    counterOffset,
     uint32_t                                    vertexStride);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCuModuleNVX(
     VkDevice                                    device,
     const VkCuModuleCreateInfoNVX*              pCreateInfo,
@@ -2884,7 +2795,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkCuLaunchInfoNVX*                    pLaunchInfo);
 
-
 static VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
     VkDevice                                    device,
     const VkImageViewHandleInfoNVX*             pInfo);
@@ -2898,7 +2808,6 @@
     VkImageView                                 imageView,
     VkImageViewAddressPropertiesNVX*            pProperties);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -2917,11 +2826,6 @@
     uint32_t                                    maxDrawCount,
     uint32_t                                    stride);
 
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -2929,8 +2833,6 @@
     VkShaderInfoTypeAMD                         infoType,
     size_t*                                     pInfoSize,
     void*                                       pInfo);
-
-
 #ifdef VK_USE_PLATFORM_GGP
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
@@ -2939,10 +2841,6 @@
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 #endif /* VK_USE_PLATFORM_GGP */
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -2952,8 +2850,6 @@
     VkImageCreateFlags                          flags,
     VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
     VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties);
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
@@ -2963,25 +2859,13 @@
     HANDLE*                                     pHandle);
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 #ifdef VK_USE_PLATFORM_VI_NN
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
     VkInstance                                  instance,
     const VkViSurfaceCreateInfoNN*              pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 #endif /* VK_USE_PLATFORM_VI_NN */
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
     VkCommandBuffer                             commandBuffer,
     const VkConditionalRenderingBeginInfoEXT*   pConditionalRenderingBegin);
@@ -2989,18 +2873,15 @@
 static VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
     VkCommandBuffer                             commandBuffer);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstViewport,
     uint32_t                                    viewportCount,
     const VkViewportWScalingNV*                 pViewportWScalings);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display);
-
 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
 
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
@@ -3014,14 +2895,11 @@
     RROutput                                    rrOutput,
     VkDisplayKHR*                               pDisplay);
 #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
     VkPhysicalDevice                            physicalDevice,
     VkSurfaceKHR                                surface,
     VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
     VkDevice                                    device,
     VkDisplayKHR                                display,
@@ -3046,7 +2924,6 @@
     VkSurfaceCounterFlagBitsEXT                 counter,
     uint64_t*                                   pCounterValue);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -3058,12 +2935,6 @@
     uint32_t*                                   pPresentationTimingCount,
     VkPastPresentationTimingGOOGLE*             pPresentationTimings);
 
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstDiscardRectangle,
@@ -3078,17 +2949,11 @@
     VkCommandBuffer                             commandBuffer,
     VkDiscardRectangleModeEXT                   discardRectangleMode);
 
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
     VkDevice                                    device,
     uint32_t                                    swapchainCount,
     const VkSwapchainKHR*                       pSwapchains,
     const VkHdrMetadataEXT*                     pMetadata);
-
-
 #ifdef VK_USE_PLATFORM_IOS_MVK
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
@@ -3099,17 +2964,12 @@
 #endif /* VK_USE_PLATFORM_IOS_MVK */
 
 #ifdef VK_USE_PLATFORM_MACOS_MVK
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
     VkInstance                                  instance,
     const VkMacOSSurfaceCreateInfoMVK*          pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 #endif /* VK_USE_PLATFORM_MACOS_MVK */
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
     VkDevice                                    device,
     const VkDebugUtilsObjectNameInfoEXT*        pNameInfo);
@@ -3156,7 +3016,6 @@
     VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
     VkDebugUtilsMessageTypeFlagsEXT             messageTypes,
     const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
-
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
@@ -3170,10 +3029,7 @@
     struct AHardwareBuffer**                    pBuffer);
 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
 
-
-
 #ifdef VK_ENABLE_BETA_EXTENSIONS
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateExecutionGraphPipelinesAMDX(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -3217,12 +3073,6 @@
     VkDeviceSize                                scratchSize,
     VkDeviceAddress                             countInfo);
 #endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
     VkCommandBuffer                             commandBuffer,
     const VkSampleLocationsInfoEXT*             pSampleLocationsInfo);
@@ -3232,19 +3082,11 @@
     VkSampleCountFlagBits                       samples,
     VkMultisamplePropertiesEXT*                 pMultisampleProperties);
 
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
     VkDevice                                    device,
     VkImage                                     image,
     VkImageDrmFormatModifierPropertiesEXT*      pProperties);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
     VkDevice                                    device,
     const VkValidationCacheCreateInfoEXT*       pCreateInfo,
@@ -3268,9 +3110,6 @@
     size_t*                                     pDataSize,
     void*                                       pData);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
     VkCommandBuffer                             commandBuffer,
     VkImageView                                 imageView,
@@ -3288,7 +3127,6 @@
     uint32_t                                    customSampleOrderCount,
     const VkCoarseSampleOrderCustomNV*          pCustomSampleOrders);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
     VkDevice                                    device,
     const VkAccelerationStructureCreateInfoNV*  pCreateInfo,
@@ -3387,18 +3225,12 @@
     VkPipeline                                  pipeline,
     uint32_t                                    shader);
 
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
     VkDevice                                    device,
     VkExternalMemoryHandleTypeFlagBits          handleType,
     const void*                                 pHostPointer,
     VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlagBits                     pipelineStage,
@@ -3413,8 +3245,6 @@
     VkDeviceSize                                dstOffset,
     uint32_t                                    marker);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pTimeDomainCount,
@@ -3427,16 +3257,6 @@
     uint64_t*                                   pTimestamps,
     uint64_t*                                   pMaxDeviation);
 
-
-
-
-#ifdef VK_USE_PLATFORM_GGP
-#endif /* VK_USE_PLATFORM_GGP */
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    taskCount,
@@ -3458,9 +3278,6 @@
     uint32_t                                    maxDrawCount,
     uint32_t                                    stride);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorEnableNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstExclusiveScissor,
@@ -3473,7 +3290,6 @@
     uint32_t                                    exclusiveScissorCount,
     const VkRect2D*                             pExclusiveScissors);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
     VkCommandBuffer                             commandBuffer,
     const void*                                 pCheckpointMarker);
@@ -3488,8 +3304,6 @@
     uint32_t*                                   pCheckpointDataCount,
     VkCheckpointData2NV*                        pCheckpointData);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
     VkDevice                                    device,
     const VkInitializePerformanceApiInfoINTEL*  pInitializeInfo);
@@ -3527,13 +3341,10 @@
     VkPerformanceParameterTypeINTEL             parameter,
     VkPerformanceValueINTEL*                    pValue);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
     VkDevice                                    device,
     VkSwapchainKHR                              swapChain,
     VkBool32                                    localDimmingEnable);
-
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
@@ -3544,53 +3355,30 @@
 #endif /* VK_USE_PLATFORM_FUCHSIA */
 
 #ifdef VK_USE_PLATFORM_METAL_EXT
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
     VkInstance                                  instance,
     const VkMetalSurfaceCreateInfoEXT*          pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 #endif /* VK_USE_PLATFORM_METAL_EXT */
-
-
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pToolCount,
     VkPhysicalDeviceToolProperties*             pToolProperties);
 
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
     VkCooperativeMatrixPropertiesNV*            pProperties);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pCombinationCount,
     VkFramebufferMixedSamplesCombinationNV*     pCombinations);
-
-
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
@@ -3612,30 +3400,23 @@
     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
     VkDeviceGroupPresentModeFlagsKHR*           pModes);
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
     VkInstance                                  instance,
     const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    lineStippleFactor,
     uint16_t                                    lineStipplePattern);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
     VkDevice                                    device,
     VkQueryPool                                 queryPool,
     uint32_t                                    firstQuery,
     uint32_t                                    queryCount);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCullModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkCullModeFlags                             cullMode);
@@ -3695,7 +3476,6 @@
     VkStencilOp                                 depthFailOp,
     VkCompareOp                                 compareOp);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToImageEXT(
     VkDevice                                    device,
     const VkCopyMemoryToImageInfo*              pCopyMemoryToImageInfo);
@@ -3719,16 +3499,10 @@
     const VkImageSubresource2*                  pSubresource,
     VkSubresourceLayout2*                       pLayout);
 
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesEXT(
     VkDevice                                    device,
     const VkReleaseSwapchainImagesInfoKHR*      pReleaseInfo);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsNV(
     VkDevice                                    device,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo,
@@ -3760,16 +3534,10 @@
     VkIndirectCommandsLayoutNV                  indirectCommandsLayout,
     const VkAllocationCallbacks*                pAllocator);
 
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias2EXT(
     VkCommandBuffer                             commandBuffer,
     const VkDepthBiasInfoEXT*                   pDepthBiasInfo);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireDrmDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     int32_t                                     drmFd,
@@ -3781,11 +3549,6 @@
     uint32_t                                    connectorId,
     VkDisplayKHR*                               display);
 
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlotEXT(
     VkDevice                                    device,
     const VkPrivateDataSlotCreateInfo*          pCreateInfo,
@@ -3810,10 +3573,6 @@
     uint64_t                                    objectHandle,
     VkPrivateDataSlot                           privateDataSlot,
     uint64_t*                                   pData);
-
-
-
-
 #ifdef VK_ENABLE_BETA_EXTENSIONS
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCudaModuleNV(
@@ -3848,8 +3607,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkCudaLaunchInfoNV*                   pLaunchInfo);
 #endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchTileQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkDispatchTileInfoQCOM*               pDispatchTileInfo);
@@ -3861,16 +3618,12 @@
 static VKAPI_ATTR void VKAPI_CALL CmdEndPerTileExecutionQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkPerTileEndInfoQCOM*                 pPerTileEndInfo);
-
-
 #ifdef VK_USE_PLATFORM_METAL_EXT
 
 static VKAPI_ATTR void VKAPI_CALL ExportMetalObjectsEXT(
     VkDevice                                    device,
     VkExportMetalObjectsInfoEXT*                pMetalObjectsInfo);
 #endif /* VK_USE_PLATFORM_METAL_EXT */
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSizeEXT(
     VkDevice                                    device,
     VkDescriptorSetLayout                       layout,
@@ -3933,30 +3686,15 @@
     const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo,
     void*                                       pData);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateEnumNV(
     VkCommandBuffer                             commandBuffer,
     VkFragmentShadingRateNV                     shadingRate,
     const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]);
 
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceFaultInfoEXT(
     VkDevice                                    device,
     VkDeviceFaultCountsEXT*                     pFaultCounts,
     VkDeviceFaultInfoEXT*                       pFaultInfo);
-
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
 
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireWinrtDisplayNV(
@@ -3970,7 +3708,6 @@
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
 
 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDirectFBSurfaceEXT(
     VkInstance                                  instance,
     const VkDirectFBSurfaceCreateInfoEXT*       pCreateInfo,
@@ -3982,21 +3719,12 @@
     uint32_t                                    queueFamilyIndex,
     IDirectFB*                                  dfb);
 #endif /* VK_USE_PLATFORM_DIRECTFB_EXT */
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetVertexInputEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    vertexBindingDescriptionCount,
     const VkVertexInputBindingDescription2EXT*  pVertexBindingDescriptions,
     uint32_t                                    vertexAttributeDescriptionCount,
     const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions);
-
-
-
-
-
-
 #ifdef VK_USE_PLATFORM_FUCHSIA
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandleFUCHSIA(
@@ -4009,9 +3737,6 @@
     VkExternalMemoryHandleTypeFlagBits          handleType,
     zx_handle_t                                 zirconHandle,
     VkMemoryZirconHandlePropertiesFUCHSIA*      pMemoryZirconHandleProperties);
-#endif /* VK_USE_PLATFORM_FUCHSIA */
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
 
 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreZirconHandleFUCHSIA(
     VkDevice                                    device,
@@ -4021,9 +3746,6 @@
     VkDevice                                    device,
     const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
     zx_handle_t*                                pZirconHandle);
-#endif /* VK_USE_PLATFORM_FUCHSIA */
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferCollectionFUCHSIA(
     VkDevice                                    device,
@@ -4051,8 +3773,6 @@
     VkBufferCollectionFUCHSIA                   collection,
     VkBufferCollectionPropertiesFUCHSIA*        pProperties);
 #endif /* VK_USE_PLATFORM_FUCHSIA */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
     VkDevice                                    device,
     VkRenderPass                                renderpass,
@@ -4061,27 +3781,21 @@
 static VKAPI_ATTR void VKAPI_CALL CmdSubpassShadingHUAWEI(
     VkCommandBuffer                             commandBuffer);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindInvocationMaskHUAWEI(
     VkCommandBuffer                             commandBuffer,
     VkImageView                                 imageView,
     VkImageLayout                               imageLayout);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryRemoteAddressNV(
     VkDevice                                    device,
     const VkMemoryGetRemoteAddressInfoNV*       pMemoryGetRemoteAddressInfo,
     VkRemoteAddressNV*                          pAddress);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelinePropertiesEXT(
     VkDevice                                    device,
     const VkPipelineInfoEXT*                    pPipelineInfo,
     VkBaseOutStructure*                         pPipelineProperties);
 
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPatchControlPointsEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    patchControlPoints);
@@ -4101,7 +3815,6 @@
 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveRestartEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    primitiveRestartEnable);
-
 #ifdef VK_USE_PLATFORM_SCREEN_QNX
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateScreenSurfaceQNX(
@@ -4115,18 +3828,11 @@
     uint32_t                                    queueFamilyIndex,
     struct _screen_window*                      window);
 #endif /* VK_USE_PLATFORM_SCREEN_QNX */
-
-
 static VKAPI_ATTR void                                    VKAPI_CALL CmdSetColorWriteEnableEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    attachmentCount,
     const VkBool32*                             pColorWriteEnables);
 
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMultiEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    drawCount,
@@ -4144,9 +3850,6 @@
     uint32_t                                    stride,
     const int32_t*                              pVertexOffset);
 
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateMicromapEXT(
     VkDevice                                    device,
     const VkMicromapCreateInfoEXT*              pCreateInfo,
@@ -4224,11 +3927,6 @@
     const VkMicromapBuildInfoEXT*               pBuildInfo,
     VkMicromapBuildSizesInfoEXT*                pSizeInfo);
 
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawClusterHUAWEI(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    groupCountX,
@@ -4240,17 +3938,11 @@
     VkBuffer                                    buffer,
     VkDeviceSize                                offset);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL SetDeviceMemoryPriorityEXT(
     VkDevice                                    device,
     VkDeviceMemory                              memory,
     float                                       priority);
 
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutHostMappingInfoVALVE(
     VkDevice                                    device,
     const VkDescriptorSetBindingReferenceVALVE* pBindingReference,
@@ -4261,11 +3953,6 @@
     VkDescriptorSet                             descriptorSet,
     void**                                      ppData);
 
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryIndirectNV(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             copyBufferAddress,
@@ -4281,7 +3968,6 @@
     VkImageLayout                               dstImageLayout,
     const VkImageSubresourceLayers*             pImageSubresources);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    decompressRegionCount,
@@ -4293,7 +3979,6 @@
     VkDeviceAddress                             indirectCommandsCountAddress,
     uint32_t                                    stride);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetPipelineIndirectMemoryRequirementsNV(
     VkDevice                                    device,
     const VkComputePipelineCreateInfo*          pCreateInfo,
@@ -4308,14 +3993,6 @@
     VkDevice                                    device,
     const VkPipelineIndirectDeviceAddressInfoNV* pInfo);
 
-
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthClampEnable);
@@ -4452,9 +4129,6 @@
     VkCommandBuffer                             commandBuffer,
     VkCoverageReductionModeNV                   coverageReductionMode);
 
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateTensorARM(
     VkDevice                                    device,
     const VkTensorCreateInfoARM*                pCreateInfo,
@@ -4511,7 +4185,6 @@
     const VkTensorViewCaptureDescriptorDataInfoARM* pInfo,
     void*                                       pData);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetShaderModuleIdentifierEXT(
     VkDevice                                    device,
     VkShaderModule                              shaderModule,
@@ -4522,8 +4195,6 @@
     const VkShaderModuleCreateInfo*             pCreateInfo,
     VkShaderModuleIdentifierEXT*                pIdentifier);
 
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceOpticalFlowImageFormatsNV(
     VkPhysicalDevice                            physicalDevice,
     const VkOpticalFlowImageFormatInfoNV*       pOpticalFlowImageFormatInfo,
@@ -4553,20 +4224,10 @@
     VkOpticalFlowSessionNV                      session,
     const VkOpticalFlowExecuteInfoNV*           pExecuteInfo);
 
-
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-#endif /* VK_USE_PLATFORM_ANDROID_KHR */
-
-
 static VKAPI_ATTR void VKAPI_CALL AntiLagUpdateAMD(
     VkDevice                                    device,
     const VkAntiLagDataAMD*                     pData);
 
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateShadersEXT(
     VkDevice                                    device,
     uint32_t                                    createInfoCount,
@@ -4596,7 +4257,6 @@
     VkDepthClampModeEXT                         depthClampMode,
     const VkDepthClampRangeEXT*                 pDepthClampRange);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetFramebufferTilePropertiesQCOM(
     VkDevice                                    device,
     VkFramebuffer                               framebuffer,
@@ -4608,10 +4268,6 @@
     const VkRenderingInfo*                      pRenderingInfo,
     VkTilePropertiesQCOM*                       pProperties);
 
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeVectorPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -4626,14 +4282,6 @@
     uint32_t                                    infoCount,
     const VkConvertCooperativeVectorMatrixInfoNV* pInfos);
 
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetLatencySleepModeNV(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -4658,7 +4306,6 @@
     VkQueue                                     queue,
     const VkOutOfBandQueueTypeInfoNV*           pQueueTypeInfo);
 
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDataGraphPipelinesARM(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -4723,17 +4370,9 @@
     const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo,
     VkQueueFamilyDataGraphProcessingEnginePropertiesARM* pQueueFamilyDataGraphProcessingEngineProperties);
 
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetAttachmentFeedbackLoopEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkImageAspectFlags                          aspectMask);
-
 #ifdef VK_USE_PLATFORM_SCREEN_QNX
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetScreenBufferPropertiesQNX(
@@ -4741,17 +4380,10 @@
     const struct _screen_buffer*                buffer,
     VkScreenBufferPropertiesQNX*                pProperties);
 #endif /* VK_USE_PLATFORM_SCREEN_QNX */
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindTileMemoryQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkTileMemoryBindInfoQCOM*             pTileMemoryBindInfo);
 
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateExternalComputeQueueNV(
     VkDevice                                    device,
     const VkExternalComputeQueueCreateInfoNV*   pCreateInfo,
@@ -4768,12 +4400,6 @@
     VkExternalComputeQueueDataParamsNV*         params,
     void*                                       pData);
 
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetClusterAccelerationStructureBuildSizesNV(
     VkDevice                                    device,
     const VkClusterAccelerationStructureInputInfoNV* pInfo,
@@ -4783,7 +4409,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetPartitionedAccelerationStructuresBuildSizesNV(
     VkDevice                                    device,
     const VkPartitionedAccelerationStructureInstancesInputNV* pInfo,
@@ -4793,7 +4418,6 @@
     VkCommandBuffer                             commandBuffer,
     const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo);
 
-
 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsEXT(
     VkDevice                                    device,
     const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo,
@@ -4842,9 +4466,6 @@
     VkIndirectExecutionSetEXT                   indirectExecutionSet,
     uint32_t                                    executionSetWriteCount,
     const VkWriteIndirectExecutionSetShaderEXT* pExecutionSetWrites);
-
-
-
 #ifdef VK_USE_PLATFORM_OHOS
 
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSurfaceOHOS(
@@ -4853,15 +4474,10 @@
     const VkAllocationCallbacks*                pAllocator,
     VkSurfaceKHR*                               pSurface);
 #endif /* VK_USE_PLATFORM_OHOS */
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
     VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties);
-
-
 #ifdef VK_USE_PLATFORM_METAL_EXT
 
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryMetalHandleEXT(
@@ -4875,21 +4491,10 @@
     const void*                                 pHandle,
     VkMemoryMetalHandlePropertiesEXT*           pMemoryMetalHandleProperties);
 #endif /* VK_USE_PLATFORM_METAL_EXT */
-
-
-
-
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRendering2EXT(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingEndInfoEXT*                pRenderingEndInfo);
 
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR(
     VkDevice                                    device,
     const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
@@ -4982,7 +4587,6 @@
     const uint32_t*                             pMaxPrimitiveCounts,
     VkAccelerationStructureBuildSizesInfoKHR*   pSizeInfo);
 
-
 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysKHR(
     VkCommandBuffer                             commandBuffer,
     const VkStridedDeviceAddressRegionKHR*      pRaygenShaderBindingTable,
@@ -5028,8 +4632,6 @@
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    pipelineStackSize);
 
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    groupCountX,
@@ -5051,7 +4653,6 @@
     VkDeviceSize                                countBufferOffset,
     uint32_t                                    maxDrawCount,
     uint32_t                                    stride);
-
 // Map of all APIs to be intercepted by this layer
 static const std::unordered_map<std::string, void*> name_to_funcptr_map = {
     {"vkCreateInstance", (void*)CreateInstance},
@@ -5945,3 +5546,4 @@
 
 } // namespace vkmock
 
+
diff --git a/icd/generated/function_definitions.h b/icd/generated/function_definitions.h
index ff50c81..6f3a76e 100644
--- a/icd/generated/function_definitions.h
+++ b/icd/generated/function_definitions.h
@@ -20,19 +20,14 @@
 */
 
 #pragma once
-
 #include "mock_icd.h"
 #include "function_declarations.h"
-
 namespace vkmock {
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(
     const VkInstanceCreateInfo*                 pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
     VkInstance*                                 pInstance)
 {
-
     // TODO: If loader ver <=4 ICD must fail with VK_ERROR_INCOMPATIBLE_DRIVER for all vkCreateInstance calls with
     //  apiVersion set to > Vulkan 1.0 because the loader is still at interface version <= 4. Otherwise, the
     //  ICD should behave as normal.
@@ -45,12 +40,10 @@
     // TODO: If emulating specific device caps, will need to add intelligence here
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyInstance(
     VkInstance                                  instance,
     const VkAllocationCallbacks*                pAllocator)
 {
-
     if (instance) {
         for (const auto physical_device : physical_device_map.at(instance)) {
             display_map.erase(physical_device);
@@ -60,7 +53,6 @@
         DestroyDispObjHandle((void*)instance);
     }
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(
     VkInstance                                  instance,
     uint32_t*                                   pPhysicalDeviceCount,
@@ -77,7 +69,6 @@
     }
     return result_code;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceFeatures*                   pFeatures)
@@ -86,7 +77,6 @@
     VkBool32 *bool_array = &pFeatures->robustBufferAccess;
     SetBoolArrayTrue(bool_array, num_bools);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -121,7 +111,6 @@
         }
     }
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -146,7 +135,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceProperties*                 pProperties)
@@ -162,7 +150,6 @@
     pProperties->limits = SetLimits(&pProperties->limits);
     pProperties->sparseProperties = { VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE, VK_TRUE };
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pQueueFamilyPropertyCount,
@@ -179,7 +166,6 @@
         GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, nullptr);
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceMemoryProperties*           pMemoryProperties)
@@ -209,12 +195,10 @@
     pMemoryProperties->memoryHeaps[1].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
     pMemoryProperties->memoryHeaps[1].size = 8000000000;
 }
-
 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(
     VkInstance                                  instance,
     const char*                                 pName)
 {
-
     if (!negotiate_loader_icd_interface_called) {
         loader_interface_version = 0;
     }
@@ -225,32 +209,26 @@
     // Mock should intercept all functions so if we get here just return null
     return nullptr;
 }
-
 static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(
     VkDevice                                    device,
     const char*                                 pName)
 {
-
     return GetInstanceProcAddr(nullptr, pName);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(
     VkPhysicalDevice                            physicalDevice,
     const VkDeviceCreateInfo*                   pCreateInfo,
     const VkAllocationCallbacks*                pAllocator,
     VkDevice*                                   pDevice)
 {
-
     *pDevice = (VkDevice)CreateDispObjHandle();
     // TODO: If emulating specific device caps, will need to add intelligence here
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDevice(
     VkDevice                                    device,
     const VkAllocationCallbacks*                pAllocator)
 {
-
     unique_lock_t lock(global_lock);
     // First destroy sub-device objects
     // Destroy Queues
@@ -275,13 +253,11 @@
     DestroyDispObjHandle((void*)device);
     // TODO: If emulating specific device caps, will need to add intelligence here
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(
     const char*                                 pLayerName,
     uint32_t*                                   pPropertyCount,
     VkExtensionProperties*                      pProperties)
 {
-
     // If requesting number of extensions, return that
     if (!pLayerName) {
         if (!pProperties) {
@@ -305,14 +281,12 @@
     // If requesting extension properties, fill in data struct for number of extensions
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(
     VkPhysicalDevice                            physicalDevice,
     const char*                                 pLayerName,
     uint32_t*                                   pPropertyCount,
     VkExtensionProperties*                      pProperties)
 {
-
     // If requesting number of extensions, return that
     if (!pLayerName) {
         if (!pProperties) {
@@ -337,24 +311,19 @@
     // If requesting extension properties, fill in data struct for number of extensions
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(
     uint32_t*                                   pPropertyCount,
     VkLayerProperties*                          pProperties)
 {
-
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
     VkLayerProperties*                          pProperties)
 {
-
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(
     VkDevice                                    device,
     uint32_t                                    queueFamilyIndex,
@@ -371,7 +340,6 @@
     // TODO: If emulating specific device caps, will need to add intelligence here
     return;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(
     VkQueue                                     queue,
     uint32_t                                    submitCount,
@@ -390,21 +358,18 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(
     VkQueue                                     queue)
 {
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(
     VkDevice                                    device)
 {
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(
     VkDevice                                    device,
     const VkMemoryAllocateInfo*                 pAllocateInfo,
@@ -416,7 +381,6 @@
     *pMemory = (VkDeviceMemory)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL FreeMemory(
     VkDevice                                    device,
     VkDeviceMemory                              memory,
@@ -427,7 +391,6 @@
     unique_lock_t lock(global_lock);
     allocated_memory_size_map.erase(memory);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory(
     VkDevice                                    device,
     VkDeviceMemory                              memory,
@@ -448,7 +411,6 @@
     *ppData = map_addr;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL UnmapMemory(
     VkDevice                                    device,
     VkDeviceMemory                              memory)
@@ -459,7 +421,6 @@
     }
     mapped_memory_map.erase(memory);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(
     VkDevice                                    device,
     uint32_t                                    memoryRangeCount,
@@ -468,7 +429,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(
     VkDevice                                    device,
     uint32_t                                    memoryRangeCount,
@@ -477,7 +437,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(
     VkDevice                                    device,
     VkDeviceMemory                              memory,
@@ -485,7 +444,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(
     VkDevice                                    device,
     VkBuffer                                    buffer,
@@ -495,7 +453,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(
     VkDevice                                    device,
     VkImage                                     image,
@@ -505,7 +462,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
     VkDevice                                    device,
     VkBuffer                                    buffer,
@@ -525,7 +481,6 @@
         }
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
     VkDevice                                    device,
     VkImage                                     image,
@@ -545,7 +500,6 @@
     // Here we hard-code that the memory type at index 3 doesn't support this image.
     pMemoryRequirements->memoryTypeBits = 0xFFFF & ~(0x1 << 3);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(
     VkDevice                                    device,
     VkImage                                     image,
@@ -567,7 +521,6 @@
     }
 
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -604,7 +557,6 @@
         }
     }
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(
     VkQueue                                     queue,
     uint32_t                                    bindInfoCount,
@@ -614,7 +566,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateFence(
     VkDevice                                    device,
     const VkFenceCreateInfo*                    pCreateInfo,
@@ -625,7 +576,6 @@
     *pFence = (VkFence)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyFence(
     VkDevice                                    device,
     VkFence                                     fence,
@@ -633,7 +583,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ResetFences(
     VkDevice                                    device,
     uint32_t                                    fenceCount,
@@ -642,7 +591,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(
     VkDevice                                    device,
     VkFence                                     fence)
@@ -650,7 +598,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitForFences(
     VkDevice                                    device,
     uint32_t                                    fenceCount,
@@ -661,7 +608,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(
     VkDevice                                    device,
     const VkSemaphoreCreateInfo*                pCreateInfo,
@@ -672,7 +618,6 @@
     *pSemaphore = (VkSemaphore)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroySemaphore(
     VkDevice                                    device,
     VkSemaphore                                 semaphore,
@@ -680,7 +625,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateEvent(
     VkDevice                                    device,
     const VkEventCreateInfo*                    pCreateInfo,
@@ -691,7 +635,6 @@
     *pEvent = (VkEvent)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyEvent(
     VkDevice                                    device,
     VkEvent                                     event,
@@ -699,7 +642,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(
     VkDevice                                    device,
     VkEvent                                     event)
@@ -707,7 +649,6 @@
 //Not a CREATE or DESTROY function
     return VK_EVENT_SET;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetEvent(
     VkDevice                                    device,
     VkEvent                                     event)
@@ -715,7 +656,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ResetEvent(
     VkDevice                                    device,
     VkEvent                                     event)
@@ -723,7 +663,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(
     VkDevice                                    device,
     const VkQueryPoolCreateInfo*                pCreateInfo,
@@ -734,7 +673,6 @@
     *pQueryPool = (VkQueryPool)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyQueryPool(
     VkDevice                                    device,
     VkQueryPool                                 queryPool,
@@ -742,7 +680,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(
     VkDevice                                    device,
     VkQueryPool                                 queryPool,
@@ -756,7 +693,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(
     VkDevice                                    device,
     const VkBufferCreateInfo*                   pCreateInfo,
@@ -777,7 +713,6 @@
      }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyBuffer(
     VkDevice                                    device,
     VkBuffer                                    buffer,
@@ -786,7 +721,6 @@
     unique_lock_t lock(global_lock);
     buffer_map[device].erase(buffer);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(
     VkDevice                                    device,
     const VkBufferViewCreateInfo*               pCreateInfo,
@@ -797,7 +731,6 @@
     *pView = (VkBufferView)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyBufferView(
     VkDevice                                    device,
     VkBufferView                                bufferView,
@@ -805,7 +738,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateImage(
     VkDevice                                    device,
     const VkImageCreateInfo*                    pCreateInfo,
@@ -817,7 +749,6 @@
     image_memory_size_map[device][*pImage] = GetImageSizeFromCreateInfo(pCreateInfo);
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyImage(
     VkDevice                                    device,
     VkImage                                     image,
@@ -826,7 +757,6 @@
     unique_lock_t lock(global_lock);
     image_memory_size_map[device].erase(image);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(
     VkDevice                                    device,
     VkImage                                     image,
@@ -836,7 +766,6 @@
     // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure.
     *pLayout = VkSubresourceLayout(); // Default constructor zero values.
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateImageView(
     VkDevice                                    device,
     const VkImageViewCreateInfo*                pCreateInfo,
@@ -847,7 +776,6 @@
     *pView = (VkImageView)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyImageView(
     VkDevice                                    device,
     VkImageView                                 imageView,
@@ -855,7 +783,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(
     VkDevice                                    device,
     const VkShaderModuleCreateInfo*             pCreateInfo,
@@ -866,7 +793,6 @@
     *pShaderModule = (VkShaderModule)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyShaderModule(
     VkDevice                                    device,
     VkShaderModule                              shaderModule,
@@ -874,7 +800,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(
     VkDevice                                    device,
     const VkPipelineCacheCreateInfo*            pCreateInfo,
@@ -885,7 +810,6 @@
     *pPipelineCache = (VkPipelineCache)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -893,7 +817,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -903,7 +826,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(
     VkDevice                                    device,
     VkPipelineCache                             dstCache,
@@ -913,7 +835,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -928,7 +849,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -943,7 +863,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyPipeline(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -951,7 +870,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(
     VkDevice                                    device,
     const VkPipelineLayoutCreateInfo*           pCreateInfo,
@@ -962,7 +880,6 @@
     *pPipelineLayout = (VkPipelineLayout)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(
     VkDevice                                    device,
     VkPipelineLayout                            pipelineLayout,
@@ -970,7 +887,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(
     VkDevice                                    device,
     const VkSamplerCreateInfo*                  pCreateInfo,
@@ -981,7 +897,6 @@
     *pSampler = (VkSampler)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroySampler(
     VkDevice                                    device,
     VkSampler                                   sampler,
@@ -989,7 +904,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(
     VkDevice                                    device,
     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
@@ -1000,7 +914,6 @@
     *pSetLayout = (VkDescriptorSetLayout)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(
     VkDevice                                    device,
     VkDescriptorSetLayout                       descriptorSetLayout,
@@ -1008,7 +921,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(
     VkDevice                                    device,
     const VkDescriptorPoolCreateInfo*           pCreateInfo,
@@ -1019,7 +931,6 @@
     *pDescriptorPool = (VkDescriptorPool)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(
     VkDevice                                    device,
     VkDescriptorPool                            descriptorPool,
@@ -1027,7 +938,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(
     VkDevice                                    device,
     VkDescriptorPool                            descriptorPool,
@@ -1036,7 +946,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(
     VkDevice                                    device,
     const VkDescriptorSetAllocateInfo*          pAllocateInfo,
@@ -1048,7 +957,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(
     VkDevice                                    device,
     VkDescriptorPool                            descriptorPool,
@@ -1058,7 +966,6 @@
 //Destroy object
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(
     VkDevice                                    device,
     uint32_t                                    descriptorWriteCount,
@@ -1068,7 +975,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(
     VkDevice                                    device,
     const VkFramebufferCreateInfo*              pCreateInfo,
@@ -1079,7 +985,6 @@
     *pFramebuffer = (VkFramebuffer)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(
     VkDevice                                    device,
     VkFramebuffer                               framebuffer,
@@ -1087,7 +992,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(
     VkDevice                                    device,
     const VkRenderPassCreateInfo*               pCreateInfo,
@@ -1098,7 +1002,6 @@
     *pRenderPass = (VkRenderPass)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(
     VkDevice                                    device,
     VkRenderPass                                renderPass,
@@ -1106,7 +1009,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(
     VkDevice                                    device,
     VkRenderPass                                renderPass,
@@ -1115,7 +1017,6 @@
     pGranularity->width = 1;
     pGranularity->height = 1;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(
     VkDevice                                    device,
     const VkCommandPoolCreateInfo*              pCreateInfo,
@@ -1127,13 +1028,11 @@
     command_pool_map[device].insert(*pCommandPool);
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyCommandPool(
     VkDevice                                    device,
     VkCommandPool                               commandPool,
     const VkAllocationCallbacks*                pAllocator)
 {
-
     // destroy command buffers for this pool
     unique_lock_t lock(global_lock);
     auto it = command_pool_buffer_map.find(commandPool);
@@ -1145,7 +1044,6 @@
     }
     command_pool_map[device].erase(commandPool);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(
     VkDevice                                    device,
     VkCommandPool                               commandPool,
@@ -1154,13 +1052,11 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(
     VkDevice                                    device,
     const VkCommandBufferAllocateInfo*          pAllocateInfo,
     VkCommandBuffer*                            pCommandBuffers)
 {
-
     unique_lock_t lock(global_lock);
     for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; ++i) {
         pCommandBuffers[i] = (VkCommandBuffer)CreateDispObjHandle();
@@ -1168,14 +1064,12 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(
     VkDevice                                    device,
     VkCommandPool                               commandPool,
     uint32_t                                    commandBufferCount,
     const VkCommandBuffer*                      pCommandBuffers)
 {
-
     unique_lock_t lock(global_lock);
     for (auto i = 0u; i < commandBufferCount; ++i) {
         if (!pCommandBuffers[i]) {
@@ -1193,7 +1087,6 @@
         DestroyDispObjHandle((void*) pCommandBuffers[i]);
     }
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(
     VkCommandBuffer                             commandBuffer,
     const VkCommandBufferBeginInfo*             pBeginInfo)
@@ -1201,14 +1094,12 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(
     VkCommandBuffer                             commandBuffer,
     VkCommandBufferResetFlags                   flags)
@@ -1216,7 +1107,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -1224,7 +1114,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewport(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstViewport,
@@ -1233,7 +1122,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetScissor(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstScissor,
@@ -1242,14 +1130,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(
     VkCommandBuffer                             commandBuffer,
     float                                       lineWidth)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(
     VkCommandBuffer                             commandBuffer,
     float                                       depthBiasConstantFactor,
@@ -1258,14 +1144,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(
     VkCommandBuffer                             commandBuffer,
     const float                                 blendConstants[4])
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(
     VkCommandBuffer                             commandBuffer,
     float                                       minDepthBounds,
@@ -1273,7 +1157,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(
     VkCommandBuffer                             commandBuffer,
     VkStencilFaceFlags                          faceMask,
@@ -1281,7 +1164,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(
     VkCommandBuffer                             commandBuffer,
     VkStencilFaceFlags                          faceMask,
@@ -1289,7 +1171,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(
     VkCommandBuffer                             commandBuffer,
     VkStencilFaceFlags                          faceMask,
@@ -1297,7 +1178,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -1310,7 +1190,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1319,7 +1198,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstBinding,
@@ -1329,7 +1207,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDraw(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    vertexCount,
@@ -1339,7 +1216,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    indexCount,
@@ -1350,7 +1226,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1360,7 +1235,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1370,7 +1244,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatch(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    groupCountX,
@@ -1379,7 +1252,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1387,7 +1259,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    srcBuffer,
@@ -1397,7 +1268,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage(
     VkCommandBuffer                             commandBuffer,
     VkImage                                     srcImage,
@@ -1409,7 +1279,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage(
     VkCommandBuffer                             commandBuffer,
     VkImage                                     srcImage,
@@ -1422,7 +1291,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    srcBuffer,
@@ -1433,7 +1301,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(
     VkCommandBuffer                             commandBuffer,
     VkImage                                     srcImage,
@@ -1444,7 +1311,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    dstBuffer,
@@ -1454,7 +1320,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdFillBuffer(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    dstBuffer,
@@ -1464,7 +1329,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(
     VkCommandBuffer                             commandBuffer,
     VkImage                                     image,
@@ -1475,7 +1339,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(
     VkCommandBuffer                             commandBuffer,
     VkImage                                     image,
@@ -1486,7 +1349,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    attachmentCount,
@@ -1496,7 +1358,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage(
     VkCommandBuffer                             commandBuffer,
     VkImage                                     srcImage,
@@ -1508,7 +1369,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -1516,7 +1376,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -1524,7 +1383,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    eventCount,
@@ -1540,7 +1398,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlags                        srcStageMask,
@@ -1555,7 +1412,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(
     VkCommandBuffer                             commandBuffer,
     VkQueryPool                                 queryPool,
@@ -1564,7 +1420,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndQuery(
     VkCommandBuffer                             commandBuffer,
     VkQueryPool                                 queryPool,
@@ -1572,7 +1427,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(
     VkCommandBuffer                             commandBuffer,
     VkQueryPool                                 queryPool,
@@ -1581,7 +1435,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlagBits                     pipelineStage,
@@ -1590,7 +1443,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(
     VkCommandBuffer                             commandBuffer,
     VkQueryPool                                 queryPool,
@@ -1603,7 +1455,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants(
     VkCommandBuffer                             commandBuffer,
     VkPipelineLayout                            layout,
@@ -1614,7 +1465,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(
     VkCommandBuffer                             commandBuffer,
     const VkRenderPassBeginInfo*                pRenderPassBegin,
@@ -1622,20 +1472,17 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(
     VkCommandBuffer                             commandBuffer,
     VkSubpassContents                           contents)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    commandBufferCount,
@@ -1643,16 +1490,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceVersion(
     uint32_t*                                   pApiVersion)
 {
-
     *pApiVersion = VK_HEADER_VERSION_COMPLETE;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -1661,7 +1504,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -1670,7 +1512,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeatures(
     VkDevice                                    device,
     uint32_t                                    heapIndex,
@@ -1680,14 +1521,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMask(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    deviceMask)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBase(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    baseGroupX,
@@ -1699,7 +1538,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroups(
     VkInstance                                  instance,
     uint32_t*                                   pPhysicalDeviceGroupCount,
@@ -1707,7 +1545,6 @@
 {
     return EnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2(
     VkDevice                                    device,
     const VkImageMemoryRequirementsInfo2*       pInfo,
@@ -1715,7 +1552,6 @@
 {
     GetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2(
     VkDevice                                    device,
     const VkBufferMemoryRequirementsInfo2*      pInfo,
@@ -1723,7 +1559,6 @@
 {
     GetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2(
     VkDevice                                    device,
     const VkImageSparseMemoryRequirementsInfo2* pInfo,
@@ -1732,21 +1567,18 @@
 {
     GetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceFeatures2*                  pFeatures)
 {
     GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceProperties2*                pProperties)
 {
     GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -1754,7 +1586,6 @@
 {
     GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
@@ -1762,7 +1593,6 @@
 {
     return GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pQueueFamilyPropertyCount,
@@ -1770,14 +1600,12 @@
 {
     GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties)
 {
     GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
@@ -1786,7 +1614,6 @@
 {
     GetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL TrimCommandPool(
     VkDevice                                    device,
     VkCommandPool                               commandPool,
@@ -1794,7 +1621,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(
     VkDevice                                    device,
     const VkDeviceQueueInfo2*                   pQueueInfo,
@@ -1803,7 +1629,6 @@
     GetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
     // TODO: Add further support for GetDeviceQueue2 features
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversion(
     VkDevice                                    device,
     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
@@ -1814,7 +1639,6 @@
     *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversion(
     VkDevice                                    device,
     VkSamplerYcbcrConversion                    ycbcrConversion,
@@ -1822,7 +1646,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplate(
     VkDevice                                    device,
     const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
@@ -1833,7 +1656,6 @@
     *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplate(
     VkDevice                                    device,
     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
@@ -1841,7 +1663,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplate(
     VkDevice                                    device,
     VkDescriptorSet                             descriptorSet,
@@ -1850,7 +1671,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferProperties(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
@@ -1875,7 +1695,6 @@
         pExternalBufferProperties->externalMemoryProperties.compatibleHandleTypes = pExternalBufferInfo->handleType;
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFenceProperties(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
@@ -1886,7 +1705,6 @@
     pExternalFenceProperties->compatibleHandleTypes = 0xF;
     pExternalFenceProperties->externalFenceFeatures = 0x3;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphoreProperties(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
@@ -1897,7 +1715,6 @@
     pExternalSemaphoreProperties->compatibleHandleTypes = 0x1F;
     pExternalSemaphoreProperties->externalSemaphoreFeatures = 0x3;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupport(
     VkDevice                                    device,
     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
@@ -1907,8 +1724,6 @@
         pSupport->supported = VK_TRUE;
     }
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCount(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1920,7 +1735,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCount(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -1932,7 +1746,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2(
     VkDevice                                    device,
     const VkRenderPassCreateInfo2*              pCreateInfo,
@@ -1943,7 +1756,6 @@
     *pRenderPass = (VkRenderPass)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2(
     VkCommandBuffer                             commandBuffer,
     const VkRenderPassBeginInfo*                pRenderPassBegin,
@@ -1951,7 +1763,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2(
     VkCommandBuffer                             commandBuffer,
     const VkSubpassBeginInfo*                   pSubpassBeginInfo,
@@ -1959,14 +1770,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2(
     VkCommandBuffer                             commandBuffer,
     const VkSubpassEndInfo*                     pSubpassEndInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL ResetQueryPool(
     VkDevice                                    device,
     VkQueryPool                                 queryPool,
@@ -1975,7 +1784,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValue(
     VkDevice                                    device,
     VkSemaphore                                 semaphore,
@@ -1984,7 +1792,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphores(
     VkDevice                                    device,
     const VkSemaphoreWaitInfo*                  pWaitInfo,
@@ -1993,7 +1800,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphore(
     VkDevice                                    device,
     const VkSemaphoreSignalInfo*                pSignalInfo)
@@ -2001,7 +1807,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddress(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo)
@@ -2016,7 +1821,6 @@
     }
     return address;
 }
-
 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddress(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo)
@@ -2024,7 +1828,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddress(
     VkDevice                                    device,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
@@ -2032,8 +1835,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolProperties(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pToolCount,
@@ -2042,7 +1843,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlot(
     VkDevice                                    device,
     const VkPrivateDataSlotCreateInfo*          pCreateInfo,
@@ -2053,7 +1853,6 @@
     *pPrivateDataSlot = (VkPrivateDataSlot)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyPrivateDataSlot(
     VkDevice                                    device,
     VkPrivateDataSlot                           privateDataSlot,
@@ -2061,7 +1860,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetPrivateData(
     VkDevice                                    device,
     VkObjectType                                objectType,
@@ -2072,7 +1870,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPrivateData(
     VkDevice                                    device,
     VkObjectType                                objectType,
@@ -2082,7 +1879,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent2(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -2090,7 +1886,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent2(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -2098,7 +1893,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents2(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    eventCount,
@@ -2107,14 +1901,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier2(
     VkCommandBuffer                             commandBuffer,
     const VkDependencyInfo*                     pDependencyInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp2(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlags2                       stage,
@@ -2123,7 +1915,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit2(
     VkQueue                                     queue,
     uint32_t                                    submitCount,
@@ -2133,83 +1924,71 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer2(
     VkCommandBuffer                             commandBuffer,
     const VkCopyBufferInfo2*                    pCopyBufferInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage2(
     VkCommandBuffer                             commandBuffer,
     const VkCopyImageInfo2*                     pCopyImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage2(
     VkCommandBuffer                             commandBuffer,
     const VkCopyBufferToImageInfo2*             pCopyBufferToImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer2(
     VkCommandBuffer                             commandBuffer,
     const VkCopyImageToBufferInfo2*             pCopyImageToBufferInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage2(
     VkCommandBuffer                             commandBuffer,
     const VkBlitImageInfo2*                     pBlitImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage2(
     VkCommandBuffer                             commandBuffer,
     const VkResolveImageInfo2*                  pResolveImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginRendering(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingInfo*                      pRenderingInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRendering(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCullMode(
     VkCommandBuffer                             commandBuffer,
     VkCullModeFlags                             cullMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetFrontFace(
     VkCommandBuffer                             commandBuffer,
     VkFrontFace                                 frontFace)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveTopology(
     VkCommandBuffer                             commandBuffer,
     VkPrimitiveTopology                         primitiveTopology)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWithCount(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    viewportCount,
@@ -2217,7 +1996,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetScissorWithCount(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    scissorCount,
@@ -2225,7 +2003,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers2(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstBinding,
@@ -2237,42 +2014,36 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthTestEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthWriteEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthWriteEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthCompareOp(
     VkCommandBuffer                             commandBuffer,
     VkCompareOp                                 depthCompareOp)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBoundsTestEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthBoundsTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilTestEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    stencilTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilOp(
     VkCommandBuffer                             commandBuffer,
     VkStencilFaceFlags                          faceMask,
@@ -2283,28 +2054,24 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizerDiscardEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    rasterizerDiscardEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBiasEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthBiasEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveRestartEnable(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    primitiveRestartEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceBufferMemoryRequirements(
     VkDevice                                    device,
     const VkDeviceBufferMemoryRequirements*     pInfo,
@@ -2317,7 +2084,6 @@
     // Return a size based on the buffer size from the create info.
     pMemoryRequirements->memoryRequirements.size = ((pInfo->pCreateInfo->size + 4095) / 4096) * 4096;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageMemoryRequirements(
     VkDevice                                    device,
     const VkDeviceImageMemoryRequirements*      pInfo,
@@ -2328,7 +2094,6 @@
     // Here we hard-code that the memory type at index 3 doesn't support this image.
     pMemoryRequirements->memoryRequirements.memoryTypeBits = 0xFFFF & ~(0x1 << 3);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSparseMemoryRequirements(
     VkDevice                                    device,
     const VkDeviceImageMemoryRequirements*      pInfo,
@@ -2337,8 +2102,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStipple(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    lineStippleFactor,
@@ -2346,7 +2109,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory2(
     VkDevice                                    device,
     const VkMemoryMapInfo*                      pMemoryMapInfo,
@@ -2354,14 +2116,12 @@
 {
     return MapMemory2KHR(device, pMemoryMapInfo, ppData);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL UnmapMemory2(
     VkDevice                                    device,
     const VkMemoryUnmapInfo*                    pMemoryUnmapInfo)
 {
     return UnmapMemory2KHR(device, pMemoryUnmapInfo);
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer2(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -2371,7 +2131,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetRenderingAreaGranularity(
     VkDevice                                    device,
     const VkRenderingAreaInfo*                  pRenderingAreaInfo,
@@ -2379,7 +2138,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSubresourceLayout(
     VkDevice                                    device,
     const VkDeviceImageSubresourceInfo*         pInfo,
@@ -2387,7 +2145,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2(
     VkDevice                                    device,
     VkImage                                     image,
@@ -2396,7 +2153,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSet(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -2407,7 +2163,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplate(
     VkCommandBuffer                             commandBuffer,
     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
@@ -2417,49 +2172,42 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingAttachmentLocations(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingAttachmentLocationInfo*    pLocationInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingInputAttachmentIndices(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingInputAttachmentIndexInfo*  pInputAttachmentIndexInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets2(
     VkCommandBuffer                             commandBuffer,
     const VkBindDescriptorSetsInfo*             pBindDescriptorSetsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants2(
     VkCommandBuffer                             commandBuffer,
     const VkPushConstantsInfo*                  pPushConstantsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSet2(
     VkCommandBuffer                             commandBuffer,
     const VkPushDescriptorSetInfo*              pPushDescriptorSetInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplate2(
     VkCommandBuffer                             commandBuffer,
     const VkPushDescriptorSetWithTemplateInfo*  pPushDescriptorSetWithTemplateInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToImage(
     VkDevice                                    device,
     const VkCopyMemoryToImageInfo*              pCopyMemoryToImageInfo)
@@ -2467,7 +2215,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyImageToMemory(
     VkDevice                                    device,
     const VkCopyImageToMemoryInfo*              pCopyImageToMemoryInfo)
@@ -2475,7 +2222,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyImageToImage(
     VkDevice                                    device,
     const VkCopyImageToImageInfo*               pCopyImageToImageInfo)
@@ -2483,7 +2229,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL TransitionImageLayout(
     VkDevice                                    device,
     uint32_t                                    transitionCount,
@@ -2492,8 +2237,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
     VkInstance                                  instance,
     VkSurfaceKHR                                surface,
@@ -2501,7 +2244,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -2512,7 +2254,6 @@
     *pSupported = VK_TRUE;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(
     VkPhysicalDevice                            physicalDevice,
     VkSurfaceKHR                                surface,
@@ -2552,7 +2293,6 @@
                                                 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(
     VkPhysicalDevice                            physicalDevice,
     VkSurfaceKHR                                surface,
@@ -2574,7 +2314,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(
     VkPhysicalDevice                            physicalDevice,
     VkSurfaceKHR                                surface,
@@ -2595,8 +2334,6 @@
     }
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
     VkDevice                                    device,
     const VkSwapchainCreateInfoKHR*             pCreateInfo,
@@ -2610,7 +2347,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -2619,7 +2355,6 @@
     unique_lock_t lock(global_lock);
     swapchain_image_map.clear();
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -2639,7 +2374,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -2651,7 +2385,6 @@
     *pImageIndex = 0;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(
     VkQueue                                     queue,
     const VkPresentInfoKHR*                     pPresentInfo)
@@ -2659,7 +2392,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupPresentCapabilitiesKHR(
     VkDevice                                    device,
     VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities)
@@ -2667,7 +2399,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModesKHR(
     VkDevice                                    device,
     VkSurfaceKHR                                surface,
@@ -2676,7 +2407,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDevicePresentRectanglesKHR(
     VkPhysicalDevice                            physicalDevice,
     VkSurfaceKHR                                surface,
@@ -2686,7 +2416,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImage2KHR(
     VkDevice                                    device,
     const VkAcquireNextImageInfoKHR*            pAcquireInfo,
@@ -2695,8 +2424,6 @@
     *pImageIndex = 0;
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -2711,7 +2438,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -2720,7 +2446,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    planeIndex,
@@ -2730,7 +2455,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display,
@@ -2740,7 +2464,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display,
@@ -2752,7 +2475,6 @@
     *pMode = (VkDisplayModeKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayModeKHR                            mode,
@@ -2762,7 +2484,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(
     VkInstance                                  instance,
     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
@@ -2773,8 +2494,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
     VkDevice                                    device,
     uint32_t                                    swapchainCount,
@@ -2788,9 +2507,7 @@
     }
     return VK_SUCCESS;
 }
-
 #ifdef VK_USE_PLATFORM_XLIB_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
     VkInstance                                  instance,
     const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
@@ -2801,7 +2518,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -2814,7 +2530,6 @@
 #endif /* VK_USE_PLATFORM_XLIB_KHR */
 
 #ifdef VK_USE_PLATFORM_XCB_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
     VkInstance                                  instance,
     const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
@@ -2825,7 +2540,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -2838,7 +2552,6 @@
 #endif /* VK_USE_PLATFORM_XCB_KHR */
 
 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
     VkInstance                                  instance,
     const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
@@ -2849,7 +2562,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -2861,7 +2573,6 @@
 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
 
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
     VkInstance                                  instance,
     const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
@@ -2875,7 +2586,6 @@
 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
 
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
     VkInstance                                  instance,
     const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
@@ -2886,7 +2596,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex)
@@ -2895,9 +2604,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoCapabilitiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkVideoProfileInfoKHR*                pVideoProfile,
@@ -2905,7 +2611,6 @@
 {
     return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoFormatPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceVideoFormatInfoKHR*   pVideoFormatInfo,
@@ -2914,7 +2619,6 @@
 {
     return VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateVideoSessionKHR(
     VkDevice                                    device,
     const VkVideoSessionCreateInfoKHR*          pCreateInfo,
@@ -2925,7 +2629,6 @@
     *pVideoSession = (VkVideoSessionKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyVideoSessionKHR(
     VkDevice                                    device,
     VkVideoSessionKHR                           videoSession,
@@ -2933,7 +2636,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetVideoSessionMemoryRequirementsKHR(
     VkDevice                                    device,
     VkVideoSessionKHR                           videoSession,
@@ -2951,7 +2653,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindVideoSessionMemoryKHR(
     VkDevice                                    device,
     VkVideoSessionKHR                           videoSession,
@@ -2961,7 +2662,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateVideoSessionParametersKHR(
     VkDevice                                    device,
     const VkVideoSessionParametersCreateInfoKHR* pCreateInfo,
@@ -2972,7 +2672,6 @@
     *pVideoSessionParameters = (VkVideoSessionParametersKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL UpdateVideoSessionParametersKHR(
     VkDevice                                    device,
     VkVideoSessionParametersKHR                 videoSessionParameters,
@@ -2981,7 +2680,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyVideoSessionParametersKHR(
     VkDevice                                    device,
     VkVideoSessionParametersKHR                 videoSessionParameters,
@@ -2989,55 +2687,41 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginVideoCodingKHR(
     VkCommandBuffer                             commandBuffer,
     const VkVideoBeginCodingInfoKHR*            pBeginInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndVideoCodingKHR(
     VkCommandBuffer                             commandBuffer,
     const VkVideoEndCodingInfoKHR*              pEndCodingInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdControlVideoCodingKHR(
     VkCommandBuffer                             commandBuffer,
     const VkVideoCodingControlInfoKHR*          pCodingControlInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDecodeVideoKHR(
     VkCommandBuffer                             commandBuffer,
     const VkVideoDecodeInfoKHR*                 pDecodeInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderingKHR(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingInfo*                      pRenderingInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderingKHR(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceFeatures2*                  pFeatures)
@@ -3085,7 +2769,6 @@
        SetBoolArrayTrue(feat_bools, 1);
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceProperties2*                pProperties)
@@ -3238,7 +2921,6 @@
         }
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -3253,7 +2935,6 @@
         props_3->optimalTilingFeatures |= VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT;
     }
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
@@ -3269,7 +2950,6 @@
     GetPhysicalDeviceImageFormatProperties(physicalDevice, pImageFormatInfo->format, pImageFormatInfo->type, pImageFormatInfo->tiling, pImageFormatInfo->usage, pImageFormatInfo->flags, &pImageFormatProperties->imageFormatProperties);
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pQueueFamilyPropertyCount,
@@ -3327,14 +3007,12 @@
         *pQueueFamilyPropertyCount = 3;
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties)
 {
     GetPhysicalDeviceMemoryProperties(physicalDevice, &pMemoryProperties->memoryProperties);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
@@ -3347,8 +3025,6 @@
         GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, pFormatInfo->format, pFormatInfo->type, pFormatInfo->samples, pFormatInfo->usage, pFormatInfo->tiling, pPropertyCount, nullptr);
     }
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
     VkDevice                                    device,
     uint32_t                                    heapIndex,
@@ -3358,14 +3034,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    deviceMask)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    baseGroupX,
@@ -3377,9 +3051,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
     VkDevice                                    device,
     VkCommandPool                               commandPool,
@@ -3387,8 +3058,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
     VkInstance                                  instance,
     uint32_t*                                   pPhysicalDeviceGroupCount,
@@ -3404,8 +3073,6 @@
     }
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
@@ -3413,10 +3080,7 @@
 {
     GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
 }
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
     VkDevice                                    device,
     const VkMemoryGetWin32HandleInfoKHR*        pGetWin32HandleInfo,
@@ -3425,7 +3089,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR(
     VkDevice                                    device,
     VkExternalMemoryHandleTypeFlagBits          handleType,
@@ -3436,8 +3099,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
     VkDevice                                    device,
     const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
@@ -3446,7 +3107,6 @@
     *pFd = 1;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR(
     VkDevice                                    device,
     VkExternalMemoryHandleTypeFlagBits          handleType,
@@ -3456,11 +3116,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
@@ -3468,10 +3123,7 @@
 {
     GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
 }
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
     VkDevice                                    device,
     const VkImportSemaphoreWin32HandleInfoKHR*  pImportSemaphoreWin32HandleInfo)
@@ -3479,7 +3131,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR(
     VkDevice                                    device,
     const VkSemaphoreGetWin32HandleInfoKHR*     pGetWin32HandleInfo,
@@ -3489,8 +3140,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
     VkDevice                                    device,
     const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo)
@@ -3498,7 +3147,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR(
     VkDevice                                    device,
     const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
@@ -3507,8 +3155,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -3519,7 +3165,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(
     VkCommandBuffer                             commandBuffer,
     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
@@ -3529,11 +3174,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
     VkDevice                                    device,
     const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
@@ -3544,7 +3184,6 @@
     *pDescriptorUpdateTemplate = (VkDescriptorUpdateTemplate)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(
     VkDevice                                    device,
     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
@@ -3552,7 +3191,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(
     VkDevice                                    device,
     VkDescriptorSet                             descriptorSet,
@@ -3561,9 +3199,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
     VkDevice                                    device,
     const VkRenderPassCreateInfo2*              pCreateInfo,
@@ -3574,7 +3209,6 @@
     *pRenderPass = (VkRenderPass)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkRenderPassBeginInfo*                pRenderPassBegin,
@@ -3582,7 +3216,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkSubpassBeginInfo*                   pSubpassBeginInfo,
@@ -3590,15 +3223,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkSubpassEndInfo*                     pSubpassEndInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain)
@@ -3606,8 +3236,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
@@ -3615,10 +3243,7 @@
 {
     GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
 }
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
     VkDevice                                    device,
     const VkImportFenceWin32HandleInfoKHR*      pImportFenceWin32HandleInfo)
@@ -3626,7 +3251,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR(
     VkDevice                                    device,
     const VkFenceGetWin32HandleInfoKHR*         pGetWin32HandleInfo,
@@ -3636,8 +3260,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
     VkDevice                                    device,
     const VkImportFenceFdInfoKHR*               pImportFenceFdInfo)
@@ -3645,7 +3267,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR(
     VkDevice                                    device,
     const VkFenceGetFdInfoKHR*                  pGetFdInfo,
@@ -3654,8 +3275,6 @@
     *pFd = 0x42;
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -3692,7 +3311,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkQueryPoolPerformanceCreateInfoKHR*  pPerformanceQueryCreateInfo,
@@ -3703,7 +3321,6 @@
         *pNumPasses = 1;
     }
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireProfilingLockKHR(
     VkDevice                                    device,
     const VkAcquireProfilingLockInfoKHR*        pInfo)
@@ -3711,15 +3328,11 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL ReleaseProfilingLockKHR(
     VkDevice                                    device)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
@@ -3740,7 +3353,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
@@ -3764,9 +3376,6 @@
     }
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -3775,7 +3384,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlaneProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -3784,7 +3392,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModeProperties2KHR(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display,
@@ -3794,7 +3401,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilities2KHR(
     VkPhysicalDevice                            physicalDevice,
     const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
@@ -3803,12 +3409,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
     VkDevice                                    device,
     const VkImageMemoryRequirementsInfo2*       pInfo,
@@ -3816,7 +3416,6 @@
 {
     GetImageMemoryRequirements(device, pInfo->image, &pMemoryRequirements->memoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR(
     VkDevice                                    device,
     const VkBufferMemoryRequirementsInfo2*      pInfo,
@@ -3824,7 +3423,6 @@
 {
     GetBufferMemoryRequirements(device, pInfo->buffer, &pMemoryRequirements->memoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR(
     VkDevice                                    device,
     const VkImageSparseMemoryRequirementsInfo2* pInfo,
@@ -3837,9 +3435,6 @@
         GetImageSparseMemoryRequirements(device, pInfo->image, pSparseMemoryRequirementCount, nullptr);
     }
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
     VkDevice                                    device,
     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
@@ -3850,7 +3445,6 @@
     *pYcbcrConversion = (VkSamplerYcbcrConversion)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR(
     VkDevice                                    device,
     VkSamplerYcbcrConversion                    ycbcrConversion,
@@ -3858,8 +3452,6 @@
 {
 //Destroy object
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -3868,7 +3460,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -3877,11 +3468,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
     VkDevice                                    device,
     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
@@ -3889,8 +3475,6 @@
 {
     GetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -3902,7 +3486,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -3914,18 +3497,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreCounterValueKHR(
     VkDevice                                    device,
     VkSemaphore                                 semaphore,
@@ -3934,7 +3505,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitSemaphoresKHR(
     VkDevice                                    device,
     const VkSemaphoreWaitInfo*                  pWaitInfo,
@@ -3943,7 +3513,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SignalSemaphoreKHR(
     VkDevice                                    device,
     const VkSemaphoreSignalInfo*                pSignalInfo)
@@ -3951,10 +3520,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceFragmentShadingRatesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pFragmentShadingRateCount,
@@ -3969,7 +3534,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateKHR(
     VkCommandBuffer                             commandBuffer,
     const VkExtent2D*                           pFragmentSize,
@@ -3977,27 +3541,18 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingAttachmentLocationsKHR(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingAttachmentLocationInfo*    pLocationInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRenderingInputAttachmentIndicesKHR(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingInputAttachmentIndexInfo*  pInputAttachmentIndexInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitForPresentKHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -4007,16 +3562,12 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressKHR(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo)
 {
     return GetBufferDeviceAddress(device, pInfo);
 }
-
 static VKAPI_ATTR uint64_t VKAPI_CALL GetBufferOpaqueCaptureAddressKHR(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo)
@@ -4024,7 +3575,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR uint64_t VKAPI_CALL GetDeviceMemoryOpaqueCaptureAddressKHR(
     VkDevice                                    device,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
@@ -4032,8 +3582,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDeferredOperationKHR(
     VkDevice                                    device,
     const VkAllocationCallbacks*                pAllocator,
@@ -4043,7 +3591,6 @@
     *pDeferredOperation = (VkDeferredOperationKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDeferredOperationKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      operation,
@@ -4051,7 +3598,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR uint32_t VKAPI_CALL GetDeferredOperationMaxConcurrencyKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      operation)
@@ -4059,7 +3605,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeferredOperationResultKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      operation)
@@ -4067,7 +3612,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL DeferredOperationJoinKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      operation)
@@ -4075,8 +3619,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR(
     VkDevice                                    device,
     const VkPipelineInfoKHR*                    pPipelineInfo,
@@ -4086,7 +3628,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableStatisticsKHR(
     VkDevice                                    device,
     const VkPipelineExecutableInfoKHR*          pExecutableInfo,
@@ -4096,7 +3637,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableInternalRepresentationsKHR(
     VkDevice                                    device,
     const VkPipelineExecutableInfoKHR*          pExecutableInfo,
@@ -4106,8 +3646,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL MapMemory2KHR(
     VkDevice                                    device,
     const VkMemoryMapInfo*                      pMemoryMapInfo,
@@ -4115,7 +3653,6 @@
 {
     return MapMemory(device, pMemoryMapInfo->memory, pMemoryMapInfo->offset, pMemoryMapInfo->size, pMemoryMapInfo->flags, ppData);
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL UnmapMemory2KHR(
     VkDevice                                    device,
     const VkMemoryUnmapInfo*                    pMemoryUnmapInfo)
@@ -4123,12 +3660,6 @@
     UnmapMemory(device, pMemoryUnmapInfo->memory);
     return VK_SUCCESS;
 }
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR* pQualityLevelInfo,
@@ -4137,7 +3668,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetEncodedVideoSessionParametersKHR(
     VkDevice                                    device,
     const VkVideoEncodeSessionParametersGetInfoKHR* pVideoSessionParametersInfo,
@@ -4148,15 +3678,12 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEncodeVideoKHR(
     VkCommandBuffer                             commandBuffer,
     const VkVideoEncodeInfoKHR*                 pEncodeInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetEvent2KHR(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -4164,7 +3691,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResetEvent2KHR(
     VkCommandBuffer                             commandBuffer,
     VkEvent                                     event,
@@ -4172,7 +3698,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWaitEvents2KHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    eventCount,
@@ -4181,14 +3706,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkDependencyInfo*                     pDependencyInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp2KHR(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlags2                       stage,
@@ -4197,7 +3720,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit2KHR(
     VkQueue                                     queue,
     uint32_t                                    submitCount,
@@ -4207,66 +3729,48 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyBufferInfo2*                    pCopyBufferInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyImage2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyImageInfo2*                     pCopyImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyBufferToImageInfo2*             pCopyBufferToImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyImageToBufferInfo2*             pCopyImageToBufferInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBlitImage2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkBlitImageInfo2*                     pBlitImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdResolveImage2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkResolveImageInfo2*                  pResolveImageInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirect2KHR(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             indirectDeviceAddress)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceBufferMemoryRequirementsKHR(
     VkDevice                                    device,
     const VkDeviceBufferMemoryRequirements*     pInfo,
@@ -4274,7 +3778,6 @@
 {
     GetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageMemoryRequirementsKHR(
     VkDevice                                    device,
     const VkDeviceImageMemoryRequirements*      pInfo,
@@ -4282,7 +3785,6 @@
 {
     GetDeviceImageMemoryRequirements(device, pInfo, pMemoryRequirements);
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSparseMemoryRequirementsKHR(
     VkDevice                                    device,
     const VkDeviceImageMemoryRequirements*      pInfo,
@@ -4291,10 +3793,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer2KHR(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -4304,7 +3802,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetRenderingAreaGranularityKHR(
     VkDevice                                    device,
     const VkRenderingAreaInfo*                  pRenderingAreaInfo,
@@ -4312,7 +3809,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceImageSubresourceLayoutKHR(
     VkDevice                                    device,
     const VkDeviceImageSubresourceInfo*         pInfo,
@@ -4320,7 +3816,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2KHR(
     VkDevice                                    device,
     VkImage                                     image,
@@ -4329,9 +3824,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL WaitForPresent2KHR(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -4340,9 +3832,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineBinariesKHR(
     VkDevice                                    device,
     const VkPipelineBinaryCreateInfoKHR*        pCreateInfo,
@@ -4355,7 +3844,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyPipelineBinaryKHR(
     VkDevice                                    device,
     VkPipelineBinaryKHR                         pipelineBinary,
@@ -4363,7 +3851,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineKeyKHR(
     VkDevice                                    device,
     const VkPipelineCreateInfoKHR*              pPipelineCreateInfo,
@@ -4372,7 +3859,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelineBinaryDataKHR(
     VkDevice                                    device,
     const VkPipelineBinaryDataInfoKHR*          pInfo,
@@ -4383,7 +3869,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseCapturedPipelineDataKHR(
     VkDevice                                    device,
     const VkReleaseCapturedPipelineDataInfoKHR* pInfo,
@@ -4392,9 +3877,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesKHR(
     VkDevice                                    device,
     const VkReleaseSwapchainImagesInfoKHR*      pReleaseInfo)
@@ -4402,8 +3884,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -4428,18 +3908,6 @@
     }
     return VK_SUCCESS;
 }
-
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    lineStippleFactor,
@@ -4447,8 +3915,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pTimeDomainCount,
@@ -4462,7 +3928,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsKHR(
     VkDevice                                    device,
     uint32_t                                    timestampCount,
@@ -4473,77 +3938,54 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkBindDescriptorSetsInfo*             pBindDescriptorSetsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushConstants2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkPushConstantsInfo*                  pPushConstantsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSet2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkPushDescriptorSetInfo*              pPushDescriptorSetInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplate2KHR(
     VkCommandBuffer                             commandBuffer,
     const VkPushDescriptorSetWithTemplateInfo*  pPushDescriptorSetWithTemplateInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDescriptorBufferOffsets2EXT(
     VkCommandBuffer                             commandBuffer,
     const VkSetDescriptorBufferOffsetsInfoEXT*  pSetDescriptorBufferOffsetsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBufferEmbeddedSamplers2EXT(
     VkCommandBuffer                             commandBuffer,
     const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryIndirectKHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMemoryIndirectInfoKHR*          pCopyMemoryIndirectInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToImageIndirectKHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMemoryToImageIndirectInfoKHR*   pCopyMemoryToImageIndirectInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
     VkInstance                                  instance,
     const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
@@ -4554,7 +3996,6 @@
     *pCallback = (VkDebugReportCallbackEXT)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(
     VkInstance                                  instance,
     VkDebugReportCallbackEXT                    callback,
@@ -4562,7 +4003,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(
     VkInstance                                  instance,
     VkDebugReportFlagsEXT                       flags,
@@ -4575,14 +4015,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
     VkDevice                                    device,
     const VkDebugMarkerObjectTagInfoEXT*        pTagInfo)
@@ -4590,7 +4022,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
     VkDevice                                    device,
     const VkDebugMarkerObjectNameInfoEXT*       pNameInfo)
@@ -4598,30 +4029,23 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(
     VkCommandBuffer                             commandBuffer,
     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(
     VkCommandBuffer                             commandBuffer,
     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstBinding,
@@ -4632,7 +4056,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstCounterBuffer,
@@ -4642,7 +4065,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstCounterBuffer,
@@ -4652,7 +4074,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT(
     VkCommandBuffer                             commandBuffer,
     VkQueryPool                                 queryPool,
@@ -4662,7 +4083,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT(
     VkCommandBuffer                             commandBuffer,
     VkQueryPool                                 queryPool,
@@ -4671,7 +4091,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    instanceCount,
@@ -4683,8 +4102,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCuModuleNVX(
     VkDevice                                    device,
     const VkCuModuleCreateInfoNVX*              pCreateInfo,
@@ -4695,7 +4112,6 @@
     *pModule = (VkCuModuleNVX)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCuFunctionNVX(
     VkDevice                                    device,
     const VkCuFunctionCreateInfoNVX*            pCreateInfo,
@@ -4706,7 +4122,6 @@
     *pFunction = (VkCuFunctionNVX)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyCuModuleNVX(
     VkDevice                                    device,
     VkCuModuleNVX                               module,
@@ -4714,7 +4129,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyCuFunctionNVX(
     VkDevice                                    device,
     VkCuFunctionNVX                             function,
@@ -4722,15 +4136,12 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCuLaunchKernelNVX(
     VkCommandBuffer                             commandBuffer,
     const VkCuLaunchInfoNVX*                    pLaunchInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
     VkDevice                                    device,
     const VkImageViewHandleInfoNVX*             pInfo)
@@ -4738,7 +4149,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR uint64_t VKAPI_CALL GetImageViewHandle64NVX(
     VkDevice                                    device,
     const VkImageViewHandleInfoNVX*             pInfo)
@@ -4746,7 +4156,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewAddressNVX(
     VkDevice                                    device,
     VkImageView                                 imageView,
@@ -4755,8 +4164,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -4768,7 +4175,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -4780,12 +4186,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -4797,10 +4197,7 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 #ifdef VK_USE_PLATFORM_GGP
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
     VkInstance                                  instance,
     const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
@@ -4812,10 +4209,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_GGP */
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     VkFormat                                    format,
@@ -4829,10 +4222,7 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
     VkDevice                                    device,
     VkDeviceMemory                              memory,
@@ -4844,12 +4234,7 @@
 }
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
 
-#ifdef VK_USE_PLATFORM_WIN32_KHR
-#endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 #ifdef VK_USE_PLATFORM_VI_NN
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
     VkInstance                                  instance,
     const VkViSurfaceCreateInfoNN*              pCreateInfo,
@@ -4861,27 +4246,17 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_VI_NN */
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
     VkCommandBuffer                             commandBuffer,
     const VkConditionalRenderingBeginInfoEXT*   pConditionalRenderingBegin)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstViewport,
@@ -4890,8 +4265,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display)
@@ -4899,9 +4272,7 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     Display*                                    dpy,
@@ -4910,7 +4281,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     Display*                                    dpy,
@@ -4921,8 +4291,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
     VkPhysicalDevice                            physicalDevice,
     VkSurfaceKHR                                surface,
@@ -4931,8 +4299,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
     VkDevice                                    device,
     VkDisplayKHR                                display,
@@ -4941,7 +4307,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT(
     VkDevice                                    device,
     const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
@@ -4951,7 +4316,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT(
     VkDevice                                    device,
     VkDisplayKHR                                display,
@@ -4963,7 +4327,6 @@
     *pFence = (VkFence)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -4973,8 +4336,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -4983,7 +4344,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -4993,13 +4353,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstDiscardRectangle,
@@ -5008,25 +4361,18 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    discardRectangleEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkDiscardRectangleModeEXT                   discardRectangleMode)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
     VkDevice                                    device,
     uint32_t                                    swapchainCount,
@@ -5035,10 +4381,7 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 #ifdef VK_USE_PLATFORM_IOS_MVK
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
     VkInstance                                  instance,
     const VkIOSSurfaceCreateInfoMVK*            pCreateInfo,
@@ -5052,7 +4395,6 @@
 #endif /* VK_USE_PLATFORM_IOS_MVK */
 
 #ifdef VK_USE_PLATFORM_MACOS_MVK
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
     VkInstance                                  instance,
     const VkMacOSSurfaceCreateInfoMVK*          pCreateInfo,
@@ -5064,10 +4406,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_MACOS_MVK */
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
     VkDevice                                    device,
     const VkDebugUtilsObjectNameInfoEXT*        pNameInfo)
@@ -5075,7 +4413,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(
     VkDevice                                    device,
     const VkDebugUtilsObjectTagInfoEXT*         pTagInfo)
@@ -5083,47 +4420,40 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT(
     VkQueue                                     queue,
     const VkDebugUtilsLabelEXT*                 pLabelInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT(
     VkQueue                                     queue)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT(
     VkQueue                                     queue,
     const VkDebugUtilsLabelEXT*                 pLabelInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT(
     VkCommandBuffer                             commandBuffer,
     const VkDebugUtilsLabelEXT*                 pLabelInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT(
     VkCommandBuffer                             commandBuffer,
     const VkDebugUtilsLabelEXT*                 pLabelInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDebugUtilsMessengerEXT(
     VkInstance                                  instance,
     const VkDebugUtilsMessengerCreateInfoEXT*   pCreateInfo,
@@ -5134,7 +4464,6 @@
     *pMessenger = (VkDebugUtilsMessengerEXT)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDebugUtilsMessengerEXT(
     VkInstance                                  instance,
     VkDebugUtilsMessengerEXT                    messenger,
@@ -5142,7 +4471,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL SubmitDebugUtilsMessageEXT(
     VkInstance                                  instance,
     VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
@@ -5151,9 +4479,7 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
     VkDevice                                    device,
     const struct AHardwareBuffer*               buffer,
@@ -5175,7 +4501,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID(
     VkDevice                                    device,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
@@ -5186,10 +4511,7 @@
 }
 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
 
-
-
 #ifdef VK_ENABLE_BETA_EXTENSIONS
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateExecutionGraphPipelinesAMDX(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -5204,7 +4526,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetExecutionGraphPipelineScratchSizeAMDX(
     VkDevice                                    device,
     VkPipeline                                  executionGraph,
@@ -5213,7 +4534,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetExecutionGraphPipelineNodeIndexAMDX(
     VkDevice                                    device,
     VkPipeline                                  executionGraph,
@@ -5223,7 +4543,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdInitializeGraphScratchMemoryAMDX(
     VkCommandBuffer                             commandBuffer,
     VkPipeline                                  executionGraph,
@@ -5232,7 +4551,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphAMDX(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             scratch,
@@ -5241,7 +4559,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphIndirectAMDX(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             scratch,
@@ -5250,7 +4567,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchGraphIndirectCountAMDX(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             scratch,
@@ -5260,19 +4576,12 @@
 //Not a CREATE or DESTROY function
 }
 #endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
     VkCommandBuffer                             commandBuffer,
     const VkSampleLocationsInfoEXT*             pSampleLocationsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT(
     VkPhysicalDevice                            physicalDevice,
     VkSampleCountFlagBits                       samples,
@@ -5283,14 +4592,6 @@
         pMultisampleProperties->maxSampleLocationGridSize = {32, 32};
     }
 }
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
     VkDevice                                    device,
     VkImage                                     image,
@@ -5299,8 +4600,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
     VkDevice                                    device,
     const VkValidationCacheCreateInfoEXT*       pCreateInfo,
@@ -5311,7 +4610,6 @@
     *pValidationCache = (VkValidationCacheEXT)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(
     VkDevice                                    device,
     VkValidationCacheEXT                        validationCache,
@@ -5319,7 +4617,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(
     VkDevice                                    device,
     VkValidationCacheEXT                        dstCache,
@@ -5329,7 +4626,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(
     VkDevice                                    device,
     VkValidationCacheEXT                        validationCache,
@@ -5339,10 +4635,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
     VkCommandBuffer                             commandBuffer,
     VkImageView                                 imageView,
@@ -5350,7 +4642,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstViewport,
@@ -5359,7 +4650,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV(
     VkCommandBuffer                             commandBuffer,
     VkCoarseSampleOrderTypeNV                   sampleOrderType,
@@ -5368,8 +4658,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
     VkDevice                                    device,
     const VkAccelerationStructureCreateInfoNV*  pCreateInfo,
@@ -5380,7 +4668,6 @@
     *pAccelerationStructure = (VkAccelerationStructureNV)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV(
     VkDevice                                    device,
     VkAccelerationStructureNV                   accelerationStructure,
@@ -5388,7 +4675,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV(
     VkDevice                                    device,
     const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
@@ -5399,7 +4685,6 @@
     pMemoryRequirements->memoryRequirements.alignment = 1;
     pMemoryRequirements->memoryRequirements.memoryTypeBits = 0xFFFF;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -5408,7 +4693,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV(
     VkCommandBuffer                             commandBuffer,
     const VkAccelerationStructureInfoNV*        pInfo,
@@ -5422,7 +4706,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV(
     VkCommandBuffer                             commandBuffer,
     VkAccelerationStructureNV                   dst,
@@ -5431,7 +4714,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    raygenShaderBindingTableBuffer,
@@ -5451,7 +4733,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
     VkDevice                                    device,
     VkPipelineCache                             pipelineCache,
@@ -5466,7 +4747,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -5478,7 +4758,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -5490,7 +4769,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV(
     VkDevice                                    device,
     VkAccelerationStructureNV                   accelerationStructure,
@@ -5500,7 +4778,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    accelerationStructureCount,
@@ -5511,7 +4788,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -5520,12 +4796,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
     VkDevice                                    device,
     VkExternalMemoryHandleTypeFlagBits          handleType,
@@ -5535,8 +4805,6 @@
     pMemoryHostPointerProperties->memoryTypeBits = 1 << 5; // DEVICE_LOCAL only type
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlagBits                     pipelineStage,
@@ -5546,7 +4814,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarker2AMD(
     VkCommandBuffer                             commandBuffer,
     VkPipelineStageFlags2                       stage,
@@ -5556,9 +4823,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pTimeDomainCount,
@@ -5572,7 +4836,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT(
     VkDevice                                    device,
     uint32_t                                    timestampCount,
@@ -5583,17 +4846,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-#ifdef VK_USE_PLATFORM_GGP
-#endif /* VK_USE_PLATFORM_GGP */
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    taskCount,
@@ -5601,7 +4853,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -5611,7 +4862,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -5623,10 +4873,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorEnableNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstExclusiveScissor,
@@ -5635,7 +4881,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstExclusiveScissor,
@@ -5644,15 +4889,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
     VkCommandBuffer                             commandBuffer,
     const void*                                 pCheckpointMarker)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV(
     VkQueue                                     queue,
     uint32_t*                                   pCheckpointDataCount,
@@ -5660,7 +4902,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointData2NV(
     VkQueue                                     queue,
     uint32_t*                                   pCheckpointDataCount,
@@ -5668,9 +4909,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
     VkDevice                                    device,
     const VkInitializePerformanceApiInfoINTEL*  pInitializeInfo)
@@ -5678,13 +4916,11 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL(
     VkDevice                                    device)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL(
     VkCommandBuffer                             commandBuffer,
     const VkPerformanceMarkerInfoINTEL*         pMarkerInfo)
@@ -5692,7 +4928,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL(
     VkCommandBuffer                             commandBuffer,
     const VkPerformanceStreamMarkerInfoINTEL*   pMarkerInfo)
@@ -5700,7 +4935,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL(
     VkCommandBuffer                             commandBuffer,
     const VkPerformanceOverrideInfoINTEL*       pOverrideInfo)
@@ -5708,7 +4942,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL(
     VkDevice                                    device,
     const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
@@ -5717,7 +4950,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL(
     VkDevice                                    device,
     VkPerformanceConfigurationINTEL             configuration)
@@ -5725,7 +4957,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL(
     VkQueue                                     queue,
     VkPerformanceConfigurationINTEL             configuration)
@@ -5733,7 +4964,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL(
     VkDevice                                    device,
     VkPerformanceParameterTypeINTEL             parameter,
@@ -5742,9 +4972,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
     VkDevice                                    device,
     VkSwapchainKHR                              swapChain,
@@ -5752,9 +4979,7 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 #ifdef VK_USE_PLATFORM_FUCHSIA
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
     VkInstance                                  instance,
     const VkImagePipeSurfaceCreateInfoFUCHSIA*  pCreateInfo,
@@ -5768,7 +4993,6 @@
 #endif /* VK_USE_PLATFORM_FUCHSIA */
 
 #ifdef VK_USE_PLATFORM_METAL_EXT
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
     VkInstance                                  instance,
     const VkMetalSurfaceCreateInfoEXT*          pCreateInfo,
@@ -5780,27 +5004,12 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_METAL_EXT */
-
-
-
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
     VkDevice                                    device,
     const VkBufferDeviceAddressInfo*            pInfo)
 {
     return GetBufferDeviceAddress(device, pInfo);
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceToolPropertiesEXT(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pToolCount,
@@ -5809,10 +5018,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -5821,8 +5026,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pCombinationCount,
@@ -5831,12 +5034,7 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
@@ -5846,7 +5044,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain)
@@ -5854,7 +5051,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain)
@@ -5862,7 +5058,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
     VkDevice                                    device,
     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
@@ -5872,8 +5067,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
     VkInstance                                  instance,
     const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
@@ -5884,8 +5077,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    lineStippleFactor,
@@ -5893,9 +5084,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
     VkDevice                                    device,
     VkQueryPool                                 queryPool,
@@ -5904,30 +5092,24 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCullModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkCullModeFlags                             cullMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetFrontFaceEXT(
     VkCommandBuffer                             commandBuffer,
     VkFrontFace                                 frontFace)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveTopologyEXT(
     VkCommandBuffer                             commandBuffer,
     VkPrimitiveTopology                         primitiveTopology)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWithCountEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    viewportCount,
@@ -5935,7 +5117,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetScissorWithCountEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    scissorCount,
@@ -5943,7 +5124,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers2EXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstBinding,
@@ -5955,42 +5135,36 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthTestEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthWriteEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthWriteEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthCompareOpEXT(
     VkCommandBuffer                             commandBuffer,
     VkCompareOp                                 depthCompareOp)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBoundsTestEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthBoundsTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilTestEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    stencilTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetStencilOpEXT(
     VkCommandBuffer                             commandBuffer,
     VkStencilFaceFlags                          faceMask,
@@ -6001,8 +5175,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToImageEXT(
     VkDevice                                    device,
     const VkCopyMemoryToImageInfo*              pCopyMemoryToImageInfo)
@@ -6010,7 +5182,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyImageToMemoryEXT(
     VkDevice                                    device,
     const VkCopyImageToMemoryInfo*              pCopyImageToMemoryInfo)
@@ -6018,7 +5189,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyImageToImageEXT(
     VkDevice                                    device,
     const VkCopyImageToImageInfo*               pCopyImageToImageInfo)
@@ -6026,7 +5196,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL TransitionImageLayoutEXT(
     VkDevice                                    device,
     uint32_t                                    transitionCount,
@@ -6035,7 +5204,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout2EXT(
     VkDevice                                    device,
     VkImage                                     image,
@@ -6044,11 +5212,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL ReleaseSwapchainImagesEXT(
     VkDevice                                    device,
     const VkReleaseSwapchainImagesInfoKHR*      pReleaseInfo)
@@ -6056,9 +5219,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsNV(
     VkDevice                                    device,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo,
@@ -6066,14 +5226,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsNV(
     VkCommandBuffer                             commandBuffer,
     const VkGeneratedCommandsInfoNV*            pGeneratedCommandsInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsNV(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    isPreprocessed,
@@ -6081,7 +5239,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindPipelineShaderGroupNV(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -6090,7 +5247,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNV(
     VkDevice                                    device,
     const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo,
@@ -6101,7 +5257,6 @@
     *pIndirectCommandsLayout = (VkIndirectCommandsLayoutNV)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNV(
     VkDevice                                    device,
     VkIndirectCommandsLayoutNV                  indirectCommandsLayout,
@@ -6109,20 +5264,12 @@
 {
 //Destroy object
 }
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias2EXT(
     VkCommandBuffer                             commandBuffer,
     const VkDepthBiasInfoEXT*                   pDepthBiasInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireDrmDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     int32_t                                     drmFd,
@@ -6131,7 +5278,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDrmDisplayEXT(
     VkPhysicalDevice                            physicalDevice,
     int32_t                                     drmFd,
@@ -6141,12 +5287,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreatePrivateDataSlotEXT(
     VkDevice                                    device,
     const VkPrivateDataSlotCreateInfo*          pCreateInfo,
@@ -6157,7 +5297,6 @@
     *pPrivateDataSlot = (VkPrivateDataSlot)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyPrivateDataSlotEXT(
     VkDevice                                    device,
     VkPrivateDataSlot                           privateDataSlot,
@@ -6165,7 +5304,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetPrivateDataEXT(
     VkDevice                                    device,
     VkObjectType                                objectType,
@@ -6176,7 +5314,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPrivateDataEXT(
     VkDevice                                    device,
     VkObjectType                                objectType,
@@ -6186,12 +5323,7 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 #ifdef VK_ENABLE_BETA_EXTENSIONS
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCudaModuleNV(
     VkDevice                                    device,
     const VkCudaModuleCreateInfoNV*             pCreateInfo,
@@ -6202,7 +5334,6 @@
     *pModule = (VkCudaModuleNV)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetCudaModuleCacheNV(
     VkDevice                                    device,
     VkCudaModuleNV                              module,
@@ -6212,7 +5343,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateCudaFunctionNV(
     VkDevice                                    device,
     const VkCudaFunctionCreateInfoNV*           pCreateInfo,
@@ -6223,7 +5353,6 @@
     *pFunction = (VkCudaFunctionNV)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyCudaModuleNV(
     VkDevice                                    device,
     VkCudaModuleNV                              module,
@@ -6231,7 +5360,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyCudaFunctionNV(
     VkDevice                                    device,
     VkCudaFunctionNV                            function,
@@ -6239,7 +5367,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCudaLaunchKernelNV(
     VkCommandBuffer                             commandBuffer,
     const VkCudaLaunchInfoNV*                   pLaunchInfo)
@@ -6247,32 +5374,25 @@
 //Not a CREATE or DESTROY function
 }
 #endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchTileQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkDispatchTileInfoQCOM*               pDispatchTileInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBeginPerTileExecutionQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkPerTileBeginInfoQCOM*               pPerTileBeginInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndPerTileExecutionQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkPerTileEndInfoQCOM*                 pPerTileEndInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 #ifdef VK_USE_PLATFORM_METAL_EXT
-
 static VKAPI_ATTR void VKAPI_CALL ExportMetalObjectsEXT(
     VkDevice                                    device,
     VkExportMetalObjectsInfoEXT*                pMetalObjectsInfo)
@@ -6280,8 +5400,6 @@
 //Not a CREATE or DESTROY function
 }
 #endif /* VK_USE_PLATFORM_METAL_EXT */
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSizeEXT(
     VkDevice                                    device,
     VkDescriptorSetLayout                       layout,
@@ -6290,7 +5408,6 @@
     // Need to give something non-zero
     *pLayoutSizeInBytes = 4;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutBindingOffsetEXT(
     VkDevice                                    device,
     VkDescriptorSetLayout                       layout,
@@ -6299,7 +5416,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorEXT(
     VkDevice                                    device,
     const VkDescriptorGetInfoEXT*               pDescriptorInfo,
@@ -6308,7 +5424,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBuffersEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    bufferCount,
@@ -6316,7 +5431,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDescriptorBufferOffsetsEXT(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -6328,7 +5442,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorBufferEmbeddedSamplersEXT(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -6337,7 +5450,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetBufferOpaqueCaptureDescriptorDataEXT(
     VkDevice                                    device,
     const VkBufferCaptureDescriptorDataInfoEXT* pInfo,
@@ -6346,7 +5458,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetImageOpaqueCaptureDescriptorDataEXT(
     VkDevice                                    device,
     const VkImageCaptureDescriptorDataInfoEXT*  pInfo,
@@ -6355,7 +5466,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetImageViewOpaqueCaptureDescriptorDataEXT(
     VkDevice                                    device,
     const VkImageViewCaptureDescriptorDataInfoEXT* pInfo,
@@ -6364,7 +5474,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSamplerOpaqueCaptureDescriptorDataEXT(
     VkDevice                                    device,
     const VkSamplerCaptureDescriptorDataInfoEXT* pInfo,
@@ -6373,7 +5482,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureOpaqueCaptureDescriptorDataEXT(
     VkDevice                                    device,
     const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo,
@@ -6382,10 +5490,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetFragmentShadingRateEnumNV(
     VkCommandBuffer                             commandBuffer,
     VkFragmentShadingRateNV                     shadingRate,
@@ -6393,16 +5497,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceFaultInfoEXT(
     VkDevice                                    device,
     VkDeviceFaultCountsEXT*                     pFaultCounts,
@@ -6411,11 +5505,7 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
 #ifdef VK_USE_PLATFORM_WIN32_KHR
-
 static VKAPI_ATTR VkResult VKAPI_CALL AcquireWinrtDisplayNV(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display)
@@ -6423,7 +5513,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetWinrtDisplayNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    deviceRelativeId,
@@ -6435,7 +5524,6 @@
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
 
 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDirectFBSurfaceEXT(
     VkInstance                                  instance,
     const VkDirectFBSurfaceCreateInfoEXT*       pCreateInfo,
@@ -6446,7 +5534,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceDirectFBPresentationSupportEXT(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -6456,9 +5543,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_DIRECTFB_EXT */
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetVertexInputEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    vertexBindingDescriptionCount,
@@ -6468,14 +5552,7 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
 #ifdef VK_USE_PLATFORM_FUCHSIA
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandleFUCHSIA(
     VkDevice                                    device,
     const VkMemoryGetZirconHandleInfoFUCHSIA*   pGetZirconHandleInfo,
@@ -6484,7 +5561,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryZirconHandlePropertiesFUCHSIA(
     VkDevice                                    device,
     VkExternalMemoryHandleTypeFlagBits          handleType,
@@ -6494,10 +5570,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-#endif /* VK_USE_PLATFORM_FUCHSIA */
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
 static VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreZirconHandleFUCHSIA(
     VkDevice                                    device,
     const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo)
@@ -6505,7 +5577,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreZirconHandleFUCHSIA(
     VkDevice                                    device,
     const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
@@ -6514,10 +5585,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-#endif /* VK_USE_PLATFORM_FUCHSIA */
-
-#ifdef VK_USE_PLATFORM_FUCHSIA
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateBufferCollectionFUCHSIA(
     VkDevice                                    device,
     const VkBufferCollectionCreateInfoFUCHSIA*  pCreateInfo,
@@ -6528,7 +5595,6 @@
     *pCollection = (VkBufferCollectionFUCHSIA)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionImageConstraintsFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -6537,7 +5603,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetBufferCollectionBufferConstraintsFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -6546,7 +5611,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyBufferCollectionFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -6554,7 +5618,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetBufferCollectionPropertiesFUCHSIA(
     VkDevice                                    device,
     VkBufferCollectionFUCHSIA                   collection,
@@ -6564,8 +5627,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_FUCHSIA */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
     VkDevice                                    device,
     VkRenderPass                                renderpass,
@@ -6574,14 +5635,11 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSubpassShadingHUAWEI(
     VkCommandBuffer                             commandBuffer)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindInvocationMaskHUAWEI(
     VkCommandBuffer                             commandBuffer,
     VkImageView                                 imageView,
@@ -6589,8 +5647,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryRemoteAddressNV(
     VkDevice                                    device,
     const VkMemoryGetRemoteAddressInfoNV*       pMemoryGetRemoteAddressInfo,
@@ -6599,8 +5655,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPipelinePropertiesEXT(
     VkDevice                                    device,
     const VkPipelineInfoEXT*                    pPipelineInfo,
@@ -6609,47 +5663,37 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPatchControlPointsEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    patchControlPoints)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizerDiscardEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    rasterizerDiscardEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthBiasEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthBiasEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLogicOpEXT(
     VkCommandBuffer                             commandBuffer,
     VkLogicOp                                   logicOp)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPrimitiveRestartEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    primitiveRestartEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 #ifdef VK_USE_PLATFORM_SCREEN_QNX
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateScreenSurfaceQNX(
     VkInstance                                  instance,
     const VkScreenSurfaceCreateInfoQNX*         pCreateInfo,
@@ -6660,7 +5704,6 @@
     *pSurface = (VkSurfaceKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceScreenPresentationSupportQNX(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -6670,8 +5713,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_SCREEN_QNX */
-
-
 static VKAPI_ATTR void                                    VKAPI_CALL CmdSetColorWriteEnableEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    attachmentCount,
@@ -6679,12 +5720,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMultiEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    drawCount,
@@ -6695,7 +5730,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMultiIndexedEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    drawCount,
@@ -6707,10 +5741,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateMicromapEXT(
     VkDevice                                    device,
     const VkMicromapCreateInfoEXT*              pCreateInfo,
@@ -6721,7 +5751,6 @@
     *pMicromap = (VkMicromapEXT)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyMicromapEXT(
     VkDevice                                    device,
     VkMicromapEXT                               micromap,
@@ -6729,7 +5758,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBuildMicromapsEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    infoCount,
@@ -6737,7 +5765,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BuildMicromapsEXT(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -6747,7 +5774,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMicromapEXT(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -6756,7 +5782,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMicromapToMemoryEXT(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -6765,7 +5790,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToMicromapEXT(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -6774,7 +5798,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL WriteMicromapsPropertiesEXT(
     VkDevice                                    device,
     uint32_t                                    micromapCount,
@@ -6787,28 +5810,24 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMicromapEXT(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMicromapInfoEXT*                pInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMicromapToMemoryEXT(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMicromapToMemoryInfoEXT*        pInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToMicromapEXT(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMemoryToMicromapInfoEXT*        pInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteMicromapsPropertiesEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    micromapCount,
@@ -6819,7 +5838,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceMicromapCompatibilityEXT(
     VkDevice                                    device,
     const VkMicromapVersionInfoEXT*             pVersionInfo,
@@ -6827,7 +5845,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetMicromapBuildSizesEXT(
     VkDevice                                    device,
     VkAccelerationStructureBuildTypeKHR         buildType,
@@ -6836,12 +5853,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawClusterHUAWEI(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    groupCountX,
@@ -6850,7 +5861,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawClusterIndirectHUAWEI(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -6858,9 +5868,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL SetDeviceMemoryPriorityEXT(
     VkDevice                                    device,
     VkDeviceMemory                              memory,
@@ -6868,11 +5875,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutHostMappingInfoVALVE(
     VkDevice                                    device,
     const VkDescriptorSetBindingReferenceVALVE* pBindingReference,
@@ -6880,7 +5882,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDescriptorSetHostMappingVALVE(
     VkDevice                                    device,
     VkDescriptorSet                             descriptorSet,
@@ -6888,12 +5889,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryIndirectNV(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             copyBufferAddress,
@@ -6902,7 +5897,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToImageIndirectNV(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             copyBufferAddress,
@@ -6914,8 +5908,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    decompressRegionCount,
@@ -6923,7 +5915,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDecompressMemoryIndirectCountNV(
     VkCommandBuffer                             commandBuffer,
     VkDeviceAddress                             indirectCommandsAddress,
@@ -6932,8 +5923,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPipelineIndirectMemoryRequirementsNV(
     VkDevice                                    device,
     const VkComputePipelineCreateInfo*          pCreateInfo,
@@ -6941,7 +5930,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdUpdatePipelineIndirectBufferNV(
     VkCommandBuffer                             commandBuffer,
     VkPipelineBindPoint                         pipelineBindPoint,
@@ -6949,7 +5937,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetPipelineIndirectDeviceAddressNV(
     VkDevice                                    device,
     const VkPipelineIndirectDeviceAddressInfoNV* pInfo)
@@ -6957,36 +5944,24 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthClampEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetPolygonModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkPolygonMode                               polygonMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizationSamplesEXT(
     VkCommandBuffer                             commandBuffer,
     VkSampleCountFlagBits                       rasterizationSamples)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleMaskEXT(
     VkCommandBuffer                             commandBuffer,
     VkSampleCountFlagBits                       samples,
@@ -6994,28 +5969,24 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetAlphaToCoverageEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    alphaToCoverageEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetAlphaToOneEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    alphaToOneEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLogicOpEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    logicOpEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendEnableEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstAttachment,
@@ -7024,7 +5995,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendEquationEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstAttachment,
@@ -7033,7 +6003,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetColorWriteMaskEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstAttachment,
@@ -7042,49 +6011,42 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetTessellationDomainOriginEXT(
     VkCommandBuffer                             commandBuffer,
     VkTessellationDomainOrigin                  domainOrigin)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRasterizationStreamEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    rasterizationStream)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetConservativeRasterizationModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkConservativeRasterizationModeEXT          conservativeRasterizationMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetExtraPrimitiveOverestimationSizeEXT(
     VkCommandBuffer                             commandBuffer,
     float                                       extraPrimitiveOverestimationSize)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClipEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    depthClipEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    sampleLocationsEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetColorBlendAdvancedEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstAttachment,
@@ -7093,42 +6055,36 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetProvokingVertexModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkProvokingVertexModeEXT                    provokingVertexMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineRasterizationModeEXT(
     VkCommandBuffer                             commandBuffer,
     VkLineRasterizationModeEXT                  lineRasterizationMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    stippledLineEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClipNegativeOneToOneEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    negativeOneToOne)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingEnableNV(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    viewportWScalingEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetViewportSwizzleNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    firstViewport,
@@ -7137,35 +6093,30 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageToColorEnableNV(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    coverageToColorEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageToColorLocationNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    coverageToColorLocation)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationModeNV(
     VkCommandBuffer                             commandBuffer,
     VkCoverageModulationModeNV                  coverageModulationMode)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationTableEnableNV(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    coverageModulationTableEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageModulationTableNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    coverageModulationTableCount,
@@ -7173,31 +6124,24 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetShadingRateImageEnableNV(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    shadingRateImageEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRepresentativeFragmentTestEnableNV(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    representativeFragmentTestEnable)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetCoverageReductionModeNV(
     VkCommandBuffer                             commandBuffer,
     VkCoverageReductionModeNV                   coverageReductionMode)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateTensorARM(
     VkDevice                                    device,
     const VkTensorCreateInfoARM*                pCreateInfo,
@@ -7208,7 +6152,6 @@
     *pTensor = (VkTensorARM)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyTensorARM(
     VkDevice                                    device,
     VkTensorARM                                 tensor,
@@ -7216,7 +6159,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateTensorViewARM(
     VkDevice                                    device,
     const VkTensorViewCreateInfoARM*            pCreateInfo,
@@ -7227,7 +6169,6 @@
     *pView = (VkTensorViewARM)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyTensorViewARM(
     VkDevice                                    device,
     VkTensorViewARM                             tensorView,
@@ -7235,7 +6176,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetTensorMemoryRequirementsARM(
     VkDevice                                    device,
     const VkTensorMemoryRequirementsInfoARM*    pInfo,
@@ -7243,7 +6183,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindTensorMemoryARM(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -7252,7 +6191,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceTensorMemoryRequirementsARM(
     VkDevice                                    device,
     const VkDeviceTensorMemoryRequirementsARM*  pInfo,
@@ -7260,14 +6198,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyTensorARM(
     VkCommandBuffer                             commandBuffer,
      const VkCopyTensorInfoARM*                 pCopyTensorInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalTensorPropertiesARM(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo,
@@ -7275,7 +6211,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetTensorOpaqueCaptureDescriptorDataARM(
     VkDevice                                    device,
     const VkTensorCaptureDescriptorDataInfoARM* pInfo,
@@ -7284,7 +6219,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetTensorViewOpaqueCaptureDescriptorDataARM(
     VkDevice                                    device,
     const VkTensorViewCaptureDescriptorDataInfoARM* pInfo,
@@ -7293,8 +6227,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetShaderModuleIdentifierEXT(
     VkDevice                                    device,
     VkShaderModule                              shaderModule,
@@ -7306,7 +6238,6 @@
         pIdentifier->identifier[0] = 0x01;
     }
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetShaderModuleCreateInfoIdentifierEXT(
     VkDevice                                    device,
     const VkShaderModuleCreateInfo*             pCreateInfo,
@@ -7314,9 +6245,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceOpticalFlowImageFormatsNV(
     VkPhysicalDevice                            physicalDevice,
     const VkOpticalFlowImageFormatInfoNV*       pOpticalFlowImageFormatInfo,
@@ -7326,7 +6254,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateOpticalFlowSessionNV(
     VkDevice                                    device,
     const VkOpticalFlowSessionCreateInfoNV*     pCreateInfo,
@@ -7337,7 +6264,6 @@
     *pSession = (VkOpticalFlowSessionNV)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyOpticalFlowSessionNV(
     VkDevice                                    device,
     VkOpticalFlowSessionNV                      session,
@@ -7345,7 +6271,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindOpticalFlowSessionImageNV(
     VkDevice                                    device,
     VkOpticalFlowSessionNV                      session,
@@ -7356,7 +6281,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdOpticalFlowExecuteNV(
     VkCommandBuffer                             commandBuffer,
     VkOpticalFlowSessionNV                      session,
@@ -7364,24 +6288,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
-#endif /* VK_USE_PLATFORM_ANDROID_KHR */
-
-
 static VKAPI_ATTR void VKAPI_CALL AntiLagUpdateAMD(
     VkDevice                                    device,
     const VkAntiLagDataAMD*                     pData)
 {
 //Not a CREATE or DESTROY function
 }
-
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateShadersEXT(
     VkDevice                                    device,
     uint32_t                                    createInfoCount,
@@ -7395,7 +6307,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyShaderEXT(
     VkDevice                                    device,
     VkShaderEXT                                 shader,
@@ -7403,7 +6314,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetShaderBinaryDataEXT(
     VkDevice                                    device,
     VkShaderEXT                                 shader,
@@ -7413,7 +6323,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindShadersEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    stageCount,
@@ -7422,7 +6331,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetDepthClampRangeEXT(
     VkCommandBuffer                             commandBuffer,
     VkDepthClampModeEXT                         depthClampMode,
@@ -7430,8 +6338,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetFramebufferTilePropertiesQCOM(
     VkDevice                                    device,
     VkFramebuffer                               framebuffer,
@@ -7441,7 +6347,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDynamicRenderingTilePropertiesQCOM(
     VkDevice                                    device,
     const VkRenderingInfo*                      pRenderingInfo,
@@ -7450,11 +6355,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeVectorPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -7463,7 +6363,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL ConvertCooperativeVectorMatrixNV(
     VkDevice                                    device,
     const VkConvertCooperativeVectorMatrixInfoNV* pInfo)
@@ -7471,7 +6370,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdConvertCooperativeVectorMatrixNV(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    infoCount,
@@ -7479,15 +6377,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL SetLatencySleepModeNV(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -7496,7 +6385,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL LatencySleepNV(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -7505,7 +6393,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL SetLatencyMarkerNV(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -7513,7 +6400,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetLatencyTimingsNV(
     VkDevice                                    device,
     VkSwapchainKHR                              swapchain,
@@ -7521,15 +6407,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL QueueNotifyOutOfBandNV(
     VkQueue                                     queue,
     const VkOutOfBandQueueTypeInfoNV*           pQueueTypeInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDataGraphPipelinesARM(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -7545,7 +6428,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateDataGraphPipelineSessionARM(
     VkDevice                                    device,
     const VkDataGraphPipelineSessionCreateInfoARM* pCreateInfo,
@@ -7556,7 +6438,6 @@
     *pSession = (VkDataGraphPipelineSessionARM)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDataGraphPipelineSessionBindPointRequirementsARM(
     VkDevice                                    device,
     const VkDataGraphPipelineSessionBindPointRequirementsInfoARM* pInfo,
@@ -7566,7 +6447,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDataGraphPipelineSessionMemoryRequirementsARM(
     VkDevice                                    device,
     const VkDataGraphPipelineSessionMemoryRequirementsInfoARM* pInfo,
@@ -7574,7 +6454,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BindDataGraphPipelineSessionMemoryARM(
     VkDevice                                    device,
     uint32_t                                    bindInfoCount,
@@ -7583,7 +6462,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyDataGraphPipelineSessionARM(
     VkDevice                                    device,
     VkDataGraphPipelineSessionARM               session,
@@ -7591,7 +6469,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDispatchDataGraphARM(
     VkCommandBuffer                             commandBuffer,
     VkDataGraphPipelineSessionARM               session,
@@ -7599,7 +6476,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDataGraphPipelineAvailablePropertiesARM(
     VkDevice                                    device,
     const VkDataGraphPipelineInfoARM*           pPipelineInfo,
@@ -7609,7 +6485,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetDataGraphPipelinePropertiesARM(
     VkDevice                                    device,
     const VkDataGraphPipelineInfoARM*           pPipelineInfo,
@@ -7619,7 +6494,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceQueueFamilyDataGraphPropertiesARM(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
@@ -7629,7 +6503,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM(
     VkPhysicalDevice                            physicalDevice,
     const VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM* pQueueFamilyDataGraphProcessingEngineInfo,
@@ -7637,23 +6510,13 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetAttachmentFeedbackLoopEnableEXT(
     VkCommandBuffer                             commandBuffer,
     VkImageAspectFlags                          aspectMask)
 {
 //Not a CREATE or DESTROY function
 }
-
 #ifdef VK_USE_PLATFORM_SCREEN_QNX
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetScreenBufferPropertiesQNX(
     VkDevice                                    device,
     const struct _screen_buffer*                buffer,
@@ -7663,20 +6526,12 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_SCREEN_QNX */
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdBindTileMemoryQCOM(
     VkCommandBuffer                             commandBuffer,
     const VkTileMemoryBindInfoQCOM*             pTileMemoryBindInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateExternalComputeQueueNV(
     VkDevice                                    device,
     const VkExternalComputeQueueCreateInfoNV*   pCreateInfo,
@@ -7684,10 +6539,9 @@
     VkExternalComputeQueueNV*                   pExternalQueue)
 {
     unique_lock_t lock(global_lock);
-    *pExternalQueue = (VkExternalComputeQueueNV)CreateDispObjHandle();
+    *pExternalQueue = (VkExternalComputeQueueNV)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyExternalComputeQueueNV(
     VkDevice                                    device,
     VkExternalComputeQueueNV                    externalQueue,
@@ -7695,7 +6549,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetExternalComputeQueueDataNV(
     VkExternalComputeQueueNV                    externalQueue,
     VkExternalComputeQueueDataParamsNV*         params,
@@ -7703,13 +6556,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
-
-
-
 static VKAPI_ATTR void VKAPI_CALL GetClusterAccelerationStructureBuildSizesNV(
     VkDevice                                    device,
     const VkClusterAccelerationStructureInputInfoNV* pInfo,
@@ -7717,15 +6563,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBuildClusterAccelerationStructureIndirectNV(
     VkCommandBuffer                             commandBuffer,
     const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetPartitionedAccelerationStructuresBuildSizesNV(
     VkDevice                                    device,
     const VkPartitionedAccelerationStructureInstancesInputNV* pInfo,
@@ -7733,15 +6576,12 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBuildPartitionedAccelerationStructuresNV(
     VkCommandBuffer                             commandBuffer,
     const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL GetGeneratedCommandsMemoryRequirementsEXT(
     VkDevice                                    device,
     const VkGeneratedCommandsMemoryRequirementsInfoEXT* pInfo,
@@ -7749,7 +6589,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdPreprocessGeneratedCommandsEXT(
     VkCommandBuffer                             commandBuffer,
     const VkGeneratedCommandsInfoEXT*           pGeneratedCommandsInfo,
@@ -7757,7 +6596,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdExecuteGeneratedCommandsEXT(
     VkCommandBuffer                             commandBuffer,
     VkBool32                                    isPreprocessed,
@@ -7765,7 +6603,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutEXT(
     VkDevice                                    device,
     const VkIndirectCommandsLayoutCreateInfoEXT* pCreateInfo,
@@ -7776,7 +6613,6 @@
     *pIndirectCommandsLayout = (VkIndirectCommandsLayoutEXT)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutEXT(
     VkDevice                                    device,
     VkIndirectCommandsLayoutEXT                 indirectCommandsLayout,
@@ -7784,7 +6620,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectExecutionSetEXT(
     VkDevice                                    device,
     const VkIndirectExecutionSetCreateInfoEXT*  pCreateInfo,
@@ -7795,7 +6630,6 @@
     *pIndirectExecutionSet = (VkIndirectExecutionSetEXT)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyIndirectExecutionSetEXT(
     VkDevice                                    device,
     VkIndirectExecutionSetEXT                   indirectExecutionSet,
@@ -7803,7 +6637,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL UpdateIndirectExecutionSetPipelineEXT(
     VkDevice                                    device,
     VkIndirectExecutionSetEXT                   indirectExecutionSet,
@@ -7812,7 +6645,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL UpdateIndirectExecutionSetShaderEXT(
     VkDevice                                    device,
     VkIndirectExecutionSetEXT                   indirectExecutionSet,
@@ -7821,11 +6653,7 @@
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 #ifdef VK_USE_PLATFORM_OHOS
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateSurfaceOHOS(
     VkInstance                                  instance,
     const VkSurfaceCreateInfoOHOS*              pCreateInfo,
@@ -7837,9 +6665,6 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_OHOS */
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(
     VkPhysicalDevice                            physicalDevice,
     uint32_t*                                   pPropertyCount,
@@ -7848,10 +6673,7 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
-
 #ifdef VK_USE_PLATFORM_METAL_EXT
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryMetalHandleEXT(
     VkDevice                                    device,
     const VkMemoryGetMetalHandleInfoEXT*        pGetMetalHandleInfo,
@@ -7860,7 +6682,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetMemoryMetalHandlePropertiesEXT(
     VkDevice                                    device,
     VkExternalMemoryHandleTypeFlagBits          handleType,
@@ -7871,24 +6692,12 @@
     return VK_SUCCESS;
 }
 #endif /* VK_USE_PLATFORM_METAL_EXT */
-
-
-
-
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-#endif /* VK_ENABLE_BETA_EXTENSIONS */
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdEndRendering2EXT(
     VkCommandBuffer                             commandBuffer,
     const VkRenderingEndInfoEXT*                pRenderingEndInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureKHR(
     VkDevice                                    device,
     const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
@@ -7899,7 +6708,6 @@
     *pAccelerationStructure = (VkAccelerationStructureKHR)global_unique_handle++;
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureKHR(
     VkDevice                                    device,
     VkAccelerationStructureKHR                  accelerationStructure,
@@ -7907,7 +6715,6 @@
 {
 //Destroy object
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructuresKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    infoCount,
@@ -7916,7 +6723,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructuresIndirectKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    infoCount,
@@ -7927,7 +6733,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL BuildAccelerationStructuresKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -7938,7 +6743,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -7947,7 +6751,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyAccelerationStructureToMemoryKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -7956,7 +6759,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CopyMemoryToAccelerationStructureKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -7965,7 +6767,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL WriteAccelerationStructuresPropertiesKHR(
     VkDevice                                    device,
     uint32_t                                    accelerationStructureCount,
@@ -7978,28 +6779,24 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureKHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyAccelerationStructureInfoKHR*   pInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureToMemoryKHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdCopyMemoryToAccelerationStructureKHR(
     VkCommandBuffer                             commandBuffer,
     const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetAccelerationStructureDeviceAddressKHR(
     VkDevice                                    device,
     const VkAccelerationStructureDeviceAddressInfoKHR* pInfo)
@@ -8007,7 +6804,6 @@
     // arbitrary - need to be aligned to 256 bytes
     return 0x262144;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    accelerationStructureCount,
@@ -8018,7 +6814,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetDeviceAccelerationStructureCompatibilityKHR(
     VkDevice                                    device,
     const VkAccelerationStructureVersionInfoKHR* pVersionInfo,
@@ -8026,7 +6821,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureBuildSizesKHR(
     VkDevice                                    device,
     VkAccelerationStructureBuildTypeKHR         buildType,
@@ -8039,8 +6833,6 @@
     pSizeInfo->updateScratchSize = 4;
     pSizeInfo->buildScratchSize = 4;
 }
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysKHR(
     VkCommandBuffer                             commandBuffer,
     const VkStridedDeviceAddressRegionKHR*      pRaygenShaderBindingTable,
@@ -8053,7 +6845,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesKHR(
     VkDevice                                    device,
     VkDeferredOperationKHR                      deferredOperation,
@@ -8069,7 +6860,6 @@
     }
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingCaptureReplayShaderGroupHandlesKHR(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -8081,7 +6871,6 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdTraceRaysIndirectKHR(
     VkCommandBuffer                             commandBuffer,
     const VkStridedDeviceAddressRegionKHR*      pRaygenShaderBindingTable,
@@ -8092,7 +6881,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR VkDeviceSize VKAPI_CALL GetRayTracingShaderGroupStackSizeKHR(
     VkDevice                                    device,
     VkPipeline                                  pipeline,
@@ -8102,16 +6890,12 @@
 //Not a CREATE or DESTROY function
     return VK_SUCCESS;
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdSetRayTracingPipelineStackSizeKHR(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    pipelineStackSize)
 {
 //Not a CREATE or DESTROY function
 }
-
-
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksEXT(
     VkCommandBuffer                             commandBuffer,
     uint32_t                                    groupCountX,
@@ -8120,7 +6904,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectEXT(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -8130,7 +6913,6 @@
 {
 //Not a CREATE or DESTROY function
 }
-
 static VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountEXT(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    buffer,
@@ -8145,3 +6927,4 @@
 
 } // namespace vkmock
 
+
diff --git a/scripts/generate_source.py b/scripts/generate_source.py
index 336e5ff..82bc213 100755
--- a/scripts/generate_source.py
+++ b/scripts/generate_source.py
@@ -1,9 +1,10 @@
 #!/usr/bin/env python3
-# Copyright (c) 2019-2025 The Khronos Group Inc.
-# Copyright (c) 2019-2025 Valve Corporation
-# Copyright (c) 2019-2025 LunarG, Inc.
-# Copyright (c) 2019-2025 Google Inc.
-# Copyright (c) 2023-2025 RasterGrid Kft.
+# Copyright (c) 2019 The Khronos Group Inc.
+# Copyright (c) 2019 Valve Corporation
+# Copyright (c) 2019 LunarG, Inc.
+# Copyright (c) 2019 Google Inc.
+# Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# Copyright (c) 2023-2023 RasterGrid Kft.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -22,41 +23,236 @@
 import argparse
 import filecmp
 import os
-import re
-import json
 import shutil
-import subprocess
 import sys
+import re
 import tempfile
-
+import json
 import common_codegen
 
-# files to exclude from --verify check
-verify_exclude = ['.clang-format']
+from xml.etree import ElementTree
+
+# Because we have special logic to import the Registry from input arguments and the BaseGenerator comes from the registry, we have to delay defining it until *after*
+# the Registry has been imported. Yes this is awkward, but it was the least awkward way to make --verify work.
+generators = {}
+
+def RunGenerators(api: str, registry: str, video_registry: str, directory: str, styleFile: str, targetFilter: str, flatOutput: bool):
+
+    try:
+        common_codegen.RunShellCmd(f'clang-format --version')
+        has_clang_format = True
+    except:
+        has_clang_format = False
+    if not has_clang_format:
+        print("WARNING: Unable to find clang-format!")
+
+    # These live in the Vulkan-Docs repo, but are pulled in via the
+    # Vulkan-Headers/registry folder
+    # At runtime we inject python path to find these helper scripts
+    scripts = os.path.dirname(registry)
+    scripts_directory_path = os.path.dirname(os.path.abspath(__file__))
+    registry_headers_path = os.path.join(scripts_directory_path, scripts)
+    sys.path.insert(0, registry_headers_path)
+    try:
+        from reg import Registry
+    except:
+        print("ModuleNotFoundError: No module named 'reg'") # normal python error message
+        print(f'{registry_headers_path} is not pointing to the Vulkan-Headers registry directory.')
+        print("Inside Vulkan-Headers there is a registry/reg.py file that is used.")
+        sys.exit(1) # Return without call stack so easy to spot error
+
+    from base_generator import BaseGeneratorOptions
+    from generators.mock_icd_generator import MockICDOutputGenerator
+    from generators.vulkan_tools_helper_file_generator import HelperFileOutputGenerator
+    from generators.vulkaninfo_generator import VulkanInfoGenerator
+
+    # These set fields that are needed by both OutputGenerator and BaseGenerator,
+    # but are uniform and don't need to be set at a per-generated file level
+    from base_generator import (SetTargetApiName, SetMergedApiNames)
+    SetTargetApiName(api)
+
+    # Generated directory and dispatch table helper file name may be API specific (e.g. Vulkan SC)
+    mock_icd_generated_directory = 'icd/generated'
+    vulkaninfo_generated_directory = 'vulkaninfo/generated'
+
+    generators.update({
+        'vk_typemap_helper.h': {
+            'generator' : HelperFileOutputGenerator,
+            'genCombined': False,
+            'directory' : mock_icd_generated_directory,
+        },
+        'function_declarations.h': {
+            'generator' : MockICDOutputGenerator,
+            'genCombined': False,
+            'directory' : mock_icd_generated_directory,
+        },
+        'function_definitions.h': {
+            'generator' : MockICDOutputGenerator,
+            'genCombined': False,
+            'directory' : mock_icd_generated_directory,
+        },
+        'vulkaninfo.hpp': {
+            'generator' : VulkanInfoGenerator,
+            'genCombined': False,
+            'directory' : vulkaninfo_generated_directory,
+        },
+    })
+
+    unknownTargets = [x for x in (targetFilter if targetFilter else []) if x not in generators.keys()]
+    if unknownTargets:
+        print(f'ERROR: No generator options for unknown target(s): {", ".join(unknownTargets)}', file=sys.stderr)
+        return 1
+
+    # Filter if --target is passed in
+    targets = [x for x in generators.keys() if not targetFilter or x in targetFilter]
+
+    for index, target in enumerate(targets, start=1):
+        print(f'[{index}|{len(targets)}] Generating {target}')
+
+        # First grab a class constructor object and create an instance
+        generator = generators[target]['generator']
+        gen = generator()
+
+        # This code and the 'genCombined' generator metadata is used by downstream
+        # users to generate code with all Vulkan APIs merged into the target API variant
+        # (e.g. Vulkan SC) when needed. The constructed apiList is also used to filter
+        # out non-applicable extensions later below.
+        apiList = [api]
+        if api != 'vulkan' and generators[target]['genCombined']:
+            SetMergedApiNames('vulkan')
+            apiList.append('vulkan')
+        else:
+            SetMergedApiNames(None)
+
+        # For people who want to generate all the files in a single director
+        if flatOutput:
+            outDirectory = os.path.abspath(os.path.join(directory))
+        else:
+            outDirectory = os.path.abspath(os.path.join(directory, generators[target]['directory']))
+
+        options = BaseGeneratorOptions(
+            customFileName  = target,
+            customDirectory = outDirectory)
+
+        if not os.path.exists(outDirectory):
+            os.makedirs(outDirectory)
+
+        # Create the registry object with the specified generator and generator
+        # options. The options are set before XML loading as they may affect it.
+        reg = Registry(gen, options)
+
+        # Parse the specified registry XML into an ElementTree object
+        tree = ElementTree.parse(registry)
+
+        # Load the XML tree into the registry object
+        reg.loadElementTree(tree)
+
+        # Set the path to the video registry so that videoStd is available
+        reg.genOpts.videoXmlPath = video_registry
+
+        # Finally, use the output generator to create the requested target
+        reg.apiGen()
+
+        # Run clang-format on the file
+        if has_clang_format and styleFile:
+            common_codegen.RunShellCmd(f'clang-format -i --style=file:{styleFile} {os.path.join(outDirectory, target)}')
+
 
 def main(argv):
+
+    # files to exclude from --verify check
+    verify_exclude = ['.clang-format'] # None currently
+
     parser = argparse.ArgumentParser(description='Generate source code for this repository')
+    parser.add_argument('registry', metavar='REGISTRY_PATH', help='path to the Vulkan-Headers registry directory')
     parser.add_argument('--api',
                         default='vulkan',
                         choices=['vulkan', 'vulkansc'],
                         help='Specify API name to generate')
     parser.add_argument('--generated-version', help='sets the header version used to generate the repo')
-    parser.add_argument('registry', metavar='REGISTRY_PATH', help='path to the Vulkan-Headers registry directory')
     group = parser.add_mutually_exclusive_group()
+    group.add_argument('--target', nargs='+', help='only generate file names passed in')
     group.add_argument('-i', '--incremental', action='store_true', help='only update repo files that change')
     group.add_argument('-v', '--verify', action='store_true', help='verify repo files match generator output')
+    group.add_argument('-o', action='store', dest='directory', help='Create target and related files in specified directory')
     args = parser.parse_args(argv)
 
-    # output paths and the list of files in the path
-    files_to_gen = {str(os.path.join('icd','generated')) : ['vk_typemap_helper.h',
-                                            'function_definitions.h',
-                                            'function_declarations.h'],
-                    str(os.path.join('vulkaninfo','generated')): ['vulkaninfo.hpp']}
+    repo_dir = common_codegen.repo_relative('.')
 
-    #base directory for the source repository
-    repo_dir = common_codegen.repo_relative('')
+    registry = os.path.abspath(os.path.join(args.registry,  'vk.xml'))
+    video_registry = os.path.abspath(os.path.join(args.registry,  'video.xml'))
+    if not os.path.isfile(registry) and not os.path.isfile(registry):
+        registry = os.path.abspath(os.path.join(args.registry, 'Vulkan-Headers/registry/vk.xml'))
+        if not os.path.isfile(registry):
+            print(f'cannot find vk.xml in {args.registry}')
+            return -1
+        video_registry = os.path.abspath(os.path.join(args.registry,  'Vulkan-Headers/registry/video.xml'))
+        if not os.path.isfile(video_registry):
+            print(f'{video_registry} does not exist')
+            return -1
 
-    # Update the api_version in the respective json files
+    # Need pass style file incase running with --verify and it can't find the file automatically in the temp directory
+    style_file = os.path.join(repo_dir, '.clang-format')
+
+    # get directory where generators will run
+    if args.verify or args.incremental:
+        # generate in temp directory so we can compare or copy later
+        temp_obj = tempfile.TemporaryDirectory(prefix='vulkan_tools_codegen_')
+        temp_dir = temp_obj.name
+        gen_dir = temp_dir
+    elif args.directory:
+        gen_dir = args.directory
+    else:
+        # generate directly in the repo
+        gen_dir = repo_dir
+
+    RunGenerators(api=args.api,registry=registry, video_registry=video_registry, directory=gen_dir, styleFile=style_file, targetFilter=args.target, flatOutput=False)
+
+    # optional post-generation steps
+    if args.verify:
+        # compare contents of temp dir and repo
+        temp_files = {}
+        repo_files = {}
+        for details in generators.values():
+            if details['directory'] not in temp_files:
+                temp_files[details['directory']] = set()
+            temp_files[details['directory']].update(set(os.listdir(os.path.join(temp_dir, details['directory']))))
+            if details['directory'] not in repo_files:
+                repo_files[details['directory']] = set()
+            repo_files[details['directory']].update(set(os.listdir(os.path.join(repo_dir, details['directory']))) - set(verify_exclude))
+
+        # compare contents of temp dir and repo
+        files_match = True
+        for filename, details in generators.items():
+            if filename not in repo_files[details['directory']]:
+                print('ERROR: Missing repo file', filename)
+                files_match = False
+            elif filename not in temp_files[details['directory']]:
+                print('ERROR: Missing generator for', filename)
+                files_match = False
+            elif not filecmp.cmp(os.path.join(temp_dir, details['directory'], filename),
+                            os.path.join(repo_dir, details['directory'], filename),
+                            shallow=False):
+                print('ERROR: Repo files do not match generator output for', filename)
+                files_match = False
+
+        # return code for test scripts
+        if files_match:
+            print('SUCCESS: Repo files match generator output')
+            return 0
+        return 1
+
+    elif args.incremental:
+        # copy missing or differing files from temp directory to repo
+        for filename, details in generators.items():
+            temp_filename = os.path.join(temp_dir, details['directory'], filename)
+            repo_filename = os.path.join(repo_dir, details['directory'], filename)
+            if not os.path.exists(repo_filename) or \
+            not filecmp.cmp(temp_filename, repo_filename, shallow=False):
+                print('update', repo_filename)
+                shutil.copyfile(temp_filename, repo_filename)
+
+    # write out the header version used to generate the code to a checked in CMake file
     if args.generated_version:
         json_files = []
         json_files.append(common_codegen.repo_relative('icd/VkICD_mock_icd.json.in'))
@@ -69,91 +265,6 @@
             with open(json_file, mode='w', encoding='utf-8', newline='\n') as f:
                 f.write(json.dumps(data, indent=4))
 
-    # get directory where generators will run if needed
-    if args.verify or args.incremental:
-        # generate in temp directory so we can compare or copy later
-        temp_obj = tempfile.TemporaryDirectory(prefix='VulkanLoader_generated_source_')
-        temp_dir = temp_obj.name
-        for path in files_to_gen.keys():
-            os.makedirs(os.path.join(temp_dir, path))
-
-    registry = os.path.abspath(os.path.join(args.registry,  'vk.xml'))
-    if not os.path.isfile(registry):
-        registry = os.path.abspath(os.path.join(args.registry, 'Vulkan-Headers/registry/vk.xml'))
-        if not os.path.isfile(registry):
-            print(f'cannot find vk.xml in {args.registry}')
-            return -1
-
-    # run each code generator
-    for path, filenames in files_to_gen.items():
-        for filename in filenames:
-            if args.verify or args.incremental:
-                output_path = os.path.join(temp_dir, path)
-            else:
-                output_path = common_codegen.repo_relative(path)
-
-            cmd = [common_codegen.repo_relative(os.path.join('scripts','kvt_genvk.py')),
-                '-api', args.api,
-                '-registry', registry,
-                '-quiet', '-directory', output_path, filename]
-            print(' '.join(cmd))
-            try:
-                if args.verify or args.incremental:
-                    subprocess.check_call([sys.executable] + cmd, cwd=temp_dir)
-                else:
-                    subprocess.check_call([sys.executable] + cmd, cwd=repo_dir)
-
-            except Exception as e:
-                print('ERROR:', str(e))
-                return 1
-
-    # optional post-generation steps
-    if args.verify:
-        # compare contents of temp dir and repo
-        temp_files = {}
-        for path in files_to_gen.keys():
-            temp_files[path] = set()
-            temp_files[path].update(set(os.listdir(os.path.join(temp_dir, path))))
-
-        repo_files = {}
-        for path in files_to_gen.keys():
-            repo_files[path] = set()
-            repo_files[path].update(set(os.listdir(os.path.join(repo_dir, path))) - set(verify_exclude))
-
-        files_match = True
-        for path in files_to_gen.keys():
-            for filename in sorted((temp_files[path] | repo_files[path])):
-                if filename not in repo_files[path]:
-                    print('ERROR: Missing repo file', filename)
-                    files_match = False
-                elif filename not in temp_files[path]:
-                    print('ERROR: Missing generator for', filename)
-                    files_match = False
-                elif not filecmp.cmp(os.path.join(temp_dir, path, filename),
-                                   os.path.join(repo_dir, path, filename),
-                                   shallow=False):
-                    print('ERROR: Repo files do not match generator output for', filename)
-                    files_match = False
-
-        # return code for test scripts
-        if files_match:
-            print('SUCCESS: Repo files match generator output')
-            return 0
-        return 1
-
-    elif args.incremental:
-        # copy missing or differing files from temp directory to repo
-        for path in files_to_gen.keys():
-            for filename in os.listdir(os.path.join(temp_dir,path)):
-                temp_filename = os.path.join(temp_dir, path, filename)
-                repo_filename = os.path.join(repo_dir, path, filename)
-                if not os.path.exists(repo_filename) or \
-                   not filecmp.cmp(temp_filename, repo_filename, shallow=False):
-                    print('update', repo_filename)
-                    shutil.copyfile(temp_filename, repo_filename)
-
-    # write out the header version used to generate the code to a checked in CMake file
-    if args.generated_version:
         # Update the CMake project version
         with open(common_codegen.repo_relative('CMakeLists.txt'), "r+") as f:
             data = f.read()
diff --git a/scripts/generators/mock_icd_generator.py b/scripts/generators/mock_icd_generator.py
index f64f4af..c78253c 100644
--- a/scripts/generators/mock_icd_generator.py
+++ b/scripts/generators/mock_icd_generator.py
@@ -25,9 +25,7 @@
 #  in its initial state. Rather it's intended to be a starting point that
 #  can be copied and customized to assist in creation of a new layer.
 
-import os,re,sys
-from generator import *
-from common_codegen import *
+from base_generator import BaseGenerator
 
 CUSTOM_C_INTERCEPTS = {
 'vkCreateInstance': '''
@@ -1200,323 +1198,80 @@
 '''
 }
 
-# MockICDGeneratorOptions - subclass of GeneratorOptions.
-#
-# Adds options used by MockICDOutputGenerator objects during Mock
-# ICD generation.
-#
-# Additional members
-#   prefixText - list of strings to prefix generated header with
-#     (usually a copyright statement + calling convention macros).
-#   protectFile - True if multiple inclusion protection should be
-#     generated (based on the filename) around the entire header.
-#   protectFeature - True if #ifndef..#endif protection should be
-#     generated around a feature interface in the header file.
-#   genFuncPointers - True if function pointer typedefs should be
-#     generated
-#   protectProto - If conditional protection should be generated
-#     around prototype declarations, set to either '#ifdef'
-#     to require opt-in (#ifdef protectProtoStr) or '#ifndef'
-#     to require opt-out (#ifndef protectProtoStr). Otherwise
-#     set to None.
-#   protectProtoStr - #ifdef/#ifndef symbol to use around prototype
-#     declarations, if protectProto is set
-#   apicall - string to use for the function declaration prefix,
-#     such as APICALL on Windows.
-#   apientry - string to use for the calling convention macro,
-#     in typedefs, such as APIENTRY.
-#   apientryp - string to use for the calling convention macro
-#     in function pointer typedefs, such as APIENTRYP.
-#   indentFuncProto - True if prototype declarations should put each
-#     parameter on a separate line
-#   indentFuncPointer - True if typedefed function pointers should put each
-#     parameter on a separate line
-#   alignFuncParam - if nonzero and parameters are being put on a
-#     separate line, align parameter names at the specified column
-class MockICDGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 conventions = None,
-                 filename = None,
-                 directory = '.',
-                 genpath = None,
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 protectProto = None,
-                 protectProtoStr = None,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 indentFuncProto = True,
-                 indentFuncPointer = False,
-                 alignFuncParam = 0,
-                 expandEnumerants = True,
-                 helper_file_type = ''):
-        GeneratorOptions.__init__(self,
-                 conventions = conventions,
-                 filename = filename,
-                 directory = directory,
-                 genpath = genpath,
-                 apiname = apiname,
-                 profile = profile,
-                 versions = versions,
-                 emitversions = emitversions,
-                 defaultExtensions = defaultExtensions,
-                 addExtensions = addExtensions,
-                 removeExtensions = removeExtensions,
-                 emitExtensions = emitExtensions,
-                 sortProcedure = sortProcedure)
-        self.prefixText      = prefixText
-        self.genFuncPointers = genFuncPointers
-        self.protectFile     = protectFile
-        self.protectFeature  = protectFeature
-        self.protectProto    = protectProto
-        self.protectProtoStr = protectProtoStr
-        self.apicall         = apicall
-        self.apientry        = apientry
-        self.apientryp       = apientryp
-        self.indentFuncProto = indentFuncProto
-        self.indentFuncPointer = indentFuncPointer
-        self.alignFuncParam  = alignFuncParam
-
-# MockICDOutputGenerator - subclass of OutputGenerator.
+# MockICDOutputGenerator
 # Generates a mock vulkan ICD.
 #  This is intended to be a minimal replacement for a vulkan device in order
-#  to enable Vulkan Validation testing.
+#  to enable testing of Vulkan applications and layers
 #
-# ---- methods ----
-# MockOutputGenerator(errFile, warnFile, diagFile) - args as for
-#   OutputGenerator. Defines additional internal state.
-# ---- methods overriding base class ----
-# beginFile(genOpts)
-# endFile()
-# beginFeature(interface, emit)
-# endFeature()
-# genType(typeinfo,name)
-# genStruct(typeinfo,name)
-# genGroup(groupinfo,name)
-# genEnum(enuminfo, name)
-# genCmd(cmdinfo)
-class MockICDOutputGenerator(OutputGenerator):
-    """Generate specified API interfaces in a specific style, such as a C header"""
-    # This is an ordered list of sections in the header file.
-    TYPE_SECTIONS = ['include', 'define', 'basetype', 'handle', 'enum',
-                     'group', 'bitmask', 'funcpointer', 'struct']
-    ALL_SECTIONS = TYPE_SECTIONS + ['command']
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        # Internal state - accumulators for different inner block text
-        self.sections = dict([(section, []) for section in self.ALL_SECTIONS])
-        self.intercepts = []
-        self.function_declarations = False
+class MockICDOutputGenerator(BaseGenerator):
+    def __init__(self):
+        BaseGenerator.__init__(self)
 
-    # Check if the parameter passed in is a pointer to an array
-    def paramIsArray(self, param):
-        return param.attrib.get('len') is not None
+        # Ignore extensions that ICDs should not implement or are not safe to report
+        self.ignore_exts = ['VK_EXT_validation_cache', 'VK_KHR_portability_subset']
 
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = False
-        for elem in param:
-            if ((elem.tag != 'type') and (elem.tail is not None)) and '*' in elem.tail:
-                ispointer = True
-        return ispointer
+        # Dispatchable handles
+        self.dispatchable_handles = ['VkInstance','VkPhysicalDevice', 'VkDevice', 'VkCommandBuffer', 'VkQueue']
 
-    # Check if an object is a non-dispatchable handle
-    def isHandleTypeNonDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_NON_DISPATCHABLE_HANDLE':
-            return True
-        else:
-            return False
+    def generate_function_declarations(self, out):
 
-    # Check if an object is a dispatchable handle
-    def isHandleTypeDispatchable(self, handletype):
-        handle = self.registry.tree.find("types/type/[name='" + handletype + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == 'VK_DEFINE_HANDLE':
-            return True
-        else:
-            return False
+        out.append('#include <stdint.h>\n')
+        out.append('#include <cstring>\n')
+        out.append('#include <string>\n')
+        out.append('#include <unordered_map>\n')
+        out.append('#include <vulkan/vulkan.h>\n')
+        out.append('\n')
+        out.append('namespace vkmock {\n')
+        out.append('// Map of instance extension name to version\n')
+        out.append('static const std::unordered_map<std::string, uint32_t> instance_extension_map = {\n')
+        for ext in [x for x in self.vk.extensions.values() if x.instance and x.name not in self.ignore_exts]:
+            if ext.protect:
+                out.append(f'#ifdef {ext.protect}\n')
+            out.append(f'    {{"{ext.name}", {ext.specVersion}}},\n')
+            if ext.protect:
+                out.append('#endif\n')
+        out.append('};\n')
+        out.append('// Map of device extension name to version\n')
+        out.append('static const std::unordered_map<std::string, uint32_t> device_extension_map = {\n')
+        for ext in [x for x in self.vk.extensions.values() if x.device and x.name not in self.ignore_exts]:
+            if ext.protect:
+                out.append(f'#ifdef {ext.protect}\n')
+            out.append(f'    {{"{ext.name}", {ext.specVersion}}},\n')
+            if ext.protect:
+                out.append('#endif\n')
+        out.append('};\n')
 
-    # Check that the target API is in the supported list for the extension
-    def checkExtensionAPISupport(self, supported):
-        return self.genOpts.apiname in supported.split(',')
+        current_protect = None
+        for name, cmd in self.vk.commands.items():
+            prepend_newline = '\n'
+            if cmd.protect != current_protect:
+                if current_protect is not None:
+                    out.append(f'#endif /* {current_protect} */\n')
+                    prepend_newline = ''
+                if current_protect is not None and cmd.protect is not None:
+                    out.append('\n')
+                if cmd.protect is not None:
+                    out.append(f'#ifdef {cmd.protect}\n')
+                current_protect = cmd.protect
+            out.append(f'{prepend_newline}static {cmd.cPrototype.replace(name, name[2:])}\n')
+        if current_protect is not None:
+            out.append('#endif\n')
 
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # C-specific
-        #
-        # Multiple inclusion protection & C++ namespace.
-        if (genOpts.protectFile and self.genOpts.filename == "function_declarations.h"):
-            self.function_declarations = True
-
-        # User-supplied prefix text, if any (list of strings)
-        if (genOpts.prefixText):
-            for s in genOpts.prefixText:
-                write(s, file=self.outFile)
-
-        if self.function_declarations:
-            self.newline()
-            # Include all of the extensions in ICD except specific ignored ones
-            device_exts = []
-            instance_exts = []
-            # Ignore extensions that ICDs should not implement or are not safe to report
-            ignore_exts = ['VK_EXT_validation_cache', 'VK_KHR_portability_subset']
-            for ext in self.registry.tree.findall("extensions/extension"):
-                if self.checkExtensionAPISupport(ext.attrib['supported']): # Only include API-relevant extensions
-                    if (ext.attrib['name'] not in ignore_exts):
-                        # Search for extension version enum
-                        for enum in ext.findall('require/enum'):
-                            if enum.get('name', '').endswith('_SPEC_VERSION'):
-                                ext_version = enum.get('value')
-                                if (ext.attrib.get('type') == 'instance'):
-                                    instance_exts.append('    {"%s", %s},' % (ext.attrib['name'], ext_version))
-                                else:
-                                    device_exts.append('    {"%s", %s},' % (ext.attrib['name'], ext_version))
-                                break
-            write('#pragma once\n',file=self.outFile)
-            write('#include <stdint.h>',file=self.outFile)
-            write('#include <cstring>',file=self.outFile)
-            write('#include <string>',file=self.outFile)
-            write('#include <unordered_map>',file=self.outFile)
-            write('#include <vulkan/vulkan.h>',file=self.outFile)
-            self.newline()
-            write('namespace vkmock {\n', file=self.outFile)
-            write('// Map of instance extension name to version', file=self.outFile)
-            write('static const std::unordered_map<std::string, uint32_t> instance_extension_map = {', file=self.outFile)
-            write('\n'.join(instance_exts), file=self.outFile)
-            write('};', file=self.outFile)
-            write('// Map of device extension name to version', file=self.outFile)
-            write('static const std::unordered_map<std::string, uint32_t> device_extension_map = {', file=self.outFile)
-            write('\n'.join(device_exts), file=self.outFile)
-            write('};', file=self.outFile)
-        else:
-            write('#pragma once\n',file=self.outFile)
-            write('#include "mock_icd.h"',file=self.outFile)
-            write('#include "function_declarations.h"\n',file=self.outFile)
-            write('namespace vkmock {', file=self.outFile)
-
-
-    def endFile(self):
-        # C-specific
-        # Finish C++ namespace
-        self.newline()
-        if self.function_declarations:
             # record intercepted procedures
-            write('// Map of all APIs to be intercepted by this layer', file=self.outFile)
-            write('static const std::unordered_map<std::string, void*> name_to_funcptr_map = {', file=self.outFile)
-            write('\n'.join(self.intercepts), file=self.outFile)
-            write('};\n', file=self.outFile)
-        write('} // namespace vkmock', file=self.outFile)
-        self.newline()
+        out.append('// Map of all APIs to be intercepted by this layer\n')
+        out.append('static const std::unordered_map<std::string, void*> name_to_funcptr_map = {\n')
+        for name, cmd in self.vk.commands.items():
+            if cmd.protect:
+                out.append(f'#ifdef {cmd.protect}\n')
+            out.append(f'    {{"{name}", (void*){name[2:]}}},\n')
+            if cmd.protect:
+                out.append('#endif\n')
+        out.append('};\n')
 
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    def beginFeature(self, interface, emit):
-        #write('// starting beginFeature', file=self.outFile)
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.featureExtraProtect = GetFeatureProtect(interface)
-        # C-specific
-        # Accumulate includes, defines, types, enums, function pointer typedefs,
-        # end function prototypes separately for this feature. They're only
-        # printed in endFeature().
-        self.sections = dict([(section, []) for section in self.ALL_SECTIONS])
-        #write('// ending beginFeature', file=self.outFile)
-    def endFeature(self):
-        # C-specific
-        # Actually write the interface to the output file.
-        #write('// starting endFeature', file=self.outFile)
-        if (self.emit):
-            self.newline()
-            if (self.genOpts.protectFeature):
-                write('#ifndef', self.featureName, file=self.outFile)
-            # If type declarations are needed by other features based on
-            # this one, it may be necessary to suppress the ExtraProtect,
-            # or move it below the 'for section...' loop.
-            #write('// endFeature looking at self.featureExtraProtect', file=self.outFile)
-            if (self.featureExtraProtect != None):
-                write('#ifdef', self.featureExtraProtect, file=self.outFile)
-            #write('#define', self.featureName, '1', file=self.outFile)
-            for section in self.TYPE_SECTIONS:
-                #write('// endFeature writing section'+section, file=self.outFile)
-                contents = self.sections[section]
-                if contents:
-                    write('\n'.join(contents), file=self.outFile)
-                    self.newline()
-            #write('// endFeature looking at self.sections[command]', file=self.outFile)
-            if (self.sections['command']):
-                write('\n'.join(self.sections['command']), end=u'', file=self.outFile)
-                self.newline()
-            if (self.featureExtraProtect != None):
-                write('#endif /*', self.featureExtraProtect, '*/', file=self.outFile)
-            if (self.genOpts.protectFeature):
-                write('#endif /*', self.featureName, '*/', file=self.outFile)
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-        #write('// ending endFeature', file=self.outFile)
-    #
-    # Append a definition to the specified section
-    def appendSection(self, section, text):
-        # self.sections[section].append('SECTION: ' + section + '\n')
-        self.sections[section].append(text)
-    #
-    # Type generation
-    def genType(self, typeinfo, name, alias):
-        pass
-    #
-    # Struct (e.g. C "struct" type) generation.
-    # This is a special case of the <type> tag where the contents are
-    # interpreted as a set of <member> tags instead of freeform C
-    # C type declarations. The <member> tags are just like <param>
-    # tags - they are a declaration of a struct or union member.
-    # Only simple member declarations are supported (no nested
-    # structs etc.)
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        body = 'typedef ' + typeinfo.elem.get('category') + ' ' + typeName + ' {\n'
-        # paramdecl = self.makeCParamDecl(typeinfo.elem, self.genOpts.alignFuncParam)
-        for member in typeinfo.elem.findall('.//member'):
-            body += self.makeCParamDecl(member, self.genOpts.alignFuncParam)
-            body += ';\n'
-        body += '} ' + typeName + ';\n'
-        self.appendSection('struct', body)
-    #
-    # Group (e.g. C "enum" type) generation.
-    # These are concatenated together with other types.
-    def genGroup(self, groupinfo, groupName, alias):
-        pass
-    # Enumerant generation
-    # <enum> tags may specify their values in several ways, but are usually
-    # just integers.
-    def genEnum(self, enuminfo, name, alias):
-        pass
-    #
-    # Command generation
-    def genCmd(self, cmdinfo, name, alias):
-        decls = self.makeCDecls(cmdinfo.elem)
-        if self.function_declarations: # In the header declare all intercepts
-            self.appendSection('command', '')
-            self.appendSection('command', 'static %s' % (decls[0]))
-            if (self.featureExtraProtect != None):
-                self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ]
-            self.intercepts += [ '    {"%s", (void*)%s},' % (name,name[2:]) ]
-            if (self.featureExtraProtect != None):
-                self.intercepts += [ '#endif' ]
-            return
+    def generate_function_definitions(self, out):
+        out.append('#include "mock_icd.h"\n')
+        out.append('#include "function_declarations.h"\n')
+        out.append('namespace vkmock {\n')
 
         manual_functions = [
             # Include functions here to be intercepted w/ manually implemented function bodies
@@ -1537,99 +1292,127 @@
             'vkEnumerateDeviceLayerProperties',
             'vkEnumerateDeviceExtensionProperties',
         ]
-        if name in manual_functions:
-            self.appendSection('command', '')
-            if name not in CUSTOM_C_INTERCEPTS:
-                self.appendSection('command', '// declare only')
-                self.appendSection('command', 'static %s' % (decls[0]))
-                self.appendSection('command', '// TODO: Implement custom intercept body')
+        current_protect = None
+        for name, cmd in self.vk.commands.items():
+            if cmd.protect != current_protect:
+                if current_protect is not None:
+                    out.append(f'#endif /* {current_protect} */\n')
+                if current_protect is not None and cmd.protect is not None:
+                    out.append('\n')
+                if cmd.protect is not None:
+                    out.append(f'#ifdef {cmd.protect}\n')
+                current_protect = cmd.protect
+
+            if name in manual_functions:
+                if name not in CUSTOM_C_INTERCEPTS:
+                    out.append(f'static {cmd.cPrototype.replace(name, name[2:])}\n')
+                    out.append('// TODO: Implement custom intercept body\n')
+                else:
+                    out.append(f'static {cmd.cPrototype[:-1].replace(name, name[2:])}\n')
+                    out.append(f'{{{CUSTOM_C_INTERCEPTS[name]}}}\n')
+                continue
+
+            out.append(f'static {cmd.cPrototype[:-1].replace(name, name[2:])}\n')
+            if name in CUSTOM_C_INTERCEPTS:
+                out.append(f'{{{CUSTOM_C_INTERCEPTS[name]}}}\n')
+                continue
+
+            # if the name w/ KHR postfix is in the CUSTOM_C_INTERCEPTS
+            # Call the KHR custom version instead of generating separate code
+            khr_name = name + "KHR"
+            if khr_name in CUSTOM_C_INTERCEPTS:
+                return_string = ''
+                if cmd.returnType != 'void':
+                    return_string = 'return '
+
+                param_names = []
+                for param in cmd.params:
+                    param_names.append(param.name)
+                out.append(f'{{\n    {return_string}{khr_name[2:]}({", ".join(param_names)});\n}}\n')
+                continue
+            out.append('{\n')
+
+            # GET THE TYPE OF FUNCTION
+            if any(name.startswith(ftxt) for ftxt in ('vkCreate', 'vkAllocate')):
+                # Get last param
+                last_param = cmd.params[-1]
+                lp_txt = last_param.name
+                lp_len = None
+                if last_param.length is not None:
+                    lp_len = last_param.length
+                    lp_len = lp_len.replace('::', '->')
+                lp_type = last_param.type
+                handle_type = 'dispatchable'
+                allocator_txt = 'CreateDispObjHandle()'
+                if lp_type not in self.dispatchable_handles:
+                    handle_type = 'non-' + handle_type
+                    allocator_txt = 'global_unique_handle++'
+                # Need to lock in both cases
+                out.append('    unique_lock_t lock(global_lock);\n')
+                if lp_len is not None:
+                    #print("%s last params (%s) has len %s" % (handle_type, lp_txt, lp_len))
+                    out.append(f'    for (uint32_t i = 0; i < {lp_len}; ++i) {{\n')
+                    out.append(f'        {lp_txt}[i] = ({lp_type}){allocator_txt};\n')
+                    out.append('    }\n')
+                else:
+                    #print("Single %s last param is '%s' w/ type '%s'" % (handle_type, lp_txt, lp_type))
+                    if 'AllocateMemory' in name:
+                        # Store allocation size in case it's mapped
+                        out.append('    allocated_memory_size_map[(VkDeviceMemory)global_unique_handle] = pAllocateInfo->allocationSize;\n')
+                    out.append(f'    *{lp_txt} = ({lp_type}){allocator_txt};\n')
+            elif True in [ftxt in name for ftxt in ['Destroy', 'Free']]:
+                out.append('//Destroy object\n')
+                if 'FreeMemory' in name:
+                    # If the memory is mapped, unmap it
+                    out.append('    UnmapMemory(device, memory);\n')
+                    # Remove from allocation map
+                    out.append('    unique_lock_t lock(global_lock);\n')
+                    out.append('    allocated_memory_size_map.erase(memory);\n')
             else:
-                self.appendSection('command', 'static %s' % (decls[0][:-1]))
-                self.appendSection('command', '{\n%s}' % (CUSTOM_C_INTERCEPTS[name]))
-            self.intercepts += [ '    {"%s", (void*)%s},' % (name,name[2:]) ]
-            return
-        # record that the function will be intercepted
-        if (self.featureExtraProtect != None):
-            self.intercepts += [ '#ifdef %s' % self.featureExtraProtect ]
-        self.intercepts += [ '    {"%s", (void*)%s},' % (name,name[2:]) ]
-        if (self.featureExtraProtect != None):
-            self.intercepts += [ '#endif' ]
+                out.append('//Not a CREATE or DESTROY function\n')
 
-        OutputGenerator.genCmd(self, cmdinfo, name, alias)
-        #
-        self.appendSection('command', '')
-        self.appendSection('command', 'static %s' % (decls[0][:-1]))
-        if name in CUSTOM_C_INTERCEPTS:
-            self.appendSection('command', '{%s}' % (CUSTOM_C_INTERCEPTS[name]))
-            return
+            # Return result variable, if any.
+            if cmd.returnType != 'void':
+                if name == 'vkGetEventStatus':
+                    out.append('    return VK_EVENT_SET;\n')
+                else:
+                    out.append('    return VK_SUCCESS;\n')
+            out.append('}\n')
+        if current_protect is not None:
+            out.append('#endif\n')
 
-        # Declare result variable, if any.
-        resulttype = cmdinfo.elem.find('proto/type')
-        if (resulttype != None and resulttype.text == 'void'):
-            resulttype = None
-        # if the name w/ KHR postfix is in the CUSTOM_C_INTERCEPTS
-        # Call the KHR custom version instead of generating separate code
-        khr_name = name + "KHR"
-        if khr_name in CUSTOM_C_INTERCEPTS:
-            return_string = ''
-            if resulttype != None:
-                return_string = 'return '
-            params = cmdinfo.elem.findall('param/name')
-            param_names = []
-            for param in params:
-                param_names.append(param.text)
-            self.appendSection('command', '{\n    %s%s(%s);\n}' % (return_string, khr_name[2:], ", ".join(param_names)))
-            return
-        self.appendSection('command', '{')
+    def generate(self):
+        out = []
+        out.append('''/*
+** Copyright (c) 2015-2025 The Khronos Group Inc.
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
 
-        api_function_name = cmdinfo.elem.attrib.get('name')
-        # GET THE TYPE OF FUNCTION
-        if any(api_function_name.startswith(ftxt) for ftxt in ('vkCreate', 'vkAllocate')):
-            # Get last param
-            last_param = cmdinfo.elem.findall('param')[-1]
-            lp_txt = last_param.find('name').text
-            lp_len = None
-            if ('len' in last_param.attrib):
-                lp_len = last_param.attrib['len']
-                lp_len = lp_len.replace('::', '->')
-            lp_type = last_param.find('type').text
-            handle_type = 'dispatchable'
-            allocator_txt = 'CreateDispObjHandle()';
-            if (self.isHandleTypeNonDispatchable(lp_type)):
-                handle_type = 'non-' + handle_type
-                allocator_txt = 'global_unique_handle++';
-            # Need to lock in both cases
-            self.appendSection('command', '    unique_lock_t lock(global_lock);')
-            if (lp_len != None):
-                #print("%s last params (%s) has len %s" % (handle_type, lp_txt, lp_len))
-                self.appendSection('command', '    for (uint32_t i = 0; i < %s; ++i) {' % (lp_len))
-                self.appendSection('command', '        %s[i] = (%s)%s;' % (lp_txt, lp_type, allocator_txt))
-                self.appendSection('command', '    }')
-            else:
-                #print("Single %s last param is '%s' w/ type '%s'" % (handle_type, lp_txt, lp_type))
-                if 'AllocateMemory' in api_function_name:
-                    # Store allocation size in case it's mapped
-                    self.appendSection('command', '    allocated_memory_size_map[(VkDeviceMemory)global_unique_handle] = pAllocateInfo->allocationSize;')
-                self.appendSection('command', '    *%s = (%s)%s;' % (lp_txt, lp_type, allocator_txt))
-        elif True in [ftxt in api_function_name for ftxt in ['Destroy', 'Free']]:
-            self.appendSection('command', '//Destroy object')
-            if 'FreeMemory' in api_function_name:
-                # If the memory is mapped, unmap it
-                self.appendSection('command', '    UnmapMemory(device, memory);')
-                # Remove from allocation map
-                self.appendSection('command', '    unique_lock_t lock(global_lock);')
-                self.appendSection('command', '    allocated_memory_size_map.erase(memory);')
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+#pragma once
+''')
+
+        if self.filename == "function_declarations.h":
+            self.generate_function_declarations(out)
         else:
-            self.appendSection('command', '//Not a CREATE or DESTROY function')
+            self.generate_function_definitions(out)
 
-        # Return result variable, if any.
-        if (resulttype != None):
-            if api_function_name == 'vkGetEventStatus':
-                self.appendSection('command', '    return VK_EVENT_SET;')
-            else:
-                self.appendSection('command', '    return VK_SUCCESS;')
-        self.appendSection('command', '}')
-    #
-    # override makeProtoName to drop the "vk" prefix
-    def makeProtoName(self, name, tail):
-        return self.genOpts.apientry + name[2:] + tail
+        out.append('\n')
+        out.append('} // namespace vkmock\n')
+        out.append('\n')
+        self.write(''.join(out))
diff --git a/scripts/generators/vulkan_tools_helper_file_generator.py b/scripts/generators/vulkan_tools_helper_file_generator.py
index b0e486e..baf3e81 100644
--- a/scripts/generators/vulkan_tools_helper_file_generator.py
+++ b/scripts/generators/vulkan_tools_helper_file_generator.py
@@ -21,1220 +21,143 @@
 # Author: Tobin Ehlis <tobine@google.com>
 # Author: John Zulauf <jzulauf@lunarg.com>
 
-import os,re,sys
-import xml.etree.ElementTree as etree
-from generator import *
-from collections import namedtuple
-from common_codegen import *
+from base_generator import BaseGenerator
 
-#
-# HelperFileOutputGeneratorOptions - subclass of GeneratorOptions.
-class HelperFileOutputGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 conventions = None,
-                 filename = None,
-                 directory = '.',
-                 genpath = None,
-                 apiname = None,
-                 profile = None,
-                 versions = '.*',
-                 emitversions = '.*',
-                 defaultExtensions = None,
-                 addExtensions = None,
-                 removeExtensions = None,
-                 emitExtensions = None,
-                 sortProcedure = regSortFeatures,
-                 prefixText = "",
-                 genFuncPointers = True,
-                 protectFile = True,
-                 protectFeature = True,
-                 apicall = '',
-                 apientry = '',
-                 apientryp = '',
-                 alignFuncParam = 0,
-                 library_name = '',
-                 expandEnumerants = True,
-                 helper_file_type = ''):
-        GeneratorOptions.__init__(self,
-                 conventions = conventions,
-                 filename = filename,
-                 directory = directory,
-                 genpath = genpath,
-                 apiname = apiname,
-                 profile = profile,
-                 versions = versions,
-                 emitversions = emitversions,
-                 defaultExtensions = defaultExtensions,
-                 addExtensions = addExtensions,
-                 removeExtensions = removeExtensions,
-                 emitExtensions = emitExtensions,
-                 sortProcedure = sortProcedure)
-        self.prefixText       = prefixText
-        self.genFuncPointers  = genFuncPointers
-        self.protectFile      = protectFile
-        self.protectFeature   = protectFeature
-        self.apicall          = apicall
-        self.apientry         = apientry
-        self.apientryp        = apientryp
-        self.alignFuncParam   = alignFuncParam
-        self.library_name     = library_name
-        self.helper_file_type = helper_file_type
-#
 # HelperFileOutputGenerator - subclass of OutputGenerator. Outputs Vulkan helper files
-class HelperFileOutputGenerator(OutputGenerator):
-    """Generate helper file based on XML element attributes"""
-    def __init__(self,
-                 errFile = sys.stderr,
-                 warnFile = sys.stderr,
-                 diagFile = sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-        # Internal state - accumulators for different inner block text
-        self.enum_output = ''                             # string built up of enum string routines
-        # Internal state - accumulators for different inner block text
-        self.structNames = []                             # List of Vulkan struct typenames
-        self.structTypes = dict()                         # Map of Vulkan struct typename to required VkStructureType
-        self.structMembers = []                           # List of StructMemberData records for all Vulkan structs
-        self.object_types = []                            # List of all handle types
-        self.object_type_aliases = []                     # Aliases to handles types (for handles that were extensions)
-        self.debug_report_object_types = []               # Handy copy of debug_report_object_type enum data
-        self.core_object_types = []                       # Handy copy of core_object_type enum data
-        self.device_extension_info = dict()               # Dict of device extension name defines and ifdef values
-        self.instance_extension_info = dict()             # Dict of instance extension name defines and ifdef values
+class HelperFileOutputGenerator(BaseGenerator):
+    def __init__(self):
+        BaseGenerator.__init__(self)
 
-        # Named tuples to store struct and command data
-        self.StructType = namedtuple('StructType', ['name', 'value'])
-        self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isstaticarray', 'isconst', 'iscount', 'len', 'extstructs', 'cdecl'])
-        self.StructMemberData = namedtuple('StructMemberData', ['name', 'members', 'ifdef_protect'])
 
-        self.custom_construct_params = {
-            # safe_VkGraphicsPipelineCreateInfo needs to know if subpass has color and\or depth\stencil attachments to use its pointers
-            'VkGraphicsPipelineCreateInfo' :
-                ', const bool uses_color_attachment, const bool uses_depthstencil_attachment',
-            # safe_VkPipelineViewportStateCreateInfo needs to know if viewport and scissor is dynamic to use its pointers
-            'VkPipelineViewportStateCreateInfo' :
-                ', const bool is_dynamic_viewports, const bool is_dynamic_scissors',
-        }
-    #
-    # Called once at the beginning of each run
-    def beginFile(self, genOpts):
-        OutputGenerator.beginFile(self, genOpts)
-        # User-supplied prefix text, if any (list of strings)
-        self.helper_file_type = genOpts.helper_file_type
-        self.library_name = genOpts.library_name
+    def generate(self):
+        out = []
+
         # File Comment
-        file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
-        file_comment += '// See vulkan_tools_helper_file_generator.py for modifications\n'
-        write(file_comment, file=self.outFile)
+        out.append('// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n')
+        out.append('// See vulkan_tools_helper_file_generator.py for modifications\n')
+
         # Copyright Notice
-        copyright = ''
-        copyright += '\n'
-        copyright += '/***************************************************************************\n'
-        copyright += ' *\n'
-        copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
-        copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
-        copyright += ' * Copyright (c) 2015-2017 Google Inc.\n'
-        copyright += ' *\n'
-        copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
-        copyright += ' * you may not use this file except in compliance with the License.\n'
-        copyright += ' * You may obtain a copy of the License at\n'
-        copyright += ' *\n'
-        copyright += ' *     http://www.apache.org/licenses/LICENSE-2.0\n'
-        copyright += ' *\n'
-        copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
-        copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
-        copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-        copyright += ' * See the License for the specific language governing permissions and\n'
-        copyright += ' * limitations under the License.\n'
-        copyright += ' *\n'
-        copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
-        copyright += ' * Author: Courtney Goeltzenleuchter <courtneygo@google.com>\n'
-        copyright += ' * Author: Tobin Ehlis <tobine@google.com>\n'
-        copyright += ' * Author: Chris Forbes <chrisforbes@google.com>\n'
-        copyright += ' * Author: John Zulauf<jzulauf@lunarg.com>\n'
-        copyright += ' *\n'
-        copyright += ' ****************************************************************************/\n'
-        write(copyright, file=self.outFile)
-    #
-    # Write generated file content to output file
-    def endFile(self):
-        dest_file = ''
-        dest_file += self.OutputDestFile()
-        # Remove blank lines at EOF
-        if dest_file.endswith('\n'):
-            dest_file = dest_file[:-1]
-        write(dest_file, file=self.outFile);
-        # Finish processing in superclass
-        OutputGenerator.endFile(self)
-    #
-    # Override parent class to be notified of the beginning of an extension
-    def beginFeature(self, interface, emit):
-        # Start processing in superclass
-        OutputGenerator.beginFeature(self, interface, emit)
-        self.featureExtraProtect = GetFeatureProtect(interface)
+        out.append('''
 
-        if interface.tag != 'extension':
-            return
-        name = self.featureName
-        for enum in interface.findall('require/enum'):
-            if enum.get('name', '').endswith('EXTENSION_NAME'):
-                name_define = enum.get('name')
-                break
-        requires = interface.get('requires')
-        if requires is not None:
-            required_extensions = requires.split(',')
-        else:
-            required_extensions = list()
-        info = { 'define': name_define, 'ifdef':self.featureExtraProtect, 'reqs':required_extensions }
-        if interface.get('type') == 'instance':
-            self.instance_extension_info[name] = info
-        else:
-            self.device_extension_info[name] = info
-
-    #
-    # Override parent class to be notified of the end of an extension
-    def endFeature(self):
-        # Finish processing in superclass
-        OutputGenerator.endFeature(self)
-    #
-    # Grab group (e.g. C "enum" type) info to output for enum-string conversion helper
-    def genGroup(self, groupinfo, groupName, alias):
-        OutputGenerator.genGroup(self, groupinfo, groupName, alias)
-        groupElem = groupinfo.elem
-        # For enum_string_header
-        if self.helper_file_type == 'enum_string_header':
-            value_set = set()
-            for elem in groupElem.findall('enum'):
-                if elem.get('supported') != 'disabled' and elem.get('alias') == None:
-                    value_set.add(elem.get('name'))
-            self.enum_output += self.GenerateEnumStringConversion(groupName, value_set)
-        elif self.helper_file_type == 'object_types_header':
-            if groupName == 'VkDebugReportObjectTypeEXT':
-                for elem in groupElem.findall('enum'):
-                    if elem.get('supported') != 'disabled':
-                        item_name = elem.get('name')
-                        self.debug_report_object_types.append(item_name)
-            elif groupName == 'VkObjectType':
-                for elem in groupElem.findall('enum'):
-                    if elem.get('supported') != 'disabled':
-                        item_name = elem.get('name')
-                        self.core_object_types.append(item_name)
-
-    #
-    # Called for each type -- if the type is a struct/union, grab the metadata
-    def genType(self, typeinfo, name, alias):
-        OutputGenerator.genType(self, typeinfo, name, alias)
-        typeElem = typeinfo.elem
-        # If the type is a struct type, traverse the imbedded <member> tags generating a structure.
-        # Otherwise, emit the tag text.
-        category = typeElem.get('category')
-        if category == 'handle':
-            if alias:
-                self.object_type_aliases.append((name,alias))
-            else:
-                self.object_types.append(name)
-        elif (category == 'struct' or category == 'union'):
-            self.structNames.append(name)
-            self.genStruct(typeinfo, name, alias)
-    #
-    # Check if the parameter passed in is a pointer
-    def paramIsPointer(self, param):
-        ispointer = False
-        for elem in param:
-            if ((elem.tag != 'type') and (elem.tail is not None)) and '*' in elem.tail:
-                ispointer = True
-        return ispointer
-    #
-    # Check if the parameter passed in is a static array
-    def paramIsStaticArray(self, param):
-        isstaticarray = 0
-        paramname = param.find('name')
-        if (paramname.tail is not None) and ('[' in paramname.tail):
-            isstaticarray = paramname.tail.count('[')
-        return isstaticarray
-    #
-    # Retrieve the type and name for a parameter
-    def getTypeNameTuple(self, param):
-        type = ''
-        name = ''
-        for elem in param:
-            if elem.tag == 'type':
-                type = noneStr(elem.text)
-            elif elem.tag == 'name':
-                name = noneStr(elem.text)
-        return (type, name)
-    #
-    # Retrieve the value of the len tag
-    def getLen(self, param):
-        result = None
-        len = param.attrib.get('len')
-        if len and len != 'null-terminated':
-            # For string arrays, 'len' can look like 'count,null-terminated', indicating that we
-            # have a null terminated array of strings.  We strip the null-terminated from the
-            # 'len' field and only return the parameter specifying the string count
-            if 'null-terminated' in len:
-                result = len.split(',')[0]
-            else:
-                result = len
-            if 'altlen' in param.attrib:
-                # Elements with latexmath 'len' also contain a C equivalent 'altlen' attribute
-                # Use indexing operator instead of get() so we fail if the attribute is missing
-                result = param.attrib['altlen']
-            # Spec has now notation for len attributes, using :: instead of platform specific pointer symbol
-            result = str(result).replace('::', '->')
-        return result
-    #
-    # Check if a structure is or contains a dispatchable (dispatchable = True) or
-    # non-dispatchable (dispatchable = False) handle
-    def TypeContainsObjectHandle(self, handle_type, dispatchable):
-        if dispatchable:
-            type_key = 'VK_DEFINE_HANDLE'
-        else:
-            type_key = 'VK_DEFINE_NON_DISPATCHABLE_HANDLE'
-        handle = self.registry.tree.find("types/type/[name='" + handle_type + "'][@category='handle']")
-        if handle is not None and handle.find('type').text == type_key:
-            return True
-        # if handle_type is a struct, search its members
-        if handle_type in self.structNames:
-            member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == handle_type), None)
-            if member_index is not None:
-                for item in self.structMembers[member_index].members:
-                    handle = self.registry.tree.find("types/type/[name='" + item.type + "'][@category='handle']")
-                    if handle is not None and handle.find('type').text == type_key:
-                        return True
-        return False
-    #
-    # Generate local ready-access data describing Vulkan structures and unions from the XML metadata
-    def genStruct(self, typeinfo, typeName, alias):
-        OutputGenerator.genStruct(self, typeinfo, typeName, alias)
-        members = typeinfo.elem.findall('.//member')
-        # Iterate over members once to get length parameters for arrays
-        lens = set()
-        for member in members:
-            len = self.getLen(member)
-            if len:
-                lens.add(len)
-        # Generate member info
-        membersInfo = []
-        for member in members:
-            # Get the member's type and name
-            info = self.getTypeNameTuple(member)
-            type = info[0]
-            name = info[1]
-            cdecl = self.makeCParamDecl(member, 1)
-            # Process VkStructureType
-            if type == 'VkStructureType':
-                # Extract the required struct type value from the comments
-                # embedded in the original text defining the 'typeinfo' element
-                rawXml = etree.tostring(typeinfo.elem).decode('ascii')
-                result = re.search(r'VK_STRUCTURE_TYPE_\w+', rawXml)
-                if result:
-                    value = result.group(0)
-                    # Store the required type value
-                    self.structTypes[typeName] = self.StructType(name=name, value=value)
-            # Store pointer/array/string info
-            isstaticarray = self.paramIsStaticArray(member)
-            membersInfo.append(self.CommandParam(type=type,
-                                                 name=name,
-                                                 ispointer=self.paramIsPointer(member),
-                                                 isstaticarray=isstaticarray,
-                                                 isconst=True if 'const' in cdecl else False,
-                                                 iscount=True if name in lens else False,
-                                                 len=self.getLen(member),
-                                                 extstructs=self.registry.validextensionstructs[typeName] if name == 'pNext' else None,
-                                                 cdecl=cdecl))
-        self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo, ifdef_protect=self.featureExtraProtect))
-    #
-    # Enum_string_header: Create a routine to convert an enumerated value into a string
-    def GenerateEnumStringConversion(self, groupName, value_list):
-        outstring = '\n'
-        outstring += 'static inline const char* string_%s(%s input_value)\n' % (groupName, groupName)
-        outstring += '{\n'
-        outstring += '    switch ((%s)input_value)\n' % groupName
-        outstring += '    {\n'
-        for item in value_list:
-            outstring += '        case %s:\n' % item
-            outstring += '            return "%s";\n' % item
-        outstring += '        default:\n'
-        outstring += '            return "Unhandled %s";\n' % groupName
-        outstring += '    }\n'
-        outstring += '}\n'
-        return outstring
-    #
-    # Tack on a helper which, given an index into a VkPhysicalDeviceFeatures structure, will print the corresponding feature name
-    def DeIndexPhysDevFeatures(self):
-        pdev_members = None
-        for name, members, ifdef in self.structMembers:
-            if name == 'VkPhysicalDeviceFeatures':
-                pdev_members = members
-                break
-        deindex = '\n'
-        deindex += 'static inline const char * GetPhysDevFeatureString(uint32_t index) {\n'
-        deindex += '    const char * IndexToPhysDevFeatureString[] = {\n'
-        for feature in pdev_members:
-            deindex += '        "%s",\n' % feature.name
-        deindex += '    };\n\n'
-        deindex += '    return IndexToPhysDevFeatureString[index];\n'
-        deindex += '}\n'
-        return deindex
-    #
-    # Combine enum string helper header file preamble with body text and return
-    def GenerateEnumStringHelperHeader(self):
-            enum_string_helper_header = '\n'
-            enum_string_helper_header += '#pragma once\n'
-            enum_string_helper_header += '#ifdef _WIN32\n'
-            enum_string_helper_header += '#pragma warning( disable : 4065 )\n'
-            enum_string_helper_header += '#endif\n'
-            enum_string_helper_header += '\n'
-            enum_string_helper_header += '#include <vulkan/vulkan.h>\n'
-            enum_string_helper_header += '\n'
-            enum_string_helper_header += self.enum_output
-            enum_string_helper_header += self.DeIndexPhysDevFeatures()
-            return enum_string_helper_header
-    #
-    # Helper function for declaring a counter variable only once
-    def DeclareCounter(self, string_var, declare_flag):
-        if declare_flag == False:
-            string_var += '        uint32_t i = 0;\n'
-            declare_flag = True
-        return string_var, declare_flag
-    #
-    # Combine safe struct helper header file preamble with body text and return
-    def GenerateSafeStructHelperHeader(self):
-        safe_struct_helper_header = '\n'
-        safe_struct_helper_header += '#pragma once\n'
-        safe_struct_helper_header += '#include <vulkan/vulkan.h>\n'
-        safe_struct_helper_header += '\n'
-        safe_struct_helper_header += self.GenerateSafeStructHeader()
-        return safe_struct_helper_header
-    #
-    # safe_struct header: build function prototypes for header file
-    def GenerateSafeStructHeader(self):
-        safe_struct_header = ''
-        for item in self.structMembers:
-            if self.NeedSafeStruct(item) == True:
-                safe_struct_header += '\n'
-                if item.ifdef_protect != None:
-                    safe_struct_header += '#ifdef %s\n' % item.ifdef_protect
-                safe_struct_header += 'struct safe_%s {\n' % (item.name)
-                for member in item.members:
-                    if member.type in self.structNames:
-                        member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == member.type), None)
-                        if member_index is not None and self.NeedSafeStruct(self.structMembers[member_index]) == True:
-                            if member.ispointer:
-                                safe_struct_header += '    safe_%s* %s;\n' % (member.type, member.name)
-                            else:
-                                safe_struct_header += '    safe_%s %s;\n' % (member.type, member.name)
-                            continue
-                    if member.len is not None and (self.TypeContainsObjectHandle(member.type, True) or self.TypeContainsObjectHandle(member.type, False)):
-                            safe_struct_header += '    %s* %s;\n' % (member.type, member.name)
-                    else:
-                        safe_struct_header += '%s;\n' % member.cdecl
-                safe_struct_header += '    safe_%s(const %s* in_struct%s);\n' % (item.name, item.name, self.custom_construct_params.get(item.name, ''))
-                safe_struct_header += '    safe_%s(const safe_%s& src);\n' % (item.name, item.name)
-                safe_struct_header += '    safe_%s& operator=(const safe_%s& src);\n' % (item.name, item.name)
-                safe_struct_header += '    safe_%s();\n' % item.name
-                safe_struct_header += '    ~safe_%s();\n' % item.name
-                safe_struct_header += '    void initialize(const %s* in_struct%s);\n' % (item.name, self.custom_construct_params.get(item.name, ''))
-                safe_struct_header += '    void initialize(const safe_%s* src);\n' % (item.name)
-                safe_struct_header += '    %s *ptr() { return reinterpret_cast<%s *>(this); }\n' % (item.name, item.name)
-                safe_struct_header += '    %s const *ptr() const { return reinterpret_cast<%s const *>(this); }\n' % (item.name, item.name)
-                safe_struct_header += '};\n'
-                if item.ifdef_protect != None:
-                    safe_struct_header += '#endif // %s\n' % item.ifdef_protect
-        return safe_struct_header
-    #
-    # Generate extension helper header file
-    def GenerateExtensionHelperHeader(self):
-
-        V_1_0_instance_extensions_promoted_to_core = [
-            'vk_khr_device_group_creation',
-            'vk_khr_external_fence_capabilities',
-            'vk_khr_external_memory_capabilities',
-            'vk_khr_external_semaphore_capabilities',
-            'vk_khr_get_physical_device_properties_2',
-            ]
-
-        V_1_0_device_extensions_promoted_to_core = [
-            'vk_khr_16bit_storage',
-            'vk_khr_bind_memory_2',
-            'vk_khr_dedicated_allocation',
-            'vk_khr_descriptor_update_template',
-            'vk_khr_device_group',
-            'vk_khr_external_fence',
-            'vk_khr_external_memory',
-            'vk_khr_external_semaphore',
-            'vk_khr_get_memory_requirements_2',
-            'vk_khr_maintenance1',
-            'vk_khr_maintenance2',
-            'vk_khr_maintenance3',
-            'vk_khr_multiview',
-            'vk_khr_relaxed_block_layout',
-            'vk_khr_sampler_ycbcr_conversion',
-            'vk_khr_shader_draw_parameters',
-            'vk_khr_storage_buffer_storage_class',
-            'vk_khr_variable_pointers',
-            ]
-
-        output = [
-            '',
-            '#ifndef VK_EXTENSION_HELPER_H_',
-            '#define VK_EXTENSION_HELPER_H_',
-            '#include <string>',
-            '#include <unordered_map>',
-            '#include <utility>',
-            '',
-            '#include <vulkan/vulkan.h>',
-            '']
-
-        def guarded(ifdef, value):
-            if ifdef is not None:
-                return '\n'.join([ '#ifdef %s' % ifdef, value, '#endif' ])
-            else:
-                return value
-
-        for type in ['Instance', 'Device']:
-            struct_type = '%sExtensions' % type
-            if type == 'Instance':
-                extension_dict = self.instance_extension_info
-                promoted_ext_list = V_1_0_instance_extensions_promoted_to_core
-                struct_decl = 'struct %s {' % struct_type
-                instance_struct_type = struct_type
-            else:
-                extension_dict = self.device_extension_info
-                promoted_ext_list = V_1_0_device_extensions_promoted_to_core
-                struct_decl = 'struct %s : public %s {' % (struct_type, instance_struct_type)
-
-            extension_items = sorted(extension_dict.items())
-
-            field_name = { ext_name: re.sub('_extension_name', '', info['define'].lower()) for ext_name, info in extension_items }
-            if type == 'Instance':
-                instance_field_name = field_name
-                instance_extension_dict = extension_dict
-            else:
-                # Get complete field name and extension data for both Instance and Device extensions
-                field_name.update(instance_field_name)
-                extension_dict = extension_dict.copy()  # Don't modify the self.<dict> we're pointing to
-                extension_dict.update(instance_extension_dict)
-
-            # Output the data member list
-            struct  = [struct_decl]
-            struct.extend([ '    bool %s{false};' % field_name[ext_name] for ext_name, info in extension_items])
-
-            # Construct the extension information map -- mapping name to data member (field), and required extensions
-            # The map is contained within a static function member for portability reasons.
-            info_type = '%sInfo' % type
-            info_map_type = '%sMap' % info_type
-            req_type = '%sReq' % type
-            req_vec_type = '%sVec' % req_type
-            struct.extend([
-                '',
-                '    struct %s {' % req_type,
-                '        const bool %s::* enabled;' % struct_type,
-                '        const char *name;',
-                '    };',
-                '    typedef std::vector<%s> %s;' % (req_type, req_vec_type),
-                '    struct %s {' % info_type,
-                '       %s(bool %s::* state_, const %s requires_): state(state_), requires(requires_) {}' % ( info_type, struct_type, req_vec_type),
-                '       bool %s::* state;' % struct_type,
-                '       %s requires;' % req_vec_type,
-                '    };',
-                '',
-                '    typedef std::unordered_map<std::string,%s> %s;' % (info_type, info_map_type),
-                '    static const %s &get_info(const char *name) {' %info_type,
-                '        static const %s info_map = {' % info_map_type ])
-
-            field_format = '&' + struct_type + '::%s'
-            req_format = '{' + field_format+ ', %s}'
-            req_indent = '\n                           '
-            req_join = ',' + req_indent
-            info_format = ('            std::make_pair(%s, ' + info_type + '(' + field_format + ', {%s})),')
-            def format_info(ext_name, info):
-                reqs = req_join.join([req_format % (field_name[req], extension_dict[req]['define']) for req in info['reqs']])
-                return info_format % (info['define'], field_name[ext_name], '{%s}' % (req_indent + reqs) if reqs else '')
-
-            struct.extend([guarded(info['ifdef'], format_info(ext_name, info)) for ext_name, info in extension_items])
-            struct.extend([
-                '        };',
-                '',
-                '        static const %s empty_info {nullptr, %s()};' % (info_type, req_vec_type),
-                '        %s::const_iterator info = info_map.find(name);' % info_map_type,
-                '        if ( info != info_map.cend()) {',
-                '            return info->second;',
-                '        }',
-                '        return empty_info;',
-                '    }',
-                ''])
-
-            if type == 'Instance':
-                struct.extend([
-                    '    uint32_t NormalizeApiVersion(uint32_t specified_version) {',
-                    '        uint32_t api_version = (specified_version < VK_API_VERSION_1_1) ? VK_API_VERSION_1_0 : VK_API_VERSION_1_1;',
-                    '        return api_version;',
-                    '    }',
-                    '',
-                    '    uint32_t InitFromInstanceCreateInfo(uint32_t requested_api_version, const VkInstanceCreateInfo *pCreateInfo) {'])
-            else:
-                struct.extend([
-                    '    %s() = default;' % struct_type,
-                    '    %s(const %s& instance_ext) : %s(instance_ext) {}' % (struct_type, instance_struct_type, instance_struct_type),
-                    '',
-                    '    uint32_t InitFromDeviceCreateInfo(const %s *instance_extensions, uint32_t requested_api_version,' % instance_struct_type,
-                    '                                      const VkDeviceCreateInfo *pCreateInfo) {',
-                    '        // Initialize: this to defaults,  base class fields to input.',
-                    '        assert(instance_extensions);',
-                    '        *this = %s(*instance_extensions);' % struct_type])
-
-            struct.extend([
-                '',
-                '        static const std::vector<const char *> V_1_0_promoted_%s_extensions = {' % type.lower() ])
-            struct.extend(['            %s_EXTENSION_NAME,' % ext_name.upper() for ext_name in promoted_ext_list])
-            struct.extend([
-                '        };',
-                '',
-                '        // Initialize struct data, robust to invalid pCreateInfo',
-                '        if (pCreateInfo->ppEnabledExtensionNames) {',
-                '            for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {',
-                '                if (!pCreateInfo->ppEnabledExtensionNames[i]) continue;',
-                '                auto info = get_info(pCreateInfo->ppEnabledExtensionNames[i]);',
-                '                if(info.state) this->*(info.state) = true;',
-                '            }',
-                '        }',
-                '        uint32_t api_version = NormalizeApiVersion(requested_api_version);',
-                '        if (api_version >= VK_API_VERSION_1_1) {',
-                '            for (auto promoted_ext : V_1_0_promoted_%s_extensions) {' % type.lower(),
-                '                auto info = get_info(promoted_ext);',
-                '                assert(info.state);',
-                '                if (info.state) this->*(info.state) = true;',
-                '            }',
-                '        }',
-                '        return api_version;',
-                '    }',
-                '};'])
-
-            # Output reference lists of instance/device extension names
-            struct.extend(['', 'static const char * const k%sExtensionNames = ' % type])
-            struct.extend([guarded(info['ifdef'], '    %s' % info['define']) for ext_name, info in extension_items])
-            struct.extend([';', ''])
-            output.extend(struct)
-
-        output.extend(['', '#endif // VK_EXTENSION_HELPER_H_'])
-        return '\n'.join(output)
-    #
-    # Combine object types helper header file preamble with body text and return
-    def GenerateObjectTypesHelperHeader(self):
-        object_types_helper_header = '\n'
-        object_types_helper_header += '#pragma once\n'
-        object_types_helper_header += '\n'
-        object_types_helper_header += '#include <vulkan/vulkan.h>\n\n'
-        object_types_helper_header += self.GenerateObjectTypesHeader()
-        return object_types_helper_header
-    #
-    # Object types header: create object enum type header file
-    def GenerateObjectTypesHeader(self):
-        object_types_header = ''
-        object_types_header += '// Object Type enum for validation layer internal object handling\n'
-        object_types_header += 'typedef enum VulkanObjectType {\n'
-        object_types_header += '    kVulkanObjectTypeUnknown = 0,\n'
-        enum_num = 1
-        type_list = [];
-        enum_entry_map = {}
-
-        # Output enum definition as each handle is processed, saving the names to use for the conversion routine
-        for item in self.object_types:
-            fixup_name = item[2:]
-            enum_entry = 'kVulkanObjectType%s' % fixup_name
-            enum_entry_map[item] = enum_entry
-            object_types_header += '    ' + enum_entry
-            object_types_header += ' = %d,\n' % enum_num
-            enum_num += 1
-            type_list.append(enum_entry)
-        object_types_header += '    kVulkanObjectTypeMax = %d,\n' % enum_num
-        object_types_header += '    // Aliases for backwards compatibilty of "promoted" types\n'
-        for (name, alias) in self.object_type_aliases:
-            fixup_name = name[2:]
-            object_types_header += '    kVulkanObjectType{} = {},\n'.format(fixup_name, enum_entry_map[alias])
-        object_types_header += '} VulkanObjectType;\n\n'
-
-        # Output name string helper
-        object_types_header += '// Array of object name strings for OBJECT_TYPE enum conversion\n'
-        object_types_header += 'static const char * const object_string[kVulkanObjectTypeMax] = {\n'
-        object_types_header += '    "Unknown",\n'
-        for item in self.object_types:
-            fixup_name = item[2:]
-            object_types_header += '    "%s",\n' % fixup_name
-        object_types_header += '};\n'
-
-        # Key creation helper for map comprehensions that convert between k<Name> and VK<Name> symbols
-        def to_key(regex, raw_key): return re.search(regex, raw_key).group(1).lower().replace("_","")
-
-        # Output a conversion routine from the layer object definitions to the debug report definitions
-        # As the VK_DEBUG_REPORT types are not being updated, specify UNKNOWN for unmatched types
-        object_types_header += '\n'
-        object_types_header += '// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version\n'
-        object_types_header += 'const VkDebugReportObjectTypeEXT get_debug_report_enum[] = {\n'
-        object_types_header += '    VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown\n'
-
-        dbg_re = '^VK_DEBUG_REPORT_OBJECT_TYPE_(.*)_EXT$'
-        dbg_map = {to_key(dbg_re, dbg) : dbg for dbg in self.debug_report_object_types}
-        dbg_default = 'VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'
-        for object_type in type_list:
-            vk_object_type = dbg_map.get(object_type.replace("kVulkanObjectType", "").lower(), dbg_default)
-            object_types_header += '    %s,   // %s\n' % (vk_object_type, object_type)
-        object_types_header += '};\n'
-
-        # Output a conversion routine from the layer object definitions to the core object type definitions
-        # This will intentionally *fail* for unmatched types as the VK_OBJECT_TYPE list should match the kVulkanObjectType list
-        object_types_header += '\n'
-        object_types_header += '// Helper array to get Official Vulkan VkObjectType enum from the internal layers version\n'
-        object_types_header += 'const VkObjectType get_object_type_enum[] = {\n'
-        object_types_header += '    VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown\n'
-
-        vko_re = '^VK_OBJECT_TYPE_(.*)'
-        vko_map = {to_key(vko_re, vko) : vko for vko in self.core_object_types}
-        for object_type in type_list:
-            vk_object_type = vko_map[object_type.replace("kVulkanObjectType", "").lower()]
-            object_types_header += '    %s,   // %s\n' % (vk_object_type, object_type)
-        object_types_header += '};\n'
-
-        # Create a function to convert from VkDebugReportObjectTypeEXT to VkObjectType
-        object_types_header += '\n'
-        object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
-        object_types_header += 'static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){\n'
-        object_types_header += '    if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {\n'
-        object_types_header += '        return VK_OBJECT_TYPE_UNKNOWN;\n'
-        for core_object_type in self.core_object_types:
-            core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
-            core_target_type = core_target_type.replace("_", "")
-            for dr_object_type in self.debug_report_object_types:
-                dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
-                dr_target_type = dr_target_type[:-4]
-                dr_target_type = dr_target_type.replace("_", "")
-                if core_target_type == dr_target_type:
-                    object_types_header += '    } else if (debug_report_obj == %s) {\n' % dr_object_type
-                    object_types_header += '        return %s;\n' % core_object_type
-                    break
-        object_types_header += '    }\n'
-        object_types_header += '    return VK_OBJECT_TYPE_UNKNOWN;\n'
-        object_types_header += '}\n'
-
-        # Create a function to convert from VkObjectType to VkDebugReportObjectTypeEXT
-        object_types_header += '\n'
-        object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
-        object_types_header += 'static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){\n'
-        object_types_header += '    if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {\n'
-        object_types_header += '        return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
-        for core_object_type in self.core_object_types:
-            core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
-            core_target_type = core_target_type.replace("_", "")
-            for dr_object_type in self.debug_report_object_types:
-                dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
-                dr_target_type = dr_target_type[:-4]
-                dr_target_type = dr_target_type.replace("_", "")
-                if core_target_type == dr_target_type:
-                    object_types_header += '    } else if (core_report_obj == %s) {\n' % core_object_type
-                    object_types_header += '        return %s;\n' % dr_object_type
-                    break
-        object_types_header += '    }\n'
-        object_types_header += '    return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
-        object_types_header += '}\n'
-        return object_types_header
-    #
-    # Determine if a structure needs a safe_struct helper function
-    # That is, it has an sType or one of its members is a pointer
-    def NeedSafeStruct(self, structure):
-        if 'sType' == structure.name:
-            return True
-        for member in structure.members:
-            if member.ispointer == True:
-                return True
-        return False
-    #
-    # Combine safe struct helper source file preamble with body text and return
-    def GenerateSafeStructHelperSource(self):
-        safe_struct_helper_source = '\n'
-        safe_struct_helper_source += '#include "vk_safe_struct.h"\n'
-        safe_struct_helper_source += '#include <string.h>\n'
-        safe_struct_helper_source += '#ifdef VK_USE_PLATFORM_ANDROID_KHR\n'
-        safe_struct_helper_source += '#if __ANDROID_API__ < __ANDROID_API_O__\n'
-        safe_struct_helper_source += 'struct AHardwareBuffer {};\n'
-        safe_struct_helper_source += '#endif\n'
-        safe_struct_helper_source += '#endif\n'
-
-        safe_struct_helper_source += '\n'
-        safe_struct_helper_source += self.GenerateSafeStructSource()
-        return safe_struct_helper_source
-    #
-    # safe_struct source -- create bodies of safe struct helper functions
-    def GenerateSafeStructSource(self):
-        safe_struct_body = []
-        wsi_structs = ['VkXlibSurfaceCreateInfoKHR',
-                       'VkXcbSurfaceCreateInfoKHR',
-                       'VkWaylandSurfaceCreateInfoKHR',
-                       'VkMirSurfaceCreateInfoKHR',
-                       'VkAndroidSurfaceCreateInfoKHR',
-                       'VkWin32SurfaceCreateInfoKHR'
-                       ]
-        for item in self.structMembers:
-            if self.NeedSafeStruct(item) == False:
-                continue
-            if item.name in wsi_structs:
-                continue
-            if item.ifdef_protect != None:
-                safe_struct_body.append("#ifdef %s\n" % item.ifdef_protect)
-            ss_name = "safe_%s" % item.name
-            init_list = ''          # list of members in struct constructor initializer
-            default_init_list = ''  # Default constructor just inits ptrs to nullptr in initializer
-            init_func_txt = ''      # Txt for initialize() function that takes struct ptr and inits members
-            construct_txt = ''      # Body of constuctor as well as body of initialize() func following init_func_txt
-            destruct_txt = ''
-
-            custom_construct_txt = {
-                # VkWriteDescriptorSet is special case because pointers may be non-null but ignored
-                'VkWriteDescriptorSet' :
-                    '    switch (descriptorType) {\n'
-                    '        case VK_DESCRIPTOR_TYPE_SAMPLER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:\n'
-                    '        case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:\n'
-                    '        if (descriptorCount && in_struct->pImageInfo) {\n'
-                    '            pImageInfo = new VkDescriptorImageInfo[descriptorCount];\n'
-                    '            for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '                pImageInfo[i] = in_struct->pImageInfo[i];\n'
-                    '            }\n'
-                    '        }\n'
-                    '        break;\n'
-                    '        case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:\n'
-                    '        if (descriptorCount && in_struct->pBufferInfo) {\n'
-                    '            pBufferInfo = new VkDescriptorBufferInfo[descriptorCount];\n'
-                    '            for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '                pBufferInfo[i] = in_struct->pBufferInfo[i];\n'
-                    '            }\n'
-                    '        }\n'
-                    '        break;\n'
-                    '        case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:\n'
-                    '        case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:\n'
-                    '        if (descriptorCount && in_struct->pTexelBufferView) {\n'
-                    '            pTexelBufferView = new VkBufferView[descriptorCount];\n'
-                    '            for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '                pTexelBufferView[i] = in_struct->pTexelBufferView[i];\n'
-                    '            }\n'
-                    '        }\n'
-                    '        break;\n'
-                    '        default:\n'
-                    '        break;\n'
-                    '    }\n',
-                'VkShaderModuleCreateInfo' :
-                    '    if (in_struct->pCode) {\n'
-                    '        pCode = reinterpret_cast<uint32_t *>(new uint8_t[codeSize]);\n'
-                    '        memcpy((void *)pCode, (void *)in_struct->pCode, codeSize);\n'
-                    '    }\n',
-                # VkGraphicsPipelineCreateInfo is special case because its pointers may be non-null but ignored
-                'VkGraphicsPipelineCreateInfo' :
-                    '    if (stageCount && in_struct->pStages) {\n'
-                    '        pStages = new safe_VkPipelineShaderStageCreateInfo[stageCount];\n'
-                    '        for (uint32_t i=0; i<stageCount; ++i) {\n'
-                    '            pStages[i].initialize(&in_struct->pStages[i]);\n'
-                    '        }\n'
-                    '    }\n'
-                    '    if (in_struct->pVertexInputState)\n'
-                    '        pVertexInputState = new safe_VkPipelineVertexInputStateCreateInfo(in_struct->pVertexInputState);\n'
-                    '    else\n'
-                    '        pVertexInputState = NULL;\n'
-                    '    if (in_struct->pInputAssemblyState)\n'
-                    '        pInputAssemblyState = new safe_VkPipelineInputAssemblyStateCreateInfo(in_struct->pInputAssemblyState);\n'
-                    '    else\n'
-                    '        pInputAssemblyState = NULL;\n'
-                    '    bool has_tessellation_stage = false;\n'
-                    '    if (stageCount && pStages)\n'
-                    '        for (uint32_t i=0; i<stageCount && !has_tessellation_stage; ++i)\n'
-                    '            if (pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)\n'
-                    '                has_tessellation_stage = true;\n'
-                    '    if (in_struct->pTessellationState && has_tessellation_stage)\n'
-                    '        pTessellationState = new safe_VkPipelineTessellationStateCreateInfo(in_struct->pTessellationState);\n'
-                    '    else\n'
-                    '        pTessellationState = NULL; // original pTessellationState pointer ignored\n'
-                    '    bool has_rasterization = in_struct->pRasterizationState ? !in_struct->pRasterizationState->rasterizerDiscardEnable : false;\n'
-                    '    if (in_struct->pViewportState && has_rasterization) {\n'
-                    '        bool is_dynamic_viewports = false;\n'
-                    '        bool is_dynamic_scissors = false;\n'
-                    '        if (in_struct->pDynamicState && in_struct->pDynamicState->pDynamicStates) {\n'
-                    '            for (uint32_t i = 0; i < in_struct->pDynamicState->dynamicStateCount && !is_dynamic_viewports; ++i)\n'
-                    '                if (in_struct->pDynamicState->pDynamicStates[i] == VK_DYNAMIC_STATE_VIEWPORT)\n'
-                    '                    is_dynamic_viewports = true;\n'
-                    '            for (uint32_t i = 0; i < in_struct->pDynamicState->dynamicStateCount && !is_dynamic_scissors; ++i)\n'
-                    '                if (in_struct->pDynamicState->pDynamicStates[i] == VK_DYNAMIC_STATE_SCISSOR)\n'
-                    '                    is_dynamic_scissors = true;\n'
-                    '        }\n'
-                    '        pViewportState = new safe_VkPipelineViewportStateCreateInfo(in_struct->pViewportState, is_dynamic_viewports, is_dynamic_scissors);\n'
-                    '    } else\n'
-                    '        pViewportState = NULL; // original pViewportState pointer ignored\n'
-                    '    if (in_struct->pRasterizationState)\n'
-                    '        pRasterizationState = new safe_VkPipelineRasterizationStateCreateInfo(in_struct->pRasterizationState);\n'
-                    '    else\n'
-                    '        pRasterizationState = NULL;\n'
-                    '    if (in_struct->pMultisampleState && has_rasterization)\n'
-                    '        pMultisampleState = new safe_VkPipelineMultisampleStateCreateInfo(in_struct->pMultisampleState);\n'
-                    '    else\n'
-                    '        pMultisampleState = NULL; // original pMultisampleState pointer ignored\n'
-                    '    // needs a tracked subpass state uses_depthstencil_attachment\n'
-                    '    if (in_struct->pDepthStencilState && has_rasterization && uses_depthstencil_attachment)\n'
-                    '        pDepthStencilState = new safe_VkPipelineDepthStencilStateCreateInfo(in_struct->pDepthStencilState);\n'
-                    '    else\n'
-                    '        pDepthStencilState = NULL; // original pDepthStencilState pointer ignored\n'
-                    '    // needs a tracked subpass state usesColorAttachment\n'
-                    '    if (in_struct->pColorBlendState && has_rasterization && uses_color_attachment)\n'
-                    '        pColorBlendState = new safe_VkPipelineColorBlendStateCreateInfo(in_struct->pColorBlendState);\n'
-                    '    else\n'
-                    '        pColorBlendState = NULL; // original pColorBlendState pointer ignored\n'
-                    '    if (in_struct->pDynamicState)\n'
-                    '        pDynamicState = new safe_VkPipelineDynamicStateCreateInfo(in_struct->pDynamicState);\n'
-                    '    else\n'
-                    '        pDynamicState = NULL;\n',
-                 # VkPipelineViewportStateCreateInfo is special case because its pointers may be non-null but ignored
-                'VkPipelineViewportStateCreateInfo' :
-                    '    if (in_struct->pViewports && !is_dynamic_viewports) {\n'
-                    '        pViewports = new VkViewport[in_struct->viewportCount];\n'
-                    '        memcpy ((void *)pViewports, (void *)in_struct->pViewports, sizeof(VkViewport)*in_struct->viewportCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pViewports = NULL;\n'
-                    '    if (in_struct->pScissors && !is_dynamic_scissors) {\n'
-                    '        pScissors = new VkRect2D[in_struct->scissorCount];\n'
-                    '        memcpy ((void *)pScissors, (void *)in_struct->pScissors, sizeof(VkRect2D)*in_struct->scissorCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pScissors = NULL;\n',
-                # VkDescriptorSetLayoutBinding is special case because its pImmutableSamplers pointer may be non-null but ignored
-                'VkDescriptorSetLayoutBinding' :
-                    '    const bool sampler_type = in_struct->descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || in_struct->descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;\n'
-                    '    if (descriptorCount && in_struct->pImmutableSamplers && sampler_type) {\n'
-                    '        pImmutableSamplers = new VkSampler[descriptorCount];\n'
-                    '        for (uint32_t i=0; i<descriptorCount; ++i) {\n'
-                    '            pImmutableSamplers[i] = in_struct->pImmutableSamplers[i];\n'
-                    '        }\n'
-                    '    }\n',
-            }
-
-            custom_copy_txt = {
-                # VkGraphicsPipelineCreateInfo is special case because it has custom construct parameters
-                'VkGraphicsPipelineCreateInfo' :
-                    '    if (stageCount && src.pStages) {\n'
-                    '        pStages = new safe_VkPipelineShaderStageCreateInfo[stageCount];\n'
-                    '        for (uint32_t i=0; i<stageCount; ++i) {\n'
-                    '            pStages[i].initialize(&src.pStages[i]);\n'
-                    '        }\n'
-                    '    }\n'
-                    '    if (src.pVertexInputState)\n'
-                    '        pVertexInputState = new safe_VkPipelineVertexInputStateCreateInfo(*src.pVertexInputState);\n'
-                    '    else\n'
-                    '        pVertexInputState = NULL;\n'
-                    '    if (src.pInputAssemblyState)\n'
-                    '        pInputAssemblyState = new safe_VkPipelineInputAssemblyStateCreateInfo(*src.pInputAssemblyState);\n'
-                    '    else\n'
-                    '        pInputAssemblyState = NULL;\n'
-                    '    bool has_tessellation_stage = false;\n'
-                    '    if (stageCount && pStages)\n'
-                    '        for (uint32_t i=0; i<stageCount && !has_tessellation_stage; ++i)\n'
-                    '            if (pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)\n'
-                    '                has_tessellation_stage = true;\n'
-                    '    if (src.pTessellationState && has_tessellation_stage)\n'
-                    '        pTessellationState = new safe_VkPipelineTessellationStateCreateInfo(*src.pTessellationState);\n'
-                    '    else\n'
-                    '        pTessellationState = NULL; // original pTessellationState pointer ignored\n'
-                    '    bool has_rasterization = src.pRasterizationState ? !src.pRasterizationState->rasterizerDiscardEnable : false;\n'
-                    '    if (src.pViewportState && has_rasterization) {\n'
-                    '        pViewportState = new safe_VkPipelineViewportStateCreateInfo(*src.pViewportState);\n'
-                    '    } else\n'
-                    '        pViewportState = NULL; // original pViewportState pointer ignored\n'
-                    '    if (src.pRasterizationState)\n'
-                    '        pRasterizationState = new safe_VkPipelineRasterizationStateCreateInfo(*src.pRasterizationState);\n'
-                    '    else\n'
-                    '        pRasterizationState = NULL;\n'
-                    '    if (src.pMultisampleState && has_rasterization)\n'
-                    '        pMultisampleState = new safe_VkPipelineMultisampleStateCreateInfo(*src.pMultisampleState);\n'
-                    '    else\n'
-                    '        pMultisampleState = NULL; // original pMultisampleState pointer ignored\n'
-                    '    if (src.pDepthStencilState && has_rasterization)\n'
-                    '        pDepthStencilState = new safe_VkPipelineDepthStencilStateCreateInfo(*src.pDepthStencilState);\n'
-                    '    else\n'
-                    '        pDepthStencilState = NULL; // original pDepthStencilState pointer ignored\n'
-                    '    if (src.pColorBlendState && has_rasterization)\n'
-                    '        pColorBlendState = new safe_VkPipelineColorBlendStateCreateInfo(*src.pColorBlendState);\n'
-                    '    else\n'
-                    '        pColorBlendState = NULL; // original pColorBlendState pointer ignored\n'
-                    '    if (src.pDynamicState)\n'
-                    '        pDynamicState = new safe_VkPipelineDynamicStateCreateInfo(*src.pDynamicState);\n'
-                    '    else\n'
-                    '        pDynamicState = NULL;\n',
-                 # VkPipelineViewportStateCreateInfo is special case because it has custom construct parameters
-                'VkPipelineViewportStateCreateInfo' :
-                    '    if (src.pViewports) {\n'
-                    '        pViewports = new VkViewport[src.viewportCount];\n'
-                    '        memcpy ((void *)pViewports, (void *)src.pViewports, sizeof(VkViewport)*src.viewportCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pViewports = NULL;\n'
-                    '    if (src.pScissors) {\n'
-                    '        pScissors = new VkRect2D[src.scissorCount];\n'
-                    '        memcpy ((void *)pScissors, (void *)src.pScissors, sizeof(VkRect2D)*src.scissorCount);\n'
-                    '    }\n'
-                    '    else\n'
-                    '        pScissors = NULL;\n',
-            }
-
-            custom_destruct_txt = {'VkShaderModuleCreateInfo' :
-                                   '    if (pCode)\n'
-                                   '        delete[] reinterpret_cast<const uint8_t *>(pCode);\n' }
-
-            for member in item.members:
-                m_type = member.type
-                if member.type in self.structNames:
-                    member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == member.type), None)
-                    if member_index is not None and self.NeedSafeStruct(self.structMembers[member_index]) == True:
-                        m_type = 'safe_%s' % member.type
-                if member.ispointer and 'safe_' not in m_type and self.TypeContainsObjectHandle(member.type, False) == False:
-                    # Ptr types w/o a safe_struct, for non-null case need to allocate new ptr and copy data in
-                    if m_type in ['void', 'char']:
-                        # For these exceptions just copy initial value over for now
-                        init_list += '\n    %s(in_struct->%s),' % (member.name, member.name)
-                        init_func_txt += '    %s = in_struct->%s;\n' % (member.name, member.name)
-                    else:
-                        default_init_list += '\n    %s(nullptr),' % (member.name)
-                        init_list += '\n    %s(nullptr),' % (member.name)
-                        init_func_txt += '    %s = nullptr;\n' % (member.name)
-                        if 'pNext' != member.name and 'void' not in m_type:
-                            if not member.isstaticarray and (member.len is None or '/' in member.len):
-                                construct_txt += '    if (in_struct->%s) {\n' % member.name
-                                construct_txt += '        %s = new %s(*in_struct->%s);\n' % (member.name, m_type, member.name)
-                                construct_txt += '    }\n'
-                                destruct_txt += '    if (%s)\n' % member.name
-                                destruct_txt += '        delete %s;\n' % member.name
-                            else:
-                                construct_txt += '    if (in_struct->%s) {\n' % member.name
-                                construct_txt += '        %s = new %s[in_struct->%s];\n' % (member.name, m_type, member.len)
-                                construct_txt += '        memcpy ((void *)%s, (void *)in_struct->%s, sizeof(%s)*in_struct->%s);\n' % (member.name, member.name, m_type, member.len)
-                                construct_txt += '    }\n'
-                                destruct_txt += '    if (%s)\n' % member.name
-                                destruct_txt += '        delete[] %s;\n' % member.name
-                elif member.isstaticarray or member.len is not None:
-                    if member.len is None:
-                        # Extract length of static array by grabbing val between []
-                        static_array_size = re.match(r"[^[]*\[([^]]*)\]", member.cdecl)
-                        construct_txt += '    for (uint32_t i=0; i<%s; ++i) {\n' % static_array_size.group(1)
-                        construct_txt += '        %s[i] = in_struct->%s[i];\n' % (member.name, member.name)
-                        construct_txt += '    }\n'
-                    else:
-                        # Init array ptr to NULL
-                        default_init_list += '\n    %s(nullptr),' % member.name
-                        init_list += '\n    %s(nullptr),' % member.name
-                        init_func_txt += '    %s = nullptr;\n' % member.name
-                        array_element = 'in_struct->%s[i]' % member.name
-                        if member.type in self.structNames:
-                            member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == member.type), None)
-                            if member_index is not None and self.NeedSafeStruct(self.structMembers[member_index]) == True:
-                                array_element = '%s(&in_struct->safe_%s[i])' % (member.type, member.name)
-                        construct_txt += '    if (%s && in_struct->%s) {\n' % (member.len, member.name)
-                        construct_txt += '        %s = new %s[%s];\n' % (member.name, m_type, member.len)
-                        destruct_txt += '    if (%s)\n' % member.name
-                        destruct_txt += '        delete[] %s;\n' % member.name
-                        construct_txt += '        for (uint32_t i=0; i<%s; ++i) {\n' % (member.len)
-                        if 'safe_' in m_type:
-                            construct_txt += '            %s[i].initialize(&in_struct->%s[i]);\n' % (member.name, member.name)
-                        else:
-                            construct_txt += '            %s[i] = %s;\n' % (member.name, array_element)
-                        construct_txt += '        }\n'
-                        construct_txt += '    }\n'
-                elif member.ispointer == True:
-                    construct_txt += '    if (in_struct->%s)\n' % member.name
-                    construct_txt += '        %s = new %s(in_struct->%s);\n' % (member.name, m_type, member.name)
-                    construct_txt += '    else\n'
-                    construct_txt += '        %s = NULL;\n' % member.name
-                    destruct_txt += '    if (%s)\n' % member.name
-                    destruct_txt += '        delete %s;\n' % member.name
-                elif 'safe_' in m_type:
-                    init_list += '\n    %s(&in_struct->%s),' % (member.name, member.name)
-                    init_func_txt += '    %s.initialize(&in_struct->%s);\n' % (member.name, member.name)
-                else:
-                    init_list += '\n    %s(in_struct->%s),' % (member.name, member.name)
-                    init_func_txt += '    %s = in_struct->%s;\n' % (member.name, member.name)
-            if '' != init_list:
-                init_list = init_list[:-1] # hack off final comma
-            if item.name in custom_construct_txt:
-                construct_txt = custom_construct_txt[item.name]
-            if item.name in custom_destruct_txt:
-                destruct_txt = custom_destruct_txt[item.name]
-            safe_struct_body.append("\n%s::%s(const %s* in_struct%s) :%s\n{\n%s}" % (ss_name, ss_name, item.name, self.custom_construct_params.get(item.name, ''), init_list, construct_txt))
-            if '' != default_init_list:
-                default_init_list = " :%s" % (default_init_list[:-1])
-            safe_struct_body.append("\n%s::%s()%s\n{}" % (ss_name, ss_name, default_init_list))
-            # Create slight variation of init and construct txt for copy constructor that takes a src object reference vs. struct ptr
-            copy_construct_init = init_func_txt.replace('in_struct->', 'src.')
-            copy_construct_txt = construct_txt.replace(' (in_struct->', ' (src.')     # Exclude 'if' blocks from next line
-            copy_construct_txt = copy_construct_txt.replace('(in_struct->', '(*src.') # Pass object to copy constructors
-            copy_construct_txt = copy_construct_txt.replace('in_struct->', 'src.')    # Modify remaining struct refs for src object
-            if item.name in custom_copy_txt:
-                copy_construct_txt = custom_copy_txt[item.name]
-            copy_assign_txt = '    if (&src == this) return *this;\n\n' + destruct_txt + '\n' + copy_construct_init + copy_construct_txt + '\n    return *this;'
-            safe_struct_body.append("\n%s::%s(const %s& src)\n{\n%s%s}" % (ss_name, ss_name, ss_name, copy_construct_init, copy_construct_txt)) # Copy constructor
-            safe_struct_body.append("\n%s& %s::operator=(const %s& src)\n{\n%s\n}" % (ss_name, ss_name, ss_name, copy_assign_txt)) # Copy assignment operator
-            safe_struct_body.append("\n%s::~%s()\n{\n%s}" % (ss_name, ss_name, destruct_txt))
-            safe_struct_body.append("\nvoid %s::initialize(const %s* in_struct%s)\n{\n%s%s}" % (ss_name, item.name, self.custom_construct_params.get(item.name, ''), init_func_txt, construct_txt))
-            # Copy initializer uses same txt as copy constructor but has a ptr and not a reference
-            init_copy = copy_construct_init.replace('src.', 'src->')
-            init_construct = copy_construct_txt.replace('src.', 'src->')
-            safe_struct_body.append("\nvoid %s::initialize(const %s* src)\n{\n%s%s}" % (ss_name, ss_name, init_copy, init_construct))
-            if item.ifdef_protect != None:
-                safe_struct_body.append("#endif // %s\n" % item.ifdef_protect)
-        return "\n".join(safe_struct_body)
-    #
-    # Generate the type map
-    def GenerateTypeMapHelperHeader(self):
-        prefix = 'Lvl'
-        fprefix = 'lvl_'
-        typemap = prefix + 'TypeMap'
-        idmap = prefix + 'STypeMap'
-        type_member = 'Type'
-        id_member = 'kSType'
-        id_decl = 'static const VkStructureType '
-        generic_header = prefix + 'GenericHeader'
-        generic_mod_header = prefix + 'GenericModHeader'
-        typename_func = fprefix + 'typename'
-        idname_func = fprefix + 'stype_name'
-        find_func = fprefix + 'find_in_chain'
-        find_mod_func = fprefix + 'find_mod_in_chain'
-        init_func = fprefix + 'init_struct'
-
-        explanatory_comment = '\n'.join((
-                '// These empty generic templates are specialized for each type with sType',
-                '// members and for each sType -- providing a two way map between structure',
-                '// types and sTypes'))
-
-        empty_typemap = 'template <typename T> struct ' + typemap + ' {};'
-        typemap_format  = 'template <> struct {template}<{typename}> {{\n'
-        typemap_format += '    {id_decl}{id_member} = {id_value};\n'
-        typemap_format += '}};\n'
-
-        empty_idmap = 'template <VkStructureType id> struct ' + idmap + ' {};'
-        idmap_format = ''.join((
-            'template <> struct {template}<{id_value}> {{\n',
-            '    typedef {typename} {typedef};\n',
-            '}};\n'))
-
-        # Define the utilities (here so any renaming stays consistent), if this grows large, refactor to a fixed .h file
-        utilities_format = '\n'.join((
-            '// Header "base class" for pNext chain traversal',
-            'struct {header} {{',
-            '   VkStructureType sType;',
-            '   const {header} *pNext;',
-            '}};',
-            'struct {mod_header} {{',
-            '   VkStructureType sType;',
-            '   {mod_header} *pNext;',
-            '}};',
-            '',
-            '// Find an entry of the given type in the pNext chain',
-            'template <typename T> const T *{find_func}(const void *next) {{',
-            '    const {header} *current = reinterpret_cast<const {header} *>(next);',
-            '    const T *found = nullptr;',
-            '    while (current) {{',
-            '        if ({type_map}<T>::{id_member} == current->sType) {{',
-            '            found = reinterpret_cast<const T*>(current);',
-            '            current = nullptr;',
-            '        }} else {{',
-            '            current = current->pNext;',
-            '        }}',
-            '    }}',
-            '    return found;',
-            '}}',
-            '// Find an entry of the given type in the pNext chain',
-            'template <typename T> T *{find_mod_func}(void *next) {{',
-            '    {mod_header} *current = reinterpret_cast<{mod_header} *>(next);',
-            '    T *found = nullptr;',
-            '    while (current) {{',
-            '        if ({type_map}<T>::{id_member} == current->sType) {{',
-            '            found = reinterpret_cast<T*>(current);',
-            '            current = nullptr;',
-            '        }} else {{',
-            '            current = current->pNext;',
-            '        }}',
-            '    }}',
-            '    return found;',
-            '}}',
-            '',
-            '// Init the header of an sType struct with pNext',
-            'template <typename T> T {init_func}(void *p_next) {{',
-            '    T out = {{}};',
-            '    out.sType = {type_map}<T>::kSType;',
-            '    out.pNext = p_next;',
-            '    return out;',
-            '}}',
-                        '',
-            '// Init the header of an sType struct',
-            'template <typename T> T {init_func}() {{',
-            '    T out = {{}};',
-            '    out.sType = {type_map}<T>::kSType;',
-            '    return out;',
-            '}}',
-
-            ''))
-
-        code = []
+/***************************************************************************
+ *
+ * Copyright (c) 2015-2017 The Khronos Group Inc.
+ * Copyright (c) 2015-2017 Valve Corporation
+ * Copyright (c) 2015-2017 LunarG, Inc.
+ * Copyright (c) 2015-2017 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Mark Lobodzinski <mark@lunarg.com>
+ * Author: Courtney Goeltzenleuchter <courtneygo@google.com>
+ * Author: Tobin Ehlis <tobine@google.com>
+ * Author: Chris Forbes <chrisforbes@google.com>
+ * Author: John Zulauf<jzulauf@lunarg.com>
+ *
+ ****************************************************************************/
+''')
 
         # Generate header
-        code.append('\n'.join((
-            '#pragma once',
-            '#include <vulkan/vulkan.h>\n',
-            explanatory_comment, '',
-            empty_idmap,
-            empty_typemap, '')))
+        out.append('''
+#pragma once
+#include <vulkan/vulkan.h>
+
+// These empty generic templates are specialized for each type with sType
+// members and for each sType -- providing a two way map between structure
+// types and sTypes
+
+template <VkStructureType id> struct LvlSTypeMap {};
+template <typename T> struct LvlTypeMap {};
+
+''')
 
         # Generate the specializations for each type and stype
-        for item in self.structMembers:
-            typename = item.name
-            info = self.structTypes.get(typename)
-            if not info:
+        for struct in self.vk.structs.values():
+            if struct.sType is None:
                 continue
 
-            if item.ifdef_protect != None:
-                code.append('#ifdef %s' % item.ifdef_protect)
+            if struct.protect is not None:
+                out.append(f'#ifdef {struct.protect}\n')
 
-            code.append('// Map type {} to id {}'.format(typename, info.value))
-            code.append(typemap_format.format(template=typemap, typename=typename, id_value=info.value,
-                id_decl=id_decl, id_member=id_member))
-            code.append(idmap_format.format(template=idmap, typename=typename, id_value=info.value, typedef=type_member))
+            out.append(f'// Map type {struct.name} to id {struct.sType}\n')
+            out.append(f'template <> struct LvlTypeMap<{struct.name}> {{\n')
+            out.append(f'    static const VkStructureType kSType = {struct.sType};\n')
+            out.append('};\n\n')
 
-            if item.ifdef_protect != None:
-                code.append('#endif // %s' % item.ifdef_protect)
 
-        # Generate utilities for all types
-        code.append('\n'.join((
-            utilities_format.format(id_member=id_member, id_map=idmap, type_map=typemap,
-                type_member=type_member, header=generic_header, mod_header=generic_mod_header,
-                typename_func=typename_func, idname_func=idname_func, find_func=find_func,
-                find_mod_func=find_mod_func, init_func=init_func), ''
-            )))
+            out.append(f'template <> struct LvlSTypeMap<{struct.sType}> {{\n')
+            out.append(f'    typedef {struct.name} Type;\n')
+            out.append('};\n\n')
 
-        return "\n".join(code)
+            if struct.protect is not None:
+                out.append(f'#endif // {struct.protect}\n')
 
-    #
-    # Create a helper file and return it as a string
-    def OutputDestFile(self):
-        if self.helper_file_type == 'enum_string_header':
-            return self.GenerateEnumStringHelperHeader()
-        elif self.helper_file_type == 'safe_struct_header':
-            return self.GenerateSafeStructHelperHeader()
-        elif self.helper_file_type == 'safe_struct_source':
-            return self.GenerateSafeStructHelperSource()
-        elif self.helper_file_type == 'object_types_header':
-            return self.GenerateObjectTypesHelperHeader()
-        elif self.helper_file_type == 'extension_helper_header':
-            return self.GenerateExtensionHelperHeader()
-        elif self.helper_file_type == 'typemap_helper_header':
-            return self.GenerateTypeMapHelperHeader()
-        else:
-            return 'Bad Helper File Generator Option %s' % self.helper_file_type
+ # Define the utilities (here so any renaming stays consistent), if this grows large, refactor to a fixed .h file
+
+        out.append('''// Header "base class" for pNext chain traversal
+struct LvlGenericHeader {
+   VkStructureType sType;
+   const LvlGenericHeader *pNext;
+};
+struct LvlGenericModHeader {
+   VkStructureType sType;
+   LvlGenericModHeader *pNext;
+};
+
+// Find an entry of the given type in the pNext chain
+template <typename T> const T *lvl_find_in_chain(const void *next) {
+    const LvlGenericHeader *current = reinterpret_cast<const LvlGenericHeader *>(next);
+    const T *found = nullptr;
+    while (current) {
+        if (LvlTypeMap<T>::kSType == current->sType) {
+            found = reinterpret_cast<const T*>(current);
+            current = nullptr;
+        } else {
+            current = current->pNext;
+        }
+    }
+    return found;
+}
+// Find an entry of the given type in the pNext chain
+template <typename T> T *lvl_find_mod_in_chain(void *next) {
+    LvlGenericModHeader *current = reinterpret_cast<LvlGenericModHeader *>(next);
+    T *found = nullptr;
+    while (current) {
+        if (LvlTypeMap<T>::kSType == current->sType) {
+            found = reinterpret_cast<T*>(current);
+            current = nullptr;
+        } else {
+            current = current->pNext;
+        }
+    }
+    return found;
+}
+
+// Init the header of an sType struct with pNext
+template <typename T> T lvl_init_struct(void *p_next) {
+    T out = {};
+    out.sType = LvlTypeMap<T>::kSType;
+    out.pNext = p_next;
+    return out;
+}
+
+// Init the header of an sType struct
+template <typename T> T lvl_init_struct() {
+    T out = {};
+    out.sType = LvlTypeMap<T>::kSType;
+    return out;
+}
+''')
+
+        self.write(''.join(out))
+
diff --git a/scripts/generators/vulkaninfo_generator.py b/scripts/generators/vulkaninfo_generator.py
index 20e408e..6843e7e 100644
--- a/scripts/generators/vulkaninfo_generator.py
+++ b/scripts/generators/vulkaninfo_generator.py
@@ -19,16 +19,9 @@
 #
 # Author: Charles Giessen <charles@lunarg.com>
 
-import re
-import os
-import sys
-import copy
-import operator
+from base_generator import BaseGenerator
+
 from collections import OrderedDict
-import generator as gen
-from common_codegen import GetFeatureProtect
-from generator import GeneratorOptions, OutputGenerator
-import xml.etree.ElementTree as etree
 
 LICENSE_HEADER = '''
 /*
@@ -117,28 +110,24 @@
     ('phys_device_props2',
         {'extends': 'VkPhysicalDeviceProperties2',
          'type': EXTENSION_TYPE_BOTH,
-         'holder_type': 'VkPhysicalDeviceProperties2',
          'print_iterator': True,
          'can_show_promoted_structs': True,
          'ignore_vendor_exclusion': False}),
     ('phys_device_mem_props2',
         {'extends': 'VkPhysicalDeviceMemoryProperties2',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type':'VkPhysicalDeviceMemoryProperties2',
          'print_iterator': False,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': False}),
     ('phys_device_features2',
-        {'extends': 'VkPhysicalDeviceFeatures2,VkDeviceCreateInfo',
+        {'extends': 'VkPhysicalDeviceFeatures2',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type': 'VkPhysicalDeviceFeatures2',
          'print_iterator': True,
          'can_show_promoted_structs': True,
          'ignore_vendor_exclusion': False}),
     ('surface_capabilities2',
         {'extends': 'VkSurfaceCapabilities2KHR',
          'type': EXTENSION_TYPE_BOTH,
-         'holder_type': 'VkSurfaceCapabilities2KHR',
          'print_iterator': True,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': False,
@@ -146,421 +135,221 @@
     ('format_properties2',
         {'extends': 'VkFormatProperties2',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type':'VkFormatProperties2',
          'print_iterator': True,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': False}),
     ('queue_properties2',
         {'extends': 'VkQueueFamilyProperties2',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type': 'VkQueueFamilyProperties2',
          'print_iterator': True,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': False}),
     ('video_profile_info',
         {'extends': 'VkVideoProfileInfoKHR',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type': 'VkVideoProfileInfoKHR',
          'print_iterator': True,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': True}),
     ('video_capabilities',
         {'extends': 'VkVideoCapabilitiesKHR',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type': 'VkVideoCapabilitiesKHR',
          'print_iterator': True,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': True,}),
     ('video_format_properties',
         {'extends': 'VkVideoFormatPropertiesKHR',
          'type': EXTENSION_TYPE_DEVICE,
-         'holder_type': 'VkVideoFormatPropertiesKHR',
          'print_iterator': True,
          'can_show_promoted_structs': False,
          'ignore_vendor_exclusion': True})
                                    ))
-class VulkanInfoGeneratorOptions(GeneratorOptions):
-    def __init__(self,
-                 conventions=None,
-                 input=None,
-                 filename=None,
-                 directory='.',
-                 genpath = None,
-                 apiname=None,
-                 profile=None,
-                 versions='.*',
-                 emitversions='.*',
-                 defaultExtensions=None,
-                 addExtensions=None,
-                 removeExtensions=None,
-                 emitExtensions=None,
-                 sortProcedure=None,
-                 prefixText='',
-                 genFuncPointers=True,
-                 protectFile=True,
-                 protectFeature=True,
-                 protectProto=None,
-                 protectProtoStr=None,
-                 apicall='',
-                 apientry='',
-                 apientryp='',
-                 indentFuncProto=True,
-                 indentFuncPointer=False,
-                 alignFuncParam=0,
-                 expandEnumerants=True,
-                 registryFile='vk.xml'
-                 ):
-        GeneratorOptions.__init__(self,
-                 conventions = conventions,
-                 filename = filename,
-                 directory = directory,
-                 genpath = genpath,
-                 apiname = apiname,
-                 profile = profile,
-                 versions = versions,
-                 emitversions = emitversions,
-                 defaultExtensions = defaultExtensions,
-                 addExtensions = addExtensions,
-                 removeExtensions = removeExtensions,
-                 emitExtensions = emitExtensions,
-                 sortProcedure = sortProcedure)
-        self.input = input
-        self.prefixText = prefixText
-        self.genFuncPointers = genFuncPointers
-        self.protectFile = protectFile
-        self.protectFeature = protectFeature
-        self.protectProto = protectProto
-        self.protectProtoStr = protectProtoStr
-        self.apicall = apicall
-        self.apientry = apientry
-        self.apientryp = apientryp
-        self.indentFuncProto = indentFuncProto
-        self.indentFuncPointer = indentFuncPointer
-        self.alignFuncParam = alignFuncParam
-        self.registryFile = registryFile
-
-# VulkanInfoGenerator - subclass of OutputGenerator.
-# Generates a vulkan info output helper function
-
-
-class VulkanInfoGenerator(OutputGenerator):
-
-    def __init__(self,
-                 errFile=sys.stderr,
-                 warnFile=sys.stderr,
-                 diagFile=sys.stdout):
-        OutputGenerator.__init__(self, errFile, warnFile, diagFile)
-
-        self.constants = OrderedDict()
-
-        self.types_to_gen = set()
-
-        self.extension_sets = OrderedDict()
-        for ext_cat in EXTENSION_CATEGORIES.keys():
-            self.extension_sets[ext_cat] = set()
-
-        self.enums = []
-        self.flags = []
-        self.bitmasks = []
+class VulkanInfoGenerator(BaseGenerator):
+    def __init__(self):
+        BaseGenerator.__init__(self)
         self.format_ranges = []
-        self.all_structures = []
-        self.aliases = OrderedDict()
 
-        self.extFuncs = OrderedDict()
-        self.extTypes = OrderedDict()
-
-        self.vendor_abbreviations = []
-        self.vulkan_versions = []
-
-    def beginFile(self, genOpts):
-        gen.OutputGenerator.beginFile(self, genOpts)
-
-        for node in self.registry.reg.findall('enums'):
-            if node.get('name') == 'API Constants':
-                for item in node.findall('enum'):
-                    self.constants[item.get('name')] = item.get('value')
-
-        for node in self.registry.reg.find('extensions').findall('extension'):
-            ext = VulkanExtension(node)
-            for item in ext.vktypes:
-                if item not in self.extTypes:
-                    self.extTypes[item] = []
-                self.extTypes[item].append(ext)
-            for item in ext.vkfuncs:
-                self.extFuncs[item] = ext
-
-        # need list of venders to blacklist vendor extensions
-        for tag in self.registry.reg.find('tags'):
-            if tag.get('name') not in ['KHR', 'EXT']:
-                self.vendor_abbreviations.append('_' + tag.get('name'))
-
-        for ver in self.registry.reg.findall('feature'):
-            self.vulkan_versions.append(VulkanVersion(ver))
-
-    def endFile(self):
+    def generate(self):
         self.findFormatRanges()
 
         # gather the types that are needed to generate
         types_to_gen = set()
-        for s in ENUMS_TO_GEN:
-            types_to_gen.add(s)
+        types_to_gen.update(ENUMS_TO_GEN)
+        types_to_gen.update(FLAGS_TO_GEN)
+        types_to_gen.update(STRUCTURES_TO_GEN)
 
-        for f in FLAGS_TO_GEN:
-            types_to_gen.add(f)
+        extension_types = {}
+        for key, ext_info in EXTENSION_CATEGORIES.items():
+            extension_types[key] = []
 
-        types_to_gen.update(
-            GatherTypesToGen(self.all_structures, STRUCTURES_TO_GEN))
-        for key, info in EXTENSION_CATEGORIES.items():
-            types_to_gen.update(
-                GatherTypesToGen(self.all_structures, self.extension_sets[key], info.get('exclude')))
+            for extended_struct in self.vk.structs[ext_info.get('extends')].extendedBy:
+                if ext_info.get('exclude') is not None and extended_struct in ext_info.get('exclude'):
+                    continue
+                elif ext_info.get('ignore_vendor_exclusion'):
+                    extension_types[key].append(extended_struct)
+                    continue
+                vendor_tags = []
+                for extension in self.vk.structs[extended_struct].extensions:
+                    vendor_tags.append(extension.split('_')[1])
+                if len(vendor_tags) == 0 or 'KHR' in vendor_tags or 'EXT' in vendor_tags:
+                    extension_types[key].append(extended_struct)
+            extension_types[key] = sorted(extension_types[key])
+            types_to_gen.update(extension_types[key])
+
+        # find all the types that need
+        types_to_gen.update(self.findAllTypesToGen(types_to_gen))
+
         types_to_gen = sorted(types_to_gen)
 
-        names_of_structures_to_gen = set()
-        for s in self.all_structures:
-            if s.name in types_to_gen:
-                names_of_structures_to_gen.add(s.name)
-        names_of_structures_to_gen = sorted(names_of_structures_to_gen)
+        comparison_types_to_gen = set()
+        comparison_types_to_gen.update(STRUCT_COMPARISONS_TO_GEN)
+        comparison_types_to_gen.update(self.findAllTypesToGen(comparison_types_to_gen))
+        comparison_types_to_gen = sorted(comparison_types_to_gen)
 
-        structs_to_comp = set()
-        for s in STRUCT_COMPARISONS_TO_GEN:
-            structs_to_comp.add(s)
-        structs_to_comp.update(
-            GatherTypesToGen(self.all_structures, STRUCT_COMPARISONS_TO_GEN))
-
-        for key, value in self.extension_sets.items():
-            self.extension_sets[key] = sorted(value)
-
-        self.enums = sorted(self.enums, key=operator.attrgetter('name'))
-        self.flags = sorted(self.flags, key=operator.attrgetter('name'))
-        self.bitmasks = sorted(self.bitmasks, key=operator.attrgetter('name'))
-        self.all_structures = sorted(self.all_structures, key=operator.attrgetter('name'))
 
         # print the types gathered
-        out = ''
-        out += LICENSE_HEADER + '\n'
-        out += '#include "vulkaninfo.h"\n'
-        out += '#include "outputprinter.h"\n'
-        out += CUSTOM_FORMATTERS
+        out = []
+        out.append(LICENSE_HEADER + '\n')
+        out.append('#include "vulkaninfo.h"\n')
+        out.append('#include "outputprinter.h"\n')
+        out.append(CUSTOM_FORMATTERS)
 
-        out += self.genVideoEnums()
+        out.extend(self.genVideoEnums())
 
-        for enum in (e for e in self.enums if e.name in types_to_gen):
-            out += PrintEnumToString(enum, self)
-            out += PrintEnum(enum, self)
+        for enum in (e for e in types_to_gen if e in self.vk.enums):
+            out.extend(self.PrintEnumToString(self.vk.enums[enum]))
+            out.extend(self.PrintEnum(self.vk.enums[enum]))
 
-        for flag in self.flags:
-            if flag.name in types_to_gen or flag.enum in types_to_gen:
-                for bitmask in (b for b in self.bitmasks if b.name == flag.enum):
-                    out += PrintBitMask(bitmask, flag.name, self)
+        # Need to go through all flags to find if they or their associated bitmask needs printing
+        # This is because both bitmask and flag types are generated in PrintBitMask
+        for name in (x for x in sorted(self.vk.flags.keys()) if x in types_to_gen or self.vk.flags[x].bitmaskName in types_to_gen):
+            bitmask = self.vk.bitmasks[self.vk.flags[name].bitmaskName]
 
-            if flag.name in FLAG_STRINGS_TO_GEN:
-                for bitmask in (b for b in self.bitmasks if b.name == flag.enum):
-                    out += PrintBitMaskToString(bitmask, flag.name, self)
+            out.extend(self.PrintBitMask(bitmask, bitmask.flagName))
 
-        for s in (x for x in self.all_structures if x.name in types_to_gen and x.name not in STRUCT_BLACKLIST):
-            out += PrintStructure(s)
+            if bitmask.flagName in FLAG_STRINGS_TO_GEN:
+                out.extend(self.PrintBitMaskToString(bitmask, bitmask.flagName))
+
+        for s in (x for x in types_to_gen if x in self.vk.structs and x not in STRUCT_BLACKLIST):
+            out.extend(self.PrintStructure(self.vk.structs[s]))
 
         for key, value in EXTENSION_CATEGORIES.items():
-            out += PrintChainStruct(key, self.extension_sets[key], self.all_structures, value, self.extTypes, self.aliases, self.vulkan_versions)
+            out.extend(self.PrintChainStruct(key, extension_types[key], value))
 
-        for s in (x for x in self.all_structures if x.name in structs_to_comp):
-            out += PrintStructComparisonForwardDecl(s)
-        for s in (x for x in self.all_structures if x.name in structs_to_comp):
-            out += PrintStructComparison(s)
-        for s in (x for x in self.all_structures if x.name in STRUCT_SHORT_VERSIONS_TO_GEN):
-            out += PrintStructShort(s)
+        for s in (x for x in comparison_types_to_gen if x in self.vk.structs):
+            out.extend(self.PrintStructComparisonForwardDecl(self.vk.structs[s]))
+        for s in (x for x in comparison_types_to_gen if x in self.vk.structs):
+            out.extend(self.PrintStructComparison(self.vk.structs[s]))
+        for s in (x for x in types_to_gen if x in self.vk.structs and x in STRUCT_SHORT_VERSIONS_TO_GEN):
+            out.extend(self.PrintStructShort(self.vk.structs[s]))
 
-        out += 'auto format_ranges = std::array{\n'
+        out.append('auto format_ranges = std::array{\n')
         for f in self.format_ranges:
-            out += f'    FormatRange{{{f.minimum_instance_version}, {f.extension_name if f.extension_name is not None else "nullptr"}, '
-            out += f'static_cast<VkFormat>({f.first_format}), static_cast<VkFormat>({f.last_format})}},\n'
-        out += '};\n'
+            out.append(f'    FormatRange{{{f.minimum_instance_version}, {self.vk.extensions[f.extensions[0]].nameString if len(f.extensions) > 0 else "nullptr"}, ')
+            out.append(f'static_cast<VkFormat>({f.first_format}), static_cast<VkFormat>({f.last_format})}},\n')
+        out.append('};\n')
 
-        out += self.genVideoProfileUtils()
+        out.extend(self.genVideoProfileUtils())
 
-        gen.write(out, file=self.outFile)
+        self.write(''.join(out))
 
-        gen.OutputGenerator.endFile(self)
 
     def genVideoEnums(self):
-        # We need to add dumping utilities for enums declared in the video std headers and directly
-        # present in the Vulkan API structures. In order to do that we really have no choice but
-        # to parse the video.xml and generate the utilities based on the enum types defined there
-        videoRegistryFile = self.genOpts.registryFile.replace('vk.xml', 'video.xml')
-        if os.path.isfile(videoRegistryFile):
-            videoxml = etree.parse(videoRegistryFile)
-        else:
-            assert False, "Could not find video.xml to generate utilities for video enum types"
-        out = ''
-        for enum in videoxml.findall("./enums[@name]"):
-            enumname = enum.get('name')
-            out += f'std::string {enumname}String({enumname} value) {{\n'
-            out += '    switch (value) {\n'
-            for option in enum.findall("./enum[@name]"):
-                name = option.get('name')
+        out = []
+        for enum in self.vk.videoStd.enums.values():
+            out.append(f'std::string {enum.name}String({enum.name} value) {{\n')
+            out.append('    switch (value) {\n')
+            for field in enum.fields:
                 # Ignore aliases
-                if option.get('value') is not None:
-                    out += f'        case {name}: return "{name}";\n'
-            out += f'        default: return std::string("UNKNOWN_{enumname}_value") + std::to_string(value);\n'
-            out += '    }\n}\n'
-            out += f'void Dump{enumname}(Printer &p, std::string name, {enumname} value) {{\n'
-            out += f'    p.PrintKeyString(name, {enumname}String(value));\n}}\n'
+                if field.value is not None:
+                    out.append(f'        case {field.name}: return "{field.name}";\n')
+            out.append(f'        default: return std::string("UNKNOWN_{enum.name}_value") + std::to_string(value);\n')
+            out.append('    }\n}\n')
+            out.append(f'void Dump{enum.name}(Printer &p, std::string name, {enum.name} value) {{\n')
+            out.append(f'    p.PrintKeyString(name, {enum.name}String(value));\n}}\n')
         return out
 
-    def genVideoProfileUtils(self):
-        out = ''
 
-        # Parse video codec information from the XML
-        videoCodecs = OrderedDict()
-        xmlVideoCodecs = self.registry.reg.find("./videocodecs")
-        for xmlVideoCodec in xmlVideoCodecs.findall("./videocodec"):
-            name = xmlVideoCodec.get('name')
-            extend = xmlVideoCodec.get('extend')
-            value = xmlVideoCodec.get('value')
-            if value is None:
-                # Video codec category
-                videoCodecs[name] = VulkanVideoCodec(name)
-            else:
-                # Specific video codec
-                videoCodecs[name] = VulkanVideoCodec(name, videoCodecs[extend], value)
-            videoCodec = videoCodecs[name]
+    # Utility to get the extension / version precondition of a list of type names
+    def GetTypesPrecondition(self, typelist, indent):
+        indent = ' ' * indent
+        out = []
+        extEnables = []
+        for typename in typelist:
+            extEnables.extend(self.vk.structs[typename].extensions)
 
-            for xmlVideoProfiles in xmlVideoCodec.findall("./videoprofiles"):
-                videoProfileStructName = xmlVideoProfiles.get('struct')
-                videoCodec.profileStructs[videoProfileStructName] = VulkanVideoProfileStruct(videoProfileStructName)
-                videoProfileStruct = videoCodec.profileStructs[videoProfileStructName]
+        version = None
+        for typename in typelist:
+            for v in self.vk.versions.values():
+                if typename in v.name:
+                    if version is not None and (v.major > version.major or (v.major == version.major and v.minor > version.minor)):
+                        version = v
 
-                for xmlVideoProfileMember in xmlVideoProfiles.findall("./videoprofilemember"):
-                    memberName = xmlVideoProfileMember.get('name')
-                    videoProfileStruct.members[memberName] = VulkanVideoProfileStructMember(memberName)
-                    videoProfileStructMember = videoProfileStruct.members[memberName]
 
-                    for xmlVideoProfile in xmlVideoProfileMember.findall("./videoprofile"):
-                        videoProfileStructMember.values[xmlVideoProfile.get('value')] = xmlVideoProfile.get('name')
-
-            for xmlVideoCapabilities in xmlVideoCodec.findall("./videocapabilities"):
-                capabilityStructName = xmlVideoCapabilities.get('struct')
-                videoCodec.capabilities[capabilityStructName] = capabilityStructName
-
-            for xmlVideoFormat in xmlVideoCodec.findall("./videoformat"):
-                videoFormatName = xmlVideoFormat.get('name')
-                videoFormatExtend = xmlVideoFormat.get('extend')
-                if videoFormatName is not None:
-                    # This is a new video format category
-                    videoFormatUsage = xmlVideoFormat.get('usage')
-                    videoCodec.formats[videoFormatName] = VulkanVideoFormat(videoFormatName, videoFormatUsage)
-                    videoFormat = videoCodec.formats[videoFormatName]
-                elif videoFormatExtend is not None:
-                    # This is an extension to an already defined video format category
-                    if videoFormatExtend in videoCodec.formats:
-                        videoFormat = videoCodec.formats[videoFormatExtend]
-                    else:
-                        assert False, f"Video format category '{videoFormatExtend}' not found but it is attempted to be extended"
-                else:
-                    assert False, "'name' or 'extend' is attribute is required for 'videoformat' element"
-
-                for xmlVideoFormatProperties in xmlVideoFormat.findall("./videoformatproperties"):
-                    propertiesStructName = xmlVideoFormatProperties.get('struct')
-                    videoFormat.properties[propertiesStructName] = propertiesStructName
-
-                for xmlVideoFormatRequiredCap in xmlVideoFormat.findall("./videorequirecapabilities"):
-                    requiredCapStruct = xmlVideoFormatRequiredCap.get('struct')
-                    requiredCapMember = xmlVideoFormatRequiredCap.get('member')
-                    requiredCapValue = xmlVideoFormatRequiredCap.get('value')
-                    videoFormat.requiredCaps.append(VulkanVideoRequiredCapabilities(requiredCapStruct, requiredCapMember, requiredCapValue))
-
-        # Collect flag types in a set because we will need to look this up
-        flagTypes = set()
-        for flagType in self.flags:
-            flagTypes.add(flagType.name)
-
-        # Utility to get structure definition from structure name
-        def GetStructDef(name):
-            for s in self.all_structures:
-                if s.name == name:
-                    return s
-            assert False, f"Definition for structure '{name}' is missing"
-
-        # Utility to get the extension / version precondition of a list of type names
-        def GetTypesPrecondition(typelist, indent):
-            indent = ' ' * indent
-            out = ''
-            extEnables = {}
-            for typename in typelist:
-                for k, elem in self.extTypes.items():
-                    if k == typename or (typename in self.aliases.keys() and k in self.aliases[typename]):
-                        for e in elem:
-                            extEnables[e.extNameStr] = e.type
-
-            version = None
-            for typename in typelist:
-                for v in self.vulkan_versions:
-                    if typename in v.names:
-                        if version is not None and (v.major > version.major or (v.major == version.major and v.minor > version.minor)):
-                            version = v
-
-            has_version = version is not None
-            has_extNameStr = len(extEnables) > 0 or typename in self.aliases.keys()
-            if has_version or has_extNameStr:
-                out += f'{indent}if ('
-                has_printed_condition = False
-                if has_extNameStr:
-                    for key, value in extEnables.items():
-                        if has_printed_condition:
-                            out += f'\n{indent} || '
-                        else:
-                            has_printed_condition = True
-                            if has_version:
-                                out += '('
-                        if value == EXTENSION_TYPE_DEVICE:
-                            out += f'gpu.CheckPhysicalDeviceExtensionIncluded({key})'
-                        else:
-                            assert False, 'Should never get here'
-                if has_version:
+        has_version = version is not None
+        has_extNameStr = len(extEnables) > 0
+        if has_version or has_extNameStr:
+            out.append(f'{indent}if (')
+            has_printed_condition = False
+            if has_extNameStr:
+                for ext in extEnables:
                     if has_printed_condition:
-                        out += f'\n{indent} || (gpu.api_version >= {version.constant})'
+                        out.append(f'\n{indent} || ')
                     else:
-                        out += f'gpu.api_version >= {version.constant}'
-                out += ') {\n'
-            else:
-                out = f'{indent}{{\n'
-            return out
+                        has_printed_condition = True
+                        if has_version:
+                            out.append('(')
+                    if self.vk.extensions[ext].device:
+                        out.append(f'gpu.CheckPhysicalDeviceExtensionIncluded({self.vk.extensions[ext].nameString})')
+                    else:
+                        assert False, 'Should never get here'
+            if has_version:
+                if has_printed_condition:
+                    out.append(f'\n{indent} || (gpu.api_version >= {version.nameApi})')
+                else:
+                    out.append(f'gpu.api_version >= {version.nameApi}')
+            out.append(') {\n')
+        else:
+            out = f'{indent}{{\n'
+        return out
 
-        # Utility to construct a capability prerequisite condition evaluation expression
-        def GetRequiredCapsCondition(structName, memberName, memberRef, value):
-            condition = ''
-            requiredCapStructDef = GetStructDef(structName)
-            for member in requiredCapStructDef.members:
-                if member.name == memberName:
-                    if member.typeID in flagTypes:
-                        # Check that the flags contain all the required values
-                        def genExpressionFromValue(value):
-                            return value if value == "" else f"({memberRef} & {value}) != 0"
+    # Utility to construct a capability prerequisite condition evaluation expression
+    def GetRequiredCapsCondition(self, structName, memberName, memberRef, value):
+        condition = ''
+        requiredCapStructDef = self.vk.structs[structName]
+        for member in requiredCapStructDef.members:
+            if member.name == memberName:
+                if member.type in self.vk.flags:
+                    # Check that the flags contain all the required values
+                    def genExpressionFromValue(value):
+                        return value if value == "" else f"({memberRef} & {value}) != 0"
 
-                        for char in condition:
-                            if char in ['(', ')', '+', ',']:
-                                condition += genExpressionFromValue(value)
-                                value = ""
-                                if char == '+':
-                                    # '+' means AND
-                                    condition += ' && '
-                                elif char == ',':
-                                    # ',' means OR
-                                    condition += ' || '
-                                else:
-                                    condition += char
+                    for char in condition:
+                        if char in ['(', ')', '+', ',']:
+                            condition += genExpressionFromValue(value)
+                            value = ""
+                            if char == '+':
+                                # '+' means AND
+                                condition += ' && '
+                            elif char == ',':
+                                # ',' means OR
+                                condition += ' || '
                             else:
-                                value += char
-                        condition += genExpressionFromValue(value)
-                    else:
-                        condition = f'{memberRef} == {value}'
-            if condition == '':
-                return 'true'
-            else:
-                return f'({condition})'
+                                condition += char
+                        else:
+                            value += char
+                    condition += genExpressionFromValue(value)
+                else:
+                    condition = f'{memberRef} == {value}'
+        if condition == '':
+            return 'true'
+        else:
+            return f'({condition})'
+
+    def genVideoProfileUtils(self):
+        out = []
 
         # Generate video format properties comparator
-        out += '''
+        out.append('''
 bool is_video_format_same(const VkVideoFormatPropertiesKHR &format_a, const VkVideoFormatPropertiesKHR &format_b) {
     auto a = reinterpret_cast<const VkBaseInStructure*>(&format_a);
     auto b = reinterpret_cast<const VkBaseInStructure*>(&format_b);
@@ -570,19 +359,19 @@
             // Structure type mismatch (extension structures are expected to be chained in the same order)
             same = false;
         } else {
-            switch (a->sType) {'''
+            switch (a->sType) {''')
 
         if 'VkVideoFormatPropertiesKHR' in self.registry.validextensionstructs:
             for extstruct in ['VkVideoFormatPropertiesKHR'] + self.registry.validextensionstructs['VkVideoFormatPropertiesKHR']:
-                extstructDef = GetStructDef(extstruct)
-                out += f'''
-                case {extstructDef.sTypeName}:
+                extstructDef = self.vk.structs[extstruct]
+                out.append(f'''
+                case {extstructDef.sType}:
                     same = same && memcmp(reinterpret_cast<const char*>(a) + sizeof(VkBaseInStructure),
                                           reinterpret_cast<const char*>(b) + sizeof(VkBaseInStructure),
                                           sizeof({extstruct}) - sizeof(VkBaseInStructure)) == 0;
-                    break;'''
+                    break;''')
 
-        out += '''
+        out.append('''
                 default:
                     // Unexpected structure type
                     same = false;
@@ -594,10 +383,10 @@
     }
     return same;
 }
-'''
+''')
 
         # Generate video profile info capture utilities
-        out += '''
+        out.append('''
 std::vector<std::unique_ptr<AppVideoProfile>> enumerate_supported_video_profiles(AppGpu &gpu) {
     std::vector<std::unique_ptr<AppVideoProfile>> result{};
 
@@ -665,19 +454,19 @@
                 result.push_back(std::move(profile));
             }
         };
-'''
+''')
 
         # Generate individual video profiles from the video codec metadata
-        for videoCodec in videoCodecs.values():
+        for videoCodec in self.vk.videoCodecs.values():
             # Ignore video codec categories
             if videoCodec.value is None:
                 continue
 
-            out += '\n'
-            out += GetTypesPrecondition(videoCodec.profileStructs, 4)
-            out += f'{" " * 8}const std::string codec_name = "{videoCodec.name}";\n'
+            out.append('\n')
+            out.extend(self.GetTypesPrecondition(videoCodec.profiles.keys(), 4))
+            out.append(f'{" " * 8}const std::string codec_name = "{videoCodec.name}";\n')
 
-            out += '''
+            out.append('''
         for (auto chroma_subsampling : chroma_subsampling_list) {
             for (auto luma_bit_depth : bit_depth_list) {
                 for (auto chroma_bit_depth : bit_depth_list) {
@@ -687,107 +476,107 @@
                     }
 
                     std::string profile_base_name = codec_name + base_format(chroma_subsampling, luma_bit_depth, chroma_bit_depth);
-'''
+''')
 
             # Setup video profile info
-            out += f'{" " * 20}VkVideoProfileInfoKHR profile_info{{\n'
-            out += f'{" " * 20}    VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,\n'
-            out += f'{" " * 20}    nullptr,\n'
-            out += f'{" " * 20}    {videoCodec.value},\n'
-            out += f'{" " * 20}    chroma_subsampling.value,\n'
-            out += f'{" " * 20}    luma_bit_depth.value,\n'
-            out += f'{" " * 20}    chroma_bit_depth.value\n'
-            out += f'{" " * 20}}};\n\n'
+            out.append(f'{" " * 20}VkVideoProfileInfoKHR profile_info{{\n')
+            out.append(f'{" " * 20}    VK_STRUCTURE_TYPE_VIDEO_PROFILE_INFO_KHR,\n')
+            out.append(f'{" " * 20}    nullptr,\n')
+            out.append(f'{" " * 20}    {videoCodec.value},\n')
+            out.append(f'{" " * 20}    chroma_subsampling.value,\n')
+            out.append(f'{" " * 20}    luma_bit_depth.value,\n')
+            out.append(f'{" " * 20}    chroma_bit_depth.value\n')
+            out.append(f'{" " * 20}}};\n\n')
 
             # Setup video profile info chain creation callback
-            out += f'{" " * 20}auto create_profile_info_chain = [&](const void **ppnext) -> std::unique_ptr<video_profile_info_chain> {{\n'
-            out += f'{" " * 20}    auto profile_info_chain = std::make_unique<video_profile_info_chain>();\n'
-            for profileStruct in videoCodec.profileStructs:
-                structDef = GetStructDef(profileStruct)
-                out += AddGuardHeader(structDef)
-                out += f'{" " * 24}if (profile_info_chain != nullptr) {{\n'
-                out += f'{" " * 28}profile_info_chain->{profileStruct[2:]}.sType = {structDef.sTypeName};\n'
-                out += f'{" " * 28}profile_info_chain->{profileStruct[2:]}.pNext = nullptr;\n'
-                out += f'{" " * 28}*ppnext = &profile_info_chain->{profileStruct[2:]};\n'
-                out += f'{" " * 28}ppnext = &profile_info_chain->{profileStruct[2:]}.pNext;\n'
-                out += f'{" " * 24}}}\n'
-                if structDef.guard:
-                    out += f'#else\n{" " * 20}profile_info_chain = nullptr;\n'
-                out += AddGuardFooter(structDef)
-            out += f'{" " * 20}    return profile_info_chain;\n'
-            out += f'{" " * 20}}};\n\n'
+            out.append(f'{" " * 20}auto create_profile_info_chain = [&](const void **ppnext) -> std::unique_ptr<video_profile_info_chain> {{\n')
+            out.append(f'{" " * 20}    auto profile_info_chain = std::make_unique<video_profile_info_chain>();\n')
+            for profileStruct in videoCodec.profiles:
+                structDef = self.vk.structs[profileStruct]
+                out.append(self.AddGuardHeader(structDef))
+                out.append(f'{" " * 24}if (profile_info_chain != nullptr) {{\n')
+                out.append(f'{" " * 28}profile_info_chain->{profileStruct[2:]}.sType = {structDef.sType};\n')
+                out.append(f'{" " * 28}profile_info_chain->{profileStruct[2:]}.pNext = nullptr;\n')
+                out.append(f'{" " * 28}*ppnext = &profile_info_chain->{profileStruct[2:]};\n')
+                out.append(f'{" " * 28}ppnext = &profile_info_chain->{profileStruct[2:]}.pNext;\n')
+                out.append(f'{" " * 24}}}\n')
+                if structDef.protect:
+                    out.append(f'#else\n{" " * 20}profile_info_chain = nullptr;\n')
+                out.append(self.AddGuardFooter(structDef))
+            out.append(f'{" " * 20}    return profile_info_chain;\n')
+            out.append(f'{" " * 20}}};\n\n')
 
             # Setup video capabilities chain creation callback
-            out += f'{" " * 20}auto create_capabilities_chain = [&](void **ppnext) -> std::unique_ptr<video_capabilities_chain> {{\n'
-            out += f'{" " * 20}    auto capabilities_chain = std::make_unique<video_capabilities_chain>();\n'
+            out.append(f'{" " * 20}auto create_capabilities_chain = [&](void **ppnext) -> std::unique_ptr<video_capabilities_chain> {{\n')
+            out.append(f'{" " * 20}    auto capabilities_chain = std::make_unique<video_capabilities_chain>();\n')
             for capabilities in videoCodec.capabilities:
-                structDef = GetStructDef(capabilities)
-                out += AddGuardHeader(structDef)
-                out += f'{" " * 24}if (capabilities_chain != nullptr) {{\n'
-                out += GetTypesPrecondition([capabilities], 28)
-                out += f'{" " * 32}capabilities_chain->{capabilities[2:]}.sType = {structDef.sTypeName};\n'
-                out += f'{" " * 32}capabilities_chain->{capabilities[2:]}.pNext = nullptr;\n'
-                out += f'{" " * 32}*ppnext = &capabilities_chain->{capabilities[2:]};\n'
-                out += f'{" " * 32}ppnext = &capabilities_chain->{capabilities[2:]}.pNext;\n'
-                out += f'{" " * 28}}}\n'
-                out += f'{" " * 24}}}\n'
-                out += AddGuardFooter(structDef)
-            out += f'{" " * 20}    return capabilities_chain;\n'
-            out += f'{" " * 20}}};\n\n'
+                structDef = self.vk.structs[capabilities]
+                out.append(self.AddGuardHeader(structDef))
+                out.append(f'{" " * 24}if (capabilities_chain != nullptr) {{\n')
+                out.extend(self.GetTypesPrecondition([capabilities], 28))
+                out.append(f'{" " * 32}capabilities_chain->{capabilities[2:]}.sType = {structDef.sType};\n')
+                out.append(f'{" " * 32}capabilities_chain->{capabilities[2:]}.pNext = nullptr;\n')
+                out.append(f'{" " * 32}*ppnext = &capabilities_chain->{capabilities[2:]};\n')
+                out.append(f'{" " * 32}ppnext = &capabilities_chain->{capabilities[2:]}.pNext;\n')
+                out.append(f'{" " * 28}}}\n')
+                out.append(f'{" " * 24}}}\n')
+                out.append(self.AddGuardFooter(structDef))
+            out.append(f'{" " * 20}    return capabilities_chain;\n')
+            out.append(f'{" " * 20}}};\n\n')
 
             # Setup video format properties chain creation callbacks
-            out += f'{" " * 20}const AppVideoProfile::CreateFormatPropertiesChainCbList create_format_properties_chain_list = {{\n'
+            out.append(f'{" " * 20}const AppVideoProfile::CreateFormatPropertiesChainCbList create_format_properties_chain_list = {{\n')
             for format in videoCodec.formats.values():
-                out += f'{" " * 24}AppVideoProfile::CreateFormatPropertiesChainCb {{\n'
-                out += f'{" " * 28}"{format.name}",\n'
-                out += f'{" " * 28}{format.usage.replace("+", " | ")},\n'
+                out.append(f'{" " * 24}AppVideoProfile::CreateFormatPropertiesChainCb {{\n')
+                out.append(f'{" " * 28}"{format.name}",\n')
+                out.append(f'{" " * 28}{format.usage.replace("+", " | ")},\n')
 
                 # Callback to check required capabilities
-                out += f'{" " * 28}[&](const VkVideoCapabilitiesKHR &capabilities) -> bool {{\n'
-                out += f'{" " * 28}    bool supported = true;\n'
+                out.append(f'{" " * 28}[&](const VkVideoCapabilitiesKHR &capabilities) -> bool {{\n')
+                out.append(f'{" " * 28}    bool supported = true;\n')
                 for requiredCap in format.requiredCaps:
-                    structDef = GetStructDef(requiredCap.struct)
-                    out += AddGuardHeader(structDef)
-                    out += GetTypesPrecondition([requiredCap.struct], 32)
-                    out += f'{" " * 32}    auto caps = reinterpret_cast<const {requiredCap.struct}*>(find_caps_struct(capabilities, {structDef.sTypeName}));\n'
-                    out += f'{" " * 32}    if (caps != nullptr) {{\n'
-                    out += f'{" " * 32}        supported = supported && {GetRequiredCapsCondition(requiredCap.struct, requiredCap.member, f"caps->{requiredCap.member}", requiredCap.value)};\n'
-                    out += f'{" " * 32}    }} else {{\n'
-                    out += f'{" " * 32}        supported = false;\n'
-                    out += f'{" " * 32}    }}\n'
-                    out += f'{" " * 32}}} else {{\n'
-                    out += f'{" " * 32}    supported = false;\n'
-                    out += f'{" " * 32}}}\n'
-                    if structDef.guard:
-                        out += f'#else\n{" " * 32}supported = false;\n'
-                    out += AddGuardFooter(structDef)
-                out += f'{" " * 28}    return supported;\n'
-                out += f'{" " * 28}}},\n'
+                    structDef = self.vk.structs[requiredCap.struct]
+                    out.append(self.AddGuardHeader(structDef))
+                    out.extend(self.GetTypesPrecondition([requiredCap.struct], 32))
+                    out.append(f'{" " * 32}    auto caps = reinterpret_cast<const {requiredCap.struct}*>(find_caps_struct(capabilities, {structDef.sType}));\n')
+                    out.append(f'{" " * 32}    if (caps != nullptr) {{\n')
+                    out.append(f'{" " * 32}        supported = supported && {self.GetRequiredCapsCondition(requiredCap.struct, requiredCap.member, f"caps->{requiredCap.member}", requiredCap.value)};\n')
+                    out.append(f'{" " * 32}    }} else {{\n')
+                    out.append(f'{" " * 32}        supported = false;\n')
+                    out.append(f'{" " * 32}    }}\n')
+                    out.append(f'{" " * 32}}} else {{\n')
+                    out.append(f'{" " * 32}    supported = false;\n')
+                    out.append(f'{" " * 32}}}\n')
+                    if structDef.protect:
+                        out.append(f'#else\n{" " * 32}supported = false;\n')
+                    out.append(self.AddGuardFooter(structDef))
+                out.append(f'{" " * 28}    return supported;\n')
+                out.append(f'{" " * 28}}},\n')
 
                 # Callback to create video format properties chain
-                out += f'{" " * 28}[&](void **ppnext) -> std::unique_ptr<video_format_properties_chain> {{\n'
-                out += f'{" " * 28}    auto format_properties_chain = std::make_unique<video_format_properties_chain>();\n'
+                out.append(f'{" " * 28}[&](void **ppnext) -> std::unique_ptr<video_format_properties_chain> {{\n')
+                out.append(f'{" " * 28}    auto format_properties_chain = std::make_unique<video_format_properties_chain>();\n')
                 for formatProps in format.properties:
-                    structDef = GetStructDef(formatProps)
-                    out += AddGuardHeader(structDef)
-                    out += f'{" " * 32}if (format_properties_chain != nullptr) {{\n'
-                    out += GetTypesPrecondition([formatProps], 36)
-                    out += f'{" " * 40}format_properties_chain->{formatProps[2:]}.sType = {structDef.sTypeName};\n'
-                    out += f'{" " * 40}format_properties_chain->{formatProps[2:]}.pNext = nullptr;\n'
-                    out += f'{" " * 40}*ppnext = &format_properties_chain->{formatProps[2:]};\n'
-                    out += f'{" " * 40}ppnext = &format_properties_chain->{formatProps[2:]}.pNext;\n'
-                    out += f'{" " * 36}}}\n'
-                    out += f'{" " * 32}}}\n'
-                    out += AddGuardFooter(structDef)
-                out += f'{" " * 28}    return format_properties_chain;\n'
-                out += f'{" " * 28}}},\n'
+                    structDef = self.vk.structs[formatProps]
+                    out.append(self.AddGuardHeader(structDef))
+                    out.append(f'{" " * 32}if (format_properties_chain != nullptr) {{\n')
+                    out.extend(self.GetTypesPrecondition([formatProps], 36))
+                    out.append(f'{" " * 40}format_properties_chain->{formatProps[2:]}.sType = {structDef.sType};\n')
+                    out.append(f'{" " * 40}format_properties_chain->{formatProps[2:]}.pNext = nullptr;\n')
+                    out.append(f'{" " * 40}*ppnext = &format_properties_chain->{formatProps[2:]};\n')
+                    out.append(f'{" " * 40}ppnext = &format_properties_chain->{formatProps[2:]}.pNext;\n')
+                    out.append(f'{" " * 36}}}\n')
+                    out.append(f'{" " * 32}}}\n')
+                    out.append(self.AddGuardFooter(structDef))
+                out.append(f'{" " * 28}    return format_properties_chain;\n')
+                out.append(f'{" " * 28}}},\n')
 
-                out += f'{" " * 24}}},\n'
-            out += f'{" " * 20}}};\n\n'
+                out.append(f'{" " * 24}}},\n')
+            out.append(f'{" " * 20}}};\n\n')
 
             # Permute profiles for each profile struct member value
             profiles = {'': []}
-            for profileStruct in videoCodec.profileStructs.values():
+            for profileStruct in videoCodec.profiles.values():
                 for profileStructMember in profileStruct.members.values():
                     newProfiles = {}
                     for profileStructMemberValue, profileStructMemberName in profileStructMember.values.items():
@@ -795,246 +584,144 @@
                             # Only add video profile name suffix to the full descriptive name if not empty to avoid excess whitespace
                             newProfileName = profileName if profileStructMemberName == '' else f'{profileName} {profileStructMemberName}'
                             newProfiles[newProfileName] = profile + [{
-                                "struct": profileStruct.struct,
+                                "struct": profileStruct.name,
                                 "member": profileStructMember.name,
                                 "value": profileStructMemberValue
                             }]
                     profiles = newProfiles
 
             for profileName, profile in profiles.items():
-                out += f'{" " * 20}add_profile(profile_base_name + "{profileName}", profile_info,\n'
-                out += f'{" " * 20}            create_profile_info_chain, create_capabilities_chain,\n'
-                out += f'{" " * 20}            create_format_properties_chain_list,\n'
-                out += f'{" " * 20}            [](AppVideoProfile& profile) {{\n'
-                for profileStruct in videoCodec.profileStructs:
-                    structDef = GetStructDef(profileStruct)
-                    out += AddGuardHeader(structDef)
+                out.append(f'{" " * 20}add_profile(profile_base_name + "{profileName}", profile_info,\n')
+                out.append(f'{" " * 20}            create_profile_info_chain, create_capabilities_chain,\n')
+                out.append(f'{" " * 20}            create_format_properties_chain_list,\n')
+                out.append(f'{" " * 20}            [](AppVideoProfile& profile) {{\n')
+                for profileStruct in videoCodec.profiles:
+                    structDef = self.vk.structs[profileStruct]
+                    out.append(self.AddGuardHeader(structDef))
                     for elem in profile:
                         if elem['struct'] == profileStruct:
-                            out += f'{" " * 24}profile.profile_info_chain->{elem["struct"][2:]}.{elem["member"]} = {elem["value"]};\n'
-                    out += AddGuardFooter(structDef)
-                out += f'{" " * 20}}});\n'
+                            out.append(f'{" " * 24}profile.profile_info_chain->{elem["struct"][2:]}.{elem["member"]} = {elem["value"]};\n')
+                    out.append(self.AddGuardFooter(structDef))
+                out.append(f'{" " * 20}}});\n')
 
-            out += f'{" " * 16}}}\n'
-            out += f'{" " * 12}}}\n'
-            out += f'{" " * 8}}}\n'
-            out += f'{" " * 4}}}\n'
+            out.append(f'{" " * 16}}}\n')
+            out.append(f'{" " * 12}}}\n')
+            out.append(f'{" " * 8}}}\n')
+            out.append(f'{" " * 4}}}\n')
 
-        out += '    return result;\n'
-        out += '}\n\n'
+        out.append('    return result;\n')
+        out.append('}\n\n')
 
         return out
 
-    def genCmd(self, cmd, name, alias):
-        gen.OutputGenerator.genCmd(self, cmd, name, alias)
-
-    # These are actually constants
-    def genEnum(self, enuminfo, name, alias):
-        gen.OutputGenerator.genEnum(self, enuminfo, name, alias)
-
-    # These are actually enums
-    def genGroup(self, groupinfo, groupName, alias):
-        gen.OutputGenerator.genGroup(self, groupinfo, groupName, alias)
-
-        if alias is not None:
-            if alias in self.aliases.keys():
-                self.aliases[alias].append(groupName)
-            else:
-                self.aliases[alias] = [groupName, ]
-            return
-
-        if groupinfo.elem.get('type') == 'bitmask':
-            self.bitmasks.append(VulkanBitmask(groupinfo.elem))
-        elif groupinfo.elem.get('type') == 'enum':
-            self.enums.append(VulkanEnum(groupinfo.elem))
-
-    def genType(self, typeinfo, name, alias):
-        gen.OutputGenerator.genType(self, typeinfo, name, alias)
-
-        if alias is not None:
-            if alias in self.aliases.keys():
-                self.aliases[alias].append(name)
-            else:
-                self.aliases[alias] = [name, ]
-            return
-
-        if typeinfo.elem.get('category') == 'bitmask':
-            self.flags.append(VulkanFlags(typeinfo.elem))
-
-        if typeinfo.elem.get('category') == 'struct':
-            self.all_structures.append(VulkanStructure(
-                name, typeinfo.elem, self.constants, self.extTypes))
-
-        is_vendor_type = False
-        for vendor in self.vendor_abbreviations:
-            for node in typeinfo.elem.findall('member'):
-                if node.get('values') is not None:
-                    if node.get('values').find(vendor) != -1:
-                        is_vendor_type = True
-                        break
-            if is_vendor_type:
-                break
-
-        for key, value in EXTENSION_CATEGORIES.items():
-            if str(typeinfo.elem.get('structextends')).find(value.get('extends')) != -1:
-                if value.get('exclude') is None or name not in value.get('exclude'):
-                    if not is_vendor_type or value.get('ignore_vendor_exclusion'):
-                        self.extension_sets[key].add(name)
 
     # finds all the ranges of formats from core (1.0), core versions (1.1+), and extensions
     def findFormatRanges(self):
-        for enums in self.registry.reg.findall('enums'):
-            if enums.get('name') == 'VkFormat':
-                min_val = 2**32
-                max_val = 0
-                for enum in enums.findall('enum'):
-                    if enum.get('value') is None:
-                        continue
-                    value = int(enum.get('value'))
-                    min_val = min(min_val, value)
-                    max_val = max(max_val, value)
-                if min_val < 2**32 and max_val > 0:
-                    self.format_ranges.append(VulkanFormatRange(0, None, min_val, max_val))
-
-        for feature in self.registry.reg.findall('feature'):
-            for require in feature.findall('require'):
-                comment = require.get('comment')
-                original_ext = None
-                if comment is not None and comment.find('Promoted from') >= 0:
-                    # may need tweaking in the future - some ext names aren't just the upper case version
-                    original_ext = comment.split(' ')[2].upper() + '_EXTENSION_NAME'
-                    # insert an underscore before numbers in the name define
-                    original_ext = re.sub(r'([A-Z])(\d+)', r'\1_\2', original_ext)
-                min_val = 2**32
-                max_val = 0
-                for enum in require.findall('enum'):
-                    if enum.get('extends') == 'VkFormat':
-                        value = CalcEnumValue(int(enum.get('extnumber')), int(enum.get('offset')))
-                        min_val = min(min_val, value)
-                        max_val = max(max_val, value)
-                if min_val < 2**32 and max_val > 0:
-                    self.format_ranges.append(VulkanFormatRange(feature.get('name').replace('_VERSION_', '_API_VERSION_'), None, min_val, max_val))
-                    # If the formats came from an extension, add a format range for that extension so it'll be printed if the ext is supported but not the core version
-                    if original_ext is not None:
-                        self.format_ranges.append(VulkanFormatRange(0, original_ext, min_val, max_val))
-
-        for extension in self.registry.reg.find('extensions').findall('extension'):
-            if not self.genOpts.apiname in extension.get('supported').split(','):
+        min_val = 2**32
+        prev_field = None
+        max_val = 0
+        for f in self.vk.enums['VkFormat'].fields:
+            if f.value is None:
                 continue
+            if prev_field is not None and f.value != prev_field.value + 1:
+                for ext in prev_field.extensions:
+                    if self.vk.extensions[ext].promotedTo is not None:
+                        self.format_ranges.append(VulkanFormatRange(self.vk.extensions[ext].promotedTo.replace("VK_", "VK_API_"), [], min_val, max_val))
+                        break
+                # only bother with the first extension
+                self.format_ranges.append(VulkanFormatRange(0, prev_field.extensions, min_val, max_val))
+                min_val = 2**32
+                max_val = 0
+            min_val = min(min_val, f.value)
+            max_val = max(max_val, f.value)
 
-            min_val = 2**32
-            max_val = 0
-            enum_name_string = ''
-            for require in extension.findall('require'):
-                for enum in require.findall('enum'):
-                    if enum.get('value') is not None and enum.get('value').find(extension.get('name')):
-                        enum_name_string = enum.get('name')
-                    if enum.get('extends') == 'VkFormat':
-                        if enum.get('offset') is None:
-                            continue
-                        value = CalcEnumValue(int(extension.get('number')), int(enum.get('offset')))
-                        min_val = min(min_val, value)
-                        max_val = max(max_val, value)
-            if min_val < 2**32 and max_val > 0:
-                self.format_ranges.append(VulkanFormatRange(0, enum_name_string, min_val, max_val))
+            prev_field = f
+
+        for ext in prev_field.extensions:
+            if self.vk.extensions[ext].promotedTo is not None:
+                self.format_ranges.append(VulkanFormatRange(self.vk.extensions[ext].promotedTo.replace("VK_", "VK_API_"), [], min_val, max_val))
+                break
+
+        self.format_ranges.append(VulkanFormatRange(0, prev_field.extensions, min_val, max_val))
+
+    def findAllTypesToGen(self, initial_type_set):
+        out_set = set()
+        current_set = initial_type_set
+        while len(current_set) > 0:
+            out_set.update(current_set)
+            next_set = set()
+
+            for current_item in current_set:
+                if current_item in self.vk.structs:
+                    for member in self.vk.structs[current_item].members:
+                        if member.type not in out_set and member.name not in NAMES_TO_IGNORE:
+                            next_set.add(member.type)
+
+            current_set = next_set
+        return out_set
+
+    def AddGuardHeader(self,obj):
+        if obj is not None and obj.protect is not None:
+            return f'#ifdef {obj.protect}\n'
+        else:
+            return ''
 
 
+    def AddGuardFooter(self,obj):
+        if obj is not None and obj.protect is not None:
+            return f'#endif  // {obj.protect}\n'
+        else:
+            return ''
 
-def GatherTypesToGen(structure_list, structures, exclude = None):
-    if exclude is None:
-        exclude = []
-    types = set()
-    for s in structures:
-        types.add(s)
-    added_stuff = True  # repeat until no new types are added
-    while added_stuff is True:
-        added_stuff = False
-        for s in structure_list:
-            if s.name in types:
-                for m in s.members:
-                    if m.typeID not in PREDEFINED_TYPES and m.name not in NAMES_TO_IGNORE:
-                        if m.typeID not in types:
-                            if s.name not in exclude:
-                                types.add(m.typeID)
-                                added_stuff = True
-    return types
+    def PrintEnumToString(self,enum):
+        out = []
+        out.append(self.AddGuardHeader(enum))
+        out.append(f'std::string {enum.name}String({enum.name} value) {{\n')
+        out.append('    switch (value) {\n')
+        for v in enum.fields:
+            out.append(f'        case ({v.name}): return "{v.name[3:]}";\n')
+        out.append(f'        default: return std::string("UNKNOWN_{enum.name}_value") + std::to_string(value);\n')
+        out.append('    }\n}\n')
+        out.append(self.AddGuardFooter(enum))
+        return out
 
 
-def GetExtension(name, generator):
-    if name in generator.extFuncs:
-        return generator.extFuncs[name]
-    elif name in generator.extTypes:
-        return generator.extTypes[name][0]
-    else:
-        return None
-
-
-def AddGuardHeader(obj):
-    if obj is not None and obj.guard is not None:
-        return f'#ifdef {obj.guard}\n'
-    else:
-        return ''
-
-
-def AddGuardFooter(obj):
-    if obj is not None and obj.guard is not None:
-        return f'#endif  // {obj.guard}\n'
-    else:
-        return ''
-
-def CalcEnumValue(num, offset):
-    base = 1000000000
-    block_size = 1000
-    return base + (num - 1) * block_size + offset
-
-def PrintEnumToString(enum, generator):
-    out = ''
-    out += AddGuardHeader(GetExtension(enum.name, generator))
-    out += f'std::string {enum.name}String({enum.name} value) {{\n'
-    out += '    switch (value) {\n'
-    for v in enum.options:
-        out += f'        case ({v.name}): return "{v.name[3:]}";\n'
-    out += f'        default: return std::string("UNKNOWN_{enum.name}_value") + std::to_string(value);\n'
-    out += '    }\n}\n'
-    out += AddGuardFooter(GetExtension(enum.name, generator))
-    return out
-
-
-def PrintEnum(enum, generator):
-    out = ''
-    out += AddGuardHeader(GetExtension(enum.name, generator))
-    out += f'''void Dump{enum.name}(Printer &p, std::string name, {enum.name} value) {{
+    def PrintEnum(self,enum):
+        out = []
+        out.append(self.AddGuardHeader(enum))
+        out.append(f'''void Dump{enum.name}(Printer &p, std::string name, {enum.name} value) {{
     if (p.Type() == OutputType::json)
         p.PrintKeyString(name, std::string("VK_") + {enum.name}String(value));
     else
         p.PrintKeyString(name, {enum.name}String(value));
 }}
-'''
-    out += AddGuardFooter(GetExtension(enum.name, generator))
-    return out
+''')
+        out.append(self.AddGuardFooter(enum))
+        return out
 
 
-def PrintGetFlagStrings(name, bitmask):
-    out = ''
-    out += f'std::vector<const char *> {name}GetStrings({name} value) {{\n'
-    out += '    std::vector<const char *> strings;\n'
-    # If a bitmask contains a field whose value is zero, we want to support printing the correct bitflag
-    # Otherwise, use "None" for when there are not bits set in the bitmask
-    if bitmask.options[0].value != 0:
-        out += '    if (value == 0) { strings.push_back("None"); return strings; }\n'
-    else:
-        out += f'    if (value == 0) {{ strings.push_back("{bitmask.options[0].name[3:]}"); return strings; }}\n'
-    for v in bitmask.options:
-        # only check single-bit flags
-        if v.value != 0 and (v.value & (v.value - 1)) == 0:
-            out += f'    if ({v.name} & value) strings.push_back("{v.name[3:]}");\n'
-    out += '    return strings;\n}\n'
-    return out
+    def PrintGetFlagStrings(self,name, bitmask):
+        out = []
+        out.append(f'std::vector<const char *> {name}GetStrings({name} value) {{\n')
+        out.append('    std::vector<const char *> strings;\n')
+        # If a bitmask contains a field whose value is zero, we want to support printing the correct bitflag
+        # Otherwise, use "None" for when there are not bits set in the bitmask
+        if bitmask.flags[0].value != 0:
+            out.append('    if (value == 0) { strings.push_back("None"); return strings; }\n')
+        else:
+            out.append(f'    if (value == 0) {{ strings.push_back("{bitmask.flags[0].name[3:]}"); return strings; }}\n')
+        for v in bitmask.flags:
+            # only check single-bit flags
+            if v.value != 0 and (v.value & (v.value - 1)) == 0:
+                out.append(f'    if ({v.name} & value) strings.push_back("{v.name[3:]}");\n')
+        out.append('    return strings;\n}\n')
+        return out
 
 
-def PrintFlags(bitmask, name):
-    out = f'void Dump{name}(Printer &p, std::string name, {name} value) {{\n'
-    out += f'''    if (static_cast<{bitmask.name}>(value) == 0) {{
+    def PrintFlags(self, bitmask, name):
+        out = []
+        out.append(f'void Dump{name}(Printer &p, std::string name, {name} value) {{\n')
+        out.append(f'''    if (static_cast<{bitmask.name}>(value) == 0) {{
         ArrayWrapper arr(p, name, 0);
         if (p.Type() != OutputType::json && p.Type() != OutputType::vkconfig_output)
             p.SetAsType().PrintString("None");
@@ -1049,12 +736,12 @@
             p.SetAsType().PrintString(str);
     }}
 }}
-'''
-    return out
+''')
+        return out
 
 
-def PrintFlagBits(bitmask):
-    return f'''void Dump{bitmask.name}(Printer &p, std::string name, {bitmask.name} value) {{
+    def PrintFlagBits(self, bitmask):
+        return [f'''void Dump{bitmask.name}(Printer &p, std::string name, {bitmask.name} value) {{
     auto strings = {bitmask.name}GetStrings(value);
     if (strings.size() > 0) {{
         if (p.Type() == OutputType::json)
@@ -1063,263 +750,249 @@
             p.PrintKeyString(name, strings.at(0));
     }}
 }}
-'''
+''']
 
 
-
-def PrintBitMask(bitmask, name, generator):
-    out = PrintGetFlagStrings(bitmask.name, bitmask)
-    out += AddGuardHeader(GetExtension(bitmask.name, generator))
-    out += PrintFlags(bitmask, name)
-    out += PrintFlagBits(bitmask)
-    out += AddGuardFooter(GetExtension(bitmask.name, generator))
-    out += '\n'
-    return out
+    def PrintBitMask(self,bitmask, name):
+        out = []
+        out.extend(self.PrintGetFlagStrings(bitmask.name, bitmask))
+        out.append(self.AddGuardHeader(bitmask))
+        out.extend(self.PrintFlags(bitmask, name))
+        out.extend(self.PrintFlagBits(bitmask))
+        out.append(self.AddGuardFooter(bitmask))
+        out.append('\n')
+        return out
 
 
-def PrintBitMaskToString(bitmask, name, generator):
-    out = AddGuardHeader(GetExtension(bitmask.name, generator))
-    out += f'std::string {name}String({name} value) {{\n'
-    out += '    std::string out;\n'
-    out += '    bool is_first = true;\n'
-    for v in bitmask.options:
-        out += f'    if ({v.name} & value) {{\n'
-        out += '        if (is_first) { is_first = false; } else { out += " | "; }\n'
-        out += f'        out += "{str(v.name)[3:]}";\n'
-        out += '    }\n'
-    out += '    return out;\n'
-    out += '}\n'
-    out += AddGuardFooter(GetExtension(bitmask.name, generator))
-    return out
+    def PrintBitMaskToString(self, bitmask, name):
+        out = []
+        out.append(self.AddGuardHeader(bitmask))
+        out.append(f'std::string {name}String({name} value) {{\n')
+        out.append('    std::string out;\n')
+        out.append('    bool is_first = true;\n')
+        for v in bitmask.flags:
+            out.append(f'    if ({v.name} & value) {{\n')
+            out.append('        if (is_first) { is_first = false; } else { out += " | "; }\n')
+            out.append(f'        out += "{str(v.name)[3:]}";\n')
+            out.append('    }\n')
+        out.append('    return out;\n')
+        out.append('}\n')
+        out.append(self.AddGuardFooter(bitmask))
+        return out
 
 
-def PrintStructure(struct):
-    if len(struct.members) == 0:
-        return ''
-    out = ''
-    out += AddGuardHeader(struct)
-    max_key_len = 0
-    for v in struct.members:
-        if v.arrayLength is not None:
-            if len(v.name) + len(v.arrayLength) + 2 > max_key_len:
-                max_key_len = len(v.name) + len(v.arrayLength) + 2
-        elif v.typeID in PREDEFINED_TYPES or v.typeID in STRUCT_BLACKLIST:
-            if len(v.name) > max_key_len:
-                max_key_len = len(v.name)
+    def PrintStructure(self,struct):
+        if len(struct.members) == 0:
+            return []
+        out = []
+        out.append(self.AddGuardHeader(struct))
+        max_key_len = 0
+        for v in struct.members:
+            if (v.type in PREDEFINED_TYPES or v.type in STRUCT_BLACKLIST) and (v.length is None or v.type in ['char'] or v.fixedSizeArray[0] in ['VK_UUID_SIZE', 'VK_LUID_SIZE']):
+                max_key_len = max(max_key_len, len(v.name))
 
-    out += f'void Dump{struct.name}(Printer &p, std::string name, const {struct.name} &obj) {{\n'
-    if struct.name == 'VkPhysicalDeviceLimits':
-        out += '    if (p.Type() == OutputType::json)\n'
-        out += '        p.ObjectStart("limits");\n'
-        out += '    else\n'
-        out += '        p.SetSubHeader().ObjectStart(name);\n'
-    elif struct.name == 'VkPhysicalDeviceSparseProperties':
-        out += '    if (p.Type() == OutputType::json)\n'
-        out += '        p.ObjectStart("sparseProperties");\n'
-        out += '    else\n'
-        out += '        p.SetSubHeader().ObjectStart(name);\n'
-    else:
-        out += '    ObjectWrapper object{p, name};\n'
-    if max_key_len > 0:
-        out += f'    p.SetMinKeyWidth({max_key_len});\n'
-    for v in struct.members:
-        # arrays
-        if v.arrayLength is not None:
-            # strings
-            if v.typeID == 'char':
-                out += f'    p.PrintKeyString("{v.name}", obj.{v.name});\n'
-            # uuid's
-            elif v.typeID == 'uint8_t' and (v.arrayLength == '8' or v.arrayLength == '16'):  # VK_UUID_SIZE
-                if v.arrayLength == '8':
-                    out += '    if (obj.deviceLUIDValid) { // special case\n'
-                out += f'    p.PrintKeyValue("{v.name}", obj.{v.name});\n'
-                if v.arrayLength == '8':
-                    out += '    }\n'
-            elif struct.name == 'VkQueueFamilyGlobalPriorityProperties' and v.name == 'priorities':
-                out += f'    ArrayWrapper arr(p,"{v.name}", obj.priorityCount);\n'
-                out += '    for (uint32_t i = 0; i < obj.priorityCount; i++) {\n'
-                out += '       if (p.Type() == OutputType::json)\n'
-                out += '           p.PrintString(std::string("VK_") + VkQueueGlobalPriorityString(obj.priorities[i]));\n'
-                out += '       else\n'
-                out += '           p.PrintString(VkQueueGlobalPriorityString(obj.priorities[i]));\n'
-                out += '    }\n'
-            elif v.arrayLength.isdigit():
-                out += f'    {{\n        ArrayWrapper arr(p,"{v.name}", ' + v.arrayLength + ');\n'
-                out += f'        for (uint32_t i = 0; i < {v.arrayLength}; i++) {{ p.PrintElement(obj.{v.name}[i]); }}\n'
-                out += '    }\n'
-            else:  # dynamic array length based on other member
-                out += f'    if (obj.{v.arrayLength} == 0 || obj.{v.name} == nullptr) {{\n'
-                out += f'        p.PrintKeyString("{v.name}", "NULL");\n'
-                out += '    } else {\n'
-                out += f'        ArrayWrapper arr(p,"{v.name}", obj.{v.arrayLength});\n'
-                out += f'        for (uint32_t i = 0; i < obj.{v.arrayLength}; i++) {{\n'
-                out += f'            Dump{v.typeID}(p, std::to_string(i), obj.{v.name}[i]);\n'
-                out += '        }\n'
-                out += '    }\n'
-        elif v.typeID == 'VkBool32':
-            out += f'    p.PrintKeyBool("{v.name}", static_cast<bool>(obj.{v.name}));\n'
-        elif v.typeID == 'uint8_t':
-            out += f'    p.PrintKeyValue("{v.name}", static_cast<uint32_t>(obj.{v.name}));\n'
-        elif v.typeID == 'VkDeviceSize' or (v.typeID == 'uint32_t' and v.name in ['vendorID', 'deviceID']):
-            out += f'    p.PrintKeyValue("{v.name}", to_hex_str(p, obj.{v.name}));\n'
-        elif v.typeID in PREDEFINED_TYPES:
-            out += f'    p.PrintKeyValue("{v.name}", obj.{v.name});\n'
-        elif v.name not in NAMES_TO_IGNORE:
-            # if it is an enum/flag/bitmask
-            if v.typeID in ['VkFormatFeatureFlags', 'VkFormatFeatureFlags2']:
-                out += '    p.SetOpenDetails();\n' # special case so that feature flags are open in html output
-            out += f'    Dump{v.typeID}(p, "{v.name}", obj.{v.name});\n'
-
-    if struct.name in ['VkPhysicalDeviceLimits', 'VkPhysicalDeviceSparseProperties']:
-        out += '    p.ObjectEnd();\n'
-    out += '}\n'
-
-    out += AddGuardFooter(struct)
-    return out
-
-
-def PrintStructShort(struct):
-    out = ''
-    out += AddGuardHeader(struct)
-    out += f'std::ostream &operator<<(std::ostream &o, {struct.name} &obj) {{\n'
-    out += '    return o << "(" << '
-
-    first = True
-    for v in struct.members:
-        if first:
-            first = False
-            out += f'obj.{v.name} << '
+        out.append(f'void Dump{struct.name}(Printer &p, std::string name, const {struct.name} &obj) {{\n')
+        if struct.name == 'VkPhysicalDeviceLimits':
+            out.append('    if (p.Type() == OutputType::json)\n')
+            out.append('        p.ObjectStart("limits");\n')
+            out.append('    else\n')
+            out.append('        p.SetSubHeader().ObjectStart(name);\n')
+        elif struct.name == 'VkPhysicalDeviceSparseProperties':
+            out.append('    if (p.Type() == OutputType::json)\n')
+            out.append('        p.ObjectStart("sparseProperties");\n')
+            out.append('    else\n')
+            out.append('        p.SetSubHeader().ObjectStart(name);\n')
         else:
-            out += f'\',\' << obj.{v.name} << '
-    out += '")";\n'
-    out += '}\n'
-    out += AddGuardFooter(struct)
-    return out
+            out.append('    ObjectWrapper object{p, name};\n')
+        if max_key_len > 0:
+            out.append(f'    p.SetMinKeyWidth({max_key_len});\n')
+        for v in struct.members:
+            # arrays
+            if v.length is not None:
+                # strings
+                if v.type == 'char':
+                    out.append(f'    p.PrintKeyString("{v.name}", obj.{v.name});\n')
+                # uuid's
+                elif v.type == 'uint8_t' and (v.fixedSizeArray[0] == 'VK_LUID_SIZE' or v.fixedSizeArray[0] == 'VK_UUID_SIZE'):  # VK_UUID_SIZE
+                    if v.fixedSizeArray[0] == 'VK_LUID_SIZE':
+                        out.append('    if (obj.deviceLUIDValid) { // special case\n')
+                    out.append(f'    p.PrintKeyValue("{v.name}", obj.{v.name});\n')
+                    if v.fixedSizeArray[0] == 'VK_LUID_SIZE':
+                        out.append('    }\n')
+                elif struct.name == 'VkQueueFamilyGlobalPriorityProperties' and v.name == 'priorities':
+                    out.append(f'    ArrayWrapper arr(p,"{v.name}", obj.priorityCount);\n')
+                    out.append('    for (uint32_t i = 0; i < obj.priorityCount; i++) {\n')
+                    out.append('       if (p.Type() == OutputType::json)\n')
+                    out.append('           p.PrintString(std::string("VK_") + VkQueueGlobalPriorityString(obj.priorities[i]));\n')
+                    out.append('       else\n')
+                    out.append('           p.PrintString(VkQueueGlobalPriorityString(obj.priorities[i]));\n')
+                    out.append('    }\n')
+                elif len(v.fixedSizeArray) == 2:
+                    out.append(f'    {{\n        ArrayWrapper arr(p,"{v.name}", ' + v.fixedSizeArray[0] + ');\n')
+                    out.append(f'        for (uint32_t i = 0; i < {v.fixedSizeArray[0]}; i++) {{\n')
+                    out.append(f'           for (uint32_t j = 0; j < {v.fixedSizeArray[1]}; j++) {{\n')
+                    out.append(f'                p.PrintElement(obj.{v.name}[i][j]); }} }}\n')
+                    out.append('    }\n')
+                elif len(v.fixedSizeArray) == 1:
+                    out.append(f'    {{\n        ArrayWrapper arr(p,"{v.name}", ' + v.fixedSizeArray[0] + ');\n')
+                    out.append(f'        for (uint32_t i = 0; i < {v.fixedSizeArray[0]}; i++) {{ p.PrintElement(obj.{v.name}[i]); }}\n')
+                    out.append('    }\n')
+                else:  # dynamic array length based on other member
+                    out.append(f'    if (obj.{v.length} == 0 || obj.{v.name} == nullptr) {{\n')
+                    out.append(f'        p.PrintKeyString("{v.name}", "NULL");\n')
+                    out.append('    } else {\n')
+                    out.append(f'        ArrayWrapper arr(p,"{v.name}", obj.{v.length});\n')
+                    out.append(f'        for (uint32_t i = 0; i < obj.{v.length}; i++) {{\n')
+                    out.append(f'            Dump{v.type}(p, std::to_string(i), obj.{v.name}[i]);\n')
+                    out.append('        }\n')
+                    out.append('    }\n')
+            elif v.type == 'VkBool32':
+                out.append(f'    p.PrintKeyBool("{v.name}", static_cast<bool>(obj.{v.name}));\n')
+            elif v.type == 'uint8_t':
+                out.append(f'    p.PrintKeyValue("{v.name}", static_cast<uint32_t>(obj.{v.name}));\n')
+            elif v.type == 'VkDeviceSize' or (v.type == 'uint32_t' and v.name in ['vendorID', 'deviceID']):
+                out.append(f'    p.PrintKeyValue("{v.name}", to_hex_str(p, obj.{v.name}));\n')
+            elif v.type in PREDEFINED_TYPES:
+                out.append(f'    p.PrintKeyValue("{v.name}", obj.{v.name});\n')
+            elif v.name not in NAMES_TO_IGNORE:
+                # if it is an enum/flag/bitmask
+                if v.type in ['VkFormatFeatureFlags', 'VkFormatFeatureFlags2']:
+                    out.append('    p.SetOpenDetails();\n') # special case so that feature flags are open in html output
+                out.append(f'    Dump{v.type}(p, "{v.name}", obj.{v.name});\n')
 
-def PrintChainStruct(listName, structures, all_structures, chain_details, extTypes, aliases, vulkan_versions):
-    sorted_structures = sorted(
-        all_structures, key=operator.attrgetter('name'))
+        if struct.name in ['VkPhysicalDeviceLimits', 'VkPhysicalDeviceSparseProperties']:
+            out.append('    p.ObjectEnd();\n')
+        out.append('}\n')
 
-    version_desc = ''
-    if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
-        version_desc = 'gpu.api_version'
-    else:
-        version_desc = 'inst.instance_version'
+        out.append(self.AddGuardFooter(struct))
+        return out
 
-    out = ''
-    structs_to_print = []
-    for s in sorted_structures:
-        if s.name in structures:
-            structs_to_print.append(s)
-    # use default constructor and delete copy & move operators
-    out += f'''struct {listName}_chain {{
+
+    def PrintStructShort(self,struct):
+        out = []
+        out.append(self.AddGuardHeader(struct))
+        out.append(f'std::ostream &operator<<(std::ostream &o, {struct.name} &obj) {{\n')
+        out.append('    return o << "(" << ')
+
+        first = True
+        for v in struct.members:
+            if first:
+                first = False
+                out.append(f'obj.{v.name} << ')
+            else:
+                out.append(f'\',\' << obj.{v.name} << ')
+        out.append('")";\n')
+        out.append('}\n')
+        out.append(self.AddGuardFooter(struct))
+        return out
+
+    def PrintChainStruct(self, listName, structs_to_print, chain_details):
+        version_desc = ''
+        if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
+            version_desc = 'gpu.api_version'
+        else:
+            version_desc = 'inst.instance_version'
+
+        out = []
+
+        # use default constructor and delete copy & move operators
+        out.append(f'''struct {listName}_chain {{
     {listName}_chain() = default;
     {listName}_chain(const {listName}_chain &) = delete;
     {listName}_chain& operator=(const {listName}_chain &) = delete;
     {listName}_chain({listName}_chain &&) = delete;
     {listName}_chain& operator=({listName}_chain &&) = delete;
-'''
+''')
 
-    out += '    void* start_of_chain = nullptr;\n'
-    for s in structs_to_print:
-        if s.name in STRUCT_BLACKLIST:
-            continue
-        out += AddGuardHeader(s)
-        if s.sTypeName is not None:
-            out += f'    {s.name} {s.name[2:]}{{}};\n'
-            # Specific versions of drivers have an incorrect definition of the size of these structs.
-            # We need to artificially pad the structure it just so the driver doesn't write out of bounds and
-            # into other structures that are adjacent. This bug comes from the in-development version of
-            # the extension having a larger size than the final version, so older drivers try to write to
-            # members which don't exist.
-            if s.name in ['VkPhysicalDeviceShaderIntegerDotProductFeatures', 'VkPhysicalDeviceHostImageCopyFeaturesEXT']:
-                out += f'    char {s.name}_padding[64];\n'
-            if s.hasLengthmember:
-                for member in s.members:
-                    if member.lengthMember:
-                        out += f'    std::vector<{member.typeID}> {s.name}_{member.name};\n'
-        out += AddGuardFooter(s)
-    out += '    void initialize_chain('
-    if chain_details.get('type') in [EXTENSION_TYPE_INSTANCE, EXTENSION_TYPE_BOTH]:
-        out += 'AppInstance &inst, '
-    if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
-        out += 'AppGpu &gpu '
-    if chain_details.get('can_show_promoted_structs'):
-        out += ', bool show_promoted_structs'
-    out += ') noexcept {\n'
-    for s in structs_to_print:
-        if s.name in STRUCT_BLACKLIST:
-            continue
-        out += AddGuardHeader(s)
-        out += f'        {s.name[2:]}.sType = {s.sTypeName};\n'
-        out += AddGuardFooter(s)
+        out.append('    void* start_of_chain = nullptr;\n')
+        for s in structs_to_print:
+            if s in STRUCT_BLACKLIST:
+                continue
+            struct = self.vk.structs[s]
+            out.append(self.AddGuardHeader(struct))
+            if struct.sType is not None:
+                out.append(f'    {struct.name} {struct.name[2:]}{{}};\n')
+                # Specific versions of drivers have an incorrect definition of the size of these structs.
+                # We need to artificially pad the structure it just so the driver doesn't write out of bounds and
+                # into other structures that are adjacent. This bug comes from the in-development version of
+                # the extension having a larger size than the final version, so older drivers try to write to
+                # members which don't exist.
+                if struct.name in ['VkPhysicalDeviceShaderIntegerDotProductFeatures', 'VkPhysicalDeviceHostImageCopyFeaturesEXT']:
+                    out.append(f'    char {struct.name}_padding[64];\n')
+                for member in struct.members:
+                    if member.length is not None and len(member.fixedSizeArray) == 0:
+                        out.append(f'    std::vector<{member.type}> {struct.name}_{member.name};\n')
+            out.append(self.AddGuardFooter(struct))
+        out.append('    void initialize_chain(')
+        if chain_details.get('type') in [EXTENSION_TYPE_INSTANCE, EXTENSION_TYPE_BOTH]:
+            out.append('AppInstance &inst, ')
+        if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
+            out.append('AppGpu &gpu ')
+        if chain_details.get('can_show_promoted_structs'):
+            out.append(', bool show_promoted_structs')
+        out.append(') noexcept {\n')
+        for s in structs_to_print:
+            if s in STRUCT_BLACKLIST:
+                continue
+            struct = self.vk.structs[s]
+
+            out.append(self.AddGuardHeader(struct))
+            out.append(f'        {struct.name[2:]}.sType = {struct.sType};\n')
+            out.append(self.AddGuardFooter(struct))
 
 
-    out += '        std::vector<VkBaseOutStructure*> chain_members{};\n'
-    for s in structs_to_print:
-        if s.name in STRUCT_BLACKLIST:
-            continue
-        out += AddGuardHeader(s)
-        extEnables = {}
-        for k, elem in extTypes.items():
-            if k == s.name or (s.name in aliases.keys() and k in aliases[s.name]):
-                for e in elem:
-                    extEnables[e.extNameStr] = e.type
+        out.append('        std::vector<VkBaseOutStructure*> chain_members{};\n')
+        for s in structs_to_print:
+            if s in STRUCT_BLACKLIST:
+                continue
+            struct = self.vk.structs[s]
+            out.append(self.AddGuardHeader(struct))
 
-        version = None
-        oldVersionName = None
-        for v in vulkan_versions:
-            if s.name in v.names:
-                version = v
-        if s.name in aliases.keys():
-            for alias in aliases[s.name]:
-                oldVersionName = alias
-
-        has_version = version is not None
-        has_extNameStr = len(extEnables) > 0 or s.name in aliases.keys()
-        if has_version or has_extNameStr:
-            out += '        if ('
-            has_printed_condition = False
-            if has_extNameStr:
-                for key, value in extEnables.items():
-                    if has_printed_condition:
-                        out += '\n         || '
+            has_version = struct.version is not None
+            has_extNameStr = len(struct.extensions) > 0 or len(struct.aliases) > 0
+            if has_version or has_extNameStr:
+                out.append('        if (')
+                has_printed_condition = False
+                if has_extNameStr:
+                    for ext in struct.extensions:
+                        if has_printed_condition:
+                            out.append('\n         || ')
+                        else:
+                            has_printed_condition = True
+                            if has_version:
+                                out.append('(')
+                        if self.vk.extensions[ext].device:
+                            out.append(f'gpu.CheckPhysicalDeviceExtensionIncluded({self.vk.extensions[ext].nameString})')
+                        elif self.vk.extensions[ext].instance:
+                            out.append(f'inst.CheckExtensionEnabled({self.vk.extensions[ext].nameString})')
+                        else:
+                            assert False, 'Should never get here'
+                if has_version:
+                    str_show_promoted_structs = '|| show_promoted_structs' if chain_details.get('can_show_promoted_structs') else ''
+                    if struct.name in STRUCT_1_1_LIST:
+                        out.append(f'{version_desc} == {struct.version.nameApi} {str_show_promoted_structs}')
+                    elif has_printed_condition:
+                        out.append(f')\n            && ({version_desc} < {struct.version.nameApi} {str_show_promoted_structs})')
                     else:
-                        has_printed_condition = True
-                        if has_version:
-                            out += '('
-                    if value == EXTENSION_TYPE_DEVICE:
-                        out += f'gpu.CheckPhysicalDeviceExtensionIncluded({key})'
-                    elif value == EXTENSION_TYPE_INSTANCE:
-                        out += f'inst.CheckExtensionEnabled({key})'
-                    else:
-                        assert False, 'Should never get here'
-            if has_version:
-                str_show_promoted_structs = '|| show_promoted_structs' if chain_details.get('can_show_promoted_structs') else ''
-                if s.name in STRUCT_1_1_LIST:
-                    out += f'{version_desc} == {version.constant} {str_show_promoted_structs}'
-                elif has_printed_condition:
-                    out += f')\n            && ({version_desc} < {version.constant} {str_show_promoted_structs})'
-                else:
-                    out += f'({version_desc} >= {version.constant})'
-            out += ')\n            '
-        else:
-            out += '        '
-        out += f'chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&{s.name[2:]}));\n'
-        out += AddGuardFooter(s)
-    chain_param_list = []
-    chain_arg_list = []
-    if chain_details.get('type') in [EXTENSION_TYPE_INSTANCE, EXTENSION_TYPE_BOTH]:
-        chain_param_list.append('AppInstance &inst')
-        chain_arg_list.append('inst')
-    if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
-        chain_param_list.append('AppGpu &gpu')
-        chain_arg_list.append('gpu')
-    if chain_details.get('can_show_promoted_structs'):
-        chain_param_list.append('bool show_promoted_structs')
-        chain_arg_list.append('show_promoted_structs')
+                        out.append(f'({version_desc} >= {struct.version.nameApi})')
+                out.append(')\n            ')
+            else:
+                out.append('        ')
+            out.append(f'chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&{struct.name[2:]}));\n')
+            out.append(self.AddGuardFooter(struct))
+        chain_param_list = []
+        chain_arg_list = []
+        if chain_details.get('type') in [EXTENSION_TYPE_INSTANCE, EXTENSION_TYPE_BOTH]:
+            chain_param_list.append('AppInstance &inst')
+            chain_arg_list.append('inst')
+        if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
+            chain_param_list.append('AppGpu &gpu')
+            chain_arg_list.append('gpu')
+        if chain_details.get('can_show_promoted_structs'):
+            chain_param_list.append('bool show_promoted_structs')
+            chain_arg_list.append('show_promoted_structs')
 
-    out += f'''
+        out.append(f'''
         if (!chain_members.empty()) {{
             for(size_t i = 0; i < chain_members.size() - 1; i++){{
                 chain_members[i]->pNext = chain_members[i + 1];
@@ -1328,402 +1001,104 @@
         }}
     }}
 }};
-void setup_{listName}_chain({chain_details['holder_type']}& start, std::unique_ptr<{listName}_chain>& chain, {','.join(chain_param_list)}){{
+void setup_{listName}_chain({chain_details['extends']}& start, std::unique_ptr<{listName}_chain>& chain, {','.join(chain_param_list)}){{
     chain = std::unique_ptr<{listName}_chain>(new {listName}_chain());
     chain->initialize_chain({','.join(chain_arg_list)});
     start.pNext = chain->start_of_chain;
 }};
-'''
-    if chain_details.get('print_iterator'):
-        out += '\n'
-        out += f'void chain_iterator_{listName}(Printer &p, '
-        if chain_details.get('type') in [EXTENSION_TYPE_INSTANCE, EXTENSION_TYPE_BOTH]:
-            out += 'AppInstance &inst, '
-        if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
-            out += 'AppGpu &gpu, '
-        if chain_details.get('can_show_promoted_structs'):
-            out += 'bool show_promoted_structs, '
-        out += 'const void * place) {\n'
-        out += '    while (place) {\n'
-        out += '        const VkBaseOutStructure *structure = (const VkBaseOutStructure *)place;\n'
-        out += '        p.SetSubHeader();\n'
+''')
+        if chain_details.get('print_iterator'):
+            out.append('\n')
+            out.append(f'void chain_iterator_{listName}(Printer &p, ')
+            if chain_details.get('type') in [EXTENSION_TYPE_INSTANCE, EXTENSION_TYPE_BOTH]:
+                out.append('AppInstance &inst, ')
+            if chain_details.get('type') in [EXTENSION_TYPE_DEVICE, EXTENSION_TYPE_BOTH]:
+                out.append('AppGpu &gpu, ')
+            if chain_details.get('can_show_promoted_structs'):
+                out.append('bool show_promoted_structs, ')
+            out.append('const void * place) {\n')
+            out.append('    while (place) {\n')
+            out.append('        const VkBaseOutStructure *structure = (const VkBaseOutStructure *)place;\n')
+            out.append('        p.SetSubHeader();\n')
 
-        for s in sorted_structures:
-            if s.sTypeName is None or s.name in STRUCT_BLACKLIST:
-                continue
+            for s in structs_to_print:
+                if s in STRUCT_BLACKLIST:
+                    continue
+                struct = self.vk.structs[s]
 
-            extEnables = {}
-            for k, elem in extTypes.items():
-                if k == s.name or (s.name in aliases.keys() and k in aliases[s.name]):
-                    for e in elem:
-                        extEnables[e.extNameStr] = e.type
-
-            version = None
-            oldVersionName = None
-            for v in vulkan_versions:
-                if s.name in v.names:
-                    version = v
-            if s.name in aliases.keys():
-                for alias in aliases[s.name]:
-                    oldVersionName = alias
-
-            if s.name in structures:
-                out += AddGuardHeader(s)
-                out += f'        if (structure->sType == {s.sTypeName}'
-                if s.name in PORTABILITY_STRUCTS:
-                    out += ' && p.Type() != OutputType::json'
-                has_version = version is not None
-                has_extNameStr = len(extEnables) > 0 or s.name in aliases.keys()
-                out += ') {\n'
-                out += f'            const {s.name}* props = (const {s.name}*)structure;\n'
-                out += f'            Dump{s.name}(p, '
-                if s.name in aliases.keys() and version is not None:
-                    out += f'{version_desc} >= {version.constant} ?"{s.name}":"{oldVersionName}"'
+                out.append(self.AddGuardHeader(struct))
+                out.append(f'        if (structure->sType == {struct.sType}')
+                if struct.name in PORTABILITY_STRUCTS:
+                    out.append(' && p.Type() != OutputType::json')
+                has_version = struct.version is not None
+                has_extNameStr = len(struct.extensions) > 0 or len(struct.aliases) > 0
+                out.append(') {\n')
+                out.append(f'            const {struct.name}* props = (const {struct.name}*)structure;\n')
+                out.append(f'            Dump{struct.name}(p, ')
+                if len(struct.aliases) > 0 and struct.version is not None:
+                    out.append(f'{version_desc} >= {struct.version.nameApi} ?"{struct.name}":"{struct.aliases[0]}"')
                 else:
-                    out += f'"{s.name}"'
-                out += ', *props);\n'
-                out += '            p.AddNewline();\n'
-                out += '        }\n'
-                out += AddGuardFooter(s)
-        out += '        place = structure->pNext;\n'
-        out += '    }\n'
-        out += '}\n'
+                    out.append(f'"{struct.name}"')
+                out.append(', *props);\n')
+                out.append('            p.AddNewline();\n')
+                out.append('        }\n')
+                out.append(self.AddGuardFooter(struct))
+            out.append('        place = structure->pNext;\n')
+            out.append('    }\n')
+            out.append('}\n')
 
-    out += '\n'
-    out += f'bool prepare_{listName}_twocall_chain_vectors(std::unique_ptr<{listName}_chain>& chain) {{\n'
-    out += '    (void)chain;\n'
-    is_twocall = False
-    for s in structs_to_print:
-        if not s.hasLengthmember:
-            continue
-        if s.name in STRUCT_BLACKLIST:
-            continue
-        out += AddGuardHeader(s)
-        for member in s.members:
-            if member.lengthMember:
-                out += f'    chain->{s.name}_{member.name}.resize(chain->{s.name[2:]}.{member.arrayLength});\n'
-                out += f'    chain->{s.name[2:]}.{member.name} = chain->{s.name}_{member.name}.data();\n'
-        out += AddGuardFooter(s)
-        is_twocall = True
-    out += f'    return {"true" if is_twocall else "false"};\n'
-    out += '}\n'
+        out.append('\n')
+        out.append(f'bool prepare_{listName}_twocall_chain_vectors(std::unique_ptr<{listName}_chain>& chain) {{\n')
+        out.append('    (void)chain;\n')
+        is_twocall = False
+        for s in structs_to_print:
+            if s in STRUCT_BLACKLIST:
+                continue
+            struct = self.vk.structs[s]
+            has_length = False
+            for member in struct.members:
+                if member.length is not None and len(member.fixedSizeArray) == 0:
+                    has_length = True
+            if not has_length:
+                continue
+            out.append(self.AddGuardHeader(struct))
+            for member in struct.members:
+                if member.length is not None and len(member.fixedSizeArray) == 0:
+                    out.append(f'    chain->{struct.name}_{member.name}.resize(chain->{struct.name[2:]}.{member.length});\n')
+                    out.append(f'    chain->{struct.name[2:]}.{member.name} = chain->{struct.name}_{member.name}.data();\n')
+            out.append(self.AddGuardFooter(struct))
+            is_twocall = True
+        out.append(f'    return {"true" if is_twocall else "false"};\n')
+        out.append('}\n')
 
-    return out
+        return out
 
 
-def PrintStructComparisonForwardDecl(structure):
-    out = ''
-    out += f'bool operator==(const {structure.name} & a, const {structure.name} b);\n'
-    return out
+    def PrintStructComparisonForwardDecl(self,structure):
+        out = []
+        out.append(f'bool operator==(const {structure.name} & a, const {structure.name} b);\n')
+        return out
 
 
-def PrintStructComparison(structure):
-    out = ''
-    out += f'bool operator==(const {structure.name} & a, const {structure.name} b) {{\n'
-    out += '    return '
-    is_first = True
-    for m in structure.members:
-        if m.name not in NAMES_TO_IGNORE:
-            if not is_first:
-                out += '\n        && '
-            else:
-                is_first = False
-            out += f'a.{m.name} == b.{m.name}'
-    out += ';\n'
-    out += '}\n'
-    return out
-
-
-class VulkanEnum:
-    class Option:
-
-        def __init__(self, name, value, bitpos, comment):
-            self.name = name
-            self.comment = comment
-
-            if bitpos is not None:
-                value = 1 << int(bitpos)
-            elif isinstance(value, str):
-                if value.lower().startswith('0x'):
-                    value = int(value, 16)
+    def PrintStructComparison(self,structure):
+        out = []
+        out.append(f'bool operator==(const {structure.name} & a, const {structure.name} b) {{\n')
+        out.append('    return ')
+        is_first = True
+        for m in structure.members:
+            if m.name not in NAMES_TO_IGNORE:
+                if not is_first:
+                    out.append('\n        && ')
                 else:
-                    value = int(value)
-
-            self.value = value
-
-        def values(self):
-            return {
-                'optName': self.name,
-                'optValue': self.value,
-                'optComment': self.comment,
-            }
-
-    def __init__(self, rootNode):
-        self.name = rootNode.get('name')
-        self.type = rootNode.get('type')
-        self.options = []
-
-        for child in rootNode:
-            childName = child.get('name')
-            childValue = child.get('value')
-            childBitpos = child.get('bitpos')
-            childComment = child.get('comment')
-            childExtends = child.get('extends')
-            childOffset = child.get('offset')
-            childExtNum = child.get('extnumber')
-            support = child.get('supported')
-            if support == 'disabled':
-                continue
-
-            if childName is None:
-                continue
-            if childValue is None and childBitpos is None and childOffset is None:
-                continue
-
-            if childExtends is not None and childExtNum is not None and childOffset is not None:
-                childValue = CalcEnumValue(int(childExtNum), int(childOffset))
-                if 'dir' in child.keys():
-                    childValue = -childValue
-            duplicate = False
-            for o in self.options:
-                if o.values()['optName'] == childName:
-                    duplicate = True
-            if duplicate:
-                continue
-
-            self.options.append(VulkanEnum.Option(
-                childName, childValue, childBitpos, childComment))
-
-
-class VulkanBitmask:
-
-    def __init__(self, rootNode):
-        self.name = rootNode.get('name')
-        self.type = rootNode.get('type')
-
-        # Read each value that the enum contains
-        self.options = []
-        for child in rootNode:
-            childName = child.get('name')
-            childValue = child.get('value')
-            childBitpos = child.get('bitpos')
-            childComment = child.get('comment')
-            support = child.get('supported')
-            if childName is None or (childValue is None and childBitpos is None):
-                continue
-            if support == 'disabled':
-                continue
-
-            duplicate = False
-            for option in self.options:
-                if option.name == childName:
-                    duplicate = True
-            if duplicate:
-                continue
-
-            self.options.append(VulkanEnum.Option(
-                childName, childValue, childBitpos, childComment))
-
-
-class VulkanFlags:
-
-    def __init__(self, rootNode):
-        self.name = rootNode.get('name')
-        self.type = rootNode.get('type')
-        self.enum = rootNode.get('requires')
-        # 64 bit flags use bitvalues, not requires
-        if self.enum is None:
-            self.enum = rootNode.get('bitvalues')
-
-
-class VulkanVariable:
-    def __init__(self, rootNode, constants):
-        self.name = rootNode.find('name').text
-        # Typename, dereferenced and converted to a useable C++ token
-        self.typeID = rootNode.find('type').text
-        self.baseType = self.typeID
-        self.childType = None
-        self.arrayLength = None
-        self.text = ''
-        for node in rootNode.itertext():
-            comment = rootNode.find('comment')
-            if comment is not None and comment.text == node:
-                continue
-            self.text += node
-
-        typeMatch = re.search('.+?(?=' + self.name + ')', self.text)
-        self.type = typeMatch.string[typeMatch.start():typeMatch.end()]
-        self.type = ' '.join(self.type.split())
-        bracketMatch = re.search('(?<=\\[)[a-zA-Z0-9_]+(?=\\])', self.text)
-        if bracketMatch is not None:
-            matchText = bracketMatch.string[bracketMatch.start(
-            ):bracketMatch.end()]
-            self.childType = self.type
-            self.type += '[' + matchText + ']'
-            if matchText in constants:
-                self.arrayLength = constants[matchText]
-            else:
-                self.arrayLength = matchText
-
-        self.lengthMember = False
-        lengthString = rootNode.get('len')
-        lengths = []
-        if lengthString is not None:
-            lengths = re.split(',', lengthString)
-            lengths = list(filter(('null-terminated').__ne__, lengths))
-        if self.arrayLength is None and len(lengths) > 0:
-            self.childType = '*'.join(self.type.split('*')[0:-1])
-            self.arrayLength = lengths[0]
-            self.lengthMember = True
-        if self.arrayLength is not None and self.arrayLength.startswith('latexmath'):
-            code = self.arrayLength[10:len(self.arrayLength)]
-            code = re.sub('\\[', '', code)
-            code = re.sub('\\]', '', code)
-            code = re.sub('\\\\(lceil|rceil)', '', code)
-            code = re.sub('{|}', '', code)
-            code = re.sub('\\\\mathit', '', code)
-            code = re.sub('\\\\over', '/', code)
-            code = re.sub('\\\\textrm', '', code)
-            self.arrayLength = code
-
-        # Dereference if necessary and handle members of variables
-        if self.arrayLength is not None:
-            self.arrayLength = re.sub('::', '->', self.arrayLength)
-            sections = self.arrayLength.split('->')
-            if sections[-1][0] == 'p' and sections[0][1].isupper():
-                self.arrayLength = '*' + self.arrayLength
-
-
-class VulkanStructure:
-    def __init__(self, name, rootNode, constants, extTypes):
-        self.name = name
-        self.members = []
-        self.guard = None
-        self.sTypeName = None
-        self.extendsStruct = rootNode.get('structextends')
-        self.hasLengthmember = False
-
-        for node in rootNode.findall('member'):
-            if node.get('values') is not None:
-                self.sTypeName = node.get('values')
-            self.members.append(VulkanVariable(node, constants))
-
-        for member in self.members:
-            if member.lengthMember:
-                self.hasLengthmember = True
-                break
-
-        for k, elem in extTypes.items():
-            if k == self.name:
-                for e in elem:
-                    if e.guard is not None:
-                        self.guard = e.guard
-
-
-class VulkanExtension:
-    def __init__(self, rootNode):
-        self.name = rootNode.get('name')
-        self.number = int(rootNode.get('number'))
-        self.type = rootNode.get('type')
-        self.dependency = rootNode.get('requires')
-        self.guard = GetFeatureProtect(rootNode)
-        self.supported = rootNode.get('supported')
-        self.extNameStr = None
-        self.vktypes = []
-        self.vkfuncs = []
-        self.constants = OrderedDict()
-        self.enumValues = OrderedDict()
-        self.node = rootNode
-
-        for req in rootNode.findall('require'):
-            for ty in req.findall('type'):
-                self.vktypes.append(ty.get('name'))
-
-            for func in req.findall('command'):
-                self.vkfuncs.append(func.get('name'))
-
-            for enum in req.findall('enum'):
-                base = enum.get('extends')
-                name = enum.get('name')
-                value = enum.get('value')
-                bitpos = enum.get('bitpos')
-                offset = enum.get('offset')
-                # gets the VK_XXX_EXTENSION_NAME string
-                if value == f'"{self.name}"':
-                    self.extNameStr = name
-
-                if value is None and bitpos is not None:
-                    value = 1 << int(bitpos)
-
-                if offset is not None:
-                    offset = int(offset)
-                if base is not None and offset is not None:
-                    enumValue = 1000000000 + 1000*(self.number - 1) + offset
-                    if enum.get('dir') == '-':
-                        enumValue = -enumValue
-                    self.enumValues[base] = (name, enumValue)
-                else:
-                    self.constants[name] = value
-
-
-class VulkanVersion:
-    def __init__(self, rootNode):
-        self.name = rootNode.get('name')
-        self.constant = self.name.replace('_VERSION_', '_API_VERSION_')
-        self.names = set()
-
-        match = re.search(r"^[A-Z]+_VERSION_([1-9][0-9]*)_([0-9]+)$", self.name)
-        self.major = int(match.group(1))
-        self.minor = int(match.group(2))
-
-        for req in rootNode.findall('require'):
-            for ty in req.findall('type'):
-                self.names.add(ty.get('name'))
-            for func in req.findall('command'):
-                self.names.add(func.get('name'))
-            for enum in req.findall('enum'):
-                self.names.add(enum.get('name'))
-        self.names = sorted(self.names)
+                    is_first = False
+                out.append(f'a.{m.name} == b.{m.name}')
+        out.append(';\n')
+        out.append('}\n')
+        return out
 
 class VulkanFormatRange:
-    def __init__(self, min_inst_version, ext_name, first, last):
+    def __init__(self, min_inst_version, extensions, first, last):
         self.minimum_instance_version = min_inst_version
-        self.extension_name = ext_name
+        self.extensions = extensions
         self.first_format = first
         self.last_format = last
-
-class VulkanVideoRequiredCapabilities():
-    def __init__(self, struct, member, value):
-        self.struct = struct
-        self.member = member
-        self.value = value
-
-class VulkanVideoFormat():
-    def __init__(self, name, usage):
-        self.name = name
-        self.usage = usage
-        self.properties = OrderedDict()
-        self.requiredCaps = list()
-        super().__init__()
-
-class VulkanVideoProfileStructMember():
-    def __init__(self, name):
-        self.name = name
-        self.values = OrderedDict()
-
-class VulkanVideoProfileStruct():
-    def __init__(self, struct):
-        self.struct = struct
-        self.members = OrderedDict()
-
-class VulkanVideoCodec():
-    def __init__(self, name, extend = None, value = None):
-        self.name = name
-        self.value = value
-        self.profileStructs = OrderedDict()
-        self.capabilities = OrderedDict()
-        self.formats = OrderedDict()
-        if extend is not None:
-            self.profileStructs = copy.deepcopy(extend.profileStructs)
-            self.capabilities = copy.deepcopy(extend.capabilities)
-            self.formats = copy.deepcopy(extend.formats)
diff --git a/vulkaninfo/generated/vulkaninfo.hpp b/vulkaninfo/generated/vulkaninfo.hpp
index ce66ef1..721d658 100644
--- a/vulkaninfo/generated/vulkaninfo.hpp
+++ b/vulkaninfo/generated/vulkaninfo.hpp
@@ -356,97 +356,6 @@
 void DumpStdVideoH265AspectRatioIdc(Printer &p, std::string name, StdVideoH265AspectRatioIdc value) {
     p.PrintKeyString(name, StdVideoH265AspectRatioIdcString(value));
 }
-std::string StdVideoVP9ProfileString(StdVideoVP9Profile value) {
-    switch (value) {
-        case STD_VIDEO_VP9_PROFILE_0: return "STD_VIDEO_VP9_PROFILE_0";
-        case STD_VIDEO_VP9_PROFILE_1: return "STD_VIDEO_VP9_PROFILE_1";
-        case STD_VIDEO_VP9_PROFILE_2: return "STD_VIDEO_VP9_PROFILE_2";
-        case STD_VIDEO_VP9_PROFILE_3: return "STD_VIDEO_VP9_PROFILE_3";
-        case STD_VIDEO_VP9_PROFILE_INVALID: return "STD_VIDEO_VP9_PROFILE_INVALID";
-        default: return std::string("UNKNOWN_StdVideoVP9Profile_value") + std::to_string(value);
-    }
-}
-void DumpStdVideoVP9Profile(Printer &p, std::string name, StdVideoVP9Profile value) {
-    p.PrintKeyString(name, StdVideoVP9ProfileString(value));
-}
-std::string StdVideoVP9LevelString(StdVideoVP9Level value) {
-    switch (value) {
-        case STD_VIDEO_VP9_LEVEL_1_0: return "STD_VIDEO_VP9_LEVEL_1_0";
-        case STD_VIDEO_VP9_LEVEL_1_1: return "STD_VIDEO_VP9_LEVEL_1_1";
-        case STD_VIDEO_VP9_LEVEL_2_0: return "STD_VIDEO_VP9_LEVEL_2_0";
-        case STD_VIDEO_VP9_LEVEL_2_1: return "STD_VIDEO_VP9_LEVEL_2_1";
-        case STD_VIDEO_VP9_LEVEL_3_0: return "STD_VIDEO_VP9_LEVEL_3_0";
-        case STD_VIDEO_VP9_LEVEL_3_1: return "STD_VIDEO_VP9_LEVEL_3_1";
-        case STD_VIDEO_VP9_LEVEL_4_0: return "STD_VIDEO_VP9_LEVEL_4_0";
-        case STD_VIDEO_VP9_LEVEL_4_1: return "STD_VIDEO_VP9_LEVEL_4_1";
-        case STD_VIDEO_VP9_LEVEL_5_0: return "STD_VIDEO_VP9_LEVEL_5_0";
-        case STD_VIDEO_VP9_LEVEL_5_1: return "STD_VIDEO_VP9_LEVEL_5_1";
-        case STD_VIDEO_VP9_LEVEL_5_2: return "STD_VIDEO_VP9_LEVEL_5_2";
-        case STD_VIDEO_VP9_LEVEL_6_0: return "STD_VIDEO_VP9_LEVEL_6_0";
-        case STD_VIDEO_VP9_LEVEL_6_1: return "STD_VIDEO_VP9_LEVEL_6_1";
-        case STD_VIDEO_VP9_LEVEL_6_2: return "STD_VIDEO_VP9_LEVEL_6_2";
-        case STD_VIDEO_VP9_LEVEL_INVALID: return "STD_VIDEO_VP9_LEVEL_INVALID";
-        default: return std::string("UNKNOWN_StdVideoVP9Level_value") + std::to_string(value);
-    }
-}
-void DumpStdVideoVP9Level(Printer &p, std::string name, StdVideoVP9Level value) {
-    p.PrintKeyString(name, StdVideoVP9LevelString(value));
-}
-std::string StdVideoVP9FrameTypeString(StdVideoVP9FrameType value) {
-    switch (value) {
-        case STD_VIDEO_VP9_FRAME_TYPE_KEY: return "STD_VIDEO_VP9_FRAME_TYPE_KEY";
-        case STD_VIDEO_VP9_FRAME_TYPE_NON_KEY: return "STD_VIDEO_VP9_FRAME_TYPE_NON_KEY";
-        case STD_VIDEO_VP9_FRAME_TYPE_INVALID: return "STD_VIDEO_VP9_FRAME_TYPE_INVALID";
-        default: return std::string("UNKNOWN_StdVideoVP9FrameType_value") + std::to_string(value);
-    }
-}
-void DumpStdVideoVP9FrameType(Printer &p, std::string name, StdVideoVP9FrameType value) {
-    p.PrintKeyString(name, StdVideoVP9FrameTypeString(value));
-}
-std::string StdVideoVP9ReferenceNameString(StdVideoVP9ReferenceName value) {
-    switch (value) {
-        case STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME";
-        case STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME";
-        case STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME";
-        case STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME";
-        case STD_VIDEO_VP9_REFERENCE_NAME_INVALID: return "STD_VIDEO_VP9_REFERENCE_NAME_INVALID";
-        default: return std::string("UNKNOWN_StdVideoVP9ReferenceName_value") + std::to_string(value);
-    }
-}
-void DumpStdVideoVP9ReferenceName(Printer &p, std::string name, StdVideoVP9ReferenceName value) {
-    p.PrintKeyString(name, StdVideoVP9ReferenceNameString(value));
-}
-std::string StdVideoVP9InterpolationFilterString(StdVideoVP9InterpolationFilter value) {
-    switch (value) {
-        case STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP";
-        case STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH";
-        case STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP";
-        case STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR";
-        case STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE";
-        case STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID";
-        default: return std::string("UNKNOWN_StdVideoVP9InterpolationFilter_value") + std::to_string(value);
-    }
-}
-void DumpStdVideoVP9InterpolationFilter(Printer &p, std::string name, StdVideoVP9InterpolationFilter value) {
-    p.PrintKeyString(name, StdVideoVP9InterpolationFilterString(value));
-}
-std::string StdVideoVP9ColorSpaceString(StdVideoVP9ColorSpace value) {
-    switch (value) {
-        case STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN: return "STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN";
-        case STD_VIDEO_VP9_COLOR_SPACE_BT_601: return "STD_VIDEO_VP9_COLOR_SPACE_BT_601";
-        case STD_VIDEO_VP9_COLOR_SPACE_BT_709: return "STD_VIDEO_VP9_COLOR_SPACE_BT_709";
-        case STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170: return "STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170";
-        case STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240: return "STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240";
-        case STD_VIDEO_VP9_COLOR_SPACE_BT_2020: return "STD_VIDEO_VP9_COLOR_SPACE_BT_2020";
-        case STD_VIDEO_VP9_COLOR_SPACE_RESERVED: return "STD_VIDEO_VP9_COLOR_SPACE_RESERVED";
-        case STD_VIDEO_VP9_COLOR_SPACE_RGB: return "STD_VIDEO_VP9_COLOR_SPACE_RGB";
-        case STD_VIDEO_VP9_COLOR_SPACE_INVALID: return "STD_VIDEO_VP9_COLOR_SPACE_INVALID";
-        default: return std::string("UNKNOWN_StdVideoVP9ColorSpace_value") + std::to_string(value);
-    }
-}
-void DumpStdVideoVP9ColorSpace(Printer &p, std::string name, StdVideoVP9ColorSpace value) {
-    p.PrintKeyString(name, StdVideoVP9ColorSpaceString(value));
-}
 std::string StdVideoAV1ProfileString(StdVideoAV1Profile value) {
     switch (value) {
         case STD_VIDEO_AV1_PROFILE_MAIN: return "STD_VIDEO_AV1_PROFILE_MAIN";
@@ -647,6 +556,97 @@
 void DumpStdVideoAV1ChromaSamplePosition(Printer &p, std::string name, StdVideoAV1ChromaSamplePosition value) {
     p.PrintKeyString(name, StdVideoAV1ChromaSamplePositionString(value));
 }
+std::string StdVideoVP9ProfileString(StdVideoVP9Profile value) {
+    switch (value) {
+        case STD_VIDEO_VP9_PROFILE_0: return "STD_VIDEO_VP9_PROFILE_0";
+        case STD_VIDEO_VP9_PROFILE_1: return "STD_VIDEO_VP9_PROFILE_1";
+        case STD_VIDEO_VP9_PROFILE_2: return "STD_VIDEO_VP9_PROFILE_2";
+        case STD_VIDEO_VP9_PROFILE_3: return "STD_VIDEO_VP9_PROFILE_3";
+        case STD_VIDEO_VP9_PROFILE_INVALID: return "STD_VIDEO_VP9_PROFILE_INVALID";
+        default: return std::string("UNKNOWN_StdVideoVP9Profile_value") + std::to_string(value);
+    }
+}
+void DumpStdVideoVP9Profile(Printer &p, std::string name, StdVideoVP9Profile value) {
+    p.PrintKeyString(name, StdVideoVP9ProfileString(value));
+}
+std::string StdVideoVP9LevelString(StdVideoVP9Level value) {
+    switch (value) {
+        case STD_VIDEO_VP9_LEVEL_1_0: return "STD_VIDEO_VP9_LEVEL_1_0";
+        case STD_VIDEO_VP9_LEVEL_1_1: return "STD_VIDEO_VP9_LEVEL_1_1";
+        case STD_VIDEO_VP9_LEVEL_2_0: return "STD_VIDEO_VP9_LEVEL_2_0";
+        case STD_VIDEO_VP9_LEVEL_2_1: return "STD_VIDEO_VP9_LEVEL_2_1";
+        case STD_VIDEO_VP9_LEVEL_3_0: return "STD_VIDEO_VP9_LEVEL_3_0";
+        case STD_VIDEO_VP9_LEVEL_3_1: return "STD_VIDEO_VP9_LEVEL_3_1";
+        case STD_VIDEO_VP9_LEVEL_4_0: return "STD_VIDEO_VP9_LEVEL_4_0";
+        case STD_VIDEO_VP9_LEVEL_4_1: return "STD_VIDEO_VP9_LEVEL_4_1";
+        case STD_VIDEO_VP9_LEVEL_5_0: return "STD_VIDEO_VP9_LEVEL_5_0";
+        case STD_VIDEO_VP9_LEVEL_5_1: return "STD_VIDEO_VP9_LEVEL_5_1";
+        case STD_VIDEO_VP9_LEVEL_5_2: return "STD_VIDEO_VP9_LEVEL_5_2";
+        case STD_VIDEO_VP9_LEVEL_6_0: return "STD_VIDEO_VP9_LEVEL_6_0";
+        case STD_VIDEO_VP9_LEVEL_6_1: return "STD_VIDEO_VP9_LEVEL_6_1";
+        case STD_VIDEO_VP9_LEVEL_6_2: return "STD_VIDEO_VP9_LEVEL_6_2";
+        case STD_VIDEO_VP9_LEVEL_INVALID: return "STD_VIDEO_VP9_LEVEL_INVALID";
+        default: return std::string("UNKNOWN_StdVideoVP9Level_value") + std::to_string(value);
+    }
+}
+void DumpStdVideoVP9Level(Printer &p, std::string name, StdVideoVP9Level value) {
+    p.PrintKeyString(name, StdVideoVP9LevelString(value));
+}
+std::string StdVideoVP9FrameTypeString(StdVideoVP9FrameType value) {
+    switch (value) {
+        case STD_VIDEO_VP9_FRAME_TYPE_KEY: return "STD_VIDEO_VP9_FRAME_TYPE_KEY";
+        case STD_VIDEO_VP9_FRAME_TYPE_NON_KEY: return "STD_VIDEO_VP9_FRAME_TYPE_NON_KEY";
+        case STD_VIDEO_VP9_FRAME_TYPE_INVALID: return "STD_VIDEO_VP9_FRAME_TYPE_INVALID";
+        default: return std::string("UNKNOWN_StdVideoVP9FrameType_value") + std::to_string(value);
+    }
+}
+void DumpStdVideoVP9FrameType(Printer &p, std::string name, StdVideoVP9FrameType value) {
+    p.PrintKeyString(name, StdVideoVP9FrameTypeString(value));
+}
+std::string StdVideoVP9ReferenceNameString(StdVideoVP9ReferenceName value) {
+    switch (value) {
+        case STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME";
+        case STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME";
+        case STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME";
+        case STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME: return "STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME";
+        case STD_VIDEO_VP9_REFERENCE_NAME_INVALID: return "STD_VIDEO_VP9_REFERENCE_NAME_INVALID";
+        default: return std::string("UNKNOWN_StdVideoVP9ReferenceName_value") + std::to_string(value);
+    }
+}
+void DumpStdVideoVP9ReferenceName(Printer &p, std::string name, StdVideoVP9ReferenceName value) {
+    p.PrintKeyString(name, StdVideoVP9ReferenceNameString(value));
+}
+std::string StdVideoVP9InterpolationFilterString(StdVideoVP9InterpolationFilter value) {
+    switch (value) {
+        case STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP";
+        case STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH";
+        case STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP";
+        case STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR";
+        case STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE";
+        case STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID: return "STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID";
+        default: return std::string("UNKNOWN_StdVideoVP9InterpolationFilter_value") + std::to_string(value);
+    }
+}
+void DumpStdVideoVP9InterpolationFilter(Printer &p, std::string name, StdVideoVP9InterpolationFilter value) {
+    p.PrintKeyString(name, StdVideoVP9InterpolationFilterString(value));
+}
+std::string StdVideoVP9ColorSpaceString(StdVideoVP9ColorSpace value) {
+    switch (value) {
+        case STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN: return "STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN";
+        case STD_VIDEO_VP9_COLOR_SPACE_BT_601: return "STD_VIDEO_VP9_COLOR_SPACE_BT_601";
+        case STD_VIDEO_VP9_COLOR_SPACE_BT_709: return "STD_VIDEO_VP9_COLOR_SPACE_BT_709";
+        case STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170: return "STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170";
+        case STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240: return "STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240";
+        case STD_VIDEO_VP9_COLOR_SPACE_BT_2020: return "STD_VIDEO_VP9_COLOR_SPACE_BT_2020";
+        case STD_VIDEO_VP9_COLOR_SPACE_RESERVED: return "STD_VIDEO_VP9_COLOR_SPACE_RESERVED";
+        case STD_VIDEO_VP9_COLOR_SPACE_RGB: return "STD_VIDEO_VP9_COLOR_SPACE_RGB";
+        case STD_VIDEO_VP9_COLOR_SPACE_INVALID: return "STD_VIDEO_VP9_COLOR_SPACE_INVALID";
+        default: return std::string("UNKNOWN_StdVideoVP9ColorSpace_value") + std::to_string(value);
+    }
+}
+void DumpStdVideoVP9ColorSpace(Printer &p, std::string name, StdVideoVP9ColorSpace value) {
+    p.PrintKeyString(name, StdVideoVP9ColorSpaceString(value));
+}
 std::string VkColorSpaceKHRString(VkColorSpaceKHR value) {
     switch (value) {
         case (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR): return "COLOR_SPACE_SRGB_NONLINEAR_KHR";
@@ -3073,7 +3073,7 @@
 }
 void DumpVkExtensionProperties(Printer &p, std::string name, const VkExtensionProperties &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(18);
+    p.SetMinKeyWidth(13);
     p.PrintKeyString("extensionName", obj.extensionName);
     p.PrintKeyValue("specVersion", obj.specVersion);
 }
@@ -3456,7 +3456,7 @@
 }
 void DumpVkPhysicalDeviceDriverProperties(Printer &p, std::string name, const VkPhysicalDeviceDriverProperties &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(15);
+    p.SetMinKeyWidth(10);
     DumpVkDriverId(p, "driverID", obj.driverID);
     p.PrintKeyString("driverName", obj.driverName);
     p.PrintKeyString("driverInfo", obj.driverInfo);
@@ -3739,7 +3739,7 @@
 }
 void DumpVkPhysicalDeviceHostImageCopyProperties(Printer &p, std::string name, const VkPhysicalDeviceHostImageCopyProperties &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(35);
+    p.SetMinKeyWidth(31);
     p.PrintKeyValue("copySrcLayoutCount", obj.copySrcLayoutCount);
     if (obj.copySrcLayoutCount == 0 || obj.pCopySrcLayouts == nullptr) {
         p.PrintKeyString("pCopySrcLayouts", "NULL");
@@ -3835,7 +3835,7 @@
 }
 void DumpVkPhysicalDeviceLayeredApiPropertiesKHR(Printer &p, std::string name, const VkPhysicalDeviceLayeredApiPropertiesKHR &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(15);
+    p.SetMinKeyWidth(10);
     p.PrintKeyValue("vendorID", to_hex_str(p, obj.vendorID));
     p.PrintKeyValue("deviceID", to_hex_str(p, obj.deviceID));
     DumpVkPhysicalDeviceLayeredApiKHR(p, "layeredAPI", obj.layeredAPI);
@@ -3843,7 +3843,7 @@
 }
 void DumpVkPhysicalDeviceLayeredApiPropertiesListKHR(Printer &p, std::string name, const VkPhysicalDeviceLayeredApiPropertiesListKHR &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(29);
+    p.SetMinKeyWidth(15);
     p.PrintKeyValue("layeredApiCount", obj.layeredApiCount);
     if (obj.layeredApiCount == 0 || obj.pLayeredApis == nullptr) {
         p.PrintKeyString("pLayeredApis", "NULL");
@@ -4106,14 +4106,13 @@
 }
 void DumpVkPhysicalDeviceMemoryBudgetPropertiesEXT(Printer &p, std::string name, const VkPhysicalDeviceMemoryBudgetPropertiesEXT &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(14);
     {
-        ArrayWrapper arr(p,"heapBudget", 16);
-        for (uint32_t i = 0; i < 16; i++) { p.PrintElement(obj.heapBudget[i]); }
+        ArrayWrapper arr(p,"heapBudget", VK_MAX_MEMORY_HEAPS);
+        for (uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; i++) { p.PrintElement(obj.heapBudget[i]); }
     }
     {
-        ArrayWrapper arr(p,"heapUsage", 16);
-        for (uint32_t i = 0; i < 16; i++) { p.PrintElement(obj.heapUsage[i]); }
+        ArrayWrapper arr(p,"heapUsage", VK_MAX_MEMORY_HEAPS);
+        for (uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; i++) { p.PrintElement(obj.heapUsage[i]); }
     }
 }
 void DumpVkPhysicalDeviceMemoryPriorityFeaturesEXT(Printer &p, std::string name, const VkPhysicalDeviceMemoryPriorityFeaturesEXT &obj) {
@@ -4478,7 +4477,7 @@
 }
 void DumpVkPhysicalDeviceSampleLocationsPropertiesEXT(Printer &p, std::string name, const VkPhysicalDeviceSampleLocationsPropertiesEXT &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(32);
+    p.SetMinKeyWidth(26);
     DumpVkSampleCountFlags(p, "sampleLocationSampleCounts", obj.sampleLocationSampleCounts);
     DumpVkExtent2D(p, "maxSampleLocationGridSize", obj.maxSampleLocationGridSize);
     {
@@ -4649,7 +4648,7 @@
 }
 void DumpVkPhysicalDeviceShaderModuleIdentifierPropertiesEXT(Printer &p, std::string name, const VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(39);
+    p.SetMinKeyWidth(35);
     p.PrintKeyValue("shaderModuleIdentifierAlgorithmUUID", obj.shaderModuleIdentifierAlgorithmUUID);
 }
 void DumpVkPhysicalDeviceShaderObjectFeaturesEXT(Printer &p, std::string name, const VkPhysicalDeviceShaderObjectFeaturesEXT &obj) {
@@ -4659,7 +4658,7 @@
 }
 void DumpVkPhysicalDeviceShaderObjectPropertiesEXT(Printer &p, std::string name, const VkPhysicalDeviceShaderObjectPropertiesEXT &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(20);
+    p.SetMinKeyWidth(19);
     p.PrintKeyValue("shaderBinaryUUID", obj.shaderBinaryUUID);
     p.PrintKeyValue("shaderBinaryVersion", obj.shaderBinaryVersion);
 }
@@ -4798,7 +4797,7 @@
 }
 void DumpVkPhysicalDeviceToolProperties(Printer &p, std::string name, const VkPhysicalDeviceToolProperties &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(16);
+    p.SetMinKeyWidth(11);
     p.PrintKeyString("name", obj.name);
     p.PrintKeyString("version", obj.version);
     DumpVkToolPurposeFlags(p, "purposes", obj.purposes);
@@ -5216,7 +5215,7 @@
 }
 void DumpVkQueueFamilyGlobalPriorityProperties(Printer &p, std::string name, const VkQueueFamilyGlobalPriorityProperties &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(14);
+    p.SetMinKeyWidth(13);
     p.PrintKeyValue("priorityCount", obj.priorityCount);
     ArrayWrapper arr(p,"priorities", obj.priorityCount);
     for (uint32_t i = 0; i < obj.priorityCount; i++) {
@@ -5287,7 +5286,7 @@
 }
 void DumpVkSurfacePresentModeCompatibilityKHR(Printer &p, std::string name, const VkSurfacePresentModeCompatibilityKHR &obj) {
     ObjectWrapper object{p, name};
-    p.SetMinKeyWidth(31);
+    p.SetMinKeyWidth(16);
     p.PrintKeyValue("presentModeCount", obj.presentModeCount);
     if (obj.presentModeCount == 0 || obj.pPresentModes == nullptr) {
         p.PrintKeyString("pPresentModes", "NULL");
@@ -5701,8 +5700,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceConservativeRasterizationPropertiesEXT));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_COOPERATIVE_MATRIX_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceCooperativeMatrixPropertiesKHR));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_COPY_MEMORY_INDIRECT_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_COPY_MEMORY_INDIRECT_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceCopyMemoryIndirectPropertiesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceCustomBorderColorPropertiesEXT));
@@ -5760,8 +5759,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceLayeredApiPropertiesListKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceLegacyVertexAttributesPropertiesEXT));
-        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME))
+        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_4 || show_promoted_structs))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceLineRasterizationProperties));
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_MAINTENANCE_3_EXTENSION_NAME))
@@ -5818,8 +5817,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDevicePushDescriptorProperties));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceRayTracingPipelinePropertiesKHR));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_ROBUSTNESS_2_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_ROBUSTNESS_2_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceRobustness2PropertiesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceSampleLocationsPropertiesEXT));
@@ -6641,8 +6640,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceBufferDeviceAddressFeaturesEXT));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceColorWriteEnableFeaturesEXT));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceComputeShaderDerivativesFeaturesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceConditionalRenderingFeaturesEXT));
@@ -6656,8 +6655,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceDepthBiasControlFeaturesEXT));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_DEPTH_CLAMP_CONTROL_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceDepthClampControlFeaturesEXT));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceDepthClampZeroOneFeaturesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceDepthClipControlFeaturesEXT));
@@ -6695,8 +6694,8 @@
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME)
          || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceFragmentShaderBarycentricFeaturesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceFragmentShaderInterlockFeaturesEXT));
@@ -6732,8 +6731,8 @@
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_2 || show_promoted_structs))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceImagelessFramebufferFeatures));
-        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME))
+        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_4 || show_promoted_structs))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceIndexTypeUint8Features));
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME))
@@ -6743,8 +6742,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceLegacyDitheringFeaturesEXT));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_LEGACY_VERTEX_ATTRIBUTES_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceLegacyVertexAttributesFeaturesEXT));
-        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME))
+        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_4 || show_promoted_structs))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceLineRasterizationFeatures));
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_MAINTENANCE_4_EXTENSION_NAME))
@@ -6813,8 +6812,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDevicePresentId2FeaturesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_PRESENT_ID_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDevicePresentIdFeaturesKHR));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDevicePresentWait2FeaturesKHR));
@@ -6844,8 +6843,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceRayTracingPipelineFeaturesKHR));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceRayTracingPositionFetchFeaturesKHR));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_ROBUSTNESS_2_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_ROBUSTNESS_2_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceRobustness2FeaturesKHR));
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_1 || show_promoted_structs))
@@ -6920,8 +6919,8 @@
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceSubgroupSizeControlFeatures));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_SUBPASS_MERGE_FEEDBACK_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceSubpassMergeFeedbackFeaturesEXT));
-        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME))
+        if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceSwapchainMaintenance1FeaturesKHR));
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_3 || show_promoted_structs))
@@ -6944,8 +6943,8 @@
         if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_1 || show_promoted_structs))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceVariablePointersFeatures));
-        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME)
-         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME))
+        if ((gpu.CheckPhysicalDeviceExtensionIncluded(VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME)
+         || gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME))
             && (gpu.api_version < VK_API_VERSION_1_4 || show_promoted_structs))
             chain_members.push_back(reinterpret_cast<VkBaseOutStructure*>(&PhysicalDeviceVertexAttributeDivisorFeatures));
         if (gpu.CheckPhysicalDeviceExtensionIncluded(VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME))
@@ -7212,7 +7211,7 @@
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES) {
             const VkPhysicalDeviceGlobalPriorityQueryFeatures* props = (const VkPhysicalDeviceGlobalPriorityQueryFeatures*)structure;
-            DumpVkPhysicalDeviceGlobalPriorityQueryFeatures(p, gpu.api_version >= VK_API_VERSION_1_4 ?"VkPhysicalDeviceGlobalPriorityQueryFeatures":"VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT", *props);
+            DumpVkPhysicalDeviceGlobalPriorityQueryFeatures(p, gpu.api_version >= VK_API_VERSION_1_4 ?"VkPhysicalDeviceGlobalPriorityQueryFeatures":"VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR", *props);
             p.AddNewline();
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT) {
@@ -7564,7 +7563,7 @@
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES) {
             const VkPhysicalDeviceShaderFloat16Int8Features* props = (const VkPhysicalDeviceShaderFloat16Int8Features*)structure;
-            DumpVkPhysicalDeviceShaderFloat16Int8Features(p, gpu.api_version >= VK_API_VERSION_1_2 ?"VkPhysicalDeviceShaderFloat16Int8Features":"VkPhysicalDeviceFloat16Int8FeaturesKHR", *props);
+            DumpVkPhysicalDeviceShaderFloat16Int8Features(p, gpu.api_version >= VK_API_VERSION_1_2 ?"VkPhysicalDeviceShaderFloat16Int8Features":"VkPhysicalDeviceShaderFloat16Int8FeaturesKHR", *props);
             p.AddNewline();
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT) {
@@ -7699,7 +7698,7 @@
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES) {
             const VkPhysicalDeviceVariablePointersFeatures* props = (const VkPhysicalDeviceVariablePointersFeatures*)structure;
-            DumpVkPhysicalDeviceVariablePointersFeatures(p, gpu.api_version >= VK_API_VERSION_1_1 ?"VkPhysicalDeviceVariablePointersFeatures":"VkPhysicalDeviceVariablePointersFeaturesKHR", *props);
+            DumpVkPhysicalDeviceVariablePointersFeatures(p, gpu.api_version >= VK_API_VERSION_1_1 ?"VkPhysicalDeviceVariablePointersFeatures":"VkPhysicalDeviceVariablePointerFeatures", *props);
             p.AddNewline();
         }
         if (structure->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES) {
@@ -7997,7 +7996,7 @@
         p.SetSubHeader();
         if (structure->sType == VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES) {
             const VkQueueFamilyGlobalPriorityProperties* props = (const VkQueueFamilyGlobalPriorityProperties*)structure;
-            DumpVkQueueFamilyGlobalPriorityProperties(p, gpu.api_version >= VK_API_VERSION_1_4 ?"VkQueueFamilyGlobalPriorityProperties":"VkQueueFamilyGlobalPriorityPropertiesEXT", *props);
+            DumpVkQueueFamilyGlobalPriorityProperties(p, gpu.api_version >= VK_API_VERSION_1_4 ?"VkQueueFamilyGlobalPriorityProperties":"VkQueueFamilyGlobalPriorityPropertiesKHR", *props);
             p.AddNewline();
         }
         if (structure->sType == VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR) {