Edit

IABSD.fr/xenocara/lib/mesa/generated/src/vulkan/runtime/vk_cmd_queue.c

Branch :

  • Show log

    Commit

  • Author : jsg
    Date : 2025-06-05 14:17:56
    Hash : 452696b8
    Message : Merge Mesa 25.0.7

  • lib/mesa/generated/src/vulkan/runtime/vk_cmd_queue.c
  • /* Copyright © 2015-2021 Intel Corporation
     * Copyright © 2021 Collabora, Ltd.
     *
     * Permission is hereby granted, free of charge, to any person obtaining a
     * copy of this software and associated documentation files (the "Software"),
     * to deal in the Software without restriction, including without limitation
     * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     * and/or sell copies of the Software, and to permit persons to whom the
     * Software is furnished to do so, subject to the following conditions:
     *
     * The above copyright notice and this permission notice (including the next
     * paragraph) shall be included in all copies or substantial portions of the
     * Software.
     *
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     * IN THE SOFTWARE.
     */
    
    /* This file generated from vk_cmd_queue_gen.py, don't edit directly. */
    
    #include "vk_cmd_queue.h"
    
    #define VK_PROTOTYPES
    #include <vulkan/vulkan_core.h>
    #ifdef VK_ENABLE_BETA_EXTENSIONS
    #include <vulkan/vulkan_beta.h>
    #endif
    
    #include "vk_alloc.h"
    #include "vk_cmd_enqueue_entrypoints.h"
    #include "vk_command_buffer.h"
    #include "vk_dispatch_table.h"
    #include "vk_device.h"
    
    const char *vk_cmd_queue_type_names[] = {
       "VK_CMD_BIND_PIPELINE",
       "VK_CMD_SET_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT",
       "VK_CMD_SET_VIEWPORT",
       "VK_CMD_SET_SCISSOR",
       "VK_CMD_SET_LINE_WIDTH",
       "VK_CMD_SET_DEPTH_BIAS",
       "VK_CMD_SET_BLEND_CONSTANTS",
       "VK_CMD_SET_DEPTH_BOUNDS",
       "VK_CMD_SET_STENCIL_COMPARE_MASK",
       "VK_CMD_SET_STENCIL_WRITE_MASK",
       "VK_CMD_SET_STENCIL_REFERENCE",
       "VK_CMD_BIND_DESCRIPTOR_SETS",
       "VK_CMD_BIND_INDEX_BUFFER",
       "VK_CMD_BIND_VERTEX_BUFFERS",
       "VK_CMD_DRAW",
       "VK_CMD_DRAW_INDEXED",
       "VK_CMD_DRAW_MULTI_EXT",
       "VK_CMD_DRAW_MULTI_INDEXED_EXT",
       "VK_CMD_DRAW_INDIRECT",
       "VK_CMD_DRAW_INDEXED_INDIRECT",
       "VK_CMD_DISPATCH",
       "VK_CMD_DISPATCH_INDIRECT",
       "VK_CMD_SUBPASS_SHADING_HUAWEI",
       "VK_CMD_DRAW_CLUSTER_HUAWEI",
       "VK_CMD_DRAW_CLUSTER_INDIRECT_HUAWEI",
       "VK_CMD_UPDATE_PIPELINE_INDIRECT_BUFFER_NV",
       "VK_CMD_COPY_BUFFER",
       "VK_CMD_COPY_IMAGE",
       "VK_CMD_BLIT_IMAGE",
       "VK_CMD_COPY_BUFFER_TO_IMAGE",
       "VK_CMD_COPY_IMAGE_TO_BUFFER",
       "VK_CMD_COPY_MEMORY_INDIRECT_NV",
       "VK_CMD_COPY_MEMORY_TO_IMAGE_INDIRECT_NV",
       "VK_CMD_UPDATE_BUFFER",
       "VK_CMD_FILL_BUFFER",
       "VK_CMD_CLEAR_COLOR_IMAGE",
       "VK_CMD_CLEAR_DEPTH_STENCIL_IMAGE",
       "VK_CMD_CLEAR_ATTACHMENTS",
       "VK_CMD_RESOLVE_IMAGE",
       "VK_CMD_SET_EVENT",
       "VK_CMD_RESET_EVENT",
       "VK_CMD_WAIT_EVENTS",
       "VK_CMD_PIPELINE_BARRIER",
       "VK_CMD_BEGIN_QUERY",
       "VK_CMD_END_QUERY",
       "VK_CMD_BEGIN_CONDITIONAL_RENDERING_EXT",
       "VK_CMD_END_CONDITIONAL_RENDERING_EXT",
       "VK_CMD_RESET_QUERY_POOL",
       "VK_CMD_WRITE_TIMESTAMP",
       "VK_CMD_COPY_QUERY_POOL_RESULTS",
       "VK_CMD_PUSH_CONSTANTS",
       "VK_CMD_BEGIN_RENDER_PASS",
       "VK_CMD_NEXT_SUBPASS",
       "VK_CMD_END_RENDER_PASS",
       "VK_CMD_EXECUTE_COMMANDS",
       "VK_CMD_DEBUG_MARKER_BEGIN_EXT",
       "VK_CMD_DEBUG_MARKER_END_EXT",
       "VK_CMD_DEBUG_MARKER_INSERT_EXT",
       "VK_CMD_EXECUTE_GENERATED_COMMANDS_NV",
       "VK_CMD_PREPROCESS_GENERATED_COMMANDS_NV",
       "VK_CMD_BIND_PIPELINE_SHADER_GROUP_NV",
       "VK_CMD_EXECUTE_GENERATED_COMMANDS_EXT",
       "VK_CMD_PREPROCESS_GENERATED_COMMANDS_EXT",
       "VK_CMD_PUSH_DESCRIPTOR_SET",
       "VK_CMD_SET_DEVICE_MASK",
       "VK_CMD_DISPATCH_BASE",
       "VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE",
       "VK_CMD_SET_VIEWPORT_WSCALING_NV",
       "VK_CMD_SET_DISCARD_RECTANGLE_EXT",
       "VK_CMD_SET_DISCARD_RECTANGLE_ENABLE_EXT",
       "VK_CMD_SET_DISCARD_RECTANGLE_MODE_EXT",
       "VK_CMD_SET_SAMPLE_LOCATIONS_EXT",
       "VK_CMD_BEGIN_DEBUG_UTILS_LABEL_EXT",
       "VK_CMD_END_DEBUG_UTILS_LABEL_EXT",
       "VK_CMD_INSERT_DEBUG_UTILS_LABEL_EXT",
       "VK_CMD_WRITE_BUFFER_MARKER_AMD",
       "VK_CMD_BEGIN_RENDER_PASS2",
       "VK_CMD_NEXT_SUBPASS2",
       "VK_CMD_END_RENDER_PASS2",
       "VK_CMD_DRAW_INDIRECT_COUNT",
       "VK_CMD_DRAW_INDEXED_INDIRECT_COUNT",
       "VK_CMD_SET_CHECKPOINT_NV",
       "VK_CMD_BIND_TRANSFORM_FEEDBACK_BUFFERS_EXT",
       "VK_CMD_BEGIN_TRANSFORM_FEEDBACK_EXT",
       "VK_CMD_END_TRANSFORM_FEEDBACK_EXT",
       "VK_CMD_BEGIN_QUERY_INDEXED_EXT",
       "VK_CMD_END_QUERY_INDEXED_EXT",
       "VK_CMD_DRAW_INDIRECT_BYTE_COUNT_EXT",
       "VK_CMD_SET_EXCLUSIVE_SCISSOR_NV",
       "VK_CMD_SET_EXCLUSIVE_SCISSOR_ENABLE_NV",
       "VK_CMD_BIND_SHADING_RATE_IMAGE_NV",
       "VK_CMD_SET_VIEWPORT_SHADING_RATE_PALETTE_NV",
       "VK_CMD_SET_COARSE_SAMPLE_ORDER_NV",
       "VK_CMD_DRAW_MESH_TASKS_NV",
       "VK_CMD_DRAW_MESH_TASKS_INDIRECT_NV",
       "VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_NV",
       "VK_CMD_DRAW_MESH_TASKS_EXT",
       "VK_CMD_DRAW_MESH_TASKS_INDIRECT_EXT",
       "VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_EXT",
       "VK_CMD_BIND_INVOCATION_MASK_HUAWEI",
       "VK_CMD_COPY_ACCELERATION_STRUCTURE_NV",
       "VK_CMD_COPY_ACCELERATION_STRUCTURE_KHR",
       "VK_CMD_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR",
       "VK_CMD_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR",
       "VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR",
       "VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV",
       "VK_CMD_BUILD_ACCELERATION_STRUCTURE_NV",
       "VK_CMD_TRACE_RAYS_KHR",
       "VK_CMD_TRACE_RAYS_NV",
       "VK_CMD_TRACE_RAYS_INDIRECT_KHR",
       "VK_CMD_TRACE_RAYS_INDIRECT2_KHR",
       "VK_CMD_SET_RAY_TRACING_PIPELINE_STACK_SIZE_KHR",
       "VK_CMD_SET_PERFORMANCE_MARKER_INTEL",
       "VK_CMD_SET_PERFORMANCE_STREAM_MARKER_INTEL",
       "VK_CMD_SET_PERFORMANCE_OVERRIDE_INTEL",
       "VK_CMD_SET_LINE_STIPPLE",
       "VK_CMD_BUILD_ACCELERATION_STRUCTURES_KHR",
       "VK_CMD_BUILD_ACCELERATION_STRUCTURES_INDIRECT_KHR",
       "VK_CMD_SET_CULL_MODE",
       "VK_CMD_SET_FRONT_FACE",
       "VK_CMD_SET_PRIMITIVE_TOPOLOGY",
       "VK_CMD_SET_VIEWPORT_WITH_COUNT",
       "VK_CMD_SET_SCISSOR_WITH_COUNT",
       "VK_CMD_BIND_INDEX_BUFFER2",
       "VK_CMD_BIND_VERTEX_BUFFERS2",
       "VK_CMD_SET_DEPTH_TEST_ENABLE",
       "VK_CMD_SET_DEPTH_WRITE_ENABLE",
       "VK_CMD_SET_DEPTH_COMPARE_OP",
       "VK_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE",
       "VK_CMD_SET_STENCIL_TEST_ENABLE",
       "VK_CMD_SET_STENCIL_OP",
       "VK_CMD_SET_PATCH_CONTROL_POINTS_EXT",
       "VK_CMD_SET_RASTERIZER_DISCARD_ENABLE",
       "VK_CMD_SET_DEPTH_BIAS_ENABLE",
       "VK_CMD_SET_LOGIC_OP_EXT",
       "VK_CMD_SET_PRIMITIVE_RESTART_ENABLE",
       "VK_CMD_SET_TESSELLATION_DOMAIN_ORIGIN_EXT",
       "VK_CMD_SET_DEPTH_CLAMP_ENABLE_EXT",
       "VK_CMD_SET_POLYGON_MODE_EXT",
       "VK_CMD_SET_RASTERIZATION_SAMPLES_EXT",
       "VK_CMD_SET_SAMPLE_MASK_EXT",
       "VK_CMD_SET_ALPHA_TO_COVERAGE_ENABLE_EXT",
       "VK_CMD_SET_ALPHA_TO_ONE_ENABLE_EXT",
       "VK_CMD_SET_LOGIC_OP_ENABLE_EXT",
       "VK_CMD_SET_COLOR_BLEND_ENABLE_EXT",
       "VK_CMD_SET_COLOR_BLEND_EQUATION_EXT",
       "VK_CMD_SET_COLOR_WRITE_MASK_EXT",
       "VK_CMD_SET_RASTERIZATION_STREAM_EXT",
       "VK_CMD_SET_CONSERVATIVE_RASTERIZATION_MODE_EXT",
       "VK_CMD_SET_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT",
       "VK_CMD_SET_DEPTH_CLIP_ENABLE_EXT",
       "VK_CMD_SET_SAMPLE_LOCATIONS_ENABLE_EXT",
       "VK_CMD_SET_COLOR_BLEND_ADVANCED_EXT",
       "VK_CMD_SET_PROVOKING_VERTEX_MODE_EXT",
       "VK_CMD_SET_LINE_RASTERIZATION_MODE_EXT",
       "VK_CMD_SET_LINE_STIPPLE_ENABLE_EXT",
       "VK_CMD_SET_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT",
       "VK_CMD_SET_VIEWPORT_WSCALING_ENABLE_NV",
       "VK_CMD_SET_VIEWPORT_SWIZZLE_NV",
       "VK_CMD_SET_COVERAGE_TO_COLOR_ENABLE_NV",
       "VK_CMD_SET_COVERAGE_TO_COLOR_LOCATION_NV",
       "VK_CMD_SET_COVERAGE_MODULATION_MODE_NV",
       "VK_CMD_SET_COVERAGE_MODULATION_TABLE_ENABLE_NV",
       "VK_CMD_SET_COVERAGE_MODULATION_TABLE_NV",
       "VK_CMD_SET_SHADING_RATE_IMAGE_ENABLE_NV",
       "VK_CMD_SET_COVERAGE_REDUCTION_MODE_NV",
       "VK_CMD_SET_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV",
       "VK_CMD_COPY_BUFFER2",
       "VK_CMD_COPY_IMAGE2",
       "VK_CMD_BLIT_IMAGE2",
       "VK_CMD_COPY_BUFFER_TO_IMAGE2",
       "VK_CMD_COPY_IMAGE_TO_BUFFER2",
       "VK_CMD_RESOLVE_IMAGE2",
       "VK_CMD_SET_FRAGMENT_SHADING_RATE_KHR",
       "VK_CMD_SET_FRAGMENT_SHADING_RATE_ENUM_NV",
       "VK_CMD_SET_VERTEX_INPUT_EXT",
       "VK_CMD_SET_COLOR_WRITE_ENABLE_EXT",
       "VK_CMD_SET_EVENT2",
       "VK_CMD_RESET_EVENT2",
       "VK_CMD_WAIT_EVENTS2",
       "VK_CMD_PIPELINE_BARRIER2",
       "VK_CMD_WRITE_TIMESTAMP2",
       "VK_CMD_WRITE_BUFFER_MARKER2_AMD",
       "VK_CMD_DECODE_VIDEO_KHR",
       "VK_CMD_BEGIN_VIDEO_CODING_KHR",
       "VK_CMD_CONTROL_VIDEO_CODING_KHR",
       "VK_CMD_END_VIDEO_CODING_KHR",
       "VK_CMD_ENCODE_VIDEO_KHR",
       "VK_CMD_DECOMPRESS_MEMORY_NV",
       "VK_CMD_DECOMPRESS_MEMORY_INDIRECT_COUNT_NV",
       "VK_CMD_CU_LAUNCH_KERNEL_NVX",
       "VK_CMD_BIND_DESCRIPTOR_BUFFERS_EXT",
       "VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS_EXT",
       "VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_EXT",
       "VK_CMD_BEGIN_RENDERING",
       "VK_CMD_END_RENDERING",
       "VK_CMD_BUILD_MICROMAPS_EXT",
       "VK_CMD_COPY_MICROMAP_EXT",
       "VK_CMD_COPY_MICROMAP_TO_MEMORY_EXT",
       "VK_CMD_COPY_MEMORY_TO_MICROMAP_EXT",
       "VK_CMD_WRITE_MICROMAPS_PROPERTIES_EXT",
       "VK_CMD_OPTICAL_FLOW_EXECUTE_NV",
       "VK_CMD_SET_DEPTH_BIAS2_EXT",
       "VK_CMD_BIND_SHADERS_EXT",
       "VK_CMD_BIND_DESCRIPTOR_SETS2",
       "VK_CMD_PUSH_CONSTANTS2",
       "VK_CMD_PUSH_DESCRIPTOR_SET2",
       "VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE2",
       "VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS2_EXT",
       "VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS2_EXT",
       "VK_CMD_SET_RENDERING_ATTACHMENT_LOCATIONS",
       "VK_CMD_SET_RENDERING_INPUT_ATTACHMENT_INDICES",
       "VK_CMD_SET_DEPTH_CLAMP_RANGE_EXT",
    };
    
    size_t vk_cmd_queue_type_sizes[] = {
       sizeof(struct vk_cmd_bind_pipeline) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_attachment_feedback_loop_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_viewport) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_scissor) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_line_width) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_bias) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_blend_constants) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_bounds) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_stencil_compare_mask) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_stencil_write_mask) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_stencil_reference) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_descriptor_sets) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_index_buffer) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_vertex_buffers) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_indexed) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_multi_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_multi_indexed_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_indirect) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_indexed_indirect) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_dispatch) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_dispatch_indirect) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_cluster_huawei) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_cluster_indirect_huawei) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_update_pipeline_indirect_buffer_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_buffer) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_image) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_blit_image) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_buffer_to_image) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_image_to_buffer) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_memory_indirect_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_memory_to_image_indirect_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_update_buffer) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_fill_buffer) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_clear_color_image) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_clear_depth_stencil_image) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_clear_attachments) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_resolve_image) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_event) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_reset_event) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_wait_events) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_pipeline_barrier) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_query) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_end_query) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_conditional_rendering_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_reset_query_pool) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_timestamp) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_query_pool_results) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_push_constants) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_render_pass) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_next_subpass) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_execute_commands) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_debug_marker_begin_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_debug_marker_insert_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_execute_generated_commands_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_preprocess_generated_commands_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_pipeline_shader_group_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_execute_generated_commands_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_preprocess_generated_commands_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_push_descriptor_set) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_device_mask) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_dispatch_base) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_push_descriptor_set_with_template) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_viewport_wscaling_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_discard_rectangle_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_discard_rectangle_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_discard_rectangle_mode_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_sample_locations_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_debug_utils_label_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_insert_debug_utils_label_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_buffer_marker_amd) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_render_pass2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_next_subpass2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_end_render_pass2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_indirect_count) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_indexed_indirect_count) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_checkpoint_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_transform_feedback_buffers_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_transform_feedback_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_end_transform_feedback_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_query_indexed_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_end_query_indexed_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_indirect_byte_count_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_exclusive_scissor_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_exclusive_scissor_enable_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_shading_rate_image_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_viewport_shading_rate_palette_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coarse_sample_order_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_mesh_tasks_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_mesh_tasks_indirect_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_mesh_tasks_indirect_count_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_mesh_tasks_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_mesh_tasks_indirect_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_draw_mesh_tasks_indirect_count_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_invocation_mask_huawei) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_acceleration_structure_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_acceleration_structure_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_acceleration_structure_to_memory_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_memory_to_acceleration_structure_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_acceleration_structures_properties_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_acceleration_structures_properties_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_build_acceleration_structure_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_trace_rays_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_trace_rays_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_trace_rays_indirect_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_trace_rays_indirect2_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_ray_tracing_pipeline_stack_size_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_performance_marker_intel) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_performance_stream_marker_intel) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_performance_override_intel) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_line_stipple) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_build_acceleration_structures_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_build_acceleration_structures_indirect_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_cull_mode) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_front_face) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_primitive_topology) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_viewport_with_count) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_scissor_with_count) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_index_buffer2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_vertex_buffers2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_test_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_write_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_compare_op) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_bounds_test_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_stencil_test_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_stencil_op) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_patch_control_points_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_rasterizer_discard_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_bias_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_logic_op_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_primitive_restart_enable) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_tessellation_domain_origin_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_clamp_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_polygon_mode_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_rasterization_samples_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_sample_mask_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_alpha_to_coverage_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_alpha_to_one_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_logic_op_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_color_blend_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_color_blend_equation_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_color_write_mask_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_rasterization_stream_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_conservative_rasterization_mode_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_extra_primitive_overestimation_size_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_clip_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_sample_locations_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_color_blend_advanced_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_provoking_vertex_mode_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_line_rasterization_mode_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_line_stipple_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_clip_negative_one_to_one_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_viewport_wscaling_enable_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_viewport_swizzle_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coverage_to_color_enable_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coverage_to_color_location_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coverage_modulation_mode_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coverage_modulation_table_enable_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coverage_modulation_table_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_shading_rate_image_enable_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_coverage_reduction_mode_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_representative_fragment_test_enable_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_buffer2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_image2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_blit_image2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_buffer_to_image2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_image_to_buffer2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_resolve_image2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_fragment_shading_rate_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_fragment_shading_rate_enum_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_vertex_input_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_color_write_enable_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_event2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_reset_event2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_wait_events2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_pipeline_barrier2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_timestamp2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_buffer_marker2_amd) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_decode_video_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_video_coding_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_control_video_coding_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_end_video_coding_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_encode_video_khr) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_decompress_memory_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_decompress_memory_indirect_count_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_cu_launch_kernel_nvx) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_descriptor_buffers_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_descriptor_buffer_offsets_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_descriptor_buffer_embedded_samplers_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_begin_rendering) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_build_micromaps_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_micromap_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_micromap_to_memory_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_copy_memory_to_micromap_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_write_micromaps_properties_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_optical_flow_execute_nv) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_bias2_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_shaders_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_descriptor_sets2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_push_constants2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_push_descriptor_set2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_push_descriptor_set_with_template2) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_descriptor_buffer_offsets2_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_bind_descriptor_buffer_embedded_samplers2_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_rendering_attachment_locations) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_rendering_input_attachment_indices) +
       sizeof(struct vk_cmd_queue_entry_base),
       sizeof(struct vk_cmd_set_depth_clamp_range_ext) +
       sizeof(struct vk_cmd_queue_entry_base),
    };
    
    static void
    vk_free_cmd_bind_pipeline(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_pipeline(struct vk_cmd_queue *queue
    , VkPipelineBindPoint pipelineBindPoint
    , VkPipeline pipeline
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_PIPELINE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_PIPELINE;
          
       cmd->u.bind_pipeline.pipeline_bind_point = pipelineBindPoint;
       cmd->u.bind_pipeline.pipeline = pipeline;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_attachment_feedback_loop_enable_ext(struct vk_cmd_queue *queue,
                                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_attachment_feedback_loop_enable_ext(struct vk_cmd_queue *queue
    , VkImageAspectFlags aspectMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT;
          
       cmd->u.set_attachment_feedback_loop_enable_ext.aspect_mask = aspectMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_viewport(struct vk_cmd_queue *queue,
                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkViewport* )cmd->u.set_viewport.viewports);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_viewport(struct vk_cmd_queue *queue
    , uint32_t firstViewport
    , uint32_t viewportCount
    , const VkViewport* pViewports
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VIEWPORT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VIEWPORT;
          
       cmd->u.set_viewport.first_viewport = firstViewport;
       cmd->u.set_viewport.viewport_count = viewportCount;
       if (pViewports) {
          cmd->u.set_viewport.viewports = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_viewport.viewports) * (viewportCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_viewport.viewports == NULL) goto err;
    
       memcpy((void*)cmd->u.set_viewport.viewports, pViewports, sizeof(*cmd->u.set_viewport.viewports) * (viewportCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_viewport(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_scissor(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkRect2D* )cmd->u.set_scissor.scissors);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_scissor(struct vk_cmd_queue *queue
    , uint32_t firstScissor
    , uint32_t scissorCount
    , const VkRect2D* pScissors
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_SCISSOR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_SCISSOR;
          
       cmd->u.set_scissor.first_scissor = firstScissor;
       cmd->u.set_scissor.scissor_count = scissorCount;
       if (pScissors) {
          cmd->u.set_scissor.scissors = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_scissor.scissors) * (scissorCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_scissor.scissors == NULL) goto err;
    
       memcpy((void*)cmd->u.set_scissor.scissors, pScissors, sizeof(*cmd->u.set_scissor.scissors) * (scissorCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_scissor(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_line_width(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_line_width(struct vk_cmd_queue *queue
    , float lineWidth
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_LINE_WIDTH], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_LINE_WIDTH;
          
       cmd->u.set_line_width.line_width = lineWidth;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_bias(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_bias(struct vk_cmd_queue *queue
    , float depthBiasConstantFactor
    , float depthBiasClamp
    , float depthBiasSlopeFactor
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_BIAS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_BIAS;
          
       cmd->u.set_depth_bias.depth_bias_constant_factor = depthBiasConstantFactor;
       cmd->u.set_depth_bias.depth_bias_clamp = depthBiasClamp;
       cmd->u.set_depth_bias.depth_bias_slope_factor = depthBiasSlopeFactor;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_blend_constants(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_blend_constants(struct vk_cmd_queue *queue
    , const float blendConstants[4]
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_BLEND_CONSTANTS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_BLEND_CONSTANTS;
          
       memcpy(cmd->u.set_blend_constants.blend_constants, blendConstants,
              sizeof(*blendConstants) * 4);
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_bounds(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_bounds(struct vk_cmd_queue *queue
    , float minDepthBounds
    , float maxDepthBounds
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_BOUNDS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_BOUNDS;
          
       cmd->u.set_depth_bounds.min_depth_bounds = minDepthBounds;
       cmd->u.set_depth_bounds.max_depth_bounds = maxDepthBounds;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_stencil_compare_mask(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_stencil_compare_mask(struct vk_cmd_queue *queue
    , VkStencilFaceFlags faceMask
    , uint32_t compareMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_STENCIL_COMPARE_MASK], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_STENCIL_COMPARE_MASK;
          
       cmd->u.set_stencil_compare_mask.face_mask = faceMask;
       cmd->u.set_stencil_compare_mask.compare_mask = compareMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_stencil_write_mask(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_stencil_write_mask(struct vk_cmd_queue *queue
    , VkStencilFaceFlags faceMask
    , uint32_t writeMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_STENCIL_WRITE_MASK], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_STENCIL_WRITE_MASK;
          
       cmd->u.set_stencil_write_mask.face_mask = faceMask;
       cmd->u.set_stencil_write_mask.write_mask = writeMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_stencil_reference(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_stencil_reference(struct vk_cmd_queue *queue
    , VkStencilFaceFlags faceMask
    , uint32_t reference
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_STENCIL_REFERENCE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_STENCIL_REFERENCE;
          
       cmd->u.set_stencil_reference.face_mask = faceMask;
       cmd->u.set_stencil_reference.reference = reference;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_bind_descriptor_sets(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkDescriptorSet* )cmd->u.bind_descriptor_sets.descriptor_sets);
       vk_free(queue->alloc, ( uint32_t* )cmd->u.bind_descriptor_sets.dynamic_offsets);
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_bind_index_buffer(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_index_buffer(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , VkIndexType indexType
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_INDEX_BUFFER], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_INDEX_BUFFER;
          
       cmd->u.bind_index_buffer.buffer = buffer;
       cmd->u.bind_index_buffer.offset = offset;
       cmd->u.bind_index_buffer.index_type = indexType;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_bind_vertex_buffers(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBuffer* )cmd->u.bind_vertex_buffers.buffers);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.bind_vertex_buffers.offsets);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_vertex_buffers(struct vk_cmd_queue *queue
    , uint32_t firstBinding
    , uint32_t bindingCount
    , const VkBuffer* pBuffers
    , const VkDeviceSize* pOffsets
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_VERTEX_BUFFERS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_VERTEX_BUFFERS;
          
       cmd->u.bind_vertex_buffers.first_binding = firstBinding;
       cmd->u.bind_vertex_buffers.binding_count = bindingCount;
       if (pBuffers) {
          cmd->u.bind_vertex_buffers.buffers = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_vertex_buffers.buffers) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_vertex_buffers.buffers == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_vertex_buffers.buffers, pBuffers, sizeof(*cmd->u.bind_vertex_buffers.buffers) * (bindingCount));
       }   
       if (pOffsets) {
          cmd->u.bind_vertex_buffers.offsets = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_vertex_buffers.offsets) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_vertex_buffers.offsets == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_vertex_buffers.offsets, pOffsets, sizeof(*cmd->u.bind_vertex_buffers.offsets) * (bindingCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_vertex_buffers(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_draw(struct vk_cmd_queue *queue,
                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw(struct vk_cmd_queue *queue
    , uint32_t vertexCount
    , uint32_t instanceCount
    , uint32_t firstVertex
    , uint32_t firstInstance
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW;
          
       cmd->u.draw.vertex_count = vertexCount;
       cmd->u.draw.instance_count = instanceCount;
       cmd->u.draw.first_vertex = firstVertex;
       cmd->u.draw.first_instance = firstInstance;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_indexed(struct vk_cmd_queue *queue,
                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_indexed(struct vk_cmd_queue *queue
    , uint32_t indexCount
    , uint32_t instanceCount
    , uint32_t firstIndex
    , int32_t vertexOffset
    , uint32_t firstInstance
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_INDEXED], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_INDEXED;
          
       cmd->u.draw_indexed.index_count = indexCount;
       cmd->u.draw_indexed.instance_count = instanceCount;
       cmd->u.draw_indexed.first_index = firstIndex;
       cmd->u.draw_indexed.vertex_offset = vertexOffset;
       cmd->u.draw_indexed.first_instance = firstInstance;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_multi_ext(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMultiDrawInfoEXT* )cmd->u.draw_multi_ext.vertex_info);
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_draw_multi_indexed_ext(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMultiDrawIndexedInfoEXT* )cmd->u.draw_multi_indexed_ext.index_info);
             vk_free(queue->alloc, ( int32_t* )cmd->u.draw_multi_indexed_ext.vertex_offset);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_draw_indirect(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_indirect(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , uint32_t drawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_INDIRECT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_INDIRECT;
          
       cmd->u.draw_indirect.buffer = buffer;
       cmd->u.draw_indirect.offset = offset;
       cmd->u.draw_indirect.draw_count = drawCount;
       cmd->u.draw_indirect.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_indexed_indirect(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_indexed_indirect(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , uint32_t drawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_INDEXED_INDIRECT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_INDEXED_INDIRECT;
          
       cmd->u.draw_indexed_indirect.buffer = buffer;
       cmd->u.draw_indexed_indirect.offset = offset;
       cmd->u.draw_indexed_indirect.draw_count = drawCount;
       cmd->u.draw_indexed_indirect.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_dispatch(struct vk_cmd_queue *queue,
                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_dispatch(struct vk_cmd_queue *queue
    , uint32_t groupCountX
    , uint32_t groupCountY
    , uint32_t groupCountZ
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DISPATCH], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DISPATCH;
          
       cmd->u.dispatch.group_count_x = groupCountX;
       cmd->u.dispatch.group_count_y = groupCountY;
       cmd->u.dispatch.group_count_z = groupCountZ;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_dispatch_indirect(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_dispatch_indirect(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DISPATCH_INDIRECT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DISPATCH_INDIRECT;
          
       cmd->u.dispatch_indirect.buffer = buffer;
       cmd->u.dispatch_indirect.offset = offset;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_subpass_shading_huawei(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_subpass_shading_huawei(struct vk_cmd_queue *queue
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SUBPASS_SHADING_HUAWEI], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SUBPASS_SHADING_HUAWEI;
          
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_cluster_huawei(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_cluster_huawei(struct vk_cmd_queue *queue
    , uint32_t groupCountX
    , uint32_t groupCountY
    , uint32_t groupCountZ
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_CLUSTER_HUAWEI], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_CLUSTER_HUAWEI;
          
       cmd->u.draw_cluster_huawei.group_count_x = groupCountX;
       cmd->u.draw_cluster_huawei.group_count_y = groupCountY;
       cmd->u.draw_cluster_huawei.group_count_z = groupCountZ;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_cluster_indirect_huawei(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_cluster_indirect_huawei(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_CLUSTER_INDIRECT_HUAWEI], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_CLUSTER_INDIRECT_HUAWEI;
          
       cmd->u.draw_cluster_indirect_huawei.buffer = buffer;
       cmd->u.draw_cluster_indirect_huawei.offset = offset;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_update_pipeline_indirect_buffer_nv(struct vk_cmd_queue *queue,
                                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_update_pipeline_indirect_buffer_nv(struct vk_cmd_queue *queue
    , VkPipelineBindPoint           pipelineBindPoint
    , VkPipeline                    pipeline
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_UPDATE_PIPELINE_INDIRECT_BUFFER_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_UPDATE_PIPELINE_INDIRECT_BUFFER_NV;
          
       cmd->u.update_pipeline_indirect_buffer_nv.pipeline_bind_point = pipelineBindPoint;
       cmd->u.update_pipeline_indirect_buffer_nv.pipeline = pipeline;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_copy_buffer(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBufferCopy* )cmd->u.copy_buffer.regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_buffer(struct vk_cmd_queue *queue
    , VkBuffer srcBuffer
    , VkBuffer dstBuffer
    , uint32_t regionCount
    , const VkBufferCopy* pRegions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_BUFFER], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_BUFFER;
          
       cmd->u.copy_buffer.src_buffer = srcBuffer;
       cmd->u.copy_buffer.dst_buffer = dstBuffer;
       cmd->u.copy_buffer.region_count = regionCount;
       if (pRegions) {
          cmd->u.copy_buffer.regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.copy_buffer.regions) * (regionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.copy_buffer.regions == NULL) goto err;
    
       memcpy((void*)cmd->u.copy_buffer.regions, pRegions, sizeof(*cmd->u.copy_buffer.regions) * (regionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_buffer(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_image(struct vk_cmd_queue *queue,
                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageCopy* )cmd->u.copy_image.regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_image(struct vk_cmd_queue *queue
    , VkImage srcImage
    , VkImageLayout srcImageLayout
    , VkImage dstImage
    , VkImageLayout dstImageLayout
    , uint32_t regionCount
    , const VkImageCopy* pRegions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_IMAGE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_IMAGE;
          
       cmd->u.copy_image.src_image = srcImage;
       cmd->u.copy_image.src_image_layout = srcImageLayout;
       cmd->u.copy_image.dst_image = dstImage;
       cmd->u.copy_image.dst_image_layout = dstImageLayout;
       cmd->u.copy_image.region_count = regionCount;
       if (pRegions) {
          cmd->u.copy_image.regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.copy_image.regions) * (regionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.copy_image.regions == NULL) goto err;
    
       memcpy((void*)cmd->u.copy_image.regions, pRegions, sizeof(*cmd->u.copy_image.regions) * (regionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_image(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_blit_image(struct vk_cmd_queue *queue,
                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageBlit* )cmd->u.blit_image.regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_blit_image(struct vk_cmd_queue *queue
    , VkImage srcImage
    , VkImageLayout srcImageLayout
    , VkImage dstImage
    , VkImageLayout dstImageLayout
    , uint32_t regionCount
    , const VkImageBlit* pRegions
    , VkFilter filter
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BLIT_IMAGE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BLIT_IMAGE;
          
       cmd->u.blit_image.src_image = srcImage;
       cmd->u.blit_image.src_image_layout = srcImageLayout;
       cmd->u.blit_image.dst_image = dstImage;
       cmd->u.blit_image.dst_image_layout = dstImageLayout;
       cmd->u.blit_image.region_count = regionCount;
       if (pRegions) {
          cmd->u.blit_image.regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.blit_image.regions) * (regionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.blit_image.regions == NULL) goto err;
    
       memcpy((void*)cmd->u.blit_image.regions, pRegions, sizeof(*cmd->u.blit_image.regions) * (regionCount));
       }   
       cmd->u.blit_image.filter = filter;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_blit_image(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_buffer_to_image(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBufferImageCopy* )cmd->u.copy_buffer_to_image.regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_buffer_to_image(struct vk_cmd_queue *queue
    , VkBuffer srcBuffer
    , VkImage dstImage
    , VkImageLayout dstImageLayout
    , uint32_t regionCount
    , const VkBufferImageCopy* pRegions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_BUFFER_TO_IMAGE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_BUFFER_TO_IMAGE;
          
       cmd->u.copy_buffer_to_image.src_buffer = srcBuffer;
       cmd->u.copy_buffer_to_image.dst_image = dstImage;
       cmd->u.copy_buffer_to_image.dst_image_layout = dstImageLayout;
       cmd->u.copy_buffer_to_image.region_count = regionCount;
       if (pRegions) {
          cmd->u.copy_buffer_to_image.regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.copy_buffer_to_image.regions) * (regionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.copy_buffer_to_image.regions == NULL) goto err;
    
       memcpy((void*)cmd->u.copy_buffer_to_image.regions, pRegions, sizeof(*cmd->u.copy_buffer_to_image.regions) * (regionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_buffer_to_image(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_image_to_buffer(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBufferImageCopy* )cmd->u.copy_image_to_buffer.regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_image_to_buffer(struct vk_cmd_queue *queue
    , VkImage srcImage
    , VkImageLayout srcImageLayout
    , VkBuffer dstBuffer
    , uint32_t regionCount
    , const VkBufferImageCopy* pRegions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_IMAGE_TO_BUFFER], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_IMAGE_TO_BUFFER;
          
       cmd->u.copy_image_to_buffer.src_image = srcImage;
       cmd->u.copy_image_to_buffer.src_image_layout = srcImageLayout;
       cmd->u.copy_image_to_buffer.dst_buffer = dstBuffer;
       cmd->u.copy_image_to_buffer.region_count = regionCount;
       if (pRegions) {
          cmd->u.copy_image_to_buffer.regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.copy_image_to_buffer.regions) * (regionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.copy_image_to_buffer.regions == NULL) goto err;
    
       memcpy((void*)cmd->u.copy_image_to_buffer.regions, pRegions, sizeof(*cmd->u.copy_image_to_buffer.regions) * (regionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_image_to_buffer(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_memory_indirect_nv(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_memory_indirect_nv(struct vk_cmd_queue *queue
    , VkDeviceAddress copyBufferAddress
    , uint32_t copyCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_MEMORY_INDIRECT_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_MEMORY_INDIRECT_NV;
          
       cmd->u.copy_memory_indirect_nv.copy_buffer_address = copyBufferAddress;
       cmd->u.copy_memory_indirect_nv.copy_count = copyCount;
       cmd->u.copy_memory_indirect_nv.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_copy_memory_to_image_indirect_nv(struct vk_cmd_queue *queue,
                                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageSubresourceLayers* )cmd->u.copy_memory_to_image_indirect_nv.image_subresources);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_memory_to_image_indirect_nv(struct vk_cmd_queue *queue
    , VkDeviceAddress copyBufferAddress
    , uint32_t copyCount
    , uint32_t stride
    , VkImage dstImage
    , VkImageLayout dstImageLayout
    , const VkImageSubresourceLayers* pImageSubresources
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_MEMORY_TO_IMAGE_INDIRECT_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_MEMORY_TO_IMAGE_INDIRECT_NV;
          
       cmd->u.copy_memory_to_image_indirect_nv.copy_buffer_address = copyBufferAddress;
       cmd->u.copy_memory_to_image_indirect_nv.copy_count = copyCount;
       cmd->u.copy_memory_to_image_indirect_nv.stride = stride;
       cmd->u.copy_memory_to_image_indirect_nv.dst_image = dstImage;
       cmd->u.copy_memory_to_image_indirect_nv.dst_image_layout = dstImageLayout;
       if (pImageSubresources) {
          cmd->u.copy_memory_to_image_indirect_nv.image_subresources = vk_zalloc(queue->alloc, sizeof(*cmd->u.copy_memory_to_image_indirect_nv.image_subresources) * (copyCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.copy_memory_to_image_indirect_nv.image_subresources == NULL) goto err;
    
       memcpy((void*)cmd->u.copy_memory_to_image_indirect_nv.image_subresources, pImageSubresources, sizeof(*cmd->u.copy_memory_to_image_indirect_nv.image_subresources) * (copyCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_memory_to_image_indirect_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_update_buffer(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( void* )cmd->u.update_buffer.data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_update_buffer(struct vk_cmd_queue *queue
    , VkBuffer dstBuffer
    , VkDeviceSize dstOffset
    , VkDeviceSize dataSize
    , const void* pData
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_UPDATE_BUFFER], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_UPDATE_BUFFER;
          
       cmd->u.update_buffer.dst_buffer = dstBuffer;
       cmd->u.update_buffer.dst_offset = dstOffset;
       cmd->u.update_buffer.data_size = dataSize;
       if (pData) {
          cmd->u.update_buffer.data = vk_zalloc(queue->alloc, 1 * (dataSize), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.update_buffer.data == NULL) goto err;
    
       memcpy((void*)cmd->u.update_buffer.data, pData, 1 * (dataSize));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_update_buffer(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_fill_buffer(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_fill_buffer(struct vk_cmd_queue *queue
    , VkBuffer dstBuffer
    , VkDeviceSize dstOffset
    , VkDeviceSize size
    , uint32_t data
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_FILL_BUFFER], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_FILL_BUFFER;
          
       cmd->u.fill_buffer.dst_buffer = dstBuffer;
       cmd->u.fill_buffer.dst_offset = dstOffset;
       cmd->u.fill_buffer.size = size;
       cmd->u.fill_buffer.data = data;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_clear_color_image(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkClearColorValue* )cmd->u.clear_color_image.color);
    
       vk_free(queue->alloc, ( VkImageSubresourceRange* )cmd->u.clear_color_image.ranges);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_clear_color_image(struct vk_cmd_queue *queue
    , VkImage image
    , VkImageLayout imageLayout
    , const VkClearColorValue* pColor
    , uint32_t rangeCount
    , const VkImageSubresourceRange* pRanges
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_CLEAR_COLOR_IMAGE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_CLEAR_COLOR_IMAGE;
          
       cmd->u.clear_color_image.image = image;
       cmd->u.clear_color_image.image_layout = imageLayout;
       if (pColor) {
          cmd->u.clear_color_image.color = vk_zalloc(queue->alloc, sizeof(VkClearColorValue), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.clear_color_image.color == NULL) goto err;
    
          memcpy((void*)cmd->u.clear_color_image.color, pColor, sizeof(VkClearColorValue));
          VkClearColorValue *tmp_dst1 = (void *) cmd->u.clear_color_image.color; (void) tmp_dst1;
          VkClearColorValue *tmp_src1 = (void *) pColor; (void) tmp_src1;
          
       } else {
          cmd->u.clear_color_image.color = NULL;
       }   
       cmd->u.clear_color_image.range_count = rangeCount;
       if (pRanges) {
          cmd->u.clear_color_image.ranges = vk_zalloc(queue->alloc, sizeof(*cmd->u.clear_color_image.ranges) * (rangeCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.clear_color_image.ranges == NULL) goto err;
    
       memcpy((void*)cmd->u.clear_color_image.ranges, pRanges, sizeof(*cmd->u.clear_color_image.ranges) * (rangeCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_clear_color_image(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_clear_depth_stencil_image(struct vk_cmd_queue *queue,
                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkClearDepthStencilValue* )cmd->u.clear_depth_stencil_image.depth_stencil);
    
       vk_free(queue->alloc, ( VkImageSubresourceRange* )cmd->u.clear_depth_stencil_image.ranges);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_clear_depth_stencil_image(struct vk_cmd_queue *queue
    , VkImage image
    , VkImageLayout imageLayout
    , const VkClearDepthStencilValue* pDepthStencil
    , uint32_t rangeCount
    , const VkImageSubresourceRange* pRanges
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_CLEAR_DEPTH_STENCIL_IMAGE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_CLEAR_DEPTH_STENCIL_IMAGE;
          
       cmd->u.clear_depth_stencil_image.image = image;
       cmd->u.clear_depth_stencil_image.image_layout = imageLayout;
       if (pDepthStencil) {
          cmd->u.clear_depth_stencil_image.depth_stencil = vk_zalloc(queue->alloc, sizeof(VkClearDepthStencilValue), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.clear_depth_stencil_image.depth_stencil == NULL) goto err;
    
          memcpy((void*)cmd->u.clear_depth_stencil_image.depth_stencil, pDepthStencil, sizeof(VkClearDepthStencilValue));
          VkClearDepthStencilValue *tmp_dst1 = (void *) cmd->u.clear_depth_stencil_image.depth_stencil; (void) tmp_dst1;
          VkClearDepthStencilValue *tmp_src1 = (void *) pDepthStencil; (void) tmp_src1;
          
       } else {
          cmd->u.clear_depth_stencil_image.depth_stencil = NULL;
       }   
       cmd->u.clear_depth_stencil_image.range_count = rangeCount;
       if (pRanges) {
          cmd->u.clear_depth_stencil_image.ranges = vk_zalloc(queue->alloc, sizeof(*cmd->u.clear_depth_stencil_image.ranges) * (rangeCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.clear_depth_stencil_image.ranges == NULL) goto err;
    
       memcpy((void*)cmd->u.clear_depth_stencil_image.ranges, pRanges, sizeof(*cmd->u.clear_depth_stencil_image.ranges) * (rangeCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_clear_depth_stencil_image(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_clear_attachments(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkClearAttachment* )cmd->u.clear_attachments.attachments);
       vk_free(queue->alloc, ( VkClearRect* )cmd->u.clear_attachments.rects);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_clear_attachments(struct vk_cmd_queue *queue
    , uint32_t attachmentCount
    , const VkClearAttachment* pAttachments
    , uint32_t rectCount
    , const VkClearRect* pRects
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_CLEAR_ATTACHMENTS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_CLEAR_ATTACHMENTS;
          
       cmd->u.clear_attachments.attachment_count = attachmentCount;
       if (pAttachments) {
          cmd->u.clear_attachments.attachments = vk_zalloc(queue->alloc, sizeof(*cmd->u.clear_attachments.attachments) * (attachmentCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.clear_attachments.attachments == NULL) goto err;
    
       memcpy((void*)cmd->u.clear_attachments.attachments, pAttachments, sizeof(*cmd->u.clear_attachments.attachments) * (attachmentCount));
       }   
       cmd->u.clear_attachments.rect_count = rectCount;
       if (pRects) {
          cmd->u.clear_attachments.rects = vk_zalloc(queue->alloc, sizeof(*cmd->u.clear_attachments.rects) * (rectCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.clear_attachments.rects == NULL) goto err;
    
       memcpy((void*)cmd->u.clear_attachments.rects, pRects, sizeof(*cmd->u.clear_attachments.rects) * (rectCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_clear_attachments(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_resolve_image(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageResolve* )cmd->u.resolve_image.regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_resolve_image(struct vk_cmd_queue *queue
    , VkImage srcImage
    , VkImageLayout srcImageLayout
    , VkImage dstImage
    , VkImageLayout dstImageLayout
    , uint32_t regionCount
    , const VkImageResolve* pRegions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_RESOLVE_IMAGE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_RESOLVE_IMAGE;
          
       cmd->u.resolve_image.src_image = srcImage;
       cmd->u.resolve_image.src_image_layout = srcImageLayout;
       cmd->u.resolve_image.dst_image = dstImage;
       cmd->u.resolve_image.dst_image_layout = dstImageLayout;
       cmd->u.resolve_image.region_count = regionCount;
       if (pRegions) {
          cmd->u.resolve_image.regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.resolve_image.regions) * (regionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.resolve_image.regions == NULL) goto err;
    
       memcpy((void*)cmd->u.resolve_image.regions, pRegions, sizeof(*cmd->u.resolve_image.regions) * (regionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_resolve_image(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_event(struct vk_cmd_queue *queue,
                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_event(struct vk_cmd_queue *queue
    , VkEvent event
    , VkPipelineStageFlags stageMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_EVENT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_EVENT;
          
       cmd->u.set_event.event = event;
       cmd->u.set_event.stage_mask = stageMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_reset_event(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_reset_event(struct vk_cmd_queue *queue
    , VkEvent event
    , VkPipelineStageFlags stageMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_RESET_EVENT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_RESET_EVENT;
          
       cmd->u.reset_event.event = event;
       cmd->u.reset_event.stage_mask = stageMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_wait_events(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkEvent* )cmd->u.wait_events.events);
       vk_free(queue->alloc, ( VkMemoryBarrier* )cmd->u.wait_events.memory_barriers);
       vk_free(queue->alloc, ( VkBufferMemoryBarrier* )cmd->u.wait_events.buffer_memory_barriers);
       vk_free(queue->alloc, ( VkImageMemoryBarrier* )cmd->u.wait_events.image_memory_barriers);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_wait_events(struct vk_cmd_queue *queue
    , uint32_t eventCount
    , const VkEvent* pEvents
    , VkPipelineStageFlags srcStageMask
    , VkPipelineStageFlags dstStageMask
    , uint32_t memoryBarrierCount
    , const VkMemoryBarrier* pMemoryBarriers
    , uint32_t bufferMemoryBarrierCount
    , const VkBufferMemoryBarrier* pBufferMemoryBarriers
    , uint32_t imageMemoryBarrierCount
    , const VkImageMemoryBarrier* pImageMemoryBarriers
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WAIT_EVENTS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WAIT_EVENTS;
          
       cmd->u.wait_events.event_count = eventCount;
       if (pEvents) {
          cmd->u.wait_events.events = vk_zalloc(queue->alloc, sizeof(*cmd->u.wait_events.events) * (eventCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.wait_events.events == NULL) goto err;
    
       memcpy((void*)cmd->u.wait_events.events, pEvents, sizeof(*cmd->u.wait_events.events) * (eventCount));
       }   
       cmd->u.wait_events.src_stage_mask = srcStageMask;
       cmd->u.wait_events.dst_stage_mask = dstStageMask;
       cmd->u.wait_events.memory_barrier_count = memoryBarrierCount;
       if (pMemoryBarriers) {
          cmd->u.wait_events.memory_barriers = vk_zalloc(queue->alloc, sizeof(*cmd->u.wait_events.memory_barriers) * (memoryBarrierCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.wait_events.memory_barriers == NULL) goto err;
    
       memcpy((void*)cmd->u.wait_events.memory_barriers, pMemoryBarriers, sizeof(*cmd->u.wait_events.memory_barriers) * (memoryBarrierCount));
       }   
       cmd->u.wait_events.buffer_memory_barrier_count = bufferMemoryBarrierCount;
       if (pBufferMemoryBarriers) {
          cmd->u.wait_events.buffer_memory_barriers = vk_zalloc(queue->alloc, sizeof(*cmd->u.wait_events.buffer_memory_barriers) * (bufferMemoryBarrierCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.wait_events.buffer_memory_barriers == NULL) goto err;
    
       memcpy((void*)cmd->u.wait_events.buffer_memory_barriers, pBufferMemoryBarriers, sizeof(*cmd->u.wait_events.buffer_memory_barriers) * (bufferMemoryBarrierCount));
       }   
       cmd->u.wait_events.image_memory_barrier_count = imageMemoryBarrierCount;
       if (pImageMemoryBarriers) {
          cmd->u.wait_events.image_memory_barriers = vk_zalloc(queue->alloc, sizeof(*cmd->u.wait_events.image_memory_barriers) * (imageMemoryBarrierCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.wait_events.image_memory_barriers == NULL) goto err;
    
       memcpy((void*)cmd->u.wait_events.image_memory_barriers, pImageMemoryBarriers, sizeof(*cmd->u.wait_events.image_memory_barriers) * (imageMemoryBarrierCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_wait_events(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_pipeline_barrier(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMemoryBarrier* )cmd->u.pipeline_barrier.memory_barriers);
       vk_free(queue->alloc, ( VkBufferMemoryBarrier* )cmd->u.pipeline_barrier.buffer_memory_barriers);
       vk_free(queue->alloc, ( VkImageMemoryBarrier* )cmd->u.pipeline_barrier.image_memory_barriers);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_pipeline_barrier(struct vk_cmd_queue *queue
    , VkPipelineStageFlags srcStageMask
    , VkPipelineStageFlags dstStageMask
    , VkDependencyFlags dependencyFlags
    , uint32_t memoryBarrierCount
    , const VkMemoryBarrier* pMemoryBarriers
    , uint32_t bufferMemoryBarrierCount
    , const VkBufferMemoryBarrier* pBufferMemoryBarriers
    , uint32_t imageMemoryBarrierCount
    , const VkImageMemoryBarrier* pImageMemoryBarriers
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_PIPELINE_BARRIER], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_PIPELINE_BARRIER;
          
       cmd->u.pipeline_barrier.src_stage_mask = srcStageMask;
       cmd->u.pipeline_barrier.dst_stage_mask = dstStageMask;
       cmd->u.pipeline_barrier.dependency_flags = dependencyFlags;
       cmd->u.pipeline_barrier.memory_barrier_count = memoryBarrierCount;
       if (pMemoryBarriers) {
          cmd->u.pipeline_barrier.memory_barriers = vk_zalloc(queue->alloc, sizeof(*cmd->u.pipeline_barrier.memory_barriers) * (memoryBarrierCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.pipeline_barrier.memory_barriers == NULL) goto err;
    
       memcpy((void*)cmd->u.pipeline_barrier.memory_barriers, pMemoryBarriers, sizeof(*cmd->u.pipeline_barrier.memory_barriers) * (memoryBarrierCount));
       }   
       cmd->u.pipeline_barrier.buffer_memory_barrier_count = bufferMemoryBarrierCount;
       if (pBufferMemoryBarriers) {
          cmd->u.pipeline_barrier.buffer_memory_barriers = vk_zalloc(queue->alloc, sizeof(*cmd->u.pipeline_barrier.buffer_memory_barriers) * (bufferMemoryBarrierCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.pipeline_barrier.buffer_memory_barriers == NULL) goto err;
    
       memcpy((void*)cmd->u.pipeline_barrier.buffer_memory_barriers, pBufferMemoryBarriers, sizeof(*cmd->u.pipeline_barrier.buffer_memory_barriers) * (bufferMemoryBarrierCount));
       }   
       cmd->u.pipeline_barrier.image_memory_barrier_count = imageMemoryBarrierCount;
       if (pImageMemoryBarriers) {
          cmd->u.pipeline_barrier.image_memory_barriers = vk_zalloc(queue->alloc, sizeof(*cmd->u.pipeline_barrier.image_memory_barriers) * (imageMemoryBarrierCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.pipeline_barrier.image_memory_barriers == NULL) goto err;
    
       memcpy((void*)cmd->u.pipeline_barrier.image_memory_barriers, pImageMemoryBarriers, sizeof(*cmd->u.pipeline_barrier.image_memory_barriers) * (imageMemoryBarrierCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_pipeline_barrier(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_begin_query(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_query(struct vk_cmd_queue *queue
    , VkQueryPool queryPool
    , uint32_t query
    , VkQueryControlFlags flags
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_QUERY], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_QUERY;
          
       cmd->u.begin_query.query_pool = queryPool;
       cmd->u.begin_query.query = query;
       cmd->u.begin_query.flags = flags;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_end_query(struct vk_cmd_queue *queue,
                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_query(struct vk_cmd_queue *queue
    , VkQueryPool queryPool
    , uint32_t query
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_QUERY], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_QUERY;
          
       cmd->u.end_query.query_pool = queryPool;
       cmd->u.end_query.query = query;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_begin_conditional_rendering_ext(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkConditionalRenderingBeginInfoEXT* )cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_conditional_rendering_ext(struct vk_cmd_queue *queue
    , const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_CONDITIONAL_RENDERING_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_CONDITIONAL_RENDERING_EXT;
          
       if (pConditionalRenderingBegin) {
          cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin = vk_zalloc(queue->alloc, sizeof(VkConditionalRenderingBeginInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin, pConditionalRenderingBegin, sizeof(VkConditionalRenderingBeginInfoEXT));
          VkConditionalRenderingBeginInfoEXT *tmp_dst1 = (void *) cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin; (void) tmp_dst1;
          VkConditionalRenderingBeginInfoEXT *tmp_src1 = (void *) pConditionalRenderingBegin; (void) tmp_src1;
          
       } else {
          cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_conditional_rendering_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_end_conditional_rendering_ext(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_conditional_rendering_ext(struct vk_cmd_queue *queue
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_CONDITIONAL_RENDERING_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_CONDITIONAL_RENDERING_EXT;
          
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_reset_query_pool(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_reset_query_pool(struct vk_cmd_queue *queue
    , VkQueryPool queryPool
    , uint32_t firstQuery
    , uint32_t queryCount
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_RESET_QUERY_POOL], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_RESET_QUERY_POOL;
          
       cmd->u.reset_query_pool.query_pool = queryPool;
       cmd->u.reset_query_pool.first_query = firstQuery;
       cmd->u.reset_query_pool.query_count = queryCount;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_write_timestamp(struct vk_cmd_queue *queue,
                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_timestamp(struct vk_cmd_queue *queue
    , VkPipelineStageFlagBits pipelineStage
    , VkQueryPool queryPool
    , uint32_t query
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_TIMESTAMP], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_TIMESTAMP;
          
       cmd->u.write_timestamp.pipeline_stage = pipelineStage;
       cmd->u.write_timestamp.query_pool = queryPool;
       cmd->u.write_timestamp.query = query;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_copy_query_pool_results(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_query_pool_results(struct vk_cmd_queue *queue
    , VkQueryPool queryPool
    , uint32_t firstQuery
    , uint32_t queryCount
    , VkBuffer dstBuffer
    , VkDeviceSize dstOffset
    , VkDeviceSize stride
    , VkQueryResultFlags flags
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_QUERY_POOL_RESULTS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_QUERY_POOL_RESULTS;
          
       cmd->u.copy_query_pool_results.query_pool = queryPool;
       cmd->u.copy_query_pool_results.first_query = firstQuery;
       cmd->u.copy_query_pool_results.query_count = queryCount;
       cmd->u.copy_query_pool_results.dst_buffer = dstBuffer;
       cmd->u.copy_query_pool_results.dst_offset = dstOffset;
       cmd->u.copy_query_pool_results.stride = stride;
       cmd->u.copy_query_pool_results.flags = flags;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_push_constants(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( void* )cmd->u.push_constants.values);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_push_constants(struct vk_cmd_queue *queue
    , VkPipelineLayout layout
    , VkShaderStageFlags stageFlags
    , uint32_t offset
    , uint32_t size
    , const void* pValues
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_PUSH_CONSTANTS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_PUSH_CONSTANTS;
          
       cmd->u.push_constants.layout = layout;
       cmd->u.push_constants.stage_flags = stageFlags;
       cmd->u.push_constants.offset = offset;
       cmd->u.push_constants.size = size;
       if (pValues) {
          cmd->u.push_constants.values = vk_zalloc(queue->alloc, 1 * (size), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.push_constants.values == NULL) goto err;
    
       memcpy((void*)cmd->u.push_constants.values, pValues, 1 * (size));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_push_constants(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_begin_render_pass(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkClearValue*    )cmd->u.begin_render_pass.render_pass_begin->pClearValues);
          vk_free(queue->alloc, ( VkRenderPassBeginInfo* )cmd->u.begin_render_pass.render_pass_begin);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_render_pass(struct vk_cmd_queue *queue
    , const VkRenderPassBeginInfo* pRenderPassBegin
    , VkSubpassContents contents
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_RENDER_PASS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_RENDER_PASS;
          
       if (pRenderPassBegin) {
          cmd->u.begin_render_pass.render_pass_begin = vk_zalloc(queue->alloc, sizeof(VkRenderPassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_render_pass.render_pass_begin == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_render_pass.render_pass_begin, pRenderPassBegin, sizeof(VkRenderPassBeginInfo));
          VkRenderPassBeginInfo *tmp_dst1 = (void *) cmd->u.begin_render_pass.render_pass_begin; (void) tmp_dst1;
          VkRenderPassBeginInfo *tmp_src1 = (void *) pRenderPassBegin; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkDeviceGroupRenderPassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkDeviceGroupRenderPassBeginInfo));
          VkDeviceGroupRenderPassBeginInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkDeviceGroupRenderPassBeginInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pDeviceRenderAreas) {
       tmp_dst2->pDeviceRenderAreas = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pDeviceRenderAreas) * tmp_dst2->deviceRenderAreaCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pDeviceRenderAreas == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pDeviceRenderAreas, tmp_src2->pDeviceRenderAreas, sizeof(*tmp_dst2->pDeviceRenderAreas) * tmp_dst2->deviceRenderAreaCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassSampleLocationsBeginInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassSampleLocationsBeginInfoEXT));
          VkRenderPassSampleLocationsBeginInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassSampleLocationsBeginInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pAttachmentInitialSampleLocations) {
       tmp_dst2->pAttachmentInitialSampleLocations = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pAttachmentInitialSampleLocations) * tmp_dst2->attachmentInitialSampleLocationsCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pAttachmentInitialSampleLocations == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pAttachmentInitialSampleLocations, tmp_src2->pAttachmentInitialSampleLocations, sizeof(*tmp_dst2->pAttachmentInitialSampleLocations) * tmp_dst2->attachmentInitialSampleLocationsCount);
    }
    if (tmp_src2->pPostSubpassSampleLocations) {
       tmp_dst2->pPostSubpassSampleLocations = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPostSubpassSampleLocations) * tmp_dst2->postSubpassSampleLocationsCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPostSubpassSampleLocations == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPostSubpassSampleLocations, tmp_src2->pPostSubpassSampleLocations, sizeof(*tmp_dst2->pPostSubpassSampleLocations) * tmp_dst2->postSubpassSampleLocationsCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassAttachmentBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassAttachmentBeginInfo));
          VkRenderPassAttachmentBeginInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassAttachmentBeginInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pAttachments) {
       tmp_dst2->pAttachments = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pAttachments) * tmp_dst2->attachmentCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pAttachments == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pAttachments, tmp_src2->pAttachments, sizeof(*tmp_dst2->pAttachments) * tmp_dst2->attachmentCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassTransformBeginInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassTransformBeginInfoQCOM));
          VkRenderPassTransformBeginInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassTransformBeginInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM));
          VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pPerViewRenderAreas) {
       tmp_dst2->pPerViewRenderAreas = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPerViewRenderAreas) * tmp_dst2->perViewRenderAreaCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPerViewRenderAreas == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPerViewRenderAreas, tmp_src2->pPerViewRenderAreas, sizeof(*tmp_dst2->pPerViewRenderAreas) * tmp_dst2->perViewRenderAreaCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassStripeBeginInfoARM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassStripeBeginInfoARM));
          VkRenderPassStripeBeginInfoARM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassStripeBeginInfoARM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStripeInfos) {
       tmp_dst2->pStripeInfos = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStripeInfos) * tmp_dst2->stripeInfoCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStripeInfos == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStripeInfos, tmp_src2->pStripeInfos, sizeof(*tmp_dst2->pStripeInfos) * tmp_dst2->stripeInfoCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pClearValues) {
       tmp_dst1->pClearValues = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pClearValues) * tmp_dst1->clearValueCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pClearValues == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pClearValues, tmp_src1->pClearValues, sizeof(*tmp_dst1->pClearValues) * tmp_dst1->clearValueCount);
    }
    
       } else {
          cmd->u.begin_render_pass.render_pass_begin = NULL;
       }   
       cmd->u.begin_render_pass.contents = contents;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_render_pass(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_next_subpass(struct vk_cmd_queue *queue,
                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_next_subpass(struct vk_cmd_queue *queue
    , VkSubpassContents contents
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_NEXT_SUBPASS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_NEXT_SUBPASS;
          
       cmd->u.next_subpass.contents = contents;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_end_render_pass(struct vk_cmd_queue *queue,
                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_render_pass(struct vk_cmd_queue *queue
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_RENDER_PASS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_RENDER_PASS;
          
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_execute_commands(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkCommandBuffer* )cmd->u.execute_commands.command_buffers);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_execute_commands(struct vk_cmd_queue *queue
    , uint32_t commandBufferCount
    , const VkCommandBuffer* pCommandBuffers
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_EXECUTE_COMMANDS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_EXECUTE_COMMANDS;
          
       cmd->u.execute_commands.command_buffer_count = commandBufferCount;
       if (pCommandBuffers) {
          cmd->u.execute_commands.command_buffers = vk_zalloc(queue->alloc, sizeof(*cmd->u.execute_commands.command_buffers) * (commandBufferCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.execute_commands.command_buffers == NULL) goto err;
    
       memcpy((void*)cmd->u.execute_commands.command_buffers, pCommandBuffers, sizeof(*cmd->u.execute_commands.command_buffers) * (commandBufferCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_execute_commands(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_debug_marker_begin_ext(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkDebugMarkerMarkerInfoEXT* )cmd->u.debug_marker_begin_ext.marker_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_debug_marker_begin_ext(struct vk_cmd_queue *queue
    , const VkDebugMarkerMarkerInfoEXT* pMarkerInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DEBUG_MARKER_BEGIN_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DEBUG_MARKER_BEGIN_EXT;
          
       if (pMarkerInfo) {
          cmd->u.debug_marker_begin_ext.marker_info = vk_zalloc(queue->alloc, sizeof(VkDebugMarkerMarkerInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.debug_marker_begin_ext.marker_info == NULL) goto err;
    
          memcpy((void*)cmd->u.debug_marker_begin_ext.marker_info, pMarkerInfo, sizeof(VkDebugMarkerMarkerInfoEXT));
          VkDebugMarkerMarkerInfoEXT *tmp_dst1 = (void *) cmd->u.debug_marker_begin_ext.marker_info; (void) tmp_dst1;
          VkDebugMarkerMarkerInfoEXT *tmp_src1 = (void *) pMarkerInfo; (void) tmp_src1;
          
       } else {
          cmd->u.debug_marker_begin_ext.marker_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_debug_marker_begin_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_debug_marker_end_ext(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_debug_marker_end_ext(struct vk_cmd_queue *queue
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DEBUG_MARKER_END_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DEBUG_MARKER_END_EXT;
          
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_debug_marker_insert_ext(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkDebugMarkerMarkerInfoEXT* )cmd->u.debug_marker_insert_ext.marker_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_debug_marker_insert_ext(struct vk_cmd_queue *queue
    , const VkDebugMarkerMarkerInfoEXT* pMarkerInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DEBUG_MARKER_INSERT_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DEBUG_MARKER_INSERT_EXT;
          
       if (pMarkerInfo) {
          cmd->u.debug_marker_insert_ext.marker_info = vk_zalloc(queue->alloc, sizeof(VkDebugMarkerMarkerInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.debug_marker_insert_ext.marker_info == NULL) goto err;
    
          memcpy((void*)cmd->u.debug_marker_insert_ext.marker_info, pMarkerInfo, sizeof(VkDebugMarkerMarkerInfoEXT));
          VkDebugMarkerMarkerInfoEXT *tmp_dst1 = (void *) cmd->u.debug_marker_insert_ext.marker_info; (void) tmp_dst1;
          VkDebugMarkerMarkerInfoEXT *tmp_src1 = (void *) pMarkerInfo; (void) tmp_src1;
          
       } else {
          cmd->u.debug_marker_insert_ext.marker_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_debug_marker_insert_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_execute_generated_commands_nv(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkIndirectCommandsStreamNV*  )cmd->u.execute_generated_commands_nv.generated_commands_info->pStreams);
          vk_free(queue->alloc, ( VkGeneratedCommandsInfoNV* )cmd->u.execute_generated_commands_nv.generated_commands_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_execute_generated_commands_nv(struct vk_cmd_queue *queue
    , VkBool32 isPreprocessed
    , const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_EXECUTE_GENERATED_COMMANDS_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_EXECUTE_GENERATED_COMMANDS_NV;
          
       cmd->u.execute_generated_commands_nv.is_preprocessed = isPreprocessed;
       if (pGeneratedCommandsInfo) {
          cmd->u.execute_generated_commands_nv.generated_commands_info = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsInfoNV), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.execute_generated_commands_nv.generated_commands_info == NULL) goto err;
    
          memcpy((void*)cmd->u.execute_generated_commands_nv.generated_commands_info, pGeneratedCommandsInfo, sizeof(VkGeneratedCommandsInfoNV));
          VkGeneratedCommandsInfoNV *tmp_dst1 = (void *) cmd->u.execute_generated_commands_nv.generated_commands_info; (void) tmp_dst1;
          VkGeneratedCommandsInfoNV *tmp_src1 = (void *) pGeneratedCommandsInfo; (void) tmp_src1;
          if (tmp_src1->pStreams) {
       tmp_dst1->pStreams = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pStreams) * tmp_dst1->streamCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pStreams == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pStreams, tmp_src1->pStreams, sizeof(*tmp_dst1->pStreams) * tmp_dst1->streamCount);
    }
    
       } else {
          cmd->u.execute_generated_commands_nv.generated_commands_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_execute_generated_commands_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_preprocess_generated_commands_nv(struct vk_cmd_queue *queue,
                                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkIndirectCommandsStreamNV*  )cmd->u.preprocess_generated_commands_nv.generated_commands_info->pStreams);
          vk_free(queue->alloc, ( VkGeneratedCommandsInfoNV* )cmd->u.preprocess_generated_commands_nv.generated_commands_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_preprocess_generated_commands_nv(struct vk_cmd_queue *queue
    , const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_PREPROCESS_GENERATED_COMMANDS_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_PREPROCESS_GENERATED_COMMANDS_NV;
          
       if (pGeneratedCommandsInfo) {
          cmd->u.preprocess_generated_commands_nv.generated_commands_info = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsInfoNV), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.preprocess_generated_commands_nv.generated_commands_info == NULL) goto err;
    
          memcpy((void*)cmd->u.preprocess_generated_commands_nv.generated_commands_info, pGeneratedCommandsInfo, sizeof(VkGeneratedCommandsInfoNV));
          VkGeneratedCommandsInfoNV *tmp_dst1 = (void *) cmd->u.preprocess_generated_commands_nv.generated_commands_info; (void) tmp_dst1;
          VkGeneratedCommandsInfoNV *tmp_src1 = (void *) pGeneratedCommandsInfo; (void) tmp_src1;
          if (tmp_src1->pStreams) {
       tmp_dst1->pStreams = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pStreams) * tmp_dst1->streamCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pStreams == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pStreams, tmp_src1->pStreams, sizeof(*tmp_dst1->pStreams) * tmp_dst1->streamCount);
    }
    
       } else {
          cmd->u.preprocess_generated_commands_nv.generated_commands_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_preprocess_generated_commands_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_pipeline_shader_group_nv(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_pipeline_shader_group_nv(struct vk_cmd_queue *queue
    , VkPipelineBindPoint pipelineBindPoint
    , VkPipeline pipeline
    , uint32_t groupIndex
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_PIPELINE_SHADER_GROUP_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_PIPELINE_SHADER_GROUP_NV;
          
       cmd->u.bind_pipeline_shader_group_nv.pipeline_bind_point = pipelineBindPoint;
       cmd->u.bind_pipeline_shader_group_nv.pipeline = pipeline;
       cmd->u.bind_pipeline_shader_group_nv.group_index = groupIndex;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_execute_generated_commands_ext(struct vk_cmd_queue *queue,
                                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkGeneratedCommandsInfoEXT* )cmd->u.execute_generated_commands_ext.generated_commands_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_execute_generated_commands_ext(struct vk_cmd_queue *queue
    , VkBool32 isPreprocessed
    , const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_EXECUTE_GENERATED_COMMANDS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_EXECUTE_GENERATED_COMMANDS_EXT;
          
       cmd->u.execute_generated_commands_ext.is_preprocessed = isPreprocessed;
       if (pGeneratedCommandsInfo) {
          cmd->u.execute_generated_commands_ext.generated_commands_info = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.execute_generated_commands_ext.generated_commands_info == NULL) goto err;
    
          memcpy((void*)cmd->u.execute_generated_commands_ext.generated_commands_info, pGeneratedCommandsInfo, sizeof(VkGeneratedCommandsInfoEXT));
          VkGeneratedCommandsInfoEXT *tmp_dst1 = (void *) cmd->u.execute_generated_commands_ext.generated_commands_info; (void) tmp_dst1;
          VkGeneratedCommandsInfoEXT *tmp_src1 = (void *) pGeneratedCommandsInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsPipelineInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkGeneratedCommandsPipelineInfoEXT));
          VkGeneratedCommandsPipelineInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkGeneratedCommandsPipelineInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsShaderInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkGeneratedCommandsShaderInfoEXT));
          VkGeneratedCommandsShaderInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkGeneratedCommandsShaderInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pShaders) {
       tmp_dst2->pShaders = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pShaders) * tmp_dst2->shaderCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pShaders == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pShaders, tmp_src2->pShaders, sizeof(*tmp_dst2->pShaders) * tmp_dst2->shaderCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.execute_generated_commands_ext.generated_commands_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_execute_generated_commands_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_preprocess_generated_commands_ext(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkGeneratedCommandsInfoEXT* )cmd->u.preprocess_generated_commands_ext.generated_commands_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_preprocess_generated_commands_ext(struct vk_cmd_queue *queue
    , const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo
    , VkCommandBuffer stateCommandBuffer
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_PREPROCESS_GENERATED_COMMANDS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_PREPROCESS_GENERATED_COMMANDS_EXT;
          
       if (pGeneratedCommandsInfo) {
          cmd->u.preprocess_generated_commands_ext.generated_commands_info = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.preprocess_generated_commands_ext.generated_commands_info == NULL) goto err;
    
          memcpy((void*)cmd->u.preprocess_generated_commands_ext.generated_commands_info, pGeneratedCommandsInfo, sizeof(VkGeneratedCommandsInfoEXT));
          VkGeneratedCommandsInfoEXT *tmp_dst1 = (void *) cmd->u.preprocess_generated_commands_ext.generated_commands_info; (void) tmp_dst1;
          VkGeneratedCommandsInfoEXT *tmp_src1 = (void *) pGeneratedCommandsInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsPipelineInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkGeneratedCommandsPipelineInfoEXT));
          VkGeneratedCommandsPipelineInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkGeneratedCommandsPipelineInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkGeneratedCommandsShaderInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkGeneratedCommandsShaderInfoEXT));
          VkGeneratedCommandsShaderInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkGeneratedCommandsShaderInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pShaders) {
       tmp_dst2->pShaders = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pShaders) * tmp_dst2->shaderCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pShaders == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pShaders, tmp_src2->pShaders, sizeof(*tmp_dst2->pShaders) * tmp_dst2->shaderCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.preprocess_generated_commands_ext.generated_commands_info = NULL;
       }   
       cmd->u.preprocess_generated_commands_ext.state_command_buffer = stateCommandBuffer;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_preprocess_generated_commands_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_push_descriptor_set(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkWriteDescriptorSet* )cmd->u.push_descriptor_set.descriptor_writes);
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_set_device_mask(struct vk_cmd_queue *queue,
                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_device_mask(struct vk_cmd_queue *queue
    , uint32_t deviceMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEVICE_MASK], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEVICE_MASK;
          
       cmd->u.set_device_mask.device_mask = deviceMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_dispatch_base(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_dispatch_base(struct vk_cmd_queue *queue
    , uint32_t baseGroupX
    , uint32_t baseGroupY
    , uint32_t baseGroupZ
    , uint32_t groupCountX
    , uint32_t groupCountY
    , uint32_t groupCountZ
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DISPATCH_BASE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DISPATCH_BASE;
          
       cmd->u.dispatch_base.base_group_x = baseGroupX;
       cmd->u.dispatch_base.base_group_y = baseGroupY;
       cmd->u.dispatch_base.base_group_z = baseGroupZ;
       cmd->u.dispatch_base.group_count_x = groupCountX;
       cmd->u.dispatch_base.group_count_y = groupCountY;
       cmd->u.dispatch_base.group_count_z = groupCountZ;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_push_descriptor_set_with_template(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( void* )cmd->u.push_descriptor_set_with_template.data);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_set_viewport_wscaling_nv(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkViewportWScalingNV* )cmd->u.set_viewport_wscaling_nv.viewport_wscalings);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_viewport_wscaling_nv(struct vk_cmd_queue *queue
    , uint32_t firstViewport
    , uint32_t viewportCount
    , const VkViewportWScalingNV* pViewportWScalings
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VIEWPORT_WSCALING_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VIEWPORT_WSCALING_NV;
          
       cmd->u.set_viewport_wscaling_nv.first_viewport = firstViewport;
       cmd->u.set_viewport_wscaling_nv.viewport_count = viewportCount;
       if (pViewportWScalings) {
          cmd->u.set_viewport_wscaling_nv.viewport_wscalings = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_viewport_wscaling_nv.viewport_wscalings) * (viewportCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_viewport_wscaling_nv.viewport_wscalings == NULL) goto err;
    
       memcpy((void*)cmd->u.set_viewport_wscaling_nv.viewport_wscalings, pViewportWScalings, sizeof(*cmd->u.set_viewport_wscaling_nv.viewport_wscalings) * (viewportCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_viewport_wscaling_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_discard_rectangle_ext(struct vk_cmd_queue *queue,
                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkRect2D* )cmd->u.set_discard_rectangle_ext.discard_rectangles);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_discard_rectangle_ext(struct vk_cmd_queue *queue
    , uint32_t firstDiscardRectangle
    , uint32_t discardRectangleCount
    , const VkRect2D* pDiscardRectangles
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DISCARD_RECTANGLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DISCARD_RECTANGLE_EXT;
          
       cmd->u.set_discard_rectangle_ext.first_discard_rectangle = firstDiscardRectangle;
       cmd->u.set_discard_rectangle_ext.discard_rectangle_count = discardRectangleCount;
       if (pDiscardRectangles) {
          cmd->u.set_discard_rectangle_ext.discard_rectangles = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_discard_rectangle_ext.discard_rectangles) * (discardRectangleCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_discard_rectangle_ext.discard_rectangles == NULL) goto err;
    
       memcpy((void*)cmd->u.set_discard_rectangle_ext.discard_rectangles, pDiscardRectangles, sizeof(*cmd->u.set_discard_rectangle_ext.discard_rectangles) * (discardRectangleCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_discard_rectangle_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_discard_rectangle_enable_ext(struct vk_cmd_queue *queue,
                                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_discard_rectangle_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 discardRectangleEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DISCARD_RECTANGLE_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DISCARD_RECTANGLE_ENABLE_EXT;
          
       cmd->u.set_discard_rectangle_enable_ext.discard_rectangle_enable = discardRectangleEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_discard_rectangle_mode_ext(struct vk_cmd_queue *queue,
                                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_discard_rectangle_mode_ext(struct vk_cmd_queue *queue
    , VkDiscardRectangleModeEXT discardRectangleMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DISCARD_RECTANGLE_MODE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DISCARD_RECTANGLE_MODE_EXT;
          
       cmd->u.set_discard_rectangle_mode_ext.discard_rectangle_mode = discardRectangleMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_sample_locations_ext(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkSampleLocationEXT* )cmd->u.set_sample_locations_ext.sample_locations_info->pSampleLocations);
          vk_free(queue->alloc, ( VkSampleLocationsInfoEXT* )cmd->u.set_sample_locations_ext.sample_locations_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_sample_locations_ext(struct vk_cmd_queue *queue
    , const VkSampleLocationsInfoEXT* pSampleLocationsInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_SAMPLE_LOCATIONS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_SAMPLE_LOCATIONS_EXT;
          
       if (pSampleLocationsInfo) {
          cmd->u.set_sample_locations_ext.sample_locations_info = vk_zalloc(queue->alloc, sizeof(VkSampleLocationsInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_sample_locations_ext.sample_locations_info == NULL) goto err;
    
          memcpy((void*)cmd->u.set_sample_locations_ext.sample_locations_info, pSampleLocationsInfo, sizeof(VkSampleLocationsInfoEXT));
          VkSampleLocationsInfoEXT *tmp_dst1 = (void *) cmd->u.set_sample_locations_ext.sample_locations_info; (void) tmp_dst1;
          VkSampleLocationsInfoEXT *tmp_src1 = (void *) pSampleLocationsInfo; (void) tmp_src1;
          if (tmp_src1->pSampleLocations) {
       tmp_dst1->pSampleLocations = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pSampleLocations) * tmp_dst1->sampleLocationsCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pSampleLocations == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pSampleLocations, tmp_src1->pSampleLocations, sizeof(*tmp_dst1->pSampleLocations) * tmp_dst1->sampleLocationsCount);
    }
    
       } else {
          cmd->u.set_sample_locations_ext.sample_locations_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_sample_locations_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_begin_debug_utils_label_ext(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkDebugUtilsLabelEXT* )cmd->u.begin_debug_utils_label_ext.label_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_debug_utils_label_ext(struct vk_cmd_queue *queue
    , const VkDebugUtilsLabelEXT* pLabelInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_DEBUG_UTILS_LABEL_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_DEBUG_UTILS_LABEL_EXT;
          
       if (pLabelInfo) {
          cmd->u.begin_debug_utils_label_ext.label_info = vk_zalloc(queue->alloc, sizeof(VkDebugUtilsLabelEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_debug_utils_label_ext.label_info == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_debug_utils_label_ext.label_info, pLabelInfo, sizeof(VkDebugUtilsLabelEXT));
          VkDebugUtilsLabelEXT *tmp_dst1 = (void *) cmd->u.begin_debug_utils_label_ext.label_info; (void) tmp_dst1;
          VkDebugUtilsLabelEXT *tmp_src1 = (void *) pLabelInfo; (void) tmp_src1;
          
       } else {
          cmd->u.begin_debug_utils_label_ext.label_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_debug_utils_label_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_end_debug_utils_label_ext(struct vk_cmd_queue *queue,
                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_debug_utils_label_ext(struct vk_cmd_queue *queue
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_DEBUG_UTILS_LABEL_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_DEBUG_UTILS_LABEL_EXT;
          
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_insert_debug_utils_label_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkDebugUtilsLabelEXT* )cmd->u.insert_debug_utils_label_ext.label_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_insert_debug_utils_label_ext(struct vk_cmd_queue *queue
    , const VkDebugUtilsLabelEXT* pLabelInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_INSERT_DEBUG_UTILS_LABEL_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_INSERT_DEBUG_UTILS_LABEL_EXT;
          
       if (pLabelInfo) {
          cmd->u.insert_debug_utils_label_ext.label_info = vk_zalloc(queue->alloc, sizeof(VkDebugUtilsLabelEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.insert_debug_utils_label_ext.label_info == NULL) goto err;
    
          memcpy((void*)cmd->u.insert_debug_utils_label_ext.label_info, pLabelInfo, sizeof(VkDebugUtilsLabelEXT));
          VkDebugUtilsLabelEXT *tmp_dst1 = (void *) cmd->u.insert_debug_utils_label_ext.label_info; (void) tmp_dst1;
          VkDebugUtilsLabelEXT *tmp_src1 = (void *) pLabelInfo; (void) tmp_src1;
          
       } else {
          cmd->u.insert_debug_utils_label_ext.label_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_insert_debug_utils_label_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_write_buffer_marker_amd(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_buffer_marker_amd(struct vk_cmd_queue *queue
    , VkPipelineStageFlagBits pipelineStage
    , VkBuffer dstBuffer
    , VkDeviceSize dstOffset
    , uint32_t marker
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_BUFFER_MARKER_AMD], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_BUFFER_MARKER_AMD;
          
       cmd->u.write_buffer_marker_amd.pipeline_stage = pipelineStage;
       cmd->u.write_buffer_marker_amd.dst_buffer = dstBuffer;
       cmd->u.write_buffer_marker_amd.dst_offset = dstOffset;
       cmd->u.write_buffer_marker_amd.marker = marker;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_begin_render_pass2(struct vk_cmd_queue *queue,
                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkClearValue*    )cmd->u.begin_render_pass2.render_pass_begin->pClearValues);
          vk_free(queue->alloc, ( VkRenderPassBeginInfo*      )cmd->u.begin_render_pass2.render_pass_begin);
    
             vk_free(queue->alloc, ( VkSubpassBeginInfo*      )cmd->u.begin_render_pass2.subpass_begin_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_render_pass2(struct vk_cmd_queue *queue
    , const VkRenderPassBeginInfo*      pRenderPassBegin
    , const VkSubpassBeginInfo*      pSubpassBeginInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_RENDER_PASS2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_RENDER_PASS2;
          
       if (pRenderPassBegin) {
          cmd->u.begin_render_pass2.render_pass_begin = vk_zalloc(queue->alloc, sizeof(VkRenderPassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_render_pass2.render_pass_begin == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_render_pass2.render_pass_begin, pRenderPassBegin, sizeof(VkRenderPassBeginInfo));
          VkRenderPassBeginInfo *tmp_dst1 = (void *) cmd->u.begin_render_pass2.render_pass_begin; (void) tmp_dst1;
          VkRenderPassBeginInfo *tmp_src1 = (void *) pRenderPassBegin; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkDeviceGroupRenderPassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkDeviceGroupRenderPassBeginInfo));
          VkDeviceGroupRenderPassBeginInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkDeviceGroupRenderPassBeginInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pDeviceRenderAreas) {
       tmp_dst2->pDeviceRenderAreas = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pDeviceRenderAreas) * tmp_dst2->deviceRenderAreaCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pDeviceRenderAreas == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pDeviceRenderAreas, tmp_src2->pDeviceRenderAreas, sizeof(*tmp_dst2->pDeviceRenderAreas) * tmp_dst2->deviceRenderAreaCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassSampleLocationsBeginInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassSampleLocationsBeginInfoEXT));
          VkRenderPassSampleLocationsBeginInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassSampleLocationsBeginInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pAttachmentInitialSampleLocations) {
       tmp_dst2->pAttachmentInitialSampleLocations = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pAttachmentInitialSampleLocations) * tmp_dst2->attachmentInitialSampleLocationsCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pAttachmentInitialSampleLocations == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pAttachmentInitialSampleLocations, tmp_src2->pAttachmentInitialSampleLocations, sizeof(*tmp_dst2->pAttachmentInitialSampleLocations) * tmp_dst2->attachmentInitialSampleLocationsCount);
    }
    if (tmp_src2->pPostSubpassSampleLocations) {
       tmp_dst2->pPostSubpassSampleLocations = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPostSubpassSampleLocations) * tmp_dst2->postSubpassSampleLocationsCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPostSubpassSampleLocations == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPostSubpassSampleLocations, tmp_src2->pPostSubpassSampleLocations, sizeof(*tmp_dst2->pPostSubpassSampleLocations) * tmp_dst2->postSubpassSampleLocationsCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassAttachmentBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassAttachmentBeginInfo));
          VkRenderPassAttachmentBeginInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassAttachmentBeginInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pAttachments) {
       tmp_dst2->pAttachments = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pAttachments) * tmp_dst2->attachmentCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pAttachments == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pAttachments, tmp_src2->pAttachments, sizeof(*tmp_dst2->pAttachments) * tmp_dst2->attachmentCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassTransformBeginInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassTransformBeginInfoQCOM));
          VkRenderPassTransformBeginInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassTransformBeginInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM));
          VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pPerViewRenderAreas) {
       tmp_dst2->pPerViewRenderAreas = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPerViewRenderAreas) * tmp_dst2->perViewRenderAreaCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPerViewRenderAreas == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPerViewRenderAreas, tmp_src2->pPerViewRenderAreas, sizeof(*tmp_dst2->pPerViewRenderAreas) * tmp_dst2->perViewRenderAreaCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassStripeBeginInfoARM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassStripeBeginInfoARM));
          VkRenderPassStripeBeginInfoARM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassStripeBeginInfoARM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStripeInfos) {
       tmp_dst2->pStripeInfos = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStripeInfos) * tmp_dst2->stripeInfoCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStripeInfos == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStripeInfos, tmp_src2->pStripeInfos, sizeof(*tmp_dst2->pStripeInfos) * tmp_dst2->stripeInfoCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pClearValues) {
       tmp_dst1->pClearValues = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pClearValues) * tmp_dst1->clearValueCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pClearValues == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pClearValues, tmp_src1->pClearValues, sizeof(*tmp_dst1->pClearValues) * tmp_dst1->clearValueCount);
    }
    
       } else {
          cmd->u.begin_render_pass2.render_pass_begin = NULL;
       }   
       if (pSubpassBeginInfo) {
          cmd->u.begin_render_pass2.subpass_begin_info = vk_zalloc(queue->alloc, sizeof(VkSubpassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_render_pass2.subpass_begin_info == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_render_pass2.subpass_begin_info, pSubpassBeginInfo, sizeof(VkSubpassBeginInfo));
          VkSubpassBeginInfo *tmp_dst1 = (void *) cmd->u.begin_render_pass2.subpass_begin_info; (void) tmp_dst1;
          VkSubpassBeginInfo *tmp_src1 = (void *) pSubpassBeginInfo; (void) tmp_src1;
          
       } else {
          cmd->u.begin_render_pass2.subpass_begin_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_render_pass2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_next_subpass2(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkSubpassBeginInfo*      )cmd->u.next_subpass2.subpass_begin_info);
    
             vk_free(queue->alloc, ( VkSubpassEndInfo*        )cmd->u.next_subpass2.subpass_end_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_next_subpass2(struct vk_cmd_queue *queue
    , const VkSubpassBeginInfo*      pSubpassBeginInfo
    , const VkSubpassEndInfo*        pSubpassEndInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_NEXT_SUBPASS2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_NEXT_SUBPASS2;
          
       if (pSubpassBeginInfo) {
          cmd->u.next_subpass2.subpass_begin_info = vk_zalloc(queue->alloc, sizeof(VkSubpassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.next_subpass2.subpass_begin_info == NULL) goto err;
    
          memcpy((void*)cmd->u.next_subpass2.subpass_begin_info, pSubpassBeginInfo, sizeof(VkSubpassBeginInfo));
          VkSubpassBeginInfo *tmp_dst1 = (void *) cmd->u.next_subpass2.subpass_begin_info; (void) tmp_dst1;
          VkSubpassBeginInfo *tmp_src1 = (void *) pSubpassBeginInfo; (void) tmp_src1;
          
       } else {
          cmd->u.next_subpass2.subpass_begin_info = NULL;
       }   
       if (pSubpassEndInfo) {
          cmd->u.next_subpass2.subpass_end_info = vk_zalloc(queue->alloc, sizeof(VkSubpassEndInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.next_subpass2.subpass_end_info == NULL) goto err;
    
          memcpy((void*)cmd->u.next_subpass2.subpass_end_info, pSubpassEndInfo, sizeof(VkSubpassEndInfo));
          VkSubpassEndInfo *tmp_dst1 = (void *) cmd->u.next_subpass2.subpass_end_info; (void) tmp_dst1;
          VkSubpassEndInfo *tmp_src1 = (void *) pSubpassEndInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkSubpassFragmentDensityMapOffsetEndInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkSubpassFragmentDensityMapOffsetEndInfoQCOM));
          VkSubpassFragmentDensityMapOffsetEndInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkSubpassFragmentDensityMapOffsetEndInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pFragmentDensityOffsets) {
       tmp_dst2->pFragmentDensityOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pFragmentDensityOffsets) * tmp_dst2->fragmentDensityOffsetCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pFragmentDensityOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pFragmentDensityOffsets, tmp_src2->pFragmentDensityOffsets, sizeof(*tmp_dst2->pFragmentDensityOffsets) * tmp_dst2->fragmentDensityOffsetCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.next_subpass2.subpass_end_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_next_subpass2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_end_render_pass2(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkSubpassEndInfo*        )cmd->u.end_render_pass2.subpass_end_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_render_pass2(struct vk_cmd_queue *queue
    , const VkSubpassEndInfo*        pSubpassEndInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_RENDER_PASS2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_RENDER_PASS2;
          
       if (pSubpassEndInfo) {
          cmd->u.end_render_pass2.subpass_end_info = vk_zalloc(queue->alloc, sizeof(VkSubpassEndInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.end_render_pass2.subpass_end_info == NULL) goto err;
    
          memcpy((void*)cmd->u.end_render_pass2.subpass_end_info, pSubpassEndInfo, sizeof(VkSubpassEndInfo));
          VkSubpassEndInfo *tmp_dst1 = (void *) cmd->u.end_render_pass2.subpass_end_info; (void) tmp_dst1;
          VkSubpassEndInfo *tmp_src1 = (void *) pSubpassEndInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkSubpassFragmentDensityMapOffsetEndInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkSubpassFragmentDensityMapOffsetEndInfoQCOM));
          VkSubpassFragmentDensityMapOffsetEndInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkSubpassFragmentDensityMapOffsetEndInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pFragmentDensityOffsets) {
       tmp_dst2->pFragmentDensityOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pFragmentDensityOffsets) * tmp_dst2->fragmentDensityOffsetCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pFragmentDensityOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pFragmentDensityOffsets, tmp_src2->pFragmentDensityOffsets, sizeof(*tmp_dst2->pFragmentDensityOffsets) * tmp_dst2->fragmentDensityOffsetCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.end_render_pass2.subpass_end_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_end_render_pass2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_draw_indirect_count(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_indirect_count(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , VkBuffer countBuffer
    , VkDeviceSize countBufferOffset
    , uint32_t maxDrawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_INDIRECT_COUNT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_INDIRECT_COUNT;
          
       cmd->u.draw_indirect_count.buffer = buffer;
       cmd->u.draw_indirect_count.offset = offset;
       cmd->u.draw_indirect_count.count_buffer = countBuffer;
       cmd->u.draw_indirect_count.count_buffer_offset = countBufferOffset;
       cmd->u.draw_indirect_count.max_draw_count = maxDrawCount;
       cmd->u.draw_indirect_count.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_indexed_indirect_count(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_indexed_indirect_count(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , VkBuffer countBuffer
    , VkDeviceSize countBufferOffset
    , uint32_t maxDrawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_INDEXED_INDIRECT_COUNT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_INDEXED_INDIRECT_COUNT;
          
       cmd->u.draw_indexed_indirect_count.buffer = buffer;
       cmd->u.draw_indexed_indirect_count.offset = offset;
       cmd->u.draw_indexed_indirect_count.count_buffer = countBuffer;
       cmd->u.draw_indexed_indirect_count.count_buffer_offset = countBufferOffset;
       cmd->u.draw_indexed_indirect_count.max_draw_count = maxDrawCount;
       cmd->u.draw_indexed_indirect_count.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_checkpoint_nv(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( void* )cmd->u.set_checkpoint_nv.checkpoint_marker);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_checkpoint_nv(struct vk_cmd_queue *queue
    , const void* pCheckpointMarker
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_CHECKPOINT_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_CHECKPOINT_NV;
          
       cmd->u.set_checkpoint_nv.checkpoint_marker = ( void* ) pCheckpointMarker;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_bind_transform_feedback_buffers_ext(struct vk_cmd_queue *queue,
                                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBuffer* )cmd->u.bind_transform_feedback_buffers_ext.buffers);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.bind_transform_feedback_buffers_ext.offsets);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.bind_transform_feedback_buffers_ext.sizes);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_transform_feedback_buffers_ext(struct vk_cmd_queue *queue
    , uint32_t firstBinding
    , uint32_t bindingCount
    , const VkBuffer* pBuffers
    , const VkDeviceSize* pOffsets
    , const VkDeviceSize* pSizes
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_TRANSFORM_FEEDBACK_BUFFERS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_TRANSFORM_FEEDBACK_BUFFERS_EXT;
          
       cmd->u.bind_transform_feedback_buffers_ext.first_binding = firstBinding;
       cmd->u.bind_transform_feedback_buffers_ext.binding_count = bindingCount;
       if (pBuffers) {
          cmd->u.bind_transform_feedback_buffers_ext.buffers = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_transform_feedback_buffers_ext.buffers) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_transform_feedback_buffers_ext.buffers == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_transform_feedback_buffers_ext.buffers, pBuffers, sizeof(*cmd->u.bind_transform_feedback_buffers_ext.buffers) * (bindingCount));
       }   
       if (pOffsets) {
          cmd->u.bind_transform_feedback_buffers_ext.offsets = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_transform_feedback_buffers_ext.offsets) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_transform_feedback_buffers_ext.offsets == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_transform_feedback_buffers_ext.offsets, pOffsets, sizeof(*cmd->u.bind_transform_feedback_buffers_ext.offsets) * (bindingCount));
       }   
       if (pSizes) {
          cmd->u.bind_transform_feedback_buffers_ext.sizes = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_transform_feedback_buffers_ext.sizes) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_transform_feedback_buffers_ext.sizes == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_transform_feedback_buffers_ext.sizes, pSizes, sizeof(*cmd->u.bind_transform_feedback_buffers_ext.sizes) * (bindingCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_transform_feedback_buffers_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_begin_transform_feedback_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBuffer* )cmd->u.begin_transform_feedback_ext.counter_buffers);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.begin_transform_feedback_ext.counter_buffer_offsets);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_transform_feedback_ext(struct vk_cmd_queue *queue
    , uint32_t firstCounterBuffer
    , uint32_t counterBufferCount
    , const VkBuffer* pCounterBuffers
    , const VkDeviceSize* pCounterBufferOffsets
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_TRANSFORM_FEEDBACK_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_TRANSFORM_FEEDBACK_EXT;
          
       cmd->u.begin_transform_feedback_ext.first_counter_buffer = firstCounterBuffer;
       cmd->u.begin_transform_feedback_ext.counter_buffer_count = counterBufferCount;
       if (pCounterBuffers) {
          cmd->u.begin_transform_feedback_ext.counter_buffers = vk_zalloc(queue->alloc, sizeof(*cmd->u.begin_transform_feedback_ext.counter_buffers) * (counterBufferCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.begin_transform_feedback_ext.counter_buffers == NULL) goto err;
    
       memcpy((void*)cmd->u.begin_transform_feedback_ext.counter_buffers, pCounterBuffers, sizeof(*cmd->u.begin_transform_feedback_ext.counter_buffers) * (counterBufferCount));
       }   
       if (pCounterBufferOffsets) {
          cmd->u.begin_transform_feedback_ext.counter_buffer_offsets = vk_zalloc(queue->alloc, sizeof(*cmd->u.begin_transform_feedback_ext.counter_buffer_offsets) * (counterBufferCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.begin_transform_feedback_ext.counter_buffer_offsets == NULL) goto err;
    
       memcpy((void*)cmd->u.begin_transform_feedback_ext.counter_buffer_offsets, pCounterBufferOffsets, sizeof(*cmd->u.begin_transform_feedback_ext.counter_buffer_offsets) * (counterBufferCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_transform_feedback_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_end_transform_feedback_ext(struct vk_cmd_queue *queue,
                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBuffer* )cmd->u.end_transform_feedback_ext.counter_buffers);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.end_transform_feedback_ext.counter_buffer_offsets);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_transform_feedback_ext(struct vk_cmd_queue *queue
    , uint32_t firstCounterBuffer
    , uint32_t counterBufferCount
    , const VkBuffer* pCounterBuffers
    , const VkDeviceSize* pCounterBufferOffsets
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_TRANSFORM_FEEDBACK_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_TRANSFORM_FEEDBACK_EXT;
          
       cmd->u.end_transform_feedback_ext.first_counter_buffer = firstCounterBuffer;
       cmd->u.end_transform_feedback_ext.counter_buffer_count = counterBufferCount;
       if (pCounterBuffers) {
          cmd->u.end_transform_feedback_ext.counter_buffers = vk_zalloc(queue->alloc, sizeof(*cmd->u.end_transform_feedback_ext.counter_buffers) * (counterBufferCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.end_transform_feedback_ext.counter_buffers == NULL) goto err;
    
       memcpy((void*)cmd->u.end_transform_feedback_ext.counter_buffers, pCounterBuffers, sizeof(*cmd->u.end_transform_feedback_ext.counter_buffers) * (counterBufferCount));
       }   
       if (pCounterBufferOffsets) {
          cmd->u.end_transform_feedback_ext.counter_buffer_offsets = vk_zalloc(queue->alloc, sizeof(*cmd->u.end_transform_feedback_ext.counter_buffer_offsets) * (counterBufferCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.end_transform_feedback_ext.counter_buffer_offsets == NULL) goto err;
    
       memcpy((void*)cmd->u.end_transform_feedback_ext.counter_buffer_offsets, pCounterBufferOffsets, sizeof(*cmd->u.end_transform_feedback_ext.counter_buffer_offsets) * (counterBufferCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_end_transform_feedback_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_begin_query_indexed_ext(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_query_indexed_ext(struct vk_cmd_queue *queue
    , VkQueryPool queryPool
    , uint32_t query
    , VkQueryControlFlags flags
    , uint32_t index
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_QUERY_INDEXED_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_QUERY_INDEXED_EXT;
          
       cmd->u.begin_query_indexed_ext.query_pool = queryPool;
       cmd->u.begin_query_indexed_ext.query = query;
       cmd->u.begin_query_indexed_ext.flags = flags;
       cmd->u.begin_query_indexed_ext.index = index;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_end_query_indexed_ext(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_query_indexed_ext(struct vk_cmd_queue *queue
    , VkQueryPool queryPool
    , uint32_t query
    , uint32_t index
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_QUERY_INDEXED_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_QUERY_INDEXED_EXT;
          
       cmd->u.end_query_indexed_ext.query_pool = queryPool;
       cmd->u.end_query_indexed_ext.query = query;
       cmd->u.end_query_indexed_ext.index = index;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_indirect_byte_count_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_indirect_byte_count_ext(struct vk_cmd_queue *queue
    , uint32_t instanceCount
    , uint32_t firstInstance
    , VkBuffer counterBuffer
    , VkDeviceSize counterBufferOffset
    , uint32_t counterOffset
    , uint32_t vertexStride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_INDIRECT_BYTE_COUNT_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_INDIRECT_BYTE_COUNT_EXT;
          
       cmd->u.draw_indirect_byte_count_ext.instance_count = instanceCount;
       cmd->u.draw_indirect_byte_count_ext.first_instance = firstInstance;
       cmd->u.draw_indirect_byte_count_ext.counter_buffer = counterBuffer;
       cmd->u.draw_indirect_byte_count_ext.counter_buffer_offset = counterBufferOffset;
       cmd->u.draw_indirect_byte_count_ext.counter_offset = counterOffset;
       cmd->u.draw_indirect_byte_count_ext.vertex_stride = vertexStride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_exclusive_scissor_nv(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkRect2D* )cmd->u.set_exclusive_scissor_nv.exclusive_scissors);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_exclusive_scissor_nv(struct vk_cmd_queue *queue
    , uint32_t firstExclusiveScissor
    , uint32_t exclusiveScissorCount
    , const VkRect2D* pExclusiveScissors
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_EXCLUSIVE_SCISSOR_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_EXCLUSIVE_SCISSOR_NV;
          
       cmd->u.set_exclusive_scissor_nv.first_exclusive_scissor = firstExclusiveScissor;
       cmd->u.set_exclusive_scissor_nv.exclusive_scissor_count = exclusiveScissorCount;
       if (pExclusiveScissors) {
          cmd->u.set_exclusive_scissor_nv.exclusive_scissors = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_exclusive_scissor_nv.exclusive_scissors) * (exclusiveScissorCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_exclusive_scissor_nv.exclusive_scissors == NULL) goto err;
    
       memcpy((void*)cmd->u.set_exclusive_scissor_nv.exclusive_scissors, pExclusiveScissors, sizeof(*cmd->u.set_exclusive_scissor_nv.exclusive_scissors) * (exclusiveScissorCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_exclusive_scissor_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_exclusive_scissor_enable_nv(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBool32* )cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_exclusive_scissor_enable_nv(struct vk_cmd_queue *queue
    , uint32_t firstExclusiveScissor
    , uint32_t exclusiveScissorCount
    , const VkBool32* pExclusiveScissorEnables
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_EXCLUSIVE_SCISSOR_ENABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_EXCLUSIVE_SCISSOR_ENABLE_NV;
          
       cmd->u.set_exclusive_scissor_enable_nv.first_exclusive_scissor = firstExclusiveScissor;
       cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_count = exclusiveScissorCount;
       if (pExclusiveScissorEnables) {
          cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables) * (exclusiveScissorCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables == NULL) goto err;
    
       memcpy((void*)cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables, pExclusiveScissorEnables, sizeof(*cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables) * (exclusiveScissorCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_exclusive_scissor_enable_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_shading_rate_image_nv(struct vk_cmd_queue *queue,
                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_shading_rate_image_nv(struct vk_cmd_queue *queue
    , VkImageView imageView
    , VkImageLayout imageLayout
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_SHADING_RATE_IMAGE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_SHADING_RATE_IMAGE_NV;
          
       cmd->u.bind_shading_rate_image_nv.image_view = imageView;
       cmd->u.bind_shading_rate_image_nv.image_layout = imageLayout;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_viewport_shading_rate_palette_nv(struct vk_cmd_queue *queue,
                                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkShadingRatePaletteNV* )cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_viewport_shading_rate_palette_nv(struct vk_cmd_queue *queue
    , uint32_t firstViewport
    , uint32_t viewportCount
    , const VkShadingRatePaletteNV* pShadingRatePalettes
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VIEWPORT_SHADING_RATE_PALETTE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VIEWPORT_SHADING_RATE_PALETTE_NV;
          
       cmd->u.set_viewport_shading_rate_palette_nv.first_viewport = firstViewport;
       cmd->u.set_viewport_shading_rate_palette_nv.viewport_count = viewportCount;
       if (pShadingRatePalettes) {
          cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes) * (viewportCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes == NULL) goto err;
    
       memcpy((void*)cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes, pShadingRatePalettes, sizeof(*cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes) * (viewportCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_viewport_shading_rate_palette_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_coarse_sample_order_nv(struct vk_cmd_queue *queue,
                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkCoarseSampleOrderCustomNV* )cmd->u.set_coarse_sample_order_nv.custom_sample_orders);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coarse_sample_order_nv(struct vk_cmd_queue *queue
    , VkCoarseSampleOrderTypeNV sampleOrderType
    , uint32_t customSampleOrderCount
    , const VkCoarseSampleOrderCustomNV* pCustomSampleOrders
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COARSE_SAMPLE_ORDER_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COARSE_SAMPLE_ORDER_NV;
          
       cmd->u.set_coarse_sample_order_nv.sample_order_type = sampleOrderType;
       cmd->u.set_coarse_sample_order_nv.custom_sample_order_count = customSampleOrderCount;
       if (pCustomSampleOrders) {
          cmd->u.set_coarse_sample_order_nv.custom_sample_orders = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_coarse_sample_order_nv.custom_sample_orders) * (customSampleOrderCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_coarse_sample_order_nv.custom_sample_orders == NULL) goto err;
    
       memcpy((void*)cmd->u.set_coarse_sample_order_nv.custom_sample_orders, pCustomSampleOrders, sizeof(*cmd->u.set_coarse_sample_order_nv.custom_sample_orders) * (customSampleOrderCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_coarse_sample_order_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_draw_mesh_tasks_nv(struct vk_cmd_queue *queue,
                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_mesh_tasks_nv(struct vk_cmd_queue *queue
    , uint32_t taskCount
    , uint32_t firstTask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_MESH_TASKS_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_MESH_TASKS_NV;
          
       cmd->u.draw_mesh_tasks_nv.task_count = taskCount;
       cmd->u.draw_mesh_tasks_nv.first_task = firstTask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_mesh_tasks_indirect_nv(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_mesh_tasks_indirect_nv(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , uint32_t drawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_MESH_TASKS_INDIRECT_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_MESH_TASKS_INDIRECT_NV;
          
       cmd->u.draw_mesh_tasks_indirect_nv.buffer = buffer;
       cmd->u.draw_mesh_tasks_indirect_nv.offset = offset;
       cmd->u.draw_mesh_tasks_indirect_nv.draw_count = drawCount;
       cmd->u.draw_mesh_tasks_indirect_nv.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_mesh_tasks_indirect_count_nv(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_mesh_tasks_indirect_count_nv(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , VkBuffer countBuffer
    , VkDeviceSize countBufferOffset
    , uint32_t maxDrawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_NV;
          
       cmd->u.draw_mesh_tasks_indirect_count_nv.buffer = buffer;
       cmd->u.draw_mesh_tasks_indirect_count_nv.offset = offset;
       cmd->u.draw_mesh_tasks_indirect_count_nv.count_buffer = countBuffer;
       cmd->u.draw_mesh_tasks_indirect_count_nv.count_buffer_offset = countBufferOffset;
       cmd->u.draw_mesh_tasks_indirect_count_nv.max_draw_count = maxDrawCount;
       cmd->u.draw_mesh_tasks_indirect_count_nv.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_mesh_tasks_ext(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_mesh_tasks_ext(struct vk_cmd_queue *queue
    , uint32_t groupCountX
    , uint32_t groupCountY
    , uint32_t groupCountZ
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_MESH_TASKS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_MESH_TASKS_EXT;
          
       cmd->u.draw_mesh_tasks_ext.group_count_x = groupCountX;
       cmd->u.draw_mesh_tasks_ext.group_count_y = groupCountY;
       cmd->u.draw_mesh_tasks_ext.group_count_z = groupCountZ;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_mesh_tasks_indirect_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_mesh_tasks_indirect_ext(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , uint32_t drawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_MESH_TASKS_INDIRECT_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_MESH_TASKS_INDIRECT_EXT;
          
       cmd->u.draw_mesh_tasks_indirect_ext.buffer = buffer;
       cmd->u.draw_mesh_tasks_indirect_ext.offset = offset;
       cmd->u.draw_mesh_tasks_indirect_ext.draw_count = drawCount;
       cmd->u.draw_mesh_tasks_indirect_ext.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_draw_mesh_tasks_indirect_count_ext(struct vk_cmd_queue *queue,
                                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_draw_mesh_tasks_indirect_count_ext(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , VkBuffer countBuffer
    , VkDeviceSize countBufferOffset
    , uint32_t maxDrawCount
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_EXT;
          
       cmd->u.draw_mesh_tasks_indirect_count_ext.buffer = buffer;
       cmd->u.draw_mesh_tasks_indirect_count_ext.offset = offset;
       cmd->u.draw_mesh_tasks_indirect_count_ext.count_buffer = countBuffer;
       cmd->u.draw_mesh_tasks_indirect_count_ext.count_buffer_offset = countBufferOffset;
       cmd->u.draw_mesh_tasks_indirect_count_ext.max_draw_count = maxDrawCount;
       cmd->u.draw_mesh_tasks_indirect_count_ext.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_bind_invocation_mask_huawei(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_invocation_mask_huawei(struct vk_cmd_queue *queue
    , VkImageView imageView
    , VkImageLayout imageLayout
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_INVOCATION_MASK_HUAWEI], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_INVOCATION_MASK_HUAWEI;
          
       cmd->u.bind_invocation_mask_huawei.image_view = imageView;
       cmd->u.bind_invocation_mask_huawei.image_layout = imageLayout;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_copy_acceleration_structure_nv(struct vk_cmd_queue *queue,
                                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_acceleration_structure_nv(struct vk_cmd_queue *queue
    , VkAccelerationStructureNV dst
    , VkAccelerationStructureNV src
    , VkCopyAccelerationStructureModeKHR mode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_ACCELERATION_STRUCTURE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_ACCELERATION_STRUCTURE_NV;
          
       cmd->u.copy_acceleration_structure_nv.dst = dst;
       cmd->u.copy_acceleration_structure_nv.src = src;
       cmd->u.copy_acceleration_structure_nv.mode = mode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_copy_acceleration_structure_khr(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkCopyAccelerationStructureInfoKHR* )cmd->u.copy_acceleration_structure_khr.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_acceleration_structure_khr(struct vk_cmd_queue *queue
    , const VkCopyAccelerationStructureInfoKHR* pInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_ACCELERATION_STRUCTURE_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_ACCELERATION_STRUCTURE_KHR;
          
       if (pInfo) {
          cmd->u.copy_acceleration_structure_khr.info = vk_zalloc(queue->alloc, sizeof(VkCopyAccelerationStructureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_acceleration_structure_khr.info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_acceleration_structure_khr.info, pInfo, sizeof(VkCopyAccelerationStructureInfoKHR));
          VkCopyAccelerationStructureInfoKHR *tmp_dst1 = (void *) cmd->u.copy_acceleration_structure_khr.info; (void) tmp_dst1;
          VkCopyAccelerationStructureInfoKHR *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          
       } else {
          cmd->u.copy_acceleration_structure_khr.info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_acceleration_structure_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_acceleration_structure_to_memory_khr(struct vk_cmd_queue *queue,
                                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkCopyAccelerationStructureToMemoryInfoKHR* )cmd->u.copy_acceleration_structure_to_memory_khr.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_acceleration_structure_to_memory_khr(struct vk_cmd_queue *queue
    , const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR;
          
       if (pInfo) {
          cmd->u.copy_acceleration_structure_to_memory_khr.info = vk_zalloc(queue->alloc, sizeof(VkCopyAccelerationStructureToMemoryInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_acceleration_structure_to_memory_khr.info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_acceleration_structure_to_memory_khr.info, pInfo, sizeof(VkCopyAccelerationStructureToMemoryInfoKHR));
          VkCopyAccelerationStructureToMemoryInfoKHR *tmp_dst1 = (void *) cmd->u.copy_acceleration_structure_to_memory_khr.info; (void) tmp_dst1;
          VkCopyAccelerationStructureToMemoryInfoKHR *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          
       } else {
          cmd->u.copy_acceleration_structure_to_memory_khr.info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_acceleration_structure_to_memory_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_memory_to_acceleration_structure_khr(struct vk_cmd_queue *queue,
                                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkCopyMemoryToAccelerationStructureInfoKHR* )cmd->u.copy_memory_to_acceleration_structure_khr.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_memory_to_acceleration_structure_khr(struct vk_cmd_queue *queue
    , const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR;
          
       if (pInfo) {
          cmd->u.copy_memory_to_acceleration_structure_khr.info = vk_zalloc(queue->alloc, sizeof(VkCopyMemoryToAccelerationStructureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_memory_to_acceleration_structure_khr.info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_memory_to_acceleration_structure_khr.info, pInfo, sizeof(VkCopyMemoryToAccelerationStructureInfoKHR));
          VkCopyMemoryToAccelerationStructureInfoKHR *tmp_dst1 = (void *) cmd->u.copy_memory_to_acceleration_structure_khr.info; (void) tmp_dst1;
          VkCopyMemoryToAccelerationStructureInfoKHR *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          
       } else {
          cmd->u.copy_memory_to_acceleration_structure_khr.info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_memory_to_acceleration_structure_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_write_acceleration_structures_properties_khr(struct vk_cmd_queue *queue,
                                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkAccelerationStructureKHR* )cmd->u.write_acceleration_structures_properties_khr.acceleration_structures);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_acceleration_structures_properties_khr(struct vk_cmd_queue *queue
    , uint32_t accelerationStructureCount
    , const VkAccelerationStructureKHR* pAccelerationStructures
    , VkQueryType queryType
    , VkQueryPool queryPool
    , uint32_t firstQuery
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR;
          
       cmd->u.write_acceleration_structures_properties_khr.acceleration_structure_count = accelerationStructureCount;
       if (pAccelerationStructures) {
          cmd->u.write_acceleration_structures_properties_khr.acceleration_structures = vk_zalloc(queue->alloc, sizeof(*cmd->u.write_acceleration_structures_properties_khr.acceleration_structures) * (accelerationStructureCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.write_acceleration_structures_properties_khr.acceleration_structures == NULL) goto err;
    
       memcpy((void*)cmd->u.write_acceleration_structures_properties_khr.acceleration_structures, pAccelerationStructures, sizeof(*cmd->u.write_acceleration_structures_properties_khr.acceleration_structures) * (accelerationStructureCount));
       }   
       cmd->u.write_acceleration_structures_properties_khr.query_type = queryType;
       cmd->u.write_acceleration_structures_properties_khr.query_pool = queryPool;
       cmd->u.write_acceleration_structures_properties_khr.first_query = firstQuery;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_write_acceleration_structures_properties_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_write_acceleration_structures_properties_nv(struct vk_cmd_queue *queue,
                                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkAccelerationStructureNV* )cmd->u.write_acceleration_structures_properties_nv.acceleration_structures);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_acceleration_structures_properties_nv(struct vk_cmd_queue *queue
    , uint32_t accelerationStructureCount
    , const VkAccelerationStructureNV* pAccelerationStructures
    , VkQueryType queryType
    , VkQueryPool queryPool
    , uint32_t firstQuery
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV;
          
       cmd->u.write_acceleration_structures_properties_nv.acceleration_structure_count = accelerationStructureCount;
       if (pAccelerationStructures) {
          cmd->u.write_acceleration_structures_properties_nv.acceleration_structures = vk_zalloc(queue->alloc, sizeof(*cmd->u.write_acceleration_structures_properties_nv.acceleration_structures) * (accelerationStructureCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.write_acceleration_structures_properties_nv.acceleration_structures == NULL) goto err;
    
       memcpy((void*)cmd->u.write_acceleration_structures_properties_nv.acceleration_structures, pAccelerationStructures, sizeof(*cmd->u.write_acceleration_structures_properties_nv.acceleration_structures) * (accelerationStructureCount));
       }   
       cmd->u.write_acceleration_structures_properties_nv.query_type = queryType;
       cmd->u.write_acceleration_structures_properties_nv.query_pool = queryPool;
       cmd->u.write_acceleration_structures_properties_nv.first_query = firstQuery;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_write_acceleration_structures_properties_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_build_acceleration_structure_nv(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkGeometryNV* )cmd->u.build_acceleration_structure_nv.info->pGeometries);
          vk_free(queue->alloc, ( VkAccelerationStructureInfoNV* )cmd->u.build_acceleration_structure_nv.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_build_acceleration_structure_nv(struct vk_cmd_queue *queue
    , const VkAccelerationStructureInfoNV* pInfo
    , VkBuffer instanceData
    , VkDeviceSize instanceOffset
    , VkBool32 update
    , VkAccelerationStructureNV dst
    , VkAccelerationStructureNV src
    , VkBuffer scratch
    , VkDeviceSize scratchOffset
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BUILD_ACCELERATION_STRUCTURE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BUILD_ACCELERATION_STRUCTURE_NV;
          
       if (pInfo) {
          cmd->u.build_acceleration_structure_nv.info = vk_zalloc(queue->alloc, sizeof(VkAccelerationStructureInfoNV), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.build_acceleration_structure_nv.info == NULL) goto err;
    
          memcpy((void*)cmd->u.build_acceleration_structure_nv.info, pInfo, sizeof(VkAccelerationStructureInfoNV));
          VkAccelerationStructureInfoNV *tmp_dst1 = (void *) cmd->u.build_acceleration_structure_nv.info; (void) tmp_dst1;
          VkAccelerationStructureInfoNV *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          if (tmp_src1->pGeometries) {
       tmp_dst1->pGeometries = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pGeometries) * tmp_dst1->geometryCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pGeometries == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pGeometries, tmp_src1->pGeometries, sizeof(*tmp_dst1->pGeometries) * tmp_dst1->geometryCount);
    }
    
       } else {
          cmd->u.build_acceleration_structure_nv.info = NULL;
       }   
       cmd->u.build_acceleration_structure_nv.instance_data = instanceData;
       cmd->u.build_acceleration_structure_nv.instance_offset = instanceOffset;
       cmd->u.build_acceleration_structure_nv.update = update;
       cmd->u.build_acceleration_structure_nv.dst = dst;
       cmd->u.build_acceleration_structure_nv.src = src;
       cmd->u.build_acceleration_structure_nv.scratch = scratch;
       cmd->u.build_acceleration_structure_nv.scratch_offset = scratchOffset;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_build_acceleration_structure_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_trace_rays_khr(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_khr.raygen_shader_binding_table);
    
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_khr.miss_shader_binding_table);
    
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_khr.hit_shader_binding_table);
    
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_khr.callable_shader_binding_table);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_trace_rays_khr(struct vk_cmd_queue *queue
    , const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable
    , const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable
    , const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable
    , const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable
    , uint32_t width
    , uint32_t height
    , uint32_t depth
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_TRACE_RAYS_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_TRACE_RAYS_KHR;
          
       if (pRaygenShaderBindingTable) {
          cmd->u.trace_rays_khr.raygen_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_khr.raygen_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_khr.raygen_shader_binding_table, pRaygenShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_khr.raygen_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pRaygenShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_khr.raygen_shader_binding_table = NULL;
       }   
       if (pMissShaderBindingTable) {
          cmd->u.trace_rays_khr.miss_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_khr.miss_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_khr.miss_shader_binding_table, pMissShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_khr.miss_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pMissShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_khr.miss_shader_binding_table = NULL;
       }   
       if (pHitShaderBindingTable) {
          cmd->u.trace_rays_khr.hit_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_khr.hit_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_khr.hit_shader_binding_table, pHitShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_khr.hit_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pHitShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_khr.hit_shader_binding_table = NULL;
       }   
       if (pCallableShaderBindingTable) {
          cmd->u.trace_rays_khr.callable_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_khr.callable_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_khr.callable_shader_binding_table, pCallableShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_khr.callable_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pCallableShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_khr.callable_shader_binding_table = NULL;
       }   
       cmd->u.trace_rays_khr.width = width;
       cmd->u.trace_rays_khr.height = height;
       cmd->u.trace_rays_khr.depth = depth;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_trace_rays_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_trace_rays_nv(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_trace_rays_nv(struct vk_cmd_queue *queue
    , VkBuffer raygenShaderBindingTableBuffer
    , VkDeviceSize raygenShaderBindingOffset
    , VkBuffer missShaderBindingTableBuffer
    , VkDeviceSize missShaderBindingOffset
    , VkDeviceSize missShaderBindingStride
    , VkBuffer hitShaderBindingTableBuffer
    , VkDeviceSize hitShaderBindingOffset
    , VkDeviceSize hitShaderBindingStride
    , VkBuffer callableShaderBindingTableBuffer
    , VkDeviceSize callableShaderBindingOffset
    , VkDeviceSize callableShaderBindingStride
    , uint32_t width
    , uint32_t height
    , uint32_t depth
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_TRACE_RAYS_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_TRACE_RAYS_NV;
          
       cmd->u.trace_rays_nv.raygen_shader_binding_table_buffer = raygenShaderBindingTableBuffer;
       cmd->u.trace_rays_nv.raygen_shader_binding_offset = raygenShaderBindingOffset;
       cmd->u.trace_rays_nv.miss_shader_binding_table_buffer = missShaderBindingTableBuffer;
       cmd->u.trace_rays_nv.miss_shader_binding_offset = missShaderBindingOffset;
       cmd->u.trace_rays_nv.miss_shader_binding_stride = missShaderBindingStride;
       cmd->u.trace_rays_nv.hit_shader_binding_table_buffer = hitShaderBindingTableBuffer;
       cmd->u.trace_rays_nv.hit_shader_binding_offset = hitShaderBindingOffset;
       cmd->u.trace_rays_nv.hit_shader_binding_stride = hitShaderBindingStride;
       cmd->u.trace_rays_nv.callable_shader_binding_table_buffer = callableShaderBindingTableBuffer;
       cmd->u.trace_rays_nv.callable_shader_binding_offset = callableShaderBindingOffset;
       cmd->u.trace_rays_nv.callable_shader_binding_stride = callableShaderBindingStride;
       cmd->u.trace_rays_nv.width = width;
       cmd->u.trace_rays_nv.height = height;
       cmd->u.trace_rays_nv.depth = depth;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_trace_rays_indirect_khr(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table);
    
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_indirect_khr.miss_shader_binding_table);
    
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_indirect_khr.hit_shader_binding_table);
    
             vk_free(queue->alloc, ( VkStridedDeviceAddressRegionKHR* )cmd->u.trace_rays_indirect_khr.callable_shader_binding_table);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_trace_rays_indirect_khr(struct vk_cmd_queue *queue
    , const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable
    , const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable
    , const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable
    , const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable
    , VkDeviceAddress indirectDeviceAddress
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_TRACE_RAYS_INDIRECT_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_TRACE_RAYS_INDIRECT_KHR;
          
       if (pRaygenShaderBindingTable) {
          cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table, pRaygenShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pRaygenShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table = NULL;
       }   
       if (pMissShaderBindingTable) {
          cmd->u.trace_rays_indirect_khr.miss_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_indirect_khr.miss_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_indirect_khr.miss_shader_binding_table, pMissShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_indirect_khr.miss_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pMissShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_indirect_khr.miss_shader_binding_table = NULL;
       }   
       if (pHitShaderBindingTable) {
          cmd->u.trace_rays_indirect_khr.hit_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_indirect_khr.hit_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_indirect_khr.hit_shader_binding_table, pHitShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_indirect_khr.hit_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pHitShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_indirect_khr.hit_shader_binding_table = NULL;
       }   
       if (pCallableShaderBindingTable) {
          cmd->u.trace_rays_indirect_khr.callable_shader_binding_table = vk_zalloc(queue->alloc, sizeof(VkStridedDeviceAddressRegionKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.trace_rays_indirect_khr.callable_shader_binding_table == NULL) goto err;
    
          memcpy((void*)cmd->u.trace_rays_indirect_khr.callable_shader_binding_table, pCallableShaderBindingTable, sizeof(VkStridedDeviceAddressRegionKHR));
          VkStridedDeviceAddressRegionKHR *tmp_dst1 = (void *) cmd->u.trace_rays_indirect_khr.callable_shader_binding_table; (void) tmp_dst1;
          VkStridedDeviceAddressRegionKHR *tmp_src1 = (void *) pCallableShaderBindingTable; (void) tmp_src1;
          
       } else {
          cmd->u.trace_rays_indirect_khr.callable_shader_binding_table = NULL;
       }   
       cmd->u.trace_rays_indirect_khr.indirect_device_address = indirectDeviceAddress;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_trace_rays_indirect_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_trace_rays_indirect2_khr(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_trace_rays_indirect2_khr(struct vk_cmd_queue *queue
    , VkDeviceAddress indirectDeviceAddress
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_TRACE_RAYS_INDIRECT2_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_TRACE_RAYS_INDIRECT2_KHR;
          
       cmd->u.trace_rays_indirect2_khr.indirect_device_address = indirectDeviceAddress;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_ray_tracing_pipeline_stack_size_khr(struct vk_cmd_queue *queue,
                                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_ray_tracing_pipeline_stack_size_khr(struct vk_cmd_queue *queue
    , uint32_t pipelineStackSize
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_RAY_TRACING_PIPELINE_STACK_SIZE_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_RAY_TRACING_PIPELINE_STACK_SIZE_KHR;
          
       cmd->u.set_ray_tracing_pipeline_stack_size_khr.pipeline_stack_size = pipelineStackSize;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_performance_marker_intel(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkPerformanceMarkerInfoINTEL* )cmd->u.set_performance_marker_intel.marker_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_set_performance_stream_marker_intel(struct vk_cmd_queue *queue,
                                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkPerformanceStreamMarkerInfoINTEL* )cmd->u.set_performance_stream_marker_intel.marker_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_set_performance_override_intel(struct vk_cmd_queue *queue,
                                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkPerformanceOverrideInfoINTEL* )cmd->u.set_performance_override_intel.override_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_set_line_stipple(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_line_stipple(struct vk_cmd_queue *queue
    , uint32_t lineStippleFactor
    , uint16_t lineStipplePattern
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_LINE_STIPPLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_LINE_STIPPLE;
          
       cmd->u.set_line_stipple.line_stipple_factor = lineStippleFactor;
       cmd->u.set_line_stipple.line_stipple_pattern = lineStipplePattern;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_build_acceleration_structures_khr(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkAccelerationStructureBuildGeometryInfoKHR* )cmd->u.build_acceleration_structures_khr.infos);
       vk_free(queue->alloc, ( VkAccelerationStructureBuildRangeInfoKHR* * )cmd->u.build_acceleration_structures_khr.pp_build_range_infos);
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_build_acceleration_structures_indirect_khr(struct vk_cmd_queue *queue,
                                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkAccelerationStructureBuildGeometryInfoKHR* )cmd->u.build_acceleration_structures_indirect_khr.infos);
       vk_free(queue->alloc, ( VkDeviceAddress*             )cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses);
       vk_free(queue->alloc, ( uint32_t*                    )cmd->u.build_acceleration_structures_indirect_khr.indirect_strides);
       vk_free(queue->alloc, ( uint32_t* *             )cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_build_acceleration_structures_indirect_khr(struct vk_cmd_queue *queue
    , uint32_t                                           infoCount
    , const VkAccelerationStructureBuildGeometryInfoKHR* pInfos
    , const VkDeviceAddress*             pIndirectDeviceAddresses
    , const uint32_t*                    pIndirectStrides
    , const uint32_t* const*             ppMaxPrimitiveCounts
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BUILD_ACCELERATION_STRUCTURES_INDIRECT_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BUILD_ACCELERATION_STRUCTURES_INDIRECT_KHR;
          
       cmd->u.build_acceleration_structures_indirect_khr.info_count = infoCount;
       if (pInfos) {
          cmd->u.build_acceleration_structures_indirect_khr.infos = vk_zalloc(queue->alloc, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.infos) * (infoCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.build_acceleration_structures_indirect_khr.infos == NULL) goto err;
    
       memcpy((void*)cmd->u.build_acceleration_structures_indirect_khr.infos, pInfos, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.infos) * (infoCount));
       }   
       if (pIndirectDeviceAddresses) {
          cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses = vk_zalloc(queue->alloc, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses) * (infoCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses == NULL) goto err;
    
       memcpy((void*)cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses, pIndirectDeviceAddresses, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses) * (infoCount));
       }   
       if (pIndirectStrides) {
          cmd->u.build_acceleration_structures_indirect_khr.indirect_strides = vk_zalloc(queue->alloc, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.indirect_strides) * (infoCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.build_acceleration_structures_indirect_khr.indirect_strides == NULL) goto err;
    
       memcpy((void*)cmd->u.build_acceleration_structures_indirect_khr.indirect_strides, pIndirectStrides, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.indirect_strides) * (infoCount));
       }   
       if (ppMaxPrimitiveCounts) {
          cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts = vk_zalloc(queue->alloc, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts) * (infoCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts == NULL) goto err;
    
       memcpy((void*)cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts, ppMaxPrimitiveCounts, sizeof(*cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts) * (infoCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_build_acceleration_structures_indirect_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_cull_mode(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_cull_mode(struct vk_cmd_queue *queue
    , VkCullModeFlags cullMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_CULL_MODE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_CULL_MODE;
          
       cmd->u.set_cull_mode.cull_mode = cullMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_front_face(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_front_face(struct vk_cmd_queue *queue
    , VkFrontFace frontFace
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_FRONT_FACE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_FRONT_FACE;
          
       cmd->u.set_front_face.front_face = frontFace;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_primitive_topology(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_primitive_topology(struct vk_cmd_queue *queue
    , VkPrimitiveTopology primitiveTopology
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_PRIMITIVE_TOPOLOGY], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_PRIMITIVE_TOPOLOGY;
          
       cmd->u.set_primitive_topology.primitive_topology = primitiveTopology;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_viewport_with_count(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkViewport* )cmd->u.set_viewport_with_count.viewports);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_viewport_with_count(struct vk_cmd_queue *queue
    , uint32_t viewportCount
    , const VkViewport* pViewports
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VIEWPORT_WITH_COUNT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VIEWPORT_WITH_COUNT;
          
       cmd->u.set_viewport_with_count.viewport_count = viewportCount;
       if (pViewports) {
          cmd->u.set_viewport_with_count.viewports = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_viewport_with_count.viewports) * (viewportCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_viewport_with_count.viewports == NULL) goto err;
    
       memcpy((void*)cmd->u.set_viewport_with_count.viewports, pViewports, sizeof(*cmd->u.set_viewport_with_count.viewports) * (viewportCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_viewport_with_count(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_scissor_with_count(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkRect2D* )cmd->u.set_scissor_with_count.scissors);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_scissor_with_count(struct vk_cmd_queue *queue
    , uint32_t scissorCount
    , const VkRect2D* pScissors
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_SCISSOR_WITH_COUNT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_SCISSOR_WITH_COUNT;
          
       cmd->u.set_scissor_with_count.scissor_count = scissorCount;
       if (pScissors) {
          cmd->u.set_scissor_with_count.scissors = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_scissor_with_count.scissors) * (scissorCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_scissor_with_count.scissors == NULL) goto err;
    
       memcpy((void*)cmd->u.set_scissor_with_count.scissors, pScissors, sizeof(*cmd->u.set_scissor_with_count.scissors) * (scissorCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_scissor_with_count(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_index_buffer2(struct vk_cmd_queue *queue,
                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_index_buffer2(struct vk_cmd_queue *queue
    , VkBuffer buffer
    , VkDeviceSize offset
    , VkDeviceSize size
    , VkIndexType indexType
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_INDEX_BUFFER2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_INDEX_BUFFER2;
          
       cmd->u.bind_index_buffer2.buffer = buffer;
       cmd->u.bind_index_buffer2.offset = offset;
       cmd->u.bind_index_buffer2.size = size;
       cmd->u.bind_index_buffer2.index_type = indexType;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_bind_vertex_buffers2(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBuffer* )cmd->u.bind_vertex_buffers2.buffers);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.bind_vertex_buffers2.offsets);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.bind_vertex_buffers2.sizes);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.bind_vertex_buffers2.strides);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_vertex_buffers2(struct vk_cmd_queue *queue
    , uint32_t firstBinding
    , uint32_t bindingCount
    , const VkBuffer* pBuffers
    , const VkDeviceSize* pOffsets
    , const VkDeviceSize* pSizes
    , const VkDeviceSize* pStrides
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_VERTEX_BUFFERS2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_VERTEX_BUFFERS2;
          
       cmd->u.bind_vertex_buffers2.first_binding = firstBinding;
       cmd->u.bind_vertex_buffers2.binding_count = bindingCount;
       if (pBuffers) {
          cmd->u.bind_vertex_buffers2.buffers = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_vertex_buffers2.buffers) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_vertex_buffers2.buffers == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_vertex_buffers2.buffers, pBuffers, sizeof(*cmd->u.bind_vertex_buffers2.buffers) * (bindingCount));
       }   
       if (pOffsets) {
          cmd->u.bind_vertex_buffers2.offsets = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_vertex_buffers2.offsets) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_vertex_buffers2.offsets == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_vertex_buffers2.offsets, pOffsets, sizeof(*cmd->u.bind_vertex_buffers2.offsets) * (bindingCount));
       }   
       if (pSizes) {
          cmd->u.bind_vertex_buffers2.sizes = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_vertex_buffers2.sizes) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_vertex_buffers2.sizes == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_vertex_buffers2.sizes, pSizes, sizeof(*cmd->u.bind_vertex_buffers2.sizes) * (bindingCount));
       }   
       if (pStrides) {
          cmd->u.bind_vertex_buffers2.strides = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_vertex_buffers2.strides) * (bindingCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_vertex_buffers2.strides == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_vertex_buffers2.strides, pStrides, sizeof(*cmd->u.bind_vertex_buffers2.strides) * (bindingCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_vertex_buffers2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_depth_test_enable(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_test_enable(struct vk_cmd_queue *queue
    , VkBool32 depthTestEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_TEST_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_TEST_ENABLE;
          
       cmd->u.set_depth_test_enable.depth_test_enable = depthTestEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_write_enable(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_write_enable(struct vk_cmd_queue *queue
    , VkBool32 depthWriteEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_WRITE_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_WRITE_ENABLE;
          
       cmd->u.set_depth_write_enable.depth_write_enable = depthWriteEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_compare_op(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_compare_op(struct vk_cmd_queue *queue
    , VkCompareOp depthCompareOp
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_COMPARE_OP], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_COMPARE_OP;
          
       cmd->u.set_depth_compare_op.depth_compare_op = depthCompareOp;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_bounds_test_enable(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_bounds_test_enable(struct vk_cmd_queue *queue
    , VkBool32 depthBoundsTestEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE;
          
       cmd->u.set_depth_bounds_test_enable.depth_bounds_test_enable = depthBoundsTestEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_stencil_test_enable(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_stencil_test_enable(struct vk_cmd_queue *queue
    , VkBool32 stencilTestEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_STENCIL_TEST_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_STENCIL_TEST_ENABLE;
          
       cmd->u.set_stencil_test_enable.stencil_test_enable = stencilTestEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_stencil_op(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_stencil_op(struct vk_cmd_queue *queue
    , VkStencilFaceFlags faceMask
    , VkStencilOp failOp
    , VkStencilOp passOp
    , VkStencilOp depthFailOp
    , VkCompareOp compareOp
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_STENCIL_OP], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_STENCIL_OP;
          
       cmd->u.set_stencil_op.face_mask = faceMask;
       cmd->u.set_stencil_op.fail_op = failOp;
       cmd->u.set_stencil_op.pass_op = passOp;
       cmd->u.set_stencil_op.depth_fail_op = depthFailOp;
       cmd->u.set_stencil_op.compare_op = compareOp;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_patch_control_points_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_patch_control_points_ext(struct vk_cmd_queue *queue
    , uint32_t patchControlPoints
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_PATCH_CONTROL_POINTS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_PATCH_CONTROL_POINTS_EXT;
          
       cmd->u.set_patch_control_points_ext.patch_control_points = patchControlPoints;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_rasterizer_discard_enable(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_rasterizer_discard_enable(struct vk_cmd_queue *queue
    , VkBool32 rasterizerDiscardEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_RASTERIZER_DISCARD_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_RASTERIZER_DISCARD_ENABLE;
          
       cmd->u.set_rasterizer_discard_enable.rasterizer_discard_enable = rasterizerDiscardEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_bias_enable(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_bias_enable(struct vk_cmd_queue *queue
    , VkBool32 depthBiasEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_BIAS_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_BIAS_ENABLE;
          
       cmd->u.set_depth_bias_enable.depth_bias_enable = depthBiasEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_logic_op_ext(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_logic_op_ext(struct vk_cmd_queue *queue
    , VkLogicOp logicOp
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_LOGIC_OP_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_LOGIC_OP_EXT;
          
       cmd->u.set_logic_op_ext.logic_op = logicOp;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_primitive_restart_enable(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_primitive_restart_enable(struct vk_cmd_queue *queue
    , VkBool32 primitiveRestartEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_PRIMITIVE_RESTART_ENABLE], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_PRIMITIVE_RESTART_ENABLE;
          
       cmd->u.set_primitive_restart_enable.primitive_restart_enable = primitiveRestartEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_tessellation_domain_origin_ext(struct vk_cmd_queue *queue,
                                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_tessellation_domain_origin_ext(struct vk_cmd_queue *queue
    , VkTessellationDomainOrigin domainOrigin
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_TESSELLATION_DOMAIN_ORIGIN_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_TESSELLATION_DOMAIN_ORIGIN_EXT;
          
       cmd->u.set_tessellation_domain_origin_ext.domain_origin = domainOrigin;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_clamp_enable_ext(struct vk_cmd_queue *queue,
                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_clamp_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 depthClampEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_CLAMP_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_CLAMP_ENABLE_EXT;
          
       cmd->u.set_depth_clamp_enable_ext.depth_clamp_enable = depthClampEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_polygon_mode_ext(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_polygon_mode_ext(struct vk_cmd_queue *queue
    , VkPolygonMode polygonMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_POLYGON_MODE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_POLYGON_MODE_EXT;
          
       cmd->u.set_polygon_mode_ext.polygon_mode = polygonMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_rasterization_samples_ext(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_rasterization_samples_ext(struct vk_cmd_queue *queue
    , VkSampleCountFlagBits  rasterizationSamples
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_RASTERIZATION_SAMPLES_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_RASTERIZATION_SAMPLES_EXT;
          
       cmd->u.set_rasterization_samples_ext.rasterization_samples = rasterizationSamples;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_sample_mask_ext(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkSampleMask*    )cmd->u.set_sample_mask_ext.sample_mask);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_sample_mask_ext(struct vk_cmd_queue *queue
    , VkSampleCountFlagBits  samples
    , const VkSampleMask*    pSampleMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_SAMPLE_MASK_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_SAMPLE_MASK_EXT;
          
       cmd->u.set_sample_mask_ext.samples = samples;
       if (pSampleMask) {
          cmd->u.set_sample_mask_ext.sample_mask = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_sample_mask_ext.sample_mask) * ((samples + 31) / 32), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_sample_mask_ext.sample_mask == NULL) goto err;
    
       memcpy((void*)cmd->u.set_sample_mask_ext.sample_mask, pSampleMask, sizeof(*cmd->u.set_sample_mask_ext.sample_mask) * ((samples + 31) / 32));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_sample_mask_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_alpha_to_coverage_enable_ext(struct vk_cmd_queue *queue,
                                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_alpha_to_coverage_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 alphaToCoverageEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_ALPHA_TO_COVERAGE_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_ALPHA_TO_COVERAGE_ENABLE_EXT;
          
       cmd->u.set_alpha_to_coverage_enable_ext.alpha_to_coverage_enable = alphaToCoverageEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_alpha_to_one_enable_ext(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_alpha_to_one_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 alphaToOneEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_ALPHA_TO_ONE_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_ALPHA_TO_ONE_ENABLE_EXT;
          
       cmd->u.set_alpha_to_one_enable_ext.alpha_to_one_enable = alphaToOneEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_logic_op_enable_ext(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_logic_op_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 logicOpEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_LOGIC_OP_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_LOGIC_OP_ENABLE_EXT;
          
       cmd->u.set_logic_op_enable_ext.logic_op_enable = logicOpEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_color_blend_enable_ext(struct vk_cmd_queue *queue,
                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBool32* )cmd->u.set_color_blend_enable_ext.color_blend_enables);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_color_blend_enable_ext(struct vk_cmd_queue *queue
    , uint32_t firstAttachment
    , uint32_t attachmentCount
    , const VkBool32* pColorBlendEnables
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COLOR_BLEND_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COLOR_BLEND_ENABLE_EXT;
          
       cmd->u.set_color_blend_enable_ext.first_attachment = firstAttachment;
       cmd->u.set_color_blend_enable_ext.attachment_count = attachmentCount;
       if (pColorBlendEnables) {
          cmd->u.set_color_blend_enable_ext.color_blend_enables = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_color_blend_enable_ext.color_blend_enables) * (attachmentCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_color_blend_enable_ext.color_blend_enables == NULL) goto err;
    
       memcpy((void*)cmd->u.set_color_blend_enable_ext.color_blend_enables, pColorBlendEnables, sizeof(*cmd->u.set_color_blend_enable_ext.color_blend_enables) * (attachmentCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_color_blend_enable_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_color_blend_equation_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkColorBlendEquationEXT* )cmd->u.set_color_blend_equation_ext.color_blend_equations);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_color_blend_equation_ext(struct vk_cmd_queue *queue
    , uint32_t firstAttachment
    , uint32_t attachmentCount
    , const VkColorBlendEquationEXT* pColorBlendEquations
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COLOR_BLEND_EQUATION_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COLOR_BLEND_EQUATION_EXT;
          
       cmd->u.set_color_blend_equation_ext.first_attachment = firstAttachment;
       cmd->u.set_color_blend_equation_ext.attachment_count = attachmentCount;
       if (pColorBlendEquations) {
          cmd->u.set_color_blend_equation_ext.color_blend_equations = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_color_blend_equation_ext.color_blend_equations) * (attachmentCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_color_blend_equation_ext.color_blend_equations == NULL) goto err;
    
       memcpy((void*)cmd->u.set_color_blend_equation_ext.color_blend_equations, pColorBlendEquations, sizeof(*cmd->u.set_color_blend_equation_ext.color_blend_equations) * (attachmentCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_color_blend_equation_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_color_write_mask_ext(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkColorComponentFlags* )cmd->u.set_color_write_mask_ext.color_write_masks);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_color_write_mask_ext(struct vk_cmd_queue *queue
    , uint32_t firstAttachment
    , uint32_t attachmentCount
    , const VkColorComponentFlags* pColorWriteMasks
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COLOR_WRITE_MASK_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COLOR_WRITE_MASK_EXT;
          
       cmd->u.set_color_write_mask_ext.first_attachment = firstAttachment;
       cmd->u.set_color_write_mask_ext.attachment_count = attachmentCount;
       if (pColorWriteMasks) {
          cmd->u.set_color_write_mask_ext.color_write_masks = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_color_write_mask_ext.color_write_masks) * (attachmentCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_color_write_mask_ext.color_write_masks == NULL) goto err;
    
       memcpy((void*)cmd->u.set_color_write_mask_ext.color_write_masks, pColorWriteMasks, sizeof(*cmd->u.set_color_write_mask_ext.color_write_masks) * (attachmentCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_color_write_mask_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_rasterization_stream_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_rasterization_stream_ext(struct vk_cmd_queue *queue
    , uint32_t rasterizationStream
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_RASTERIZATION_STREAM_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_RASTERIZATION_STREAM_EXT;
          
       cmd->u.set_rasterization_stream_ext.rasterization_stream = rasterizationStream;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_conservative_rasterization_mode_ext(struct vk_cmd_queue *queue,
                                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_conservative_rasterization_mode_ext(struct vk_cmd_queue *queue
    , VkConservativeRasterizationModeEXT conservativeRasterizationMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_CONSERVATIVE_RASTERIZATION_MODE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_CONSERVATIVE_RASTERIZATION_MODE_EXT;
          
       cmd->u.set_conservative_rasterization_mode_ext.conservative_rasterization_mode = conservativeRasterizationMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_extra_primitive_overestimation_size_ext(struct vk_cmd_queue *queue,
                                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_extra_primitive_overestimation_size_ext(struct vk_cmd_queue *queue
    , float extraPrimitiveOverestimationSize
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT;
          
       cmd->u.set_extra_primitive_overestimation_size_ext.extra_primitive_overestimation_size = extraPrimitiveOverestimationSize;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_clip_enable_ext(struct vk_cmd_queue *queue,
                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_clip_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 depthClipEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_CLIP_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_CLIP_ENABLE_EXT;
          
       cmd->u.set_depth_clip_enable_ext.depth_clip_enable = depthClipEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_sample_locations_enable_ext(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_sample_locations_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 sampleLocationsEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_SAMPLE_LOCATIONS_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_SAMPLE_LOCATIONS_ENABLE_EXT;
          
       cmd->u.set_sample_locations_enable_ext.sample_locations_enable = sampleLocationsEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_color_blend_advanced_ext(struct vk_cmd_queue *queue,
                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkColorBlendAdvancedEXT* )cmd->u.set_color_blend_advanced_ext.color_blend_advanced);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_color_blend_advanced_ext(struct vk_cmd_queue *queue
    , uint32_t firstAttachment
    , uint32_t attachmentCount
    , const VkColorBlendAdvancedEXT* pColorBlendAdvanced
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COLOR_BLEND_ADVANCED_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COLOR_BLEND_ADVANCED_EXT;
          
       cmd->u.set_color_blend_advanced_ext.first_attachment = firstAttachment;
       cmd->u.set_color_blend_advanced_ext.attachment_count = attachmentCount;
       if (pColorBlendAdvanced) {
          cmd->u.set_color_blend_advanced_ext.color_blend_advanced = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_color_blend_advanced_ext.color_blend_advanced) * (attachmentCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_color_blend_advanced_ext.color_blend_advanced == NULL) goto err;
    
       memcpy((void*)cmd->u.set_color_blend_advanced_ext.color_blend_advanced, pColorBlendAdvanced, sizeof(*cmd->u.set_color_blend_advanced_ext.color_blend_advanced) * (attachmentCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_color_blend_advanced_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_provoking_vertex_mode_ext(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_provoking_vertex_mode_ext(struct vk_cmd_queue *queue
    , VkProvokingVertexModeEXT provokingVertexMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_PROVOKING_VERTEX_MODE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_PROVOKING_VERTEX_MODE_EXT;
          
       cmd->u.set_provoking_vertex_mode_ext.provoking_vertex_mode = provokingVertexMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_line_rasterization_mode_ext(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_line_rasterization_mode_ext(struct vk_cmd_queue *queue
    , VkLineRasterizationModeEXT lineRasterizationMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_LINE_RASTERIZATION_MODE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_LINE_RASTERIZATION_MODE_EXT;
          
       cmd->u.set_line_rasterization_mode_ext.line_rasterization_mode = lineRasterizationMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_line_stipple_enable_ext(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_line_stipple_enable_ext(struct vk_cmd_queue *queue
    , VkBool32 stippledLineEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_LINE_STIPPLE_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_LINE_STIPPLE_ENABLE_EXT;
          
       cmd->u.set_line_stipple_enable_ext.stippled_line_enable = stippledLineEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_depth_clip_negative_one_to_one_ext(struct vk_cmd_queue *queue,
                                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_clip_negative_one_to_one_ext(struct vk_cmd_queue *queue
    , VkBool32 negativeOneToOne
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT;
          
       cmd->u.set_depth_clip_negative_one_to_one_ext.negative_one_to_one = negativeOneToOne;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_viewport_wscaling_enable_nv(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_viewport_wscaling_enable_nv(struct vk_cmd_queue *queue
    , VkBool32 viewportWScalingEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VIEWPORT_WSCALING_ENABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VIEWPORT_WSCALING_ENABLE_NV;
          
       cmd->u.set_viewport_wscaling_enable_nv.viewport_wscaling_enable = viewportWScalingEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_viewport_swizzle_nv(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkViewportSwizzleNV* )cmd->u.set_viewport_swizzle_nv.viewport_swizzles);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_viewport_swizzle_nv(struct vk_cmd_queue *queue
    , uint32_t firstViewport
    , uint32_t viewportCount
    , const VkViewportSwizzleNV* pViewportSwizzles
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VIEWPORT_SWIZZLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VIEWPORT_SWIZZLE_NV;
          
       cmd->u.set_viewport_swizzle_nv.first_viewport = firstViewport;
       cmd->u.set_viewport_swizzle_nv.viewport_count = viewportCount;
       if (pViewportSwizzles) {
          cmd->u.set_viewport_swizzle_nv.viewport_swizzles = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_viewport_swizzle_nv.viewport_swizzles) * (viewportCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_viewport_swizzle_nv.viewport_swizzles == NULL) goto err;
    
       memcpy((void*)cmd->u.set_viewport_swizzle_nv.viewport_swizzles, pViewportSwizzles, sizeof(*cmd->u.set_viewport_swizzle_nv.viewport_swizzles) * (viewportCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_viewport_swizzle_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_coverage_to_color_enable_nv(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coverage_to_color_enable_nv(struct vk_cmd_queue *queue
    , VkBool32 coverageToColorEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COVERAGE_TO_COLOR_ENABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COVERAGE_TO_COLOR_ENABLE_NV;
          
       cmd->u.set_coverage_to_color_enable_nv.coverage_to_color_enable = coverageToColorEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_coverage_to_color_location_nv(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coverage_to_color_location_nv(struct vk_cmd_queue *queue
    , uint32_t coverageToColorLocation
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COVERAGE_TO_COLOR_LOCATION_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COVERAGE_TO_COLOR_LOCATION_NV;
          
       cmd->u.set_coverage_to_color_location_nv.coverage_to_color_location = coverageToColorLocation;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_coverage_modulation_mode_nv(struct vk_cmd_queue *queue,
                                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coverage_modulation_mode_nv(struct vk_cmd_queue *queue
    , VkCoverageModulationModeNV coverageModulationMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COVERAGE_MODULATION_MODE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COVERAGE_MODULATION_MODE_NV;
          
       cmd->u.set_coverage_modulation_mode_nv.coverage_modulation_mode = coverageModulationMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_coverage_modulation_table_enable_nv(struct vk_cmd_queue *queue,
                                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coverage_modulation_table_enable_nv(struct vk_cmd_queue *queue
    , VkBool32 coverageModulationTableEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COVERAGE_MODULATION_TABLE_ENABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COVERAGE_MODULATION_TABLE_ENABLE_NV;
          
       cmd->u.set_coverage_modulation_table_enable_nv.coverage_modulation_table_enable = coverageModulationTableEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_coverage_modulation_table_nv(struct vk_cmd_queue *queue,
                                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( float* )cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coverage_modulation_table_nv(struct vk_cmd_queue *queue
    , uint32_t coverageModulationTableCount
    , const float* pCoverageModulationTable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COVERAGE_MODULATION_TABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COVERAGE_MODULATION_TABLE_NV;
          
       cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table_count = coverageModulationTableCount;
       if (pCoverageModulationTable) {
          cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table) * (coverageModulationTableCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table == NULL) goto err;
    
       memcpy((void*)cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table, pCoverageModulationTable, sizeof(*cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table) * (coverageModulationTableCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_coverage_modulation_table_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_shading_rate_image_enable_nv(struct vk_cmd_queue *queue,
                                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_shading_rate_image_enable_nv(struct vk_cmd_queue *queue
    , VkBool32 shadingRateImageEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_SHADING_RATE_IMAGE_ENABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_SHADING_RATE_IMAGE_ENABLE_NV;
          
       cmd->u.set_shading_rate_image_enable_nv.shading_rate_image_enable = shadingRateImageEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_coverage_reduction_mode_nv(struct vk_cmd_queue *queue,
                                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_coverage_reduction_mode_nv(struct vk_cmd_queue *queue
    , VkCoverageReductionModeNV coverageReductionMode
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COVERAGE_REDUCTION_MODE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COVERAGE_REDUCTION_MODE_NV;
          
       cmd->u.set_coverage_reduction_mode_nv.coverage_reduction_mode = coverageReductionMode;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_representative_fragment_test_enable_nv(struct vk_cmd_queue *queue,
                                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_representative_fragment_test_enable_nv(struct vk_cmd_queue *queue
    , VkBool32 representativeFragmentTestEnable
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV;
          
       cmd->u.set_representative_fragment_test_enable_nv.representative_fragment_test_enable = representativeFragmentTestEnable;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_copy_buffer2(struct vk_cmd_queue *queue,
                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBufferCopy2* )cmd->u.copy_buffer2.copy_buffer_info->pRegions);
          vk_free(queue->alloc, ( VkCopyBufferInfo2* )cmd->u.copy_buffer2.copy_buffer_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_buffer2(struct vk_cmd_queue *queue
    , const VkCopyBufferInfo2* pCopyBufferInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_BUFFER2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_BUFFER2;
          
       if (pCopyBufferInfo) {
          cmd->u.copy_buffer2.copy_buffer_info = vk_zalloc(queue->alloc, sizeof(VkCopyBufferInfo2), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_buffer2.copy_buffer_info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_buffer2.copy_buffer_info, pCopyBufferInfo, sizeof(VkCopyBufferInfo2));
          VkCopyBufferInfo2 *tmp_dst1 = (void *) cmd->u.copy_buffer2.copy_buffer_info; (void) tmp_dst1;
          VkCopyBufferInfo2 *tmp_src1 = (void *) pCopyBufferInfo; (void) tmp_src1;
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.copy_buffer2.copy_buffer_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_buffer2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_image2(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageCopy2* )cmd->u.copy_image2.copy_image_info->pRegions);
          vk_free(queue->alloc, ( VkCopyImageInfo2* )cmd->u.copy_image2.copy_image_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_image2(struct vk_cmd_queue *queue
    , const VkCopyImageInfo2* pCopyImageInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_IMAGE2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_IMAGE2;
          
       if (pCopyImageInfo) {
          cmd->u.copy_image2.copy_image_info = vk_zalloc(queue->alloc, sizeof(VkCopyImageInfo2), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_image2.copy_image_info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_image2.copy_image_info, pCopyImageInfo, sizeof(VkCopyImageInfo2));
          VkCopyImageInfo2 *tmp_dst1 = (void *) cmd->u.copy_image2.copy_image_info; (void) tmp_dst1;
          VkCopyImageInfo2 *tmp_src1 = (void *) pCopyImageInfo; (void) tmp_src1;
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.copy_image2.copy_image_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_image2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_blit_image2(struct vk_cmd_queue *queue,
                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageBlit2*  )cmd->u.blit_image2.blit_image_info->pRegions);
          vk_free(queue->alloc, ( VkBlitImageInfo2* )cmd->u.blit_image2.blit_image_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_blit_image2(struct vk_cmd_queue *queue
    , const VkBlitImageInfo2* pBlitImageInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BLIT_IMAGE2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BLIT_IMAGE2;
          
       if (pBlitImageInfo) {
          cmd->u.blit_image2.blit_image_info = vk_zalloc(queue->alloc, sizeof(VkBlitImageInfo2), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.blit_image2.blit_image_info == NULL) goto err;
    
          memcpy((void*)cmd->u.blit_image2.blit_image_info, pBlitImageInfo, sizeof(VkBlitImageInfo2));
          VkBlitImageInfo2 *tmp_dst1 = (void *) cmd->u.blit_image2.blit_image_info; (void) tmp_dst1;
          VkBlitImageInfo2 *tmp_src1 = (void *) pBlitImageInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkBlitImageCubicWeightsInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkBlitImageCubicWeightsInfoQCOM));
          VkBlitImageCubicWeightsInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkBlitImageCubicWeightsInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.blit_image2.blit_image_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_blit_image2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_buffer_to_image2(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBufferImageCopy2* )cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info->pRegions);
          vk_free(queue->alloc, ( VkCopyBufferToImageInfo2* )cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_buffer_to_image2(struct vk_cmd_queue *queue
    , const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_BUFFER_TO_IMAGE2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_BUFFER_TO_IMAGE2;
          
       if (pCopyBufferToImageInfo) {
          cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info = vk_zalloc(queue->alloc, sizeof(VkCopyBufferToImageInfo2), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info, pCopyBufferToImageInfo, sizeof(VkCopyBufferToImageInfo2));
          VkCopyBufferToImageInfo2 *tmp_dst1 = (void *) cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info; (void) tmp_dst1;
          VkCopyBufferToImageInfo2 *tmp_src1 = (void *) pCopyBufferToImageInfo; (void) tmp_src1;
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_buffer_to_image2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_image_to_buffer2(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBufferImageCopy2*   )cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info->pRegions);
          vk_free(queue->alloc, ( VkCopyImageToBufferInfo2* )cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_image_to_buffer2(struct vk_cmd_queue *queue
    , const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_IMAGE_TO_BUFFER2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_IMAGE_TO_BUFFER2;
          
       if (pCopyImageToBufferInfo) {
          cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info = vk_zalloc(queue->alloc, sizeof(VkCopyImageToBufferInfo2), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info, pCopyImageToBufferInfo, sizeof(VkCopyImageToBufferInfo2));
          VkCopyImageToBufferInfo2 *tmp_dst1 = (void *) cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info; (void) tmp_dst1;
          VkCopyImageToBufferInfo2 *tmp_src1 = (void *) pCopyImageToBufferInfo; (void) tmp_src1;
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_image_to_buffer2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_resolve_image2(struct vk_cmd_queue *queue,
                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkImageResolve2*   )cmd->u.resolve_image2.resolve_image_info->pRegions);
          vk_free(queue->alloc, ( VkResolveImageInfo2* )cmd->u.resolve_image2.resolve_image_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_resolve_image2(struct vk_cmd_queue *queue
    , const VkResolveImageInfo2* pResolveImageInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_RESOLVE_IMAGE2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_RESOLVE_IMAGE2;
          
       if (pResolveImageInfo) {
          cmd->u.resolve_image2.resolve_image_info = vk_zalloc(queue->alloc, sizeof(VkResolveImageInfo2), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.resolve_image2.resolve_image_info == NULL) goto err;
    
          memcpy((void*)cmd->u.resolve_image2.resolve_image_info, pResolveImageInfo, sizeof(VkResolveImageInfo2));
          VkResolveImageInfo2 *tmp_dst1 = (void *) cmd->u.resolve_image2.resolve_image_info; (void) tmp_dst1;
          VkResolveImageInfo2 *tmp_src1 = (void *) pResolveImageInfo; (void) tmp_src1;
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.resolve_image2.resolve_image_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_resolve_image2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_fragment_shading_rate_khr(struct vk_cmd_queue *queue,
                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkExtent2D*                           )cmd->u.set_fragment_shading_rate_khr.fragment_size);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_fragment_shading_rate_khr(struct vk_cmd_queue *queue
    , const VkExtent2D*                           pFragmentSize
    , const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_FRAGMENT_SHADING_RATE_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_FRAGMENT_SHADING_RATE_KHR;
          
       if (pFragmentSize) {
          cmd->u.set_fragment_shading_rate_khr.fragment_size = vk_zalloc(queue->alloc, sizeof(VkExtent2D), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_fragment_shading_rate_khr.fragment_size == NULL) goto err;
    
          memcpy((void*)cmd->u.set_fragment_shading_rate_khr.fragment_size, pFragmentSize, sizeof(VkExtent2D));
          VkExtent2D *tmp_dst1 = (void *) cmd->u.set_fragment_shading_rate_khr.fragment_size; (void) tmp_dst1;
          VkExtent2D *tmp_src1 = (void *) pFragmentSize; (void) tmp_src1;
          
       } else {
          cmd->u.set_fragment_shading_rate_khr.fragment_size = NULL;
       }   
       memcpy(cmd->u.set_fragment_shading_rate_khr.combiner_ops, combinerOps,
              sizeof(*combinerOps) * 2);
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_fragment_shading_rate_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_fragment_shading_rate_enum_nv(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_fragment_shading_rate_enum_nv(struct vk_cmd_queue *queue
    , VkFragmentShadingRateNV                     shadingRate
    , const VkFragmentShadingRateCombinerOpKHR    combinerOps[2]
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_FRAGMENT_SHADING_RATE_ENUM_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_FRAGMENT_SHADING_RATE_ENUM_NV;
          
       cmd->u.set_fragment_shading_rate_enum_nv.shading_rate = shadingRate;
       memcpy(cmd->u.set_fragment_shading_rate_enum_nv.combiner_ops, combinerOps,
              sizeof(*combinerOps) * 2);
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_set_vertex_input_ext(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkVertexInputBindingDescription2EXT* )cmd->u.set_vertex_input_ext.vertex_binding_descriptions);
       vk_free(queue->alloc, ( VkVertexInputAttributeDescription2EXT* )cmd->u.set_vertex_input_ext.vertex_attribute_descriptions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_vertex_input_ext(struct vk_cmd_queue *queue
    , uint32_t vertexBindingDescriptionCount
    , const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions
    , uint32_t vertexAttributeDescriptionCount
    , const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_VERTEX_INPUT_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_VERTEX_INPUT_EXT;
          
       cmd->u.set_vertex_input_ext.vertex_binding_description_count = vertexBindingDescriptionCount;
       if (pVertexBindingDescriptions) {
          cmd->u.set_vertex_input_ext.vertex_binding_descriptions = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_vertex_input_ext.vertex_binding_descriptions) * (vertexBindingDescriptionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_vertex_input_ext.vertex_binding_descriptions == NULL) goto err;
    
       memcpy((void*)cmd->u.set_vertex_input_ext.vertex_binding_descriptions, pVertexBindingDescriptions, sizeof(*cmd->u.set_vertex_input_ext.vertex_binding_descriptions) * (vertexBindingDescriptionCount));
       }   
       cmd->u.set_vertex_input_ext.vertex_attribute_description_count = vertexAttributeDescriptionCount;
       if (pVertexAttributeDescriptions) {
          cmd->u.set_vertex_input_ext.vertex_attribute_descriptions = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_vertex_input_ext.vertex_attribute_descriptions) * (vertexAttributeDescriptionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_vertex_input_ext.vertex_attribute_descriptions == NULL) goto err;
    
       memcpy((void*)cmd->u.set_vertex_input_ext.vertex_attribute_descriptions, pVertexAttributeDescriptions, sizeof(*cmd->u.set_vertex_input_ext.vertex_attribute_descriptions) * (vertexAttributeDescriptionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_vertex_input_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_color_write_enable_ext(struct vk_cmd_queue *queue,
                                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkBool32*   )cmd->u.set_color_write_enable_ext.color_write_enables);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_color_write_enable_ext(struct vk_cmd_queue *queue
    , uint32_t                                attachmentCount
    , const VkBool32*   pColorWriteEnables
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_COLOR_WRITE_ENABLE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_COLOR_WRITE_ENABLE_EXT;
          
       cmd->u.set_color_write_enable_ext.attachment_count = attachmentCount;
       if (pColorWriteEnables) {
          cmd->u.set_color_write_enable_ext.color_write_enables = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_color_write_enable_ext.color_write_enables) * (attachmentCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_color_write_enable_ext.color_write_enables == NULL) goto err;
    
       memcpy((void*)cmd->u.set_color_write_enable_ext.color_write_enables, pColorWriteEnables, sizeof(*cmd->u.set_color_write_enable_ext.color_write_enables) * (attachmentCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_color_write_enable_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_event2(struct vk_cmd_queue *queue,
                           struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMemoryBarrier2*             )cmd->u.set_event2.dependency_info->pMemoryBarriers);
    vk_free(queue->alloc, ( VkBufferMemoryBarrier2* )cmd->u.set_event2.dependency_info->pBufferMemoryBarriers);
    vk_free(queue->alloc, ( VkImageMemoryBarrier2*   )cmd->u.set_event2.dependency_info->pImageMemoryBarriers);
          vk_free(queue->alloc, ( VkDependencyInfo*                             )cmd->u.set_event2.dependency_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_event2(struct vk_cmd_queue *queue
    , VkEvent                                             event
    , const VkDependencyInfo*                             pDependencyInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_EVENT2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_EVENT2;
          
       cmd->u.set_event2.event = event;
       if (pDependencyInfo) {
          cmd->u.set_event2.dependency_info = vk_zalloc(queue->alloc, sizeof(VkDependencyInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_event2.dependency_info == NULL) goto err;
    
          memcpy((void*)cmd->u.set_event2.dependency_info, pDependencyInfo, sizeof(VkDependencyInfo));
          VkDependencyInfo *tmp_dst1 = (void *) cmd->u.set_event2.dependency_info; (void) tmp_dst1;
          VkDependencyInfo *tmp_src1 = (void *) pDependencyInfo; (void) tmp_src1;
          if (tmp_src1->pMemoryBarriers) {
       tmp_dst1->pMemoryBarriers = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pMemoryBarriers) * tmp_dst1->memoryBarrierCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pMemoryBarriers == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pMemoryBarriers, tmp_src1->pMemoryBarriers, sizeof(*tmp_dst1->pMemoryBarriers) * tmp_dst1->memoryBarrierCount);
    }
    if (tmp_src1->pBufferMemoryBarriers) {
       tmp_dst1->pBufferMemoryBarriers = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pBufferMemoryBarriers) * tmp_dst1->bufferMemoryBarrierCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pBufferMemoryBarriers == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pBufferMemoryBarriers, tmp_src1->pBufferMemoryBarriers, sizeof(*tmp_dst1->pBufferMemoryBarriers) * tmp_dst1->bufferMemoryBarrierCount);
    }
    if (tmp_src1->pImageMemoryBarriers) {
       tmp_dst1->pImageMemoryBarriers = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pImageMemoryBarriers) * tmp_dst1->imageMemoryBarrierCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pImageMemoryBarriers == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pImageMemoryBarriers, tmp_src1->pImageMemoryBarriers, sizeof(*tmp_dst1->pImageMemoryBarriers) * tmp_dst1->imageMemoryBarrierCount);
    }
    
       } else {
          cmd->u.set_event2.dependency_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_event2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_reset_event2(struct vk_cmd_queue *queue,
                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_reset_event2(struct vk_cmd_queue *queue
    , VkEvent                                             event
    , VkPipelineStageFlags2               stageMask
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_RESET_EVENT2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_RESET_EVENT2;
          
       cmd->u.reset_event2.event = event;
       cmd->u.reset_event2.stage_mask = stageMask;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_wait_events2(struct vk_cmd_queue *queue,
                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkEvent*                     )cmd->u.wait_events2.events);
       vk_free(queue->alloc, ( VkDependencyInfo*            )cmd->u.wait_events2.dependency_infos);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_wait_events2(struct vk_cmd_queue *queue
    , uint32_t                                            eventCount
    , const VkEvent*                     pEvents
    , const VkDependencyInfo*            pDependencyInfos
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WAIT_EVENTS2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WAIT_EVENTS2;
          
       cmd->u.wait_events2.event_count = eventCount;
       if (pEvents) {
          cmd->u.wait_events2.events = vk_zalloc(queue->alloc, sizeof(*cmd->u.wait_events2.events) * (eventCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.wait_events2.events == NULL) goto err;
    
       memcpy((void*)cmd->u.wait_events2.events, pEvents, sizeof(*cmd->u.wait_events2.events) * (eventCount));
       }   
       if (pDependencyInfos) {
          cmd->u.wait_events2.dependency_infos = vk_zalloc(queue->alloc, sizeof(*cmd->u.wait_events2.dependency_infos) * (eventCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.wait_events2.dependency_infos == NULL) goto err;
    
       memcpy((void*)cmd->u.wait_events2.dependency_infos, pDependencyInfos, sizeof(*cmd->u.wait_events2.dependency_infos) * (eventCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_wait_events2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_pipeline_barrier2(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMemoryBarrier2*             )cmd->u.pipeline_barrier2.dependency_info->pMemoryBarriers);
    vk_free(queue->alloc, ( VkBufferMemoryBarrier2* )cmd->u.pipeline_barrier2.dependency_info->pBufferMemoryBarriers);
    vk_free(queue->alloc, ( VkImageMemoryBarrier2*   )cmd->u.pipeline_barrier2.dependency_info->pImageMemoryBarriers);
          vk_free(queue->alloc, ( VkDependencyInfo*                             )cmd->u.pipeline_barrier2.dependency_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_pipeline_barrier2(struct vk_cmd_queue *queue
    , const VkDependencyInfo*                             pDependencyInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_PIPELINE_BARRIER2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_PIPELINE_BARRIER2;
          
       if (pDependencyInfo) {
          cmd->u.pipeline_barrier2.dependency_info = vk_zalloc(queue->alloc, sizeof(VkDependencyInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.pipeline_barrier2.dependency_info == NULL) goto err;
    
          memcpy((void*)cmd->u.pipeline_barrier2.dependency_info, pDependencyInfo, sizeof(VkDependencyInfo));
          VkDependencyInfo *tmp_dst1 = (void *) cmd->u.pipeline_barrier2.dependency_info; (void) tmp_dst1;
          VkDependencyInfo *tmp_src1 = (void *) pDependencyInfo; (void) tmp_src1;
          if (tmp_src1->pMemoryBarriers) {
       tmp_dst1->pMemoryBarriers = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pMemoryBarriers) * tmp_dst1->memoryBarrierCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pMemoryBarriers == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pMemoryBarriers, tmp_src1->pMemoryBarriers, sizeof(*tmp_dst1->pMemoryBarriers) * tmp_dst1->memoryBarrierCount);
    }
    if (tmp_src1->pBufferMemoryBarriers) {
       tmp_dst1->pBufferMemoryBarriers = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pBufferMemoryBarriers) * tmp_dst1->bufferMemoryBarrierCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pBufferMemoryBarriers == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pBufferMemoryBarriers, tmp_src1->pBufferMemoryBarriers, sizeof(*tmp_dst1->pBufferMemoryBarriers) * tmp_dst1->bufferMemoryBarrierCount);
    }
    if (tmp_src1->pImageMemoryBarriers) {
       tmp_dst1->pImageMemoryBarriers = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pImageMemoryBarriers) * tmp_dst1->imageMemoryBarrierCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pImageMemoryBarriers == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pImageMemoryBarriers, tmp_src1->pImageMemoryBarriers, sizeof(*tmp_dst1->pImageMemoryBarriers) * tmp_dst1->imageMemoryBarrierCount);
    }
    
       } else {
          cmd->u.pipeline_barrier2.dependency_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_pipeline_barrier2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_write_timestamp2(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_timestamp2(struct vk_cmd_queue *queue
    , VkPipelineStageFlags2               stage
    , VkQueryPool                                         queryPool
    , uint32_t                                            query
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_TIMESTAMP2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_TIMESTAMP2;
          
       cmd->u.write_timestamp2.stage = stage;
       cmd->u.write_timestamp2.query_pool = queryPool;
       cmd->u.write_timestamp2.query = query;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_write_buffer_marker2_amd(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_buffer_marker2_amd(struct vk_cmd_queue *queue
    , VkPipelineStageFlags2               stage
    , VkBuffer                                            dstBuffer
    , VkDeviceSize                                        dstOffset
    , uint32_t                                            marker
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_BUFFER_MARKER2_AMD], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_BUFFER_MARKER2_AMD;
          
       cmd->u.write_buffer_marker2_amd.stage = stage;
       cmd->u.write_buffer_marker2_amd.dst_buffer = dstBuffer;
       cmd->u.write_buffer_marker2_amd.dst_offset = dstOffset;
       cmd->u.write_buffer_marker2_amd.marker = marker;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_decode_video_khr(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkVideoReferenceSlotInfoKHR* )cmd->u.decode_video_khr.decode_info->pSetupReferenceSlot);
    vk_free(queue->alloc, ( VkVideoReferenceSlotInfoKHR* )cmd->u.decode_video_khr.decode_info->pReferenceSlots);
          vk_free(queue->alloc, ( VkVideoDecodeInfoKHR* )cmd->u.decode_video_khr.decode_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_decode_video_khr(struct vk_cmd_queue *queue
    , const VkVideoDecodeInfoKHR* pDecodeInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DECODE_VIDEO_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DECODE_VIDEO_KHR;
          
       if (pDecodeInfo) {
          cmd->u.decode_video_khr.decode_info = vk_zalloc(queue->alloc, sizeof(VkVideoDecodeInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.decode_video_khr.decode_info == NULL) goto err;
    
          memcpy((void*)cmd->u.decode_video_khr.decode_info, pDecodeInfo, sizeof(VkVideoDecodeInfoKHR));
          VkVideoDecodeInfoKHR *tmp_dst1 = (void *) cmd->u.decode_video_khr.decode_info; (void) tmp_dst1;
          VkVideoDecodeInfoKHR *tmp_src1 = (void *) pDecodeInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoInlineQueryInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoInlineQueryInfoKHR));
          VkVideoInlineQueryInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoInlineQueryInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoDecodeH264PictureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoDecodeH264PictureInfoKHR));
          VkVideoDecodeH264PictureInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoDecodeH264PictureInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStdPictureInfo) {
       tmp_dst2->pStdPictureInfo = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStdPictureInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStdPictureInfo == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStdPictureInfo, tmp_src2->pStdPictureInfo, sizeof(*tmp_dst2->pStdPictureInfo));
    }
    if (tmp_src2->pSliceOffsets) {
       tmp_dst2->pSliceOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pSliceOffsets) * tmp_dst2->sliceCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pSliceOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pSliceOffsets, tmp_src2->pSliceOffsets, sizeof(*tmp_dst2->pSliceOffsets) * tmp_dst2->sliceCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoDecodeH265PictureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoDecodeH265PictureInfoKHR));
          VkVideoDecodeH265PictureInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoDecodeH265PictureInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStdPictureInfo) {
       tmp_dst2->pStdPictureInfo = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStdPictureInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStdPictureInfo == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStdPictureInfo, tmp_src2->pStdPictureInfo, sizeof(*tmp_dst2->pStdPictureInfo));
    }
    if (tmp_src2->pSliceSegmentOffsets) {
       tmp_dst2->pSliceSegmentOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pSliceSegmentOffsets) * tmp_dst2->sliceSegmentCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pSliceSegmentOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pSliceSegmentOffsets, tmp_src2->pSliceSegmentOffsets, sizeof(*tmp_dst2->pSliceSegmentOffsets) * tmp_dst2->sliceSegmentCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PICTURE_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoDecodeAV1PictureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoDecodeAV1PictureInfoKHR));
          VkVideoDecodeAV1PictureInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoDecodeAV1PictureInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStdPictureInfo) {
       tmp_dst2->pStdPictureInfo = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStdPictureInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStdPictureInfo == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStdPictureInfo, tmp_src2->pStdPictureInfo, sizeof(*tmp_dst2->pStdPictureInfo));
    }
    if (tmp_src2->pTileOffsets) {
       tmp_dst2->pTileOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pTileOffsets) * tmp_dst2->tileCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pTileOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pTileOffsets, tmp_src2->pTileOffsets, sizeof(*tmp_dst2->pTileOffsets) * tmp_dst2->tileCount);
    }
    if (tmp_src2->pTileSizes) {
       tmp_dst2->pTileSizes = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pTileSizes) * tmp_dst2->tileCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pTileSizes == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pTileSizes, tmp_src2->pTileSizes, sizeof(*tmp_dst2->pTileSizes) * tmp_dst2->tileCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pSetupReferenceSlot) {
       tmp_dst1->pSetupReferenceSlot = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pSetupReferenceSlot), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pSetupReferenceSlot == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pSetupReferenceSlot, tmp_src1->pSetupReferenceSlot, sizeof(*tmp_dst1->pSetupReferenceSlot));
    }
    if (tmp_src1->pReferenceSlots) {
       tmp_dst1->pReferenceSlots = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pReferenceSlots) * tmp_dst1->referenceSlotCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pReferenceSlots == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pReferenceSlots, tmp_src1->pReferenceSlots, sizeof(*tmp_dst1->pReferenceSlots) * tmp_dst1->referenceSlotCount);
    }
    
       } else {
          cmd->u.decode_video_khr.decode_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_decode_video_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_begin_video_coding_khr(struct vk_cmd_queue *queue,
                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkVideoReferenceSlotInfoKHR* )cmd->u.begin_video_coding_khr.begin_info->pReferenceSlots);
          vk_free(queue->alloc, ( VkVideoBeginCodingInfoKHR* )cmd->u.begin_video_coding_khr.begin_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_video_coding_khr(struct vk_cmd_queue *queue
    , const VkVideoBeginCodingInfoKHR* pBeginInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_VIDEO_CODING_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_VIDEO_CODING_KHR;
          
       if (pBeginInfo) {
          cmd->u.begin_video_coding_khr.begin_info = vk_zalloc(queue->alloc, sizeof(VkVideoBeginCodingInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_video_coding_khr.begin_info == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_video_coding_khr.begin_info, pBeginInfo, sizeof(VkVideoBeginCodingInfoKHR));
          VkVideoBeginCodingInfoKHR *tmp_dst1 = (void *) cmd->u.begin_video_coding_khr.begin_info; (void) tmp_dst1;
          VkVideoBeginCodingInfoKHR *tmp_src1 = (void *) pBeginInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeRateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeRateControlInfoKHR));
          VkVideoEncodeRateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeRateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pLayers) {
       tmp_dst2->pLayers = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pLayers) * tmp_dst2->layerCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pLayers == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pLayers, tmp_src2->pLayers, sizeof(*tmp_dst2->pLayers) * tmp_dst2->layerCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH264RateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH264RateControlInfoKHR));
          VkVideoEncodeH264RateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH264RateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH264GopRemainingFrameInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH264GopRemainingFrameInfoKHR));
          VkVideoEncodeH264GopRemainingFrameInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH264GopRemainingFrameInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH265RateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH265RateControlInfoKHR));
          VkVideoEncodeH265RateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH265RateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH265GopRemainingFrameInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH265GopRemainingFrameInfoKHR));
          VkVideoEncodeH265GopRemainingFrameInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH265GopRemainingFrameInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeAV1RateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeAV1RateControlInfoKHR));
          VkVideoEncodeAV1RateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeAV1RateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeAV1GopRemainingFrameInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeAV1GopRemainingFrameInfoKHR));
          VkVideoEncodeAV1GopRemainingFrameInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeAV1GopRemainingFrameInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pReferenceSlots) {
       tmp_dst1->pReferenceSlots = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pReferenceSlots) * tmp_dst1->referenceSlotCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pReferenceSlots == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pReferenceSlots, tmp_src1->pReferenceSlots, sizeof(*tmp_dst1->pReferenceSlots) * tmp_dst1->referenceSlotCount);
    }
    
       } else {
          cmd->u.begin_video_coding_khr.begin_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_video_coding_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_control_video_coding_khr(struct vk_cmd_queue *queue,
                                         struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkVideoCodingControlInfoKHR* )cmd->u.control_video_coding_khr.coding_control_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_control_video_coding_khr(struct vk_cmd_queue *queue
    , const VkVideoCodingControlInfoKHR* pCodingControlInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_CONTROL_VIDEO_CODING_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_CONTROL_VIDEO_CODING_KHR;
          
       if (pCodingControlInfo) {
          cmd->u.control_video_coding_khr.coding_control_info = vk_zalloc(queue->alloc, sizeof(VkVideoCodingControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.control_video_coding_khr.coding_control_info == NULL) goto err;
    
          memcpy((void*)cmd->u.control_video_coding_khr.coding_control_info, pCodingControlInfo, sizeof(VkVideoCodingControlInfoKHR));
          VkVideoCodingControlInfoKHR *tmp_dst1 = (void *) cmd->u.control_video_coding_khr.coding_control_info; (void) tmp_dst1;
          VkVideoCodingControlInfoKHR *tmp_src1 = (void *) pCodingControlInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeQualityLevelInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeQualityLevelInfoKHR));
          VkVideoEncodeQualityLevelInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeQualityLevelInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeRateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeRateControlInfoKHR));
          VkVideoEncodeRateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeRateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pLayers) {
       tmp_dst2->pLayers = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pLayers) * tmp_dst2->layerCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pLayers == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pLayers, tmp_src2->pLayers, sizeof(*tmp_dst2->pLayers) * tmp_dst2->layerCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH264RateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH264RateControlInfoKHR));
          VkVideoEncodeH264RateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH264RateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH265RateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH265RateControlInfoKHR));
          VkVideoEncodeH265RateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH265RateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeAV1RateControlInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeAV1RateControlInfoKHR));
          VkVideoEncodeAV1RateControlInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeAV1RateControlInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.control_video_coding_khr.coding_control_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_control_video_coding_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_end_video_coding_khr(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkVideoEndCodingInfoKHR* )cmd->u.end_video_coding_khr.end_coding_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_video_coding_khr(struct vk_cmd_queue *queue
    , const VkVideoEndCodingInfoKHR* pEndCodingInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_VIDEO_CODING_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_VIDEO_CODING_KHR;
          
       if (pEndCodingInfo) {
          cmd->u.end_video_coding_khr.end_coding_info = vk_zalloc(queue->alloc, sizeof(VkVideoEndCodingInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.end_video_coding_khr.end_coding_info == NULL) goto err;
    
          memcpy((void*)cmd->u.end_video_coding_khr.end_coding_info, pEndCodingInfo, sizeof(VkVideoEndCodingInfoKHR));
          VkVideoEndCodingInfoKHR *tmp_dst1 = (void *) cmd->u.end_video_coding_khr.end_coding_info; (void) tmp_dst1;
          VkVideoEndCodingInfoKHR *tmp_src1 = (void *) pEndCodingInfo; (void) tmp_src1;
          
       } else {
          cmd->u.end_video_coding_khr.end_coding_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_end_video_coding_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_encode_video_khr(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkVideoReferenceSlotInfoKHR* )cmd->u.encode_video_khr.encode_info->pSetupReferenceSlot);
    vk_free(queue->alloc, ( VkVideoReferenceSlotInfoKHR* )cmd->u.encode_video_khr.encode_info->pReferenceSlots);
          vk_free(queue->alloc, ( VkVideoEncodeInfoKHR* )cmd->u.encode_video_khr.encode_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_encode_video_khr(struct vk_cmd_queue *queue
    , const VkVideoEncodeInfoKHR* pEncodeInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_ENCODE_VIDEO_KHR], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_ENCODE_VIDEO_KHR;
          
       if (pEncodeInfo) {
          cmd->u.encode_video_khr.encode_info = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.encode_video_khr.encode_info == NULL) goto err;
    
          memcpy((void*)cmd->u.encode_video_khr.encode_info, pEncodeInfo, sizeof(VkVideoEncodeInfoKHR));
          VkVideoEncodeInfoKHR *tmp_dst1 = (void *) cmd->u.encode_video_khr.encode_info; (void) tmp_dst1;
          VkVideoEncodeInfoKHR *tmp_src1 = (void *) pEncodeInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoInlineQueryInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoInlineQueryInfoKHR));
          VkVideoInlineQueryInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoInlineQueryInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeQuantizationMapInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeQuantizationMapInfoKHR));
          VkVideoEncodeQuantizationMapInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeQuantizationMapInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PICTURE_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH264PictureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH264PictureInfoKHR));
          VkVideoEncodeH264PictureInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH264PictureInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pNaluSliceEntries) {
       tmp_dst2->pNaluSliceEntries = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pNaluSliceEntries) * tmp_dst2->naluSliceEntryCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pNaluSliceEntries == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pNaluSliceEntries, tmp_src2->pNaluSliceEntries, sizeof(*tmp_dst2->pNaluSliceEntries) * tmp_dst2->naluSliceEntryCount);
    }
    if (tmp_src2->pStdPictureInfo) {
       tmp_dst2->pStdPictureInfo = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStdPictureInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStdPictureInfo == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStdPictureInfo, tmp_src2->pStdPictureInfo, sizeof(*tmp_dst2->pStdPictureInfo));
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PICTURE_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeH265PictureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeH265PictureInfoKHR));
          VkVideoEncodeH265PictureInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeH265PictureInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pNaluSliceSegmentEntries) {
       tmp_dst2->pNaluSliceSegmentEntries = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pNaluSliceSegmentEntries) * tmp_dst2->naluSliceSegmentEntryCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pNaluSliceSegmentEntries == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pNaluSliceSegmentEntries, tmp_src2->pNaluSliceSegmentEntries, sizeof(*tmp_dst2->pNaluSliceSegmentEntries) * tmp_dst2->naluSliceSegmentEntryCount);
    }
    if (tmp_src2->pStdPictureInfo) {
       tmp_dst2->pStdPictureInfo = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStdPictureInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStdPictureInfo == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStdPictureInfo, tmp_src2->pStdPictureInfo, sizeof(*tmp_dst2->pStdPictureInfo));
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkVideoEncodeAV1PictureInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkVideoEncodeAV1PictureInfoKHR));
          VkVideoEncodeAV1PictureInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkVideoEncodeAV1PictureInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStdPictureInfo) {
       tmp_dst2->pStdPictureInfo = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStdPictureInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStdPictureInfo == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStdPictureInfo, tmp_src2->pStdPictureInfo, sizeof(*tmp_dst2->pStdPictureInfo));
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pSetupReferenceSlot) {
       tmp_dst1->pSetupReferenceSlot = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pSetupReferenceSlot), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pSetupReferenceSlot == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pSetupReferenceSlot, tmp_src1->pSetupReferenceSlot, sizeof(*tmp_dst1->pSetupReferenceSlot));
    }
    if (tmp_src1->pReferenceSlots) {
       tmp_dst1->pReferenceSlots = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pReferenceSlots) * tmp_dst1->referenceSlotCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pReferenceSlots == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pReferenceSlots, tmp_src1->pReferenceSlots, sizeof(*tmp_dst1->pReferenceSlots) * tmp_dst1->referenceSlotCount);
    }
    
       } else {
          cmd->u.encode_video_khr.encode_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_encode_video_khr(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_decompress_memory_nv(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkDecompressMemoryRegionNV* )cmd->u.decompress_memory_nv.decompress_memory_regions);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_decompress_memory_nv(struct vk_cmd_queue *queue
    , uint32_t decompressRegionCount
    , const VkDecompressMemoryRegionNV* pDecompressMemoryRegions
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DECOMPRESS_MEMORY_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DECOMPRESS_MEMORY_NV;
          
       cmd->u.decompress_memory_nv.decompress_region_count = decompressRegionCount;
       if (pDecompressMemoryRegions) {
          cmd->u.decompress_memory_nv.decompress_memory_regions = vk_zalloc(queue->alloc, sizeof(*cmd->u.decompress_memory_nv.decompress_memory_regions) * (decompressRegionCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.decompress_memory_nv.decompress_memory_regions == NULL) goto err;
    
       memcpy((void*)cmd->u.decompress_memory_nv.decompress_memory_regions, pDecompressMemoryRegions, sizeof(*cmd->u.decompress_memory_nv.decompress_memory_regions) * (decompressRegionCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_decompress_memory_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_decompress_memory_indirect_count_nv(struct vk_cmd_queue *queue,
                                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_decompress_memory_indirect_count_nv(struct vk_cmd_queue *queue
    , VkDeviceAddress indirectCommandsAddress
    , VkDeviceAddress indirectCommandsCountAddress
    , uint32_t stride
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_DECOMPRESS_MEMORY_INDIRECT_COUNT_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_DECOMPRESS_MEMORY_INDIRECT_COUNT_NV;
          
       cmd->u.decompress_memory_indirect_count_nv.indirect_commands_address = indirectCommandsAddress;
       cmd->u.decompress_memory_indirect_count_nv.indirect_commands_count_address = indirectCommandsCountAddress;
       cmd->u.decompress_memory_indirect_count_nv.stride = stride;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_cu_launch_kernel_nvx(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( void*  *    )cmd->u.cu_launch_kernel_nvx.launch_info->pParams);
    vk_free(queue->alloc, ( void*  *    )cmd->u.cu_launch_kernel_nvx.launch_info->pExtras);
          vk_free(queue->alloc, ( VkCuLaunchInfoNVX* )cmd->u.cu_launch_kernel_nvx.launch_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_cu_launch_kernel_nvx(struct vk_cmd_queue *queue
    , const VkCuLaunchInfoNVX* pLaunchInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_CU_LAUNCH_KERNEL_NVX], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_CU_LAUNCH_KERNEL_NVX;
          
       if (pLaunchInfo) {
          cmd->u.cu_launch_kernel_nvx.launch_info = vk_zalloc(queue->alloc, sizeof(VkCuLaunchInfoNVX), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.cu_launch_kernel_nvx.launch_info == NULL) goto err;
    
          memcpy((void*)cmd->u.cu_launch_kernel_nvx.launch_info, pLaunchInfo, sizeof(VkCuLaunchInfoNVX));
          VkCuLaunchInfoNVX *tmp_dst1 = (void *) cmd->u.cu_launch_kernel_nvx.launch_info; (void) tmp_dst1;
          VkCuLaunchInfoNVX *tmp_src1 = (void *) pLaunchInfo; (void) tmp_src1;
          if (tmp_src1->pParams) {
       tmp_dst1->pParams = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pParams) * tmp_dst1->paramCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pParams == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pParams, tmp_src1->pParams, sizeof(*tmp_dst1->pParams) * tmp_dst1->paramCount);
    }
    if (tmp_src1->pExtras) {
       tmp_dst1->pExtras = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pExtras) * tmp_dst1->extraCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pExtras == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pExtras, tmp_src1->pExtras, sizeof(*tmp_dst1->pExtras) * tmp_dst1->extraCount);
    }
    
       } else {
          cmd->u.cu_launch_kernel_nvx.launch_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_cu_launch_kernel_nvx(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_descriptor_buffers_ext(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkDescriptorBufferBindingInfoEXT* )cmd->u.bind_descriptor_buffers_ext.binding_infos);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_descriptor_buffers_ext(struct vk_cmd_queue *queue
    , uint32_t bufferCount
    , const VkDescriptorBufferBindingInfoEXT* pBindingInfos
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_DESCRIPTOR_BUFFERS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_DESCRIPTOR_BUFFERS_EXT;
          
       cmd->u.bind_descriptor_buffers_ext.buffer_count = bufferCount;
       if (pBindingInfos) {
          cmd->u.bind_descriptor_buffers_ext.binding_infos = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_descriptor_buffers_ext.binding_infos) * (bufferCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_descriptor_buffers_ext.binding_infos == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_descriptor_buffers_ext.binding_infos, pBindingInfos, sizeof(*cmd->u.bind_descriptor_buffers_ext.binding_infos) * (bufferCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_descriptor_buffers_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_descriptor_buffer_offsets_ext(struct vk_cmd_queue *queue,
                                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( uint32_t* )cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices);
       vk_free(queue->alloc, ( VkDeviceSize* )cmd->u.set_descriptor_buffer_offsets_ext.offsets);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_descriptor_buffer_offsets_ext(struct vk_cmd_queue *queue
    , VkPipelineBindPoint pipelineBindPoint
    , VkPipelineLayout layout
    , uint32_t firstSet
    , uint32_t setCount
    , const uint32_t* pBufferIndices
    , const VkDeviceSize* pOffsets
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS_EXT;
          
       cmd->u.set_descriptor_buffer_offsets_ext.pipeline_bind_point = pipelineBindPoint;
       cmd->u.set_descriptor_buffer_offsets_ext.layout = layout;
       cmd->u.set_descriptor_buffer_offsets_ext.first_set = firstSet;
       cmd->u.set_descriptor_buffer_offsets_ext.set_count = setCount;
       if (pBufferIndices) {
          cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices) * (setCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices == NULL) goto err;
    
       memcpy((void*)cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices, pBufferIndices, sizeof(*cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices) * (setCount));
       }   
       if (pOffsets) {
          cmd->u.set_descriptor_buffer_offsets_ext.offsets = vk_zalloc(queue->alloc, sizeof(*cmd->u.set_descriptor_buffer_offsets_ext.offsets) * (setCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.set_descriptor_buffer_offsets_ext.offsets == NULL) goto err;
    
       memcpy((void*)cmd->u.set_descriptor_buffer_offsets_ext.offsets, pOffsets, sizeof(*cmd->u.set_descriptor_buffer_offsets_ext.offsets) * (setCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_descriptor_buffer_offsets_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_descriptor_buffer_embedded_samplers_ext(struct vk_cmd_queue *queue,
                                                             struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_descriptor_buffer_embedded_samplers_ext(struct vk_cmd_queue *queue
    , VkPipelineBindPoint pipelineBindPoint
    , VkPipelineLayout layout
    , uint32_t set
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_EXT;
          
       cmd->u.bind_descriptor_buffer_embedded_samplers_ext.pipeline_bind_point = pipelineBindPoint;
       cmd->u.bind_descriptor_buffer_embedded_samplers_ext.layout = layout;
       cmd->u.bind_descriptor_buffer_embedded_samplers_ext.set = set;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_begin_rendering(struct vk_cmd_queue *queue,
                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkRenderingAttachmentInfo*                )cmd->u.begin_rendering.rendering_info->pColorAttachments);
    vk_free(queue->alloc, ( VkRenderingAttachmentInfo*                           )cmd->u.begin_rendering.rendering_info->pDepthAttachment);
    vk_free(queue->alloc, ( VkRenderingAttachmentInfo*                           )cmd->u.begin_rendering.rendering_info->pStencilAttachment);
          vk_free(queue->alloc, ( VkRenderingInfo*                              )cmd->u.begin_rendering.rendering_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_begin_rendering(struct vk_cmd_queue *queue
    , const VkRenderingInfo*                              pRenderingInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BEGIN_RENDERING], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BEGIN_RENDERING;
          
       if (pRenderingInfo) {
          cmd->u.begin_rendering.rendering_info = vk_zalloc(queue->alloc, sizeof(VkRenderingInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.begin_rendering.rendering_info == NULL) goto err;
    
          memcpy((void*)cmd->u.begin_rendering.rendering_info, pRenderingInfo, sizeof(VkRenderingInfo));
          VkRenderingInfo *tmp_dst1 = (void *) cmd->u.begin_rendering.rendering_info; (void) tmp_dst1;
          VkRenderingInfo *tmp_src1 = (void *) pRenderingInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkDeviceGroupRenderPassBeginInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkDeviceGroupRenderPassBeginInfo));
          VkDeviceGroupRenderPassBeginInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkDeviceGroupRenderPassBeginInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pDeviceRenderAreas) {
       tmp_dst2->pDeviceRenderAreas = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pDeviceRenderAreas) * tmp_dst2->deviceRenderAreaCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pDeviceRenderAreas == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pDeviceRenderAreas, tmp_src2->pDeviceRenderAreas, sizeof(*tmp_dst2->pDeviceRenderAreas) * tmp_dst2->deviceRenderAreaCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkMultisampledRenderToSingleSampledInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkMultisampledRenderToSingleSampledInfoEXT));
          VkMultisampledRenderToSingleSampledInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkMultisampledRenderToSingleSampledInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderingFragmentShadingRateAttachmentInfoKHR), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderingFragmentShadingRateAttachmentInfoKHR));
          VkRenderingFragmentShadingRateAttachmentInfoKHR *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderingFragmentShadingRateAttachmentInfoKHR *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderingFragmentDensityMapAttachmentInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderingFragmentDensityMapAttachmentInfoEXT));
          VkRenderingFragmentDensityMapAttachmentInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderingFragmentDensityMapAttachmentInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkMultiviewPerViewAttributesInfoNVX), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkMultiviewPerViewAttributesInfoNVX));
          VkMultiviewPerViewAttributesInfoNVX *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkMultiviewPerViewAttributesInfoNVX *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM));
          VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pPerViewRenderAreas) {
       tmp_dst2->pPerViewRenderAreas = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPerViewRenderAreas) * tmp_dst2->perViewRenderAreaCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPerViewRenderAreas == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPerViewRenderAreas, tmp_src2->pPerViewRenderAreas, sizeof(*tmp_dst2->pPerViewRenderAreas) * tmp_dst2->perViewRenderAreaCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
    
             case VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkRenderPassStripeBeginInfoARM), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkRenderPassStripeBeginInfoARM));
          VkRenderPassStripeBeginInfoARM *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkRenderPassStripeBeginInfoARM *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pStripeInfos) {
       tmp_dst2->pStripeInfos = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pStripeInfos) * tmp_dst2->stripeInfoCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pStripeInfos == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pStripeInfos, tmp_src2->pStripeInfos, sizeof(*tmp_dst2->pStripeInfos) * tmp_dst2->stripeInfoCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pColorAttachments) {
       tmp_dst1->pColorAttachments = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pColorAttachments) * tmp_dst1->colorAttachmentCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pColorAttachments == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pColorAttachments, tmp_src1->pColorAttachments, sizeof(*tmp_dst1->pColorAttachments) * tmp_dst1->colorAttachmentCount);
    }
    if (tmp_src1->pDepthAttachment) {
       tmp_dst1->pDepthAttachment = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pDepthAttachment), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pDepthAttachment == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pDepthAttachment, tmp_src1->pDepthAttachment, sizeof(*tmp_dst1->pDepthAttachment));
    }
    if (tmp_src1->pStencilAttachment) {
       tmp_dst1->pStencilAttachment = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pStencilAttachment), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pStencilAttachment == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pStencilAttachment, tmp_src1->pStencilAttachment, sizeof(*tmp_dst1->pStencilAttachment));
    }
    
       } else {
          cmd->u.begin_rendering.rendering_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_begin_rendering(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_end_rendering(struct vk_cmd_queue *queue,
                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_end_rendering(struct vk_cmd_queue *queue
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_END_RENDERING], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_END_RENDERING;
          
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    }
    
    static void
    vk_free_cmd_build_micromaps_ext(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMicromapBuildInfoEXT* )cmd->u.build_micromaps_ext.infos);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_build_micromaps_ext(struct vk_cmd_queue *queue
    , uint32_t infoCount
    , const VkMicromapBuildInfoEXT* pInfos
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BUILD_MICROMAPS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BUILD_MICROMAPS_EXT;
          
       cmd->u.build_micromaps_ext.info_count = infoCount;
       if (pInfos) {
          cmd->u.build_micromaps_ext.infos = vk_zalloc(queue->alloc, sizeof(*cmd->u.build_micromaps_ext.infos) * (infoCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.build_micromaps_ext.infos == NULL) goto err;
    
       memcpy((void*)cmd->u.build_micromaps_ext.infos, pInfos, sizeof(*cmd->u.build_micromaps_ext.infos) * (infoCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_build_micromaps_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_micromap_ext(struct vk_cmd_queue *queue,
                                  struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkCopyMicromapInfoEXT* )cmd->u.copy_micromap_ext.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_micromap_ext(struct vk_cmd_queue *queue
    , const VkCopyMicromapInfoEXT* pInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_MICROMAP_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_MICROMAP_EXT;
          
       if (pInfo) {
          cmd->u.copy_micromap_ext.info = vk_zalloc(queue->alloc, sizeof(VkCopyMicromapInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_micromap_ext.info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_micromap_ext.info, pInfo, sizeof(VkCopyMicromapInfoEXT));
          VkCopyMicromapInfoEXT *tmp_dst1 = (void *) cmd->u.copy_micromap_ext.info; (void) tmp_dst1;
          VkCopyMicromapInfoEXT *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          
       } else {
          cmd->u.copy_micromap_ext.info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_micromap_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_micromap_to_memory_ext(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkCopyMicromapToMemoryInfoEXT* )cmd->u.copy_micromap_to_memory_ext.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_micromap_to_memory_ext(struct vk_cmd_queue *queue
    , const VkCopyMicromapToMemoryInfoEXT* pInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_MICROMAP_TO_MEMORY_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_MICROMAP_TO_MEMORY_EXT;
          
       if (pInfo) {
          cmd->u.copy_micromap_to_memory_ext.info = vk_zalloc(queue->alloc, sizeof(VkCopyMicromapToMemoryInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_micromap_to_memory_ext.info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_micromap_to_memory_ext.info, pInfo, sizeof(VkCopyMicromapToMemoryInfoEXT));
          VkCopyMicromapToMemoryInfoEXT *tmp_dst1 = (void *) cmd->u.copy_micromap_to_memory_ext.info; (void) tmp_dst1;
          VkCopyMicromapToMemoryInfoEXT *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          
       } else {
          cmd->u.copy_micromap_to_memory_ext.info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_micromap_to_memory_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_copy_memory_to_micromap_ext(struct vk_cmd_queue *queue,
                                            struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkCopyMemoryToMicromapInfoEXT* )cmd->u.copy_memory_to_micromap_ext.info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_copy_memory_to_micromap_ext(struct vk_cmd_queue *queue
    , const VkCopyMemoryToMicromapInfoEXT* pInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_COPY_MEMORY_TO_MICROMAP_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_COPY_MEMORY_TO_MICROMAP_EXT;
          
       if (pInfo) {
          cmd->u.copy_memory_to_micromap_ext.info = vk_zalloc(queue->alloc, sizeof(VkCopyMemoryToMicromapInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.copy_memory_to_micromap_ext.info == NULL) goto err;
    
          memcpy((void*)cmd->u.copy_memory_to_micromap_ext.info, pInfo, sizeof(VkCopyMemoryToMicromapInfoEXT));
          VkCopyMemoryToMicromapInfoEXT *tmp_dst1 = (void *) cmd->u.copy_memory_to_micromap_ext.info; (void) tmp_dst1;
          VkCopyMemoryToMicromapInfoEXT *tmp_src1 = (void *) pInfo; (void) tmp_src1;
          
       } else {
          cmd->u.copy_memory_to_micromap_ext.info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_copy_memory_to_micromap_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_write_micromaps_properties_ext(struct vk_cmd_queue *queue,
                                               struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkMicromapEXT* )cmd->u.write_micromaps_properties_ext.micromaps);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_write_micromaps_properties_ext(struct vk_cmd_queue *queue
    , uint32_t micromapCount
    , const VkMicromapEXT* pMicromaps
    , VkQueryType queryType
    , VkQueryPool queryPool
    , uint32_t firstQuery
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_WRITE_MICROMAPS_PROPERTIES_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_WRITE_MICROMAPS_PROPERTIES_EXT;
          
       cmd->u.write_micromaps_properties_ext.micromap_count = micromapCount;
       if (pMicromaps) {
          cmd->u.write_micromaps_properties_ext.micromaps = vk_zalloc(queue->alloc, sizeof(*cmd->u.write_micromaps_properties_ext.micromaps) * (micromapCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.write_micromaps_properties_ext.micromaps == NULL) goto err;
    
       memcpy((void*)cmd->u.write_micromaps_properties_ext.micromaps, pMicromaps, sizeof(*cmd->u.write_micromaps_properties_ext.micromaps) * (micromapCount));
       }   
       cmd->u.write_micromaps_properties_ext.query_type = queryType;
       cmd->u.write_micromaps_properties_ext.query_pool = queryPool;
       cmd->u.write_micromaps_properties_ext.first_query = firstQuery;
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_write_micromaps_properties_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_optical_flow_execute_nv(struct vk_cmd_queue *queue,
                                        struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkRect2D*                  )cmd->u.optical_flow_execute_nv.execute_info->pRegions);
          vk_free(queue->alloc, ( VkOpticalFlowExecuteInfoNV* )cmd->u.optical_flow_execute_nv.execute_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_optical_flow_execute_nv(struct vk_cmd_queue *queue
    , VkOpticalFlowSessionNV session
    , const VkOpticalFlowExecuteInfoNV* pExecuteInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_OPTICAL_FLOW_EXECUTE_NV], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_OPTICAL_FLOW_EXECUTE_NV;
          
       cmd->u.optical_flow_execute_nv.session = session;
       if (pExecuteInfo) {
          cmd->u.optical_flow_execute_nv.execute_info = vk_zalloc(queue->alloc, sizeof(VkOpticalFlowExecuteInfoNV), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.optical_flow_execute_nv.execute_info == NULL) goto err;
    
          memcpy((void*)cmd->u.optical_flow_execute_nv.execute_info, pExecuteInfo, sizeof(VkOpticalFlowExecuteInfoNV));
          VkOpticalFlowExecuteInfoNV *tmp_dst1 = (void *) cmd->u.optical_flow_execute_nv.execute_info; (void) tmp_dst1;
          VkOpticalFlowExecuteInfoNV *tmp_src1 = (void *) pExecuteInfo; (void) tmp_src1;
          if (tmp_src1->pRegions) {
       tmp_dst1->pRegions = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pRegions == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pRegions, tmp_src1->pRegions, sizeof(*tmp_dst1->pRegions) * tmp_dst1->regionCount);
    }
    
       } else {
          cmd->u.optical_flow_execute_nv.execute_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_optical_flow_execute_nv(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_depth_bias2_ext(struct vk_cmd_queue *queue,
                                    struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkDepthBiasInfoEXT*         )cmd->u.set_depth_bias2_ext.depth_bias_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_bias2_ext(struct vk_cmd_queue *queue
    , const VkDepthBiasInfoEXT*         pDepthBiasInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_BIAS2_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_BIAS2_EXT;
          
       if (pDepthBiasInfo) {
          cmd->u.set_depth_bias2_ext.depth_bias_info = vk_zalloc(queue->alloc, sizeof(VkDepthBiasInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_depth_bias2_ext.depth_bias_info == NULL) goto err;
    
          memcpy((void*)cmd->u.set_depth_bias2_ext.depth_bias_info, pDepthBiasInfo, sizeof(VkDepthBiasInfoEXT));
          VkDepthBiasInfoEXT *tmp_dst1 = (void *) cmd->u.set_depth_bias2_ext.depth_bias_info; (void) tmp_dst1;
          VkDepthBiasInfoEXT *tmp_src1 = (void *) pDepthBiasInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_DEPTH_BIAS_REPRESENTATION_INFO_EXT:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkDepthBiasRepresentationInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkDepthBiasRepresentationInfoEXT));
          VkDepthBiasRepresentationInfoEXT *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkDepthBiasRepresentationInfoEXT *tmp_src2 = (void *) pnext; (void) tmp_src2;
          
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.set_depth_bias2_ext.depth_bias_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_depth_bias2_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_shaders_ext(struct vk_cmd_queue *queue,
                                 struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkShaderStageFlagBits* )cmd->u.bind_shaders_ext.stages);
       vk_free(queue->alloc, ( VkShaderEXT* )cmd->u.bind_shaders_ext.shaders);
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_shaders_ext(struct vk_cmd_queue *queue
    , uint32_t stageCount
    , const VkShaderStageFlagBits* pStages
    , const VkShaderEXT* pShaders
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_SHADERS_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_SHADERS_EXT;
          
       cmd->u.bind_shaders_ext.stage_count = stageCount;
       if (pStages) {
          cmd->u.bind_shaders_ext.stages = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_shaders_ext.stages) * (stageCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_shaders_ext.stages == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_shaders_ext.stages, pStages, sizeof(*cmd->u.bind_shaders_ext.stages) * (stageCount));
       }   
       if (pShaders) {
          cmd->u.bind_shaders_ext.shaders = vk_zalloc(queue->alloc, sizeof(*cmd->u.bind_shaders_ext.shaders) * (stageCount), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (cmd->u.bind_shaders_ext.shaders == NULL) goto err;
    
       memcpy((void*)cmd->u.bind_shaders_ext.shaders, pShaders, sizeof(*cmd->u.bind_shaders_ext.shaders) * (stageCount));
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_shaders_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_descriptor_sets2(struct vk_cmd_queue *queue,
                                      struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkDescriptorSet*                          )cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info->pDescriptorSets);
    vk_free(queue->alloc, ( uint32_t*            )cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info->pDynamicOffsets);
          vk_free(queue->alloc, ( VkBindDescriptorSetsInfo*   )cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_descriptor_sets2(struct vk_cmd_queue *queue
    , const VkBindDescriptorSetsInfo*   pBindDescriptorSetsInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_DESCRIPTOR_SETS2], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_DESCRIPTOR_SETS2;
          
       if (pBindDescriptorSetsInfo) {
          cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info = vk_zalloc(queue->alloc, sizeof(VkBindDescriptorSetsInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info == NULL) goto err;
    
          memcpy((void*)cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info, pBindDescriptorSetsInfo, sizeof(VkBindDescriptorSetsInfo));
          VkBindDescriptorSetsInfo *tmp_dst1 = (void *) cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info; (void) tmp_dst1;
          VkBindDescriptorSetsInfo *tmp_src1 = (void *) pBindDescriptorSetsInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkPipelineLayoutCreateInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkPipelineLayoutCreateInfo));
          VkPipelineLayoutCreateInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkPipelineLayoutCreateInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pSetLayouts) {
       tmp_dst2->pSetLayouts = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pSetLayouts == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pSetLayouts, tmp_src2->pSetLayouts, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount);
    }
    if (tmp_src2->pPushConstantRanges) {
       tmp_dst2->pPushConstantRanges = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPushConstantRanges == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPushConstantRanges, tmp_src2->pPushConstantRanges, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pDescriptorSets) {
       tmp_dst1->pDescriptorSets = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pDescriptorSets) * tmp_dst1->descriptorSetCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pDescriptorSets == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pDescriptorSets, tmp_src1->pDescriptorSets, sizeof(*tmp_dst1->pDescriptorSets) * tmp_dst1->descriptorSetCount);
    }
    if (tmp_src1->pDynamicOffsets) {
       tmp_dst1->pDynamicOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pDynamicOffsets) * tmp_dst1->dynamicOffsetCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pDynamicOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pDynamicOffsets, tmp_src1->pDynamicOffsets, sizeof(*tmp_dst1->pDynamicOffsets) * tmp_dst1->dynamicOffsetCount);
    }
    
       } else {
          cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_descriptor_sets2(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_push_constants2(struct vk_cmd_queue *queue,
                                struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( void*                                                      )cmd->u.push_constants2.push_constants_info->pValues);
          vk_free(queue->alloc, ( VkPushConstantsInfo*        )cmd->u.push_constants2.push_constants_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_push_descriptor_set2(struct vk_cmd_queue *queue,
                                     struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( VkWriteDescriptorSet*                  )cmd->u.push_descriptor_set2.push_descriptor_set_info->pDescriptorWrites);
          vk_free(queue->alloc, ( VkPushDescriptorSetInfo*    )cmd->u.push_descriptor_set2.push_descriptor_set_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_push_descriptor_set_with_template2(struct vk_cmd_queue *queue,
                                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( void*                                                                           )cmd->u.push_descriptor_set_with_template2.push_descriptor_set_with_template_info->pData);
          vk_free(queue->alloc, ( VkPushDescriptorSetWithTemplateInfo* )cmd->u.push_descriptor_set_with_template2.push_descriptor_set_with_template_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    
    static void
    vk_free_cmd_set_descriptor_buffer_offsets2_ext(struct vk_cmd_queue *queue,
                                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( uint32_t*                                                    )cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info->pBufferIndices);
    vk_free(queue->alloc, ( VkDeviceSize*                                                )cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info->pOffsets);
          vk_free(queue->alloc, ( VkSetDescriptorBufferOffsetsInfoEXT* )cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_descriptor_buffer_offsets2_ext(struct vk_cmd_queue *queue
    , const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS2_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS2_EXT;
          
       if (pSetDescriptorBufferOffsetsInfo) {
          cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info = vk_zalloc(queue->alloc, sizeof(VkSetDescriptorBufferOffsetsInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info == NULL) goto err;
    
          memcpy((void*)cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info, pSetDescriptorBufferOffsetsInfo, sizeof(VkSetDescriptorBufferOffsetsInfoEXT));
          VkSetDescriptorBufferOffsetsInfoEXT *tmp_dst1 = (void *) cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info; (void) tmp_dst1;
          VkSetDescriptorBufferOffsetsInfoEXT *tmp_src1 = (void *) pSetDescriptorBufferOffsetsInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkPipelineLayoutCreateInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkPipelineLayoutCreateInfo));
          VkPipelineLayoutCreateInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkPipelineLayoutCreateInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pSetLayouts) {
       tmp_dst2->pSetLayouts = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pSetLayouts == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pSetLayouts, tmp_src2->pSetLayouts, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount);
    }
    if (tmp_src2->pPushConstantRanges) {
       tmp_dst2->pPushConstantRanges = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPushConstantRanges == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPushConstantRanges, tmp_src2->pPushConstantRanges, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          if (tmp_src1->pBufferIndices) {
       tmp_dst1->pBufferIndices = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pBufferIndices) * tmp_dst1->setCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pBufferIndices == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pBufferIndices, tmp_src1->pBufferIndices, sizeof(*tmp_dst1->pBufferIndices) * tmp_dst1->setCount);
    }
    if (tmp_src1->pOffsets) {
       tmp_dst1->pOffsets = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pOffsets) * tmp_dst1->setCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pOffsets == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pOffsets, tmp_src1->pOffsets, sizeof(*tmp_dst1->pOffsets) * tmp_dst1->setCount);
    }
    
       } else {
          cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_descriptor_buffer_offsets2_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_bind_descriptor_buffer_embedded_samplers2_ext(struct vk_cmd_queue *queue,
                                                              struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkBindDescriptorBufferEmbeddedSamplersInfoEXT* )cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_bind_descriptor_buffer_embedded_samplers2_ext(struct vk_cmd_queue *queue
    , const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS2_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS2_EXT;
          
       if (pBindDescriptorBufferEmbeddedSamplersInfo) {
          cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info = vk_zalloc(queue->alloc, sizeof(VkBindDescriptorBufferEmbeddedSamplersInfoEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info == NULL) goto err;
    
          memcpy((void*)cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info, pBindDescriptorBufferEmbeddedSamplersInfo, sizeof(VkBindDescriptorBufferEmbeddedSamplersInfoEXT));
          VkBindDescriptorBufferEmbeddedSamplersInfoEXT *tmp_dst1 = (void *) cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info; (void) tmp_dst1;
          VkBindDescriptorBufferEmbeddedSamplersInfoEXT *tmp_src1 = (void *) pBindDescriptorBufferEmbeddedSamplersInfo; (void) tmp_src1;
          
          const VkBaseInStructure *pnext = tmp_dst1->pNext;
          if (pnext) {
             switch ((int32_t)pnext->sType) {
             
    
             case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
                if (pnext) {
          tmp_dst1->pNext = vk_zalloc(queue->alloc, sizeof(VkPipelineLayoutCreateInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (tmp_dst1->pNext == NULL) goto err;
    
          memcpy((void*)tmp_dst1->pNext, pnext, sizeof(VkPipelineLayoutCreateInfo));
          VkPipelineLayoutCreateInfo *tmp_dst2 = (void *) tmp_dst1->pNext; (void) tmp_dst2;
          VkPipelineLayoutCreateInfo *tmp_src2 = (void *) pnext; (void) tmp_src2;
          if (tmp_src2->pSetLayouts) {
       tmp_dst2->pSetLayouts = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pSetLayouts == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pSetLayouts, tmp_src2->pSetLayouts, sizeof(*tmp_dst2->pSetLayouts) * tmp_dst2->setLayoutCount);
    }
    if (tmp_src2->pPushConstantRanges) {
       tmp_dst2->pPushConstantRanges = vk_zalloc(queue->alloc, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst2->pPushConstantRanges == NULL) goto err;
    
       memcpy((void*)tmp_dst2->pPushConstantRanges, tmp_src2->pPushConstantRanges, sizeof(*tmp_dst2->pPushConstantRanges) * tmp_dst2->pushConstantRangeCount);
    }
    
          } else {
          tmp_dst1->pNext = NULL;
          }
             break;
    
          
             }
          }
          
       } else {
          cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_bind_descriptor_buffer_embedded_samplers2_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_rendering_attachment_locations(struct vk_cmd_queue *queue,
                                                   struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( uint32_t*           )cmd->u.set_rendering_attachment_locations.location_info->pColorAttachmentLocations);
          vk_free(queue->alloc, ( VkRenderingAttachmentLocationInfo* )cmd->u.set_rendering_attachment_locations.location_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_rendering_attachment_locations(struct vk_cmd_queue *queue
    , const VkRenderingAttachmentLocationInfo* pLocationInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_RENDERING_ATTACHMENT_LOCATIONS], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_RENDERING_ATTACHMENT_LOCATIONS;
          
       if (pLocationInfo) {
          cmd->u.set_rendering_attachment_locations.location_info = vk_zalloc(queue->alloc, sizeof(VkRenderingAttachmentLocationInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_rendering_attachment_locations.location_info == NULL) goto err;
    
          memcpy((void*)cmd->u.set_rendering_attachment_locations.location_info, pLocationInfo, sizeof(VkRenderingAttachmentLocationInfo));
          VkRenderingAttachmentLocationInfo *tmp_dst1 = (void *) cmd->u.set_rendering_attachment_locations.location_info; (void) tmp_dst1;
          VkRenderingAttachmentLocationInfo *tmp_src1 = (void *) pLocationInfo; (void) tmp_src1;
          if (tmp_src1->pColorAttachmentLocations) {
       tmp_dst1->pColorAttachmentLocations = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pColorAttachmentLocations) * tmp_dst1->colorAttachmentCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pColorAttachmentLocations == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pColorAttachmentLocations, tmp_src1->pColorAttachmentLocations, sizeof(*tmp_dst1->pColorAttachmentLocations) * tmp_dst1->colorAttachmentCount);
    }
    
       } else {
          cmd->u.set_rendering_attachment_locations.location_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_rendering_attachment_locations(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_rendering_input_attachment_indices(struct vk_cmd_queue *queue,
                                                       struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
       vk_free(queue->alloc, ( uint32_t*                 )cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info->pColorAttachmentInputIndices);
    vk_free(queue->alloc, ( uint32_t*                                            )cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info->pDepthInputAttachmentIndex);
    vk_free(queue->alloc, ( uint32_t*                                            )cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info->pStencilInputAttachmentIndex);
          vk_free(queue->alloc, ( VkRenderingInputAttachmentIndexInfo* )cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_rendering_input_attachment_indices(struct vk_cmd_queue *queue
    , const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_RENDERING_INPUT_ATTACHMENT_INDICES], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_RENDERING_INPUT_ATTACHMENT_INDICES;
          
       if (pInputAttachmentIndexInfo) {
          cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info = vk_zalloc(queue->alloc, sizeof(VkRenderingInputAttachmentIndexInfo), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info == NULL) goto err;
    
          memcpy((void*)cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info, pInputAttachmentIndexInfo, sizeof(VkRenderingInputAttachmentIndexInfo));
          VkRenderingInputAttachmentIndexInfo *tmp_dst1 = (void *) cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info; (void) tmp_dst1;
          VkRenderingInputAttachmentIndexInfo *tmp_src1 = (void *) pInputAttachmentIndexInfo; (void) tmp_src1;
          if (tmp_src1->pColorAttachmentInputIndices) {
       tmp_dst1->pColorAttachmentInputIndices = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pColorAttachmentInputIndices) * tmp_dst1->colorAttachmentCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pColorAttachmentInputIndices == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pColorAttachmentInputIndices, tmp_src1->pColorAttachmentInputIndices, sizeof(*tmp_dst1->pColorAttachmentInputIndices) * tmp_dst1->colorAttachmentCount);
    }
    if (tmp_src1->pDepthInputAttachmentIndex) {
       tmp_dst1->pDepthInputAttachmentIndex = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pDepthInputAttachmentIndex), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pDepthInputAttachmentIndex == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pDepthInputAttachmentIndex, tmp_src1->pDepthInputAttachmentIndex, sizeof(*tmp_dst1->pDepthInputAttachmentIndex));
    }
    if (tmp_src1->pStencilInputAttachmentIndex) {
       tmp_dst1->pStencilInputAttachmentIndex = vk_zalloc(queue->alloc, sizeof(*tmp_dst1->pStencilInputAttachmentIndex), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (tmp_dst1->pStencilInputAttachmentIndex == NULL) goto err;
    
       memcpy((void*)tmp_dst1->pStencilInputAttachmentIndex, tmp_src1->pStencilInputAttachmentIndex, sizeof(*tmp_dst1->pStencilInputAttachmentIndex));
    }
    
       } else {
          cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_rendering_input_attachment_indices(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    static void
    vk_free_cmd_set_depth_clamp_range_ext(struct vk_cmd_queue *queue,
                                          struct vk_cmd_queue_entry *cmd)
    {
       if (cmd->driver_free_cb)
          cmd->driver_free_cb(queue, cmd);
       else
          vk_free(queue->alloc, cmd->driver_data);
             vk_free(queue->alloc, ( VkDepthClampRangeEXT* )cmd->u.set_depth_clamp_range_ext.depth_clamp_range);
    
       vk_free(queue->alloc, cmd);
    }
    
    VkResult vk_enqueue_cmd_set_depth_clamp_range_ext(struct vk_cmd_queue *queue
    , VkDepthClampModeEXT depthClampMode
    , const VkDepthClampRangeEXT* pDepthClampRange
    )
    {
       struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc, vk_cmd_queue_type_sizes[VK_CMD_SET_DEPTH_CLAMP_RANGE_EXT], 8,
                                                  VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
       if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
    
       cmd->type = VK_CMD_SET_DEPTH_CLAMP_RANGE_EXT;
          
       cmd->u.set_depth_clamp_range_ext.depth_clamp_mode = depthClampMode;
       if (pDepthClampRange) {
          cmd->u.set_depth_clamp_range_ext.depth_clamp_range = vk_zalloc(queue->alloc, sizeof(VkDepthClampRangeEXT), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
          if (cmd->u.set_depth_clamp_range_ext.depth_clamp_range == NULL) goto err;
    
          memcpy((void*)cmd->u.set_depth_clamp_range_ext.depth_clamp_range, pDepthClampRange, sizeof(VkDepthClampRangeEXT));
          VkDepthClampRangeEXT *tmp_dst1 = (void *) cmd->u.set_depth_clamp_range_ext.depth_clamp_range; (void) tmp_dst1;
          VkDepthClampRangeEXT *tmp_src1 = (void *) pDepthClampRange; (void) tmp_src1;
          
       } else {
          cmd->u.set_depth_clamp_range_ext.depth_clamp_range = NULL;
       }   
    
       list_addtail(&cmd->cmd_link, &queue->cmds);
       return VK_SUCCESS;
    
    err:
       if (cmd)
          vk_free_cmd_set_depth_clamp_range_ext(queue, cmd);
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    }
    
    
    void
    vk_free_queue(struct vk_cmd_queue *queue)
    {
       struct vk_cmd_queue_entry *tmp, *cmd;
       LIST_FOR_EACH_ENTRY_SAFE(cmd, tmp, &queue->cmds, cmd_link) {
          switch(cmd->type) {
          case VK_CMD_BIND_PIPELINE:
             vk_free_cmd_bind_pipeline(queue, cmd);
             break;
          case VK_CMD_SET_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT:
             vk_free_cmd_set_attachment_feedback_loop_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_VIEWPORT:
             vk_free_cmd_set_viewport(queue, cmd);
             break;
          case VK_CMD_SET_SCISSOR:
             vk_free_cmd_set_scissor(queue, cmd);
             break;
          case VK_CMD_SET_LINE_WIDTH:
             vk_free_cmd_set_line_width(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_BIAS:
             vk_free_cmd_set_depth_bias(queue, cmd);
             break;
          case VK_CMD_SET_BLEND_CONSTANTS:
             vk_free_cmd_set_blend_constants(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_BOUNDS:
             vk_free_cmd_set_depth_bounds(queue, cmd);
             break;
          case VK_CMD_SET_STENCIL_COMPARE_MASK:
             vk_free_cmd_set_stencil_compare_mask(queue, cmd);
             break;
          case VK_CMD_SET_STENCIL_WRITE_MASK:
             vk_free_cmd_set_stencil_write_mask(queue, cmd);
             break;
          case VK_CMD_SET_STENCIL_REFERENCE:
             vk_free_cmd_set_stencil_reference(queue, cmd);
             break;
          case VK_CMD_BIND_DESCRIPTOR_SETS:
             vk_free_cmd_bind_descriptor_sets(queue, cmd);
             break;
          case VK_CMD_BIND_INDEX_BUFFER:
             vk_free_cmd_bind_index_buffer(queue, cmd);
             break;
          case VK_CMD_BIND_VERTEX_BUFFERS:
             vk_free_cmd_bind_vertex_buffers(queue, cmd);
             break;
          case VK_CMD_DRAW:
             vk_free_cmd_draw(queue, cmd);
             break;
          case VK_CMD_DRAW_INDEXED:
             vk_free_cmd_draw_indexed(queue, cmd);
             break;
          case VK_CMD_DRAW_MULTI_EXT:
             vk_free_cmd_draw_multi_ext(queue, cmd);
             break;
          case VK_CMD_DRAW_MULTI_INDEXED_EXT:
             vk_free_cmd_draw_multi_indexed_ext(queue, cmd);
             break;
          case VK_CMD_DRAW_INDIRECT:
             vk_free_cmd_draw_indirect(queue, cmd);
             break;
          case VK_CMD_DRAW_INDEXED_INDIRECT:
             vk_free_cmd_draw_indexed_indirect(queue, cmd);
             break;
          case VK_CMD_DISPATCH:
             vk_free_cmd_dispatch(queue, cmd);
             break;
          case VK_CMD_DISPATCH_INDIRECT:
             vk_free_cmd_dispatch_indirect(queue, cmd);
             break;
          case VK_CMD_SUBPASS_SHADING_HUAWEI:
             vk_free_cmd_subpass_shading_huawei(queue, cmd);
             break;
          case VK_CMD_DRAW_CLUSTER_HUAWEI:
             vk_free_cmd_draw_cluster_huawei(queue, cmd);
             break;
          case VK_CMD_DRAW_CLUSTER_INDIRECT_HUAWEI:
             vk_free_cmd_draw_cluster_indirect_huawei(queue, cmd);
             break;
          case VK_CMD_UPDATE_PIPELINE_INDIRECT_BUFFER_NV:
             vk_free_cmd_update_pipeline_indirect_buffer_nv(queue, cmd);
             break;
          case VK_CMD_COPY_BUFFER:
             vk_free_cmd_copy_buffer(queue, cmd);
             break;
          case VK_CMD_COPY_IMAGE:
             vk_free_cmd_copy_image(queue, cmd);
             break;
          case VK_CMD_BLIT_IMAGE:
             vk_free_cmd_blit_image(queue, cmd);
             break;
          case VK_CMD_COPY_BUFFER_TO_IMAGE:
             vk_free_cmd_copy_buffer_to_image(queue, cmd);
             break;
          case VK_CMD_COPY_IMAGE_TO_BUFFER:
             vk_free_cmd_copy_image_to_buffer(queue, cmd);
             break;
          case VK_CMD_COPY_MEMORY_INDIRECT_NV:
             vk_free_cmd_copy_memory_indirect_nv(queue, cmd);
             break;
          case VK_CMD_COPY_MEMORY_TO_IMAGE_INDIRECT_NV:
             vk_free_cmd_copy_memory_to_image_indirect_nv(queue, cmd);
             break;
          case VK_CMD_UPDATE_BUFFER:
             vk_free_cmd_update_buffer(queue, cmd);
             break;
          case VK_CMD_FILL_BUFFER:
             vk_free_cmd_fill_buffer(queue, cmd);
             break;
          case VK_CMD_CLEAR_COLOR_IMAGE:
             vk_free_cmd_clear_color_image(queue, cmd);
             break;
          case VK_CMD_CLEAR_DEPTH_STENCIL_IMAGE:
             vk_free_cmd_clear_depth_stencil_image(queue, cmd);
             break;
          case VK_CMD_CLEAR_ATTACHMENTS:
             vk_free_cmd_clear_attachments(queue, cmd);
             break;
          case VK_CMD_RESOLVE_IMAGE:
             vk_free_cmd_resolve_image(queue, cmd);
             break;
          case VK_CMD_SET_EVENT:
             vk_free_cmd_set_event(queue, cmd);
             break;
          case VK_CMD_RESET_EVENT:
             vk_free_cmd_reset_event(queue, cmd);
             break;
          case VK_CMD_WAIT_EVENTS:
             vk_free_cmd_wait_events(queue, cmd);
             break;
          case VK_CMD_PIPELINE_BARRIER:
             vk_free_cmd_pipeline_barrier(queue, cmd);
             break;
          case VK_CMD_BEGIN_QUERY:
             vk_free_cmd_begin_query(queue, cmd);
             break;
          case VK_CMD_END_QUERY:
             vk_free_cmd_end_query(queue, cmd);
             break;
          case VK_CMD_BEGIN_CONDITIONAL_RENDERING_EXT:
             vk_free_cmd_begin_conditional_rendering_ext(queue, cmd);
             break;
          case VK_CMD_END_CONDITIONAL_RENDERING_EXT:
             vk_free_cmd_end_conditional_rendering_ext(queue, cmd);
             break;
          case VK_CMD_RESET_QUERY_POOL:
             vk_free_cmd_reset_query_pool(queue, cmd);
             break;
          case VK_CMD_WRITE_TIMESTAMP:
             vk_free_cmd_write_timestamp(queue, cmd);
             break;
          case VK_CMD_COPY_QUERY_POOL_RESULTS:
             vk_free_cmd_copy_query_pool_results(queue, cmd);
             break;
          case VK_CMD_PUSH_CONSTANTS:
             vk_free_cmd_push_constants(queue, cmd);
             break;
          case VK_CMD_BEGIN_RENDER_PASS:
             vk_free_cmd_begin_render_pass(queue, cmd);
             break;
          case VK_CMD_NEXT_SUBPASS:
             vk_free_cmd_next_subpass(queue, cmd);
             break;
          case VK_CMD_END_RENDER_PASS:
             vk_free_cmd_end_render_pass(queue, cmd);
             break;
          case VK_CMD_EXECUTE_COMMANDS:
             vk_free_cmd_execute_commands(queue, cmd);
             break;
          case VK_CMD_DEBUG_MARKER_BEGIN_EXT:
             vk_free_cmd_debug_marker_begin_ext(queue, cmd);
             break;
          case VK_CMD_DEBUG_MARKER_END_EXT:
             vk_free_cmd_debug_marker_end_ext(queue, cmd);
             break;
          case VK_CMD_DEBUG_MARKER_INSERT_EXT:
             vk_free_cmd_debug_marker_insert_ext(queue, cmd);
             break;
          case VK_CMD_EXECUTE_GENERATED_COMMANDS_NV:
             vk_free_cmd_execute_generated_commands_nv(queue, cmd);
             break;
          case VK_CMD_PREPROCESS_GENERATED_COMMANDS_NV:
             vk_free_cmd_preprocess_generated_commands_nv(queue, cmd);
             break;
          case VK_CMD_BIND_PIPELINE_SHADER_GROUP_NV:
             vk_free_cmd_bind_pipeline_shader_group_nv(queue, cmd);
             break;
          case VK_CMD_EXECUTE_GENERATED_COMMANDS_EXT:
             vk_free_cmd_execute_generated_commands_ext(queue, cmd);
             break;
          case VK_CMD_PREPROCESS_GENERATED_COMMANDS_EXT:
             vk_free_cmd_preprocess_generated_commands_ext(queue, cmd);
             break;
          case VK_CMD_PUSH_DESCRIPTOR_SET:
             vk_free_cmd_push_descriptor_set(queue, cmd);
             break;
          case VK_CMD_SET_DEVICE_MASK:
             vk_free_cmd_set_device_mask(queue, cmd);
             break;
          case VK_CMD_DISPATCH_BASE:
             vk_free_cmd_dispatch_base(queue, cmd);
             break;
          case VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE:
             vk_free_cmd_push_descriptor_set_with_template(queue, cmd);
             break;
          case VK_CMD_SET_VIEWPORT_WSCALING_NV:
             vk_free_cmd_set_viewport_wscaling_nv(queue, cmd);
             break;
          case VK_CMD_SET_DISCARD_RECTANGLE_EXT:
             vk_free_cmd_set_discard_rectangle_ext(queue, cmd);
             break;
          case VK_CMD_SET_DISCARD_RECTANGLE_ENABLE_EXT:
             vk_free_cmd_set_discard_rectangle_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_DISCARD_RECTANGLE_MODE_EXT:
             vk_free_cmd_set_discard_rectangle_mode_ext(queue, cmd);
             break;
          case VK_CMD_SET_SAMPLE_LOCATIONS_EXT:
             vk_free_cmd_set_sample_locations_ext(queue, cmd);
             break;
          case VK_CMD_BEGIN_DEBUG_UTILS_LABEL_EXT:
             vk_free_cmd_begin_debug_utils_label_ext(queue, cmd);
             break;
          case VK_CMD_END_DEBUG_UTILS_LABEL_EXT:
             vk_free_cmd_end_debug_utils_label_ext(queue, cmd);
             break;
          case VK_CMD_INSERT_DEBUG_UTILS_LABEL_EXT:
             vk_free_cmd_insert_debug_utils_label_ext(queue, cmd);
             break;
          case VK_CMD_WRITE_BUFFER_MARKER_AMD:
             vk_free_cmd_write_buffer_marker_amd(queue, cmd);
             break;
          case VK_CMD_BEGIN_RENDER_PASS2:
             vk_free_cmd_begin_render_pass2(queue, cmd);
             break;
          case VK_CMD_NEXT_SUBPASS2:
             vk_free_cmd_next_subpass2(queue, cmd);
             break;
          case VK_CMD_END_RENDER_PASS2:
             vk_free_cmd_end_render_pass2(queue, cmd);
             break;
          case VK_CMD_DRAW_INDIRECT_COUNT:
             vk_free_cmd_draw_indirect_count(queue, cmd);
             break;
          case VK_CMD_DRAW_INDEXED_INDIRECT_COUNT:
             vk_free_cmd_draw_indexed_indirect_count(queue, cmd);
             break;
          case VK_CMD_SET_CHECKPOINT_NV:
             vk_free_cmd_set_checkpoint_nv(queue, cmd);
             break;
          case VK_CMD_BIND_TRANSFORM_FEEDBACK_BUFFERS_EXT:
             vk_free_cmd_bind_transform_feedback_buffers_ext(queue, cmd);
             break;
          case VK_CMD_BEGIN_TRANSFORM_FEEDBACK_EXT:
             vk_free_cmd_begin_transform_feedback_ext(queue, cmd);
             break;
          case VK_CMD_END_TRANSFORM_FEEDBACK_EXT:
             vk_free_cmd_end_transform_feedback_ext(queue, cmd);
             break;
          case VK_CMD_BEGIN_QUERY_INDEXED_EXT:
             vk_free_cmd_begin_query_indexed_ext(queue, cmd);
             break;
          case VK_CMD_END_QUERY_INDEXED_EXT:
             vk_free_cmd_end_query_indexed_ext(queue, cmd);
             break;
          case VK_CMD_DRAW_INDIRECT_BYTE_COUNT_EXT:
             vk_free_cmd_draw_indirect_byte_count_ext(queue, cmd);
             break;
          case VK_CMD_SET_EXCLUSIVE_SCISSOR_NV:
             vk_free_cmd_set_exclusive_scissor_nv(queue, cmd);
             break;
          case VK_CMD_SET_EXCLUSIVE_SCISSOR_ENABLE_NV:
             vk_free_cmd_set_exclusive_scissor_enable_nv(queue, cmd);
             break;
          case VK_CMD_BIND_SHADING_RATE_IMAGE_NV:
             vk_free_cmd_bind_shading_rate_image_nv(queue, cmd);
             break;
          case VK_CMD_SET_VIEWPORT_SHADING_RATE_PALETTE_NV:
             vk_free_cmd_set_viewport_shading_rate_palette_nv(queue, cmd);
             break;
          case VK_CMD_SET_COARSE_SAMPLE_ORDER_NV:
             vk_free_cmd_set_coarse_sample_order_nv(queue, cmd);
             break;
          case VK_CMD_DRAW_MESH_TASKS_NV:
             vk_free_cmd_draw_mesh_tasks_nv(queue, cmd);
             break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_NV:
             vk_free_cmd_draw_mesh_tasks_indirect_nv(queue, cmd);
             break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_NV:
             vk_free_cmd_draw_mesh_tasks_indirect_count_nv(queue, cmd);
             break;
          case VK_CMD_DRAW_MESH_TASKS_EXT:
             vk_free_cmd_draw_mesh_tasks_ext(queue, cmd);
             break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_EXT:
             vk_free_cmd_draw_mesh_tasks_indirect_ext(queue, cmd);
             break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_EXT:
             vk_free_cmd_draw_mesh_tasks_indirect_count_ext(queue, cmd);
             break;
          case VK_CMD_BIND_INVOCATION_MASK_HUAWEI:
             vk_free_cmd_bind_invocation_mask_huawei(queue, cmd);
             break;
          case VK_CMD_COPY_ACCELERATION_STRUCTURE_NV:
             vk_free_cmd_copy_acceleration_structure_nv(queue, cmd);
             break;
          case VK_CMD_COPY_ACCELERATION_STRUCTURE_KHR:
             vk_free_cmd_copy_acceleration_structure_khr(queue, cmd);
             break;
          case VK_CMD_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR:
             vk_free_cmd_copy_acceleration_structure_to_memory_khr(queue, cmd);
             break;
          case VK_CMD_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR:
             vk_free_cmd_copy_memory_to_acceleration_structure_khr(queue, cmd);
             break;
          case VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR:
             vk_free_cmd_write_acceleration_structures_properties_khr(queue, cmd);
             break;
          case VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV:
             vk_free_cmd_write_acceleration_structures_properties_nv(queue, cmd);
             break;
          case VK_CMD_BUILD_ACCELERATION_STRUCTURE_NV:
             vk_free_cmd_build_acceleration_structure_nv(queue, cmd);
             break;
          case VK_CMD_TRACE_RAYS_KHR:
             vk_free_cmd_trace_rays_khr(queue, cmd);
             break;
          case VK_CMD_TRACE_RAYS_NV:
             vk_free_cmd_trace_rays_nv(queue, cmd);
             break;
          case VK_CMD_TRACE_RAYS_INDIRECT_KHR:
             vk_free_cmd_trace_rays_indirect_khr(queue, cmd);
             break;
          case VK_CMD_TRACE_RAYS_INDIRECT2_KHR:
             vk_free_cmd_trace_rays_indirect2_khr(queue, cmd);
             break;
          case VK_CMD_SET_RAY_TRACING_PIPELINE_STACK_SIZE_KHR:
             vk_free_cmd_set_ray_tracing_pipeline_stack_size_khr(queue, cmd);
             break;
          case VK_CMD_SET_PERFORMANCE_MARKER_INTEL:
             vk_free_cmd_set_performance_marker_intel(queue, cmd);
             break;
          case VK_CMD_SET_PERFORMANCE_STREAM_MARKER_INTEL:
             vk_free_cmd_set_performance_stream_marker_intel(queue, cmd);
             break;
          case VK_CMD_SET_PERFORMANCE_OVERRIDE_INTEL:
             vk_free_cmd_set_performance_override_intel(queue, cmd);
             break;
          case VK_CMD_SET_LINE_STIPPLE:
             vk_free_cmd_set_line_stipple(queue, cmd);
             break;
          case VK_CMD_BUILD_ACCELERATION_STRUCTURES_KHR:
             vk_free_cmd_build_acceleration_structures_khr(queue, cmd);
             break;
          case VK_CMD_BUILD_ACCELERATION_STRUCTURES_INDIRECT_KHR:
             vk_free_cmd_build_acceleration_structures_indirect_khr(queue, cmd);
             break;
          case VK_CMD_SET_CULL_MODE:
             vk_free_cmd_set_cull_mode(queue, cmd);
             break;
          case VK_CMD_SET_FRONT_FACE:
             vk_free_cmd_set_front_face(queue, cmd);
             break;
          case VK_CMD_SET_PRIMITIVE_TOPOLOGY:
             vk_free_cmd_set_primitive_topology(queue, cmd);
             break;
          case VK_CMD_SET_VIEWPORT_WITH_COUNT:
             vk_free_cmd_set_viewport_with_count(queue, cmd);
             break;
          case VK_CMD_SET_SCISSOR_WITH_COUNT:
             vk_free_cmd_set_scissor_with_count(queue, cmd);
             break;
          case VK_CMD_BIND_INDEX_BUFFER2:
             vk_free_cmd_bind_index_buffer2(queue, cmd);
             break;
          case VK_CMD_BIND_VERTEX_BUFFERS2:
             vk_free_cmd_bind_vertex_buffers2(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_TEST_ENABLE:
             vk_free_cmd_set_depth_test_enable(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_WRITE_ENABLE:
             vk_free_cmd_set_depth_write_enable(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_COMPARE_OP:
             vk_free_cmd_set_depth_compare_op(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE:
             vk_free_cmd_set_depth_bounds_test_enable(queue, cmd);
             break;
          case VK_CMD_SET_STENCIL_TEST_ENABLE:
             vk_free_cmd_set_stencil_test_enable(queue, cmd);
             break;
          case VK_CMD_SET_STENCIL_OP:
             vk_free_cmd_set_stencil_op(queue, cmd);
             break;
          case VK_CMD_SET_PATCH_CONTROL_POINTS_EXT:
             vk_free_cmd_set_patch_control_points_ext(queue, cmd);
             break;
          case VK_CMD_SET_RASTERIZER_DISCARD_ENABLE:
             vk_free_cmd_set_rasterizer_discard_enable(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_BIAS_ENABLE:
             vk_free_cmd_set_depth_bias_enable(queue, cmd);
             break;
          case VK_CMD_SET_LOGIC_OP_EXT:
             vk_free_cmd_set_logic_op_ext(queue, cmd);
             break;
          case VK_CMD_SET_PRIMITIVE_RESTART_ENABLE:
             vk_free_cmd_set_primitive_restart_enable(queue, cmd);
             break;
          case VK_CMD_SET_TESSELLATION_DOMAIN_ORIGIN_EXT:
             vk_free_cmd_set_tessellation_domain_origin_ext(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_CLAMP_ENABLE_EXT:
             vk_free_cmd_set_depth_clamp_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_POLYGON_MODE_EXT:
             vk_free_cmd_set_polygon_mode_ext(queue, cmd);
             break;
          case VK_CMD_SET_RASTERIZATION_SAMPLES_EXT:
             vk_free_cmd_set_rasterization_samples_ext(queue, cmd);
             break;
          case VK_CMD_SET_SAMPLE_MASK_EXT:
             vk_free_cmd_set_sample_mask_ext(queue, cmd);
             break;
          case VK_CMD_SET_ALPHA_TO_COVERAGE_ENABLE_EXT:
             vk_free_cmd_set_alpha_to_coverage_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_ALPHA_TO_ONE_ENABLE_EXT:
             vk_free_cmd_set_alpha_to_one_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_LOGIC_OP_ENABLE_EXT:
             vk_free_cmd_set_logic_op_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_COLOR_BLEND_ENABLE_EXT:
             vk_free_cmd_set_color_blend_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_COLOR_BLEND_EQUATION_EXT:
             vk_free_cmd_set_color_blend_equation_ext(queue, cmd);
             break;
          case VK_CMD_SET_COLOR_WRITE_MASK_EXT:
             vk_free_cmd_set_color_write_mask_ext(queue, cmd);
             break;
          case VK_CMD_SET_RASTERIZATION_STREAM_EXT:
             vk_free_cmd_set_rasterization_stream_ext(queue, cmd);
             break;
          case VK_CMD_SET_CONSERVATIVE_RASTERIZATION_MODE_EXT:
             vk_free_cmd_set_conservative_rasterization_mode_ext(queue, cmd);
             break;
          case VK_CMD_SET_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT:
             vk_free_cmd_set_extra_primitive_overestimation_size_ext(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_CLIP_ENABLE_EXT:
             vk_free_cmd_set_depth_clip_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_SAMPLE_LOCATIONS_ENABLE_EXT:
             vk_free_cmd_set_sample_locations_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_COLOR_BLEND_ADVANCED_EXT:
             vk_free_cmd_set_color_blend_advanced_ext(queue, cmd);
             break;
          case VK_CMD_SET_PROVOKING_VERTEX_MODE_EXT:
             vk_free_cmd_set_provoking_vertex_mode_ext(queue, cmd);
             break;
          case VK_CMD_SET_LINE_RASTERIZATION_MODE_EXT:
             vk_free_cmd_set_line_rasterization_mode_ext(queue, cmd);
             break;
          case VK_CMD_SET_LINE_STIPPLE_ENABLE_EXT:
             vk_free_cmd_set_line_stipple_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT:
             vk_free_cmd_set_depth_clip_negative_one_to_one_ext(queue, cmd);
             break;
          case VK_CMD_SET_VIEWPORT_WSCALING_ENABLE_NV:
             vk_free_cmd_set_viewport_wscaling_enable_nv(queue, cmd);
             break;
          case VK_CMD_SET_VIEWPORT_SWIZZLE_NV:
             vk_free_cmd_set_viewport_swizzle_nv(queue, cmd);
             break;
          case VK_CMD_SET_COVERAGE_TO_COLOR_ENABLE_NV:
             vk_free_cmd_set_coverage_to_color_enable_nv(queue, cmd);
             break;
          case VK_CMD_SET_COVERAGE_TO_COLOR_LOCATION_NV:
             vk_free_cmd_set_coverage_to_color_location_nv(queue, cmd);
             break;
          case VK_CMD_SET_COVERAGE_MODULATION_MODE_NV:
             vk_free_cmd_set_coverage_modulation_mode_nv(queue, cmd);
             break;
          case VK_CMD_SET_COVERAGE_MODULATION_TABLE_ENABLE_NV:
             vk_free_cmd_set_coverage_modulation_table_enable_nv(queue, cmd);
             break;
          case VK_CMD_SET_COVERAGE_MODULATION_TABLE_NV:
             vk_free_cmd_set_coverage_modulation_table_nv(queue, cmd);
             break;
          case VK_CMD_SET_SHADING_RATE_IMAGE_ENABLE_NV:
             vk_free_cmd_set_shading_rate_image_enable_nv(queue, cmd);
             break;
          case VK_CMD_SET_COVERAGE_REDUCTION_MODE_NV:
             vk_free_cmd_set_coverage_reduction_mode_nv(queue, cmd);
             break;
          case VK_CMD_SET_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV:
             vk_free_cmd_set_representative_fragment_test_enable_nv(queue, cmd);
             break;
          case VK_CMD_COPY_BUFFER2:
             vk_free_cmd_copy_buffer2(queue, cmd);
             break;
          case VK_CMD_COPY_IMAGE2:
             vk_free_cmd_copy_image2(queue, cmd);
             break;
          case VK_CMD_BLIT_IMAGE2:
             vk_free_cmd_blit_image2(queue, cmd);
             break;
          case VK_CMD_COPY_BUFFER_TO_IMAGE2:
             vk_free_cmd_copy_buffer_to_image2(queue, cmd);
             break;
          case VK_CMD_COPY_IMAGE_TO_BUFFER2:
             vk_free_cmd_copy_image_to_buffer2(queue, cmd);
             break;
          case VK_CMD_RESOLVE_IMAGE2:
             vk_free_cmd_resolve_image2(queue, cmd);
             break;
          case VK_CMD_SET_FRAGMENT_SHADING_RATE_KHR:
             vk_free_cmd_set_fragment_shading_rate_khr(queue, cmd);
             break;
          case VK_CMD_SET_FRAGMENT_SHADING_RATE_ENUM_NV:
             vk_free_cmd_set_fragment_shading_rate_enum_nv(queue, cmd);
             break;
          case VK_CMD_SET_VERTEX_INPUT_EXT:
             vk_free_cmd_set_vertex_input_ext(queue, cmd);
             break;
          case VK_CMD_SET_COLOR_WRITE_ENABLE_EXT:
             vk_free_cmd_set_color_write_enable_ext(queue, cmd);
             break;
          case VK_CMD_SET_EVENT2:
             vk_free_cmd_set_event2(queue, cmd);
             break;
          case VK_CMD_RESET_EVENT2:
             vk_free_cmd_reset_event2(queue, cmd);
             break;
          case VK_CMD_WAIT_EVENTS2:
             vk_free_cmd_wait_events2(queue, cmd);
             break;
          case VK_CMD_PIPELINE_BARRIER2:
             vk_free_cmd_pipeline_barrier2(queue, cmd);
             break;
          case VK_CMD_WRITE_TIMESTAMP2:
             vk_free_cmd_write_timestamp2(queue, cmd);
             break;
          case VK_CMD_WRITE_BUFFER_MARKER2_AMD:
             vk_free_cmd_write_buffer_marker2_amd(queue, cmd);
             break;
          case VK_CMD_DECODE_VIDEO_KHR:
             vk_free_cmd_decode_video_khr(queue, cmd);
             break;
          case VK_CMD_BEGIN_VIDEO_CODING_KHR:
             vk_free_cmd_begin_video_coding_khr(queue, cmd);
             break;
          case VK_CMD_CONTROL_VIDEO_CODING_KHR:
             vk_free_cmd_control_video_coding_khr(queue, cmd);
             break;
          case VK_CMD_END_VIDEO_CODING_KHR:
             vk_free_cmd_end_video_coding_khr(queue, cmd);
             break;
          case VK_CMD_ENCODE_VIDEO_KHR:
             vk_free_cmd_encode_video_khr(queue, cmd);
             break;
          case VK_CMD_DECOMPRESS_MEMORY_NV:
             vk_free_cmd_decompress_memory_nv(queue, cmd);
             break;
          case VK_CMD_DECOMPRESS_MEMORY_INDIRECT_COUNT_NV:
             vk_free_cmd_decompress_memory_indirect_count_nv(queue, cmd);
             break;
          case VK_CMD_CU_LAUNCH_KERNEL_NVX:
             vk_free_cmd_cu_launch_kernel_nvx(queue, cmd);
             break;
          case VK_CMD_BIND_DESCRIPTOR_BUFFERS_EXT:
             vk_free_cmd_bind_descriptor_buffers_ext(queue, cmd);
             break;
          case VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS_EXT:
             vk_free_cmd_set_descriptor_buffer_offsets_ext(queue, cmd);
             break;
          case VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_EXT:
             vk_free_cmd_bind_descriptor_buffer_embedded_samplers_ext(queue, cmd);
             break;
          case VK_CMD_BEGIN_RENDERING:
             vk_free_cmd_begin_rendering(queue, cmd);
             break;
          case VK_CMD_END_RENDERING:
             vk_free_cmd_end_rendering(queue, cmd);
             break;
          case VK_CMD_BUILD_MICROMAPS_EXT:
             vk_free_cmd_build_micromaps_ext(queue, cmd);
             break;
          case VK_CMD_COPY_MICROMAP_EXT:
             vk_free_cmd_copy_micromap_ext(queue, cmd);
             break;
          case VK_CMD_COPY_MICROMAP_TO_MEMORY_EXT:
             vk_free_cmd_copy_micromap_to_memory_ext(queue, cmd);
             break;
          case VK_CMD_COPY_MEMORY_TO_MICROMAP_EXT:
             vk_free_cmd_copy_memory_to_micromap_ext(queue, cmd);
             break;
          case VK_CMD_WRITE_MICROMAPS_PROPERTIES_EXT:
             vk_free_cmd_write_micromaps_properties_ext(queue, cmd);
             break;
          case VK_CMD_OPTICAL_FLOW_EXECUTE_NV:
             vk_free_cmd_optical_flow_execute_nv(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_BIAS2_EXT:
             vk_free_cmd_set_depth_bias2_ext(queue, cmd);
             break;
          case VK_CMD_BIND_SHADERS_EXT:
             vk_free_cmd_bind_shaders_ext(queue, cmd);
             break;
          case VK_CMD_BIND_DESCRIPTOR_SETS2:
             vk_free_cmd_bind_descriptor_sets2(queue, cmd);
             break;
          case VK_CMD_PUSH_CONSTANTS2:
             vk_free_cmd_push_constants2(queue, cmd);
             break;
          case VK_CMD_PUSH_DESCRIPTOR_SET2:
             vk_free_cmd_push_descriptor_set2(queue, cmd);
             break;
          case VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE2:
             vk_free_cmd_push_descriptor_set_with_template2(queue, cmd);
             break;
          case VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS2_EXT:
             vk_free_cmd_set_descriptor_buffer_offsets2_ext(queue, cmd);
             break;
          case VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS2_EXT:
             vk_free_cmd_bind_descriptor_buffer_embedded_samplers2_ext(queue, cmd);
             break;
          case VK_CMD_SET_RENDERING_ATTACHMENT_LOCATIONS:
             vk_free_cmd_set_rendering_attachment_locations(queue, cmd);
             break;
          case VK_CMD_SET_RENDERING_INPUT_ATTACHMENT_INDICES:
             vk_free_cmd_set_rendering_input_attachment_indices(queue, cmd);
             break;
          case VK_CMD_SET_DEPTH_CLAMP_RANGE_EXT:
             vk_free_cmd_set_depth_clamp_range_ext(queue, cmd);
             break;
          }
       }
    }
    
    void
    vk_cmd_queue_execute(struct vk_cmd_queue *queue,
                         VkCommandBuffer commandBuffer,
                         const struct vk_device_dispatch_table *disp)
    {
       list_for_each_entry(struct vk_cmd_queue_entry, cmd, &queue->cmds, cmd_link) {
          switch (cmd->type) {
          case VK_CMD_BIND_PIPELINE:
              disp->CmdBindPipeline(commandBuffer
                 , cmd->u.bind_pipeline.pipeline_bind_point             , cmd->u.bind_pipeline.pipeline          );
              break;
          case VK_CMD_SET_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT:
              disp->CmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer
                 , cmd->u.set_attachment_feedback_loop_enable_ext.aspect_mask          );
              break;
          case VK_CMD_SET_VIEWPORT:
              disp->CmdSetViewport(commandBuffer
                 , cmd->u.set_viewport.first_viewport             , cmd->u.set_viewport.viewport_count             , cmd->u.set_viewport.viewports          );
              break;
          case VK_CMD_SET_SCISSOR:
              disp->CmdSetScissor(commandBuffer
                 , cmd->u.set_scissor.first_scissor             , cmd->u.set_scissor.scissor_count             , cmd->u.set_scissor.scissors          );
              break;
          case VK_CMD_SET_LINE_WIDTH:
              disp->CmdSetLineWidth(commandBuffer
                 , cmd->u.set_line_width.line_width          );
              break;
          case VK_CMD_SET_DEPTH_BIAS:
              disp->CmdSetDepthBias(commandBuffer
                 , cmd->u.set_depth_bias.depth_bias_constant_factor             , cmd->u.set_depth_bias.depth_bias_clamp             , cmd->u.set_depth_bias.depth_bias_slope_factor          );
              break;
          case VK_CMD_SET_BLEND_CONSTANTS:
              disp->CmdSetBlendConstants(commandBuffer
                 , cmd->u.set_blend_constants.blend_constants          );
              break;
          case VK_CMD_SET_DEPTH_BOUNDS:
              disp->CmdSetDepthBounds(commandBuffer
                 , cmd->u.set_depth_bounds.min_depth_bounds             , cmd->u.set_depth_bounds.max_depth_bounds          );
              break;
          case VK_CMD_SET_STENCIL_COMPARE_MASK:
              disp->CmdSetStencilCompareMask(commandBuffer
                 , cmd->u.set_stencil_compare_mask.face_mask             , cmd->u.set_stencil_compare_mask.compare_mask          );
              break;
          case VK_CMD_SET_STENCIL_WRITE_MASK:
              disp->CmdSetStencilWriteMask(commandBuffer
                 , cmd->u.set_stencil_write_mask.face_mask             , cmd->u.set_stencil_write_mask.write_mask          );
              break;
          case VK_CMD_SET_STENCIL_REFERENCE:
              disp->CmdSetStencilReference(commandBuffer
                 , cmd->u.set_stencil_reference.face_mask             , cmd->u.set_stencil_reference.reference          );
              break;
          case VK_CMD_BIND_DESCRIPTOR_SETS:
              disp->CmdBindDescriptorSets(commandBuffer
                 , cmd->u.bind_descriptor_sets.pipeline_bind_point             , cmd->u.bind_descriptor_sets.layout             , cmd->u.bind_descriptor_sets.first_set             , cmd->u.bind_descriptor_sets.descriptor_set_count             , cmd->u.bind_descriptor_sets.descriptor_sets             , cmd->u.bind_descriptor_sets.dynamic_offset_count             , cmd->u.bind_descriptor_sets.dynamic_offsets          );
              break;
          case VK_CMD_BIND_INDEX_BUFFER:
              disp->CmdBindIndexBuffer(commandBuffer
                 , cmd->u.bind_index_buffer.buffer             , cmd->u.bind_index_buffer.offset             , cmd->u.bind_index_buffer.index_type          );
              break;
          case VK_CMD_BIND_VERTEX_BUFFERS:
              disp->CmdBindVertexBuffers(commandBuffer
                 , cmd->u.bind_vertex_buffers.first_binding             , cmd->u.bind_vertex_buffers.binding_count             , cmd->u.bind_vertex_buffers.buffers             , cmd->u.bind_vertex_buffers.offsets          );
              break;
          case VK_CMD_DRAW:
              disp->CmdDraw(commandBuffer
                 , cmd->u.draw.vertex_count             , cmd->u.draw.instance_count             , cmd->u.draw.first_vertex             , cmd->u.draw.first_instance          );
              break;
          case VK_CMD_DRAW_INDEXED:
              disp->CmdDrawIndexed(commandBuffer
                 , cmd->u.draw_indexed.index_count             , cmd->u.draw_indexed.instance_count             , cmd->u.draw_indexed.first_index             , cmd->u.draw_indexed.vertex_offset             , cmd->u.draw_indexed.first_instance          );
              break;
          case VK_CMD_DRAW_MULTI_EXT:
              disp->CmdDrawMultiEXT(commandBuffer
                 , cmd->u.draw_multi_ext.draw_count             , cmd->u.draw_multi_ext.vertex_info             , cmd->u.draw_multi_ext.instance_count             , cmd->u.draw_multi_ext.first_instance             , cmd->u.draw_multi_ext.stride          );
              break;
          case VK_CMD_DRAW_MULTI_INDEXED_EXT:
              disp->CmdDrawMultiIndexedEXT(commandBuffer
                 , cmd->u.draw_multi_indexed_ext.draw_count             , cmd->u.draw_multi_indexed_ext.index_info             , cmd->u.draw_multi_indexed_ext.instance_count             , cmd->u.draw_multi_indexed_ext.first_instance             , cmd->u.draw_multi_indexed_ext.stride             , cmd->u.draw_multi_indexed_ext.vertex_offset          );
              break;
          case VK_CMD_DRAW_INDIRECT:
              disp->CmdDrawIndirect(commandBuffer
                 , cmd->u.draw_indirect.buffer             , cmd->u.draw_indirect.offset             , cmd->u.draw_indirect.draw_count             , cmd->u.draw_indirect.stride          );
              break;
          case VK_CMD_DRAW_INDEXED_INDIRECT:
              disp->CmdDrawIndexedIndirect(commandBuffer
                 , cmd->u.draw_indexed_indirect.buffer             , cmd->u.draw_indexed_indirect.offset             , cmd->u.draw_indexed_indirect.draw_count             , cmd->u.draw_indexed_indirect.stride          );
              break;
          case VK_CMD_DISPATCH:
              disp->CmdDispatch(commandBuffer
                 , cmd->u.dispatch.group_count_x             , cmd->u.dispatch.group_count_y             , cmd->u.dispatch.group_count_z          );
              break;
          case VK_CMD_DISPATCH_INDIRECT:
              disp->CmdDispatchIndirect(commandBuffer
                 , cmd->u.dispatch_indirect.buffer             , cmd->u.dispatch_indirect.offset          );
              break;
          case VK_CMD_SUBPASS_SHADING_HUAWEI:
              disp->CmdSubpassShadingHUAWEI(commandBuffer
              );
              break;
          case VK_CMD_DRAW_CLUSTER_HUAWEI:
              disp->CmdDrawClusterHUAWEI(commandBuffer
                 , cmd->u.draw_cluster_huawei.group_count_x             , cmd->u.draw_cluster_huawei.group_count_y             , cmd->u.draw_cluster_huawei.group_count_z          );
              break;
          case VK_CMD_DRAW_CLUSTER_INDIRECT_HUAWEI:
              disp->CmdDrawClusterIndirectHUAWEI(commandBuffer
                 , cmd->u.draw_cluster_indirect_huawei.buffer             , cmd->u.draw_cluster_indirect_huawei.offset          );
              break;
          case VK_CMD_UPDATE_PIPELINE_INDIRECT_BUFFER_NV:
              disp->CmdUpdatePipelineIndirectBufferNV(commandBuffer
                 , cmd->u.update_pipeline_indirect_buffer_nv.pipeline_bind_point             , cmd->u.update_pipeline_indirect_buffer_nv.pipeline          );
              break;
          case VK_CMD_COPY_BUFFER:
              disp->CmdCopyBuffer(commandBuffer
                 , cmd->u.copy_buffer.src_buffer             , cmd->u.copy_buffer.dst_buffer             , cmd->u.copy_buffer.region_count             , cmd->u.copy_buffer.regions          );
              break;
          case VK_CMD_COPY_IMAGE:
              disp->CmdCopyImage(commandBuffer
                 , cmd->u.copy_image.src_image             , cmd->u.copy_image.src_image_layout             , cmd->u.copy_image.dst_image             , cmd->u.copy_image.dst_image_layout             , cmd->u.copy_image.region_count             , cmd->u.copy_image.regions          );
              break;
          case VK_CMD_BLIT_IMAGE:
              disp->CmdBlitImage(commandBuffer
                 , cmd->u.blit_image.src_image             , cmd->u.blit_image.src_image_layout             , cmd->u.blit_image.dst_image             , cmd->u.blit_image.dst_image_layout             , cmd->u.blit_image.region_count             , cmd->u.blit_image.regions             , cmd->u.blit_image.filter          );
              break;
          case VK_CMD_COPY_BUFFER_TO_IMAGE:
              disp->CmdCopyBufferToImage(commandBuffer
                 , cmd->u.copy_buffer_to_image.src_buffer             , cmd->u.copy_buffer_to_image.dst_image             , cmd->u.copy_buffer_to_image.dst_image_layout             , cmd->u.copy_buffer_to_image.region_count             , cmd->u.copy_buffer_to_image.regions          );
              break;
          case VK_CMD_COPY_IMAGE_TO_BUFFER:
              disp->CmdCopyImageToBuffer(commandBuffer
                 , cmd->u.copy_image_to_buffer.src_image             , cmd->u.copy_image_to_buffer.src_image_layout             , cmd->u.copy_image_to_buffer.dst_buffer             , cmd->u.copy_image_to_buffer.region_count             , cmd->u.copy_image_to_buffer.regions          );
              break;
          case VK_CMD_COPY_MEMORY_INDIRECT_NV:
              disp->CmdCopyMemoryIndirectNV(commandBuffer
                 , cmd->u.copy_memory_indirect_nv.copy_buffer_address             , cmd->u.copy_memory_indirect_nv.copy_count             , cmd->u.copy_memory_indirect_nv.stride          );
              break;
          case VK_CMD_COPY_MEMORY_TO_IMAGE_INDIRECT_NV:
              disp->CmdCopyMemoryToImageIndirectNV(commandBuffer
                 , cmd->u.copy_memory_to_image_indirect_nv.copy_buffer_address             , cmd->u.copy_memory_to_image_indirect_nv.copy_count             , cmd->u.copy_memory_to_image_indirect_nv.stride             , cmd->u.copy_memory_to_image_indirect_nv.dst_image             , cmd->u.copy_memory_to_image_indirect_nv.dst_image_layout             , cmd->u.copy_memory_to_image_indirect_nv.image_subresources          );
              break;
          case VK_CMD_UPDATE_BUFFER:
              disp->CmdUpdateBuffer(commandBuffer
                 , cmd->u.update_buffer.dst_buffer             , cmd->u.update_buffer.dst_offset             , cmd->u.update_buffer.data_size             , cmd->u.update_buffer.data          );
              break;
          case VK_CMD_FILL_BUFFER:
              disp->CmdFillBuffer(commandBuffer
                 , cmd->u.fill_buffer.dst_buffer             , cmd->u.fill_buffer.dst_offset             , cmd->u.fill_buffer.size             , cmd->u.fill_buffer.data          );
              break;
          case VK_CMD_CLEAR_COLOR_IMAGE:
              disp->CmdClearColorImage(commandBuffer
                 , cmd->u.clear_color_image.image             , cmd->u.clear_color_image.image_layout             , cmd->u.clear_color_image.color             , cmd->u.clear_color_image.range_count             , cmd->u.clear_color_image.ranges          );
              break;
          case VK_CMD_CLEAR_DEPTH_STENCIL_IMAGE:
              disp->CmdClearDepthStencilImage(commandBuffer
                 , cmd->u.clear_depth_stencil_image.image             , cmd->u.clear_depth_stencil_image.image_layout             , cmd->u.clear_depth_stencil_image.depth_stencil             , cmd->u.clear_depth_stencil_image.range_count             , cmd->u.clear_depth_stencil_image.ranges          );
              break;
          case VK_CMD_CLEAR_ATTACHMENTS:
              disp->CmdClearAttachments(commandBuffer
                 , cmd->u.clear_attachments.attachment_count             , cmd->u.clear_attachments.attachments             , cmd->u.clear_attachments.rect_count             , cmd->u.clear_attachments.rects          );
              break;
          case VK_CMD_RESOLVE_IMAGE:
              disp->CmdResolveImage(commandBuffer
                 , cmd->u.resolve_image.src_image             , cmd->u.resolve_image.src_image_layout             , cmd->u.resolve_image.dst_image             , cmd->u.resolve_image.dst_image_layout             , cmd->u.resolve_image.region_count             , cmd->u.resolve_image.regions          );
              break;
          case VK_CMD_SET_EVENT:
              disp->CmdSetEvent(commandBuffer
                 , cmd->u.set_event.event             , cmd->u.set_event.stage_mask          );
              break;
          case VK_CMD_RESET_EVENT:
              disp->CmdResetEvent(commandBuffer
                 , cmd->u.reset_event.event             , cmd->u.reset_event.stage_mask          );
              break;
          case VK_CMD_WAIT_EVENTS:
              disp->CmdWaitEvents(commandBuffer
                 , cmd->u.wait_events.event_count             , cmd->u.wait_events.events             , cmd->u.wait_events.src_stage_mask             , cmd->u.wait_events.dst_stage_mask             , cmd->u.wait_events.memory_barrier_count             , cmd->u.wait_events.memory_barriers             , cmd->u.wait_events.buffer_memory_barrier_count             , cmd->u.wait_events.buffer_memory_barriers             , cmd->u.wait_events.image_memory_barrier_count             , cmd->u.wait_events.image_memory_barriers          );
              break;
          case VK_CMD_PIPELINE_BARRIER:
              disp->CmdPipelineBarrier(commandBuffer
                 , cmd->u.pipeline_barrier.src_stage_mask             , cmd->u.pipeline_barrier.dst_stage_mask             , cmd->u.pipeline_barrier.dependency_flags             , cmd->u.pipeline_barrier.memory_barrier_count             , cmd->u.pipeline_barrier.memory_barriers             , cmd->u.pipeline_barrier.buffer_memory_barrier_count             , cmd->u.pipeline_barrier.buffer_memory_barriers             , cmd->u.pipeline_barrier.image_memory_barrier_count             , cmd->u.pipeline_barrier.image_memory_barriers          );
              break;
          case VK_CMD_BEGIN_QUERY:
              disp->CmdBeginQuery(commandBuffer
                 , cmd->u.begin_query.query_pool             , cmd->u.begin_query.query             , cmd->u.begin_query.flags          );
              break;
          case VK_CMD_END_QUERY:
              disp->CmdEndQuery(commandBuffer
                 , cmd->u.end_query.query_pool             , cmd->u.end_query.query          );
              break;
          case VK_CMD_BEGIN_CONDITIONAL_RENDERING_EXT:
              disp->CmdBeginConditionalRenderingEXT(commandBuffer
                 , cmd->u.begin_conditional_rendering_ext.conditional_rendering_begin          );
              break;
          case VK_CMD_END_CONDITIONAL_RENDERING_EXT:
              disp->CmdEndConditionalRenderingEXT(commandBuffer
              );
              break;
          case VK_CMD_RESET_QUERY_POOL:
              disp->CmdResetQueryPool(commandBuffer
                 , cmd->u.reset_query_pool.query_pool             , cmd->u.reset_query_pool.first_query             , cmd->u.reset_query_pool.query_count          );
              break;
          case VK_CMD_WRITE_TIMESTAMP:
              disp->CmdWriteTimestamp(commandBuffer
                 , cmd->u.write_timestamp.pipeline_stage             , cmd->u.write_timestamp.query_pool             , cmd->u.write_timestamp.query          );
              break;
          case VK_CMD_COPY_QUERY_POOL_RESULTS:
              disp->CmdCopyQueryPoolResults(commandBuffer
                 , cmd->u.copy_query_pool_results.query_pool             , cmd->u.copy_query_pool_results.first_query             , cmd->u.copy_query_pool_results.query_count             , cmd->u.copy_query_pool_results.dst_buffer             , cmd->u.copy_query_pool_results.dst_offset             , cmd->u.copy_query_pool_results.stride             , cmd->u.copy_query_pool_results.flags          );
              break;
          case VK_CMD_PUSH_CONSTANTS:
              disp->CmdPushConstants(commandBuffer
                 , cmd->u.push_constants.layout             , cmd->u.push_constants.stage_flags             , cmd->u.push_constants.offset             , cmd->u.push_constants.size             , cmd->u.push_constants.values          );
              break;
          case VK_CMD_BEGIN_RENDER_PASS:
              disp->CmdBeginRenderPass(commandBuffer
                 , cmd->u.begin_render_pass.render_pass_begin             , cmd->u.begin_render_pass.contents          );
              break;
          case VK_CMD_NEXT_SUBPASS:
              disp->CmdNextSubpass(commandBuffer
                 , cmd->u.next_subpass.contents          );
              break;
          case VK_CMD_END_RENDER_PASS:
              disp->CmdEndRenderPass(commandBuffer
              );
              break;
          case VK_CMD_EXECUTE_COMMANDS:
              disp->CmdExecuteCommands(commandBuffer
                 , cmd->u.execute_commands.command_buffer_count             , cmd->u.execute_commands.command_buffers          );
              break;
          case VK_CMD_DEBUG_MARKER_BEGIN_EXT:
              disp->CmdDebugMarkerBeginEXT(commandBuffer
                 , cmd->u.debug_marker_begin_ext.marker_info          );
              break;
          case VK_CMD_DEBUG_MARKER_END_EXT:
              disp->CmdDebugMarkerEndEXT(commandBuffer
              );
              break;
          case VK_CMD_DEBUG_MARKER_INSERT_EXT:
              disp->CmdDebugMarkerInsertEXT(commandBuffer
                 , cmd->u.debug_marker_insert_ext.marker_info          );
              break;
          case VK_CMD_EXECUTE_GENERATED_COMMANDS_NV:
              disp->CmdExecuteGeneratedCommandsNV(commandBuffer
                 , cmd->u.execute_generated_commands_nv.is_preprocessed             , cmd->u.execute_generated_commands_nv.generated_commands_info          );
              break;
          case VK_CMD_PREPROCESS_GENERATED_COMMANDS_NV:
              disp->CmdPreprocessGeneratedCommandsNV(commandBuffer
                 , cmd->u.preprocess_generated_commands_nv.generated_commands_info          );
              break;
          case VK_CMD_BIND_PIPELINE_SHADER_GROUP_NV:
              disp->CmdBindPipelineShaderGroupNV(commandBuffer
                 , cmd->u.bind_pipeline_shader_group_nv.pipeline_bind_point             , cmd->u.bind_pipeline_shader_group_nv.pipeline             , cmd->u.bind_pipeline_shader_group_nv.group_index          );
              break;
          case VK_CMD_EXECUTE_GENERATED_COMMANDS_EXT:
              disp->CmdExecuteGeneratedCommandsEXT(commandBuffer
                 , cmd->u.execute_generated_commands_ext.is_preprocessed             , cmd->u.execute_generated_commands_ext.generated_commands_info          );
              break;
          case VK_CMD_PREPROCESS_GENERATED_COMMANDS_EXT:
              disp->CmdPreprocessGeneratedCommandsEXT(commandBuffer
                 , cmd->u.preprocess_generated_commands_ext.generated_commands_info             , cmd->u.preprocess_generated_commands_ext.state_command_buffer          );
              break;
          case VK_CMD_PUSH_DESCRIPTOR_SET:
              disp->CmdPushDescriptorSet(commandBuffer
                 , cmd->u.push_descriptor_set.pipeline_bind_point             , cmd->u.push_descriptor_set.layout             , cmd->u.push_descriptor_set.set             , cmd->u.push_descriptor_set.descriptor_write_count             , cmd->u.push_descriptor_set.descriptor_writes          );
              break;
          case VK_CMD_SET_DEVICE_MASK:
              disp->CmdSetDeviceMask(commandBuffer
                 , cmd->u.set_device_mask.device_mask          );
              break;
          case VK_CMD_DISPATCH_BASE:
              disp->CmdDispatchBase(commandBuffer
                 , cmd->u.dispatch_base.base_group_x             , cmd->u.dispatch_base.base_group_y             , cmd->u.dispatch_base.base_group_z             , cmd->u.dispatch_base.group_count_x             , cmd->u.dispatch_base.group_count_y             , cmd->u.dispatch_base.group_count_z          );
              break;
          case VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE:
              disp->CmdPushDescriptorSetWithTemplate(commandBuffer
                 , cmd->u.push_descriptor_set_with_template.descriptor_update_template             , cmd->u.push_descriptor_set_with_template.layout             , cmd->u.push_descriptor_set_with_template.set             , cmd->u.push_descriptor_set_with_template.data          );
              break;
          case VK_CMD_SET_VIEWPORT_WSCALING_NV:
              disp->CmdSetViewportWScalingNV(commandBuffer
                 , cmd->u.set_viewport_wscaling_nv.first_viewport             , cmd->u.set_viewport_wscaling_nv.viewport_count             , cmd->u.set_viewport_wscaling_nv.viewport_wscalings          );
              break;
          case VK_CMD_SET_DISCARD_RECTANGLE_EXT:
              disp->CmdSetDiscardRectangleEXT(commandBuffer
                 , cmd->u.set_discard_rectangle_ext.first_discard_rectangle             , cmd->u.set_discard_rectangle_ext.discard_rectangle_count             , cmd->u.set_discard_rectangle_ext.discard_rectangles          );
              break;
          case VK_CMD_SET_DISCARD_RECTANGLE_ENABLE_EXT:
              disp->CmdSetDiscardRectangleEnableEXT(commandBuffer
                 , cmd->u.set_discard_rectangle_enable_ext.discard_rectangle_enable          );
              break;
          case VK_CMD_SET_DISCARD_RECTANGLE_MODE_EXT:
              disp->CmdSetDiscardRectangleModeEXT(commandBuffer
                 , cmd->u.set_discard_rectangle_mode_ext.discard_rectangle_mode          );
              break;
          case VK_CMD_SET_SAMPLE_LOCATIONS_EXT:
              disp->CmdSetSampleLocationsEXT(commandBuffer
                 , cmd->u.set_sample_locations_ext.sample_locations_info          );
              break;
          case VK_CMD_BEGIN_DEBUG_UTILS_LABEL_EXT:
              disp->CmdBeginDebugUtilsLabelEXT(commandBuffer
                 , cmd->u.begin_debug_utils_label_ext.label_info          );
              break;
          case VK_CMD_END_DEBUG_UTILS_LABEL_EXT:
              disp->CmdEndDebugUtilsLabelEXT(commandBuffer
              );
              break;
          case VK_CMD_INSERT_DEBUG_UTILS_LABEL_EXT:
              disp->CmdInsertDebugUtilsLabelEXT(commandBuffer
                 , cmd->u.insert_debug_utils_label_ext.label_info          );
              break;
          case VK_CMD_WRITE_BUFFER_MARKER_AMD:
              disp->CmdWriteBufferMarkerAMD(commandBuffer
                 , cmd->u.write_buffer_marker_amd.pipeline_stage             , cmd->u.write_buffer_marker_amd.dst_buffer             , cmd->u.write_buffer_marker_amd.dst_offset             , cmd->u.write_buffer_marker_amd.marker          );
              break;
          case VK_CMD_BEGIN_RENDER_PASS2:
              disp->CmdBeginRenderPass2(commandBuffer
                 , cmd->u.begin_render_pass2.render_pass_begin             , cmd->u.begin_render_pass2.subpass_begin_info          );
              break;
          case VK_CMD_NEXT_SUBPASS2:
              disp->CmdNextSubpass2(commandBuffer
                 , cmd->u.next_subpass2.subpass_begin_info             , cmd->u.next_subpass2.subpass_end_info          );
              break;
          case VK_CMD_END_RENDER_PASS2:
              disp->CmdEndRenderPass2(commandBuffer
                 , cmd->u.end_render_pass2.subpass_end_info          );
              break;
          case VK_CMD_DRAW_INDIRECT_COUNT:
              disp->CmdDrawIndirectCount(commandBuffer
                 , cmd->u.draw_indirect_count.buffer             , cmd->u.draw_indirect_count.offset             , cmd->u.draw_indirect_count.count_buffer             , cmd->u.draw_indirect_count.count_buffer_offset             , cmd->u.draw_indirect_count.max_draw_count             , cmd->u.draw_indirect_count.stride          );
              break;
          case VK_CMD_DRAW_INDEXED_INDIRECT_COUNT:
              disp->CmdDrawIndexedIndirectCount(commandBuffer
                 , cmd->u.draw_indexed_indirect_count.buffer             , cmd->u.draw_indexed_indirect_count.offset             , cmd->u.draw_indexed_indirect_count.count_buffer             , cmd->u.draw_indexed_indirect_count.count_buffer_offset             , cmd->u.draw_indexed_indirect_count.max_draw_count             , cmd->u.draw_indexed_indirect_count.stride          );
              break;
          case VK_CMD_SET_CHECKPOINT_NV:
              disp->CmdSetCheckpointNV(commandBuffer
                 , cmd->u.set_checkpoint_nv.checkpoint_marker          );
              break;
          case VK_CMD_BIND_TRANSFORM_FEEDBACK_BUFFERS_EXT:
              disp->CmdBindTransformFeedbackBuffersEXT(commandBuffer
                 , cmd->u.bind_transform_feedback_buffers_ext.first_binding             , cmd->u.bind_transform_feedback_buffers_ext.binding_count             , cmd->u.bind_transform_feedback_buffers_ext.buffers             , cmd->u.bind_transform_feedback_buffers_ext.offsets             , cmd->u.bind_transform_feedback_buffers_ext.sizes          );
              break;
          case VK_CMD_BEGIN_TRANSFORM_FEEDBACK_EXT:
              disp->CmdBeginTransformFeedbackEXT(commandBuffer
                 , cmd->u.begin_transform_feedback_ext.first_counter_buffer             , cmd->u.begin_transform_feedback_ext.counter_buffer_count             , cmd->u.begin_transform_feedback_ext.counter_buffers             , cmd->u.begin_transform_feedback_ext.counter_buffer_offsets          );
              break;
          case VK_CMD_END_TRANSFORM_FEEDBACK_EXT:
              disp->CmdEndTransformFeedbackEXT(commandBuffer
                 , cmd->u.end_transform_feedback_ext.first_counter_buffer             , cmd->u.end_transform_feedback_ext.counter_buffer_count             , cmd->u.end_transform_feedback_ext.counter_buffers             , cmd->u.end_transform_feedback_ext.counter_buffer_offsets          );
              break;
          case VK_CMD_BEGIN_QUERY_INDEXED_EXT:
              disp->CmdBeginQueryIndexedEXT(commandBuffer
                 , cmd->u.begin_query_indexed_ext.query_pool             , cmd->u.begin_query_indexed_ext.query             , cmd->u.begin_query_indexed_ext.flags             , cmd->u.begin_query_indexed_ext.index          );
              break;
          case VK_CMD_END_QUERY_INDEXED_EXT:
              disp->CmdEndQueryIndexedEXT(commandBuffer
                 , cmd->u.end_query_indexed_ext.query_pool             , cmd->u.end_query_indexed_ext.query             , cmd->u.end_query_indexed_ext.index          );
              break;
          case VK_CMD_DRAW_INDIRECT_BYTE_COUNT_EXT:
              disp->CmdDrawIndirectByteCountEXT(commandBuffer
                 , cmd->u.draw_indirect_byte_count_ext.instance_count             , cmd->u.draw_indirect_byte_count_ext.first_instance             , cmd->u.draw_indirect_byte_count_ext.counter_buffer             , cmd->u.draw_indirect_byte_count_ext.counter_buffer_offset             , cmd->u.draw_indirect_byte_count_ext.counter_offset             , cmd->u.draw_indirect_byte_count_ext.vertex_stride          );
              break;
          case VK_CMD_SET_EXCLUSIVE_SCISSOR_NV:
              disp->CmdSetExclusiveScissorNV(commandBuffer
                 , cmd->u.set_exclusive_scissor_nv.first_exclusive_scissor             , cmd->u.set_exclusive_scissor_nv.exclusive_scissor_count             , cmd->u.set_exclusive_scissor_nv.exclusive_scissors          );
              break;
          case VK_CMD_SET_EXCLUSIVE_SCISSOR_ENABLE_NV:
              disp->CmdSetExclusiveScissorEnableNV(commandBuffer
                 , cmd->u.set_exclusive_scissor_enable_nv.first_exclusive_scissor             , cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_count             , cmd->u.set_exclusive_scissor_enable_nv.exclusive_scissor_enables          );
              break;
          case VK_CMD_BIND_SHADING_RATE_IMAGE_NV:
              disp->CmdBindShadingRateImageNV(commandBuffer
                 , cmd->u.bind_shading_rate_image_nv.image_view             , cmd->u.bind_shading_rate_image_nv.image_layout          );
              break;
          case VK_CMD_SET_VIEWPORT_SHADING_RATE_PALETTE_NV:
              disp->CmdSetViewportShadingRatePaletteNV(commandBuffer
                 , cmd->u.set_viewport_shading_rate_palette_nv.first_viewport             , cmd->u.set_viewport_shading_rate_palette_nv.viewport_count             , cmd->u.set_viewport_shading_rate_palette_nv.shading_rate_palettes          );
              break;
          case VK_CMD_SET_COARSE_SAMPLE_ORDER_NV:
              disp->CmdSetCoarseSampleOrderNV(commandBuffer
                 , cmd->u.set_coarse_sample_order_nv.sample_order_type             , cmd->u.set_coarse_sample_order_nv.custom_sample_order_count             , cmd->u.set_coarse_sample_order_nv.custom_sample_orders          );
              break;
          case VK_CMD_DRAW_MESH_TASKS_NV:
              disp->CmdDrawMeshTasksNV(commandBuffer
                 , cmd->u.draw_mesh_tasks_nv.task_count             , cmd->u.draw_mesh_tasks_nv.first_task          );
              break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_NV:
              disp->CmdDrawMeshTasksIndirectNV(commandBuffer
                 , cmd->u.draw_mesh_tasks_indirect_nv.buffer             , cmd->u.draw_mesh_tasks_indirect_nv.offset             , cmd->u.draw_mesh_tasks_indirect_nv.draw_count             , cmd->u.draw_mesh_tasks_indirect_nv.stride          );
              break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_NV:
              disp->CmdDrawMeshTasksIndirectCountNV(commandBuffer
                 , cmd->u.draw_mesh_tasks_indirect_count_nv.buffer             , cmd->u.draw_mesh_tasks_indirect_count_nv.offset             , cmd->u.draw_mesh_tasks_indirect_count_nv.count_buffer             , cmd->u.draw_mesh_tasks_indirect_count_nv.count_buffer_offset             , cmd->u.draw_mesh_tasks_indirect_count_nv.max_draw_count             , cmd->u.draw_mesh_tasks_indirect_count_nv.stride          );
              break;
          case VK_CMD_DRAW_MESH_TASKS_EXT:
              disp->CmdDrawMeshTasksEXT(commandBuffer
                 , cmd->u.draw_mesh_tasks_ext.group_count_x             , cmd->u.draw_mesh_tasks_ext.group_count_y             , cmd->u.draw_mesh_tasks_ext.group_count_z          );
              break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_EXT:
              disp->CmdDrawMeshTasksIndirectEXT(commandBuffer
                 , cmd->u.draw_mesh_tasks_indirect_ext.buffer             , cmd->u.draw_mesh_tasks_indirect_ext.offset             , cmd->u.draw_mesh_tasks_indirect_ext.draw_count             , cmd->u.draw_mesh_tasks_indirect_ext.stride          );
              break;
          case VK_CMD_DRAW_MESH_TASKS_INDIRECT_COUNT_EXT:
              disp->CmdDrawMeshTasksIndirectCountEXT(commandBuffer
                 , cmd->u.draw_mesh_tasks_indirect_count_ext.buffer             , cmd->u.draw_mesh_tasks_indirect_count_ext.offset             , cmd->u.draw_mesh_tasks_indirect_count_ext.count_buffer             , cmd->u.draw_mesh_tasks_indirect_count_ext.count_buffer_offset             , cmd->u.draw_mesh_tasks_indirect_count_ext.max_draw_count             , cmd->u.draw_mesh_tasks_indirect_count_ext.stride          );
              break;
          case VK_CMD_BIND_INVOCATION_MASK_HUAWEI:
              disp->CmdBindInvocationMaskHUAWEI(commandBuffer
                 , cmd->u.bind_invocation_mask_huawei.image_view             , cmd->u.bind_invocation_mask_huawei.image_layout          );
              break;
          case VK_CMD_COPY_ACCELERATION_STRUCTURE_NV:
              disp->CmdCopyAccelerationStructureNV(commandBuffer
                 , cmd->u.copy_acceleration_structure_nv.dst             , cmd->u.copy_acceleration_structure_nv.src             , cmd->u.copy_acceleration_structure_nv.mode          );
              break;
          case VK_CMD_COPY_ACCELERATION_STRUCTURE_KHR:
              disp->CmdCopyAccelerationStructureKHR(commandBuffer
                 , cmd->u.copy_acceleration_structure_khr.info          );
              break;
          case VK_CMD_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_KHR:
              disp->CmdCopyAccelerationStructureToMemoryKHR(commandBuffer
                 , cmd->u.copy_acceleration_structure_to_memory_khr.info          );
              break;
          case VK_CMD_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_KHR:
              disp->CmdCopyMemoryToAccelerationStructureKHR(commandBuffer
                 , cmd->u.copy_memory_to_acceleration_structure_khr.info          );
              break;
          case VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_KHR:
              disp->CmdWriteAccelerationStructuresPropertiesKHR(commandBuffer
                 , cmd->u.write_acceleration_structures_properties_khr.acceleration_structure_count             , cmd->u.write_acceleration_structures_properties_khr.acceleration_structures             , cmd->u.write_acceleration_structures_properties_khr.query_type             , cmd->u.write_acceleration_structures_properties_khr.query_pool             , cmd->u.write_acceleration_structures_properties_khr.first_query          );
              break;
          case VK_CMD_WRITE_ACCELERATION_STRUCTURES_PROPERTIES_NV:
              disp->CmdWriteAccelerationStructuresPropertiesNV(commandBuffer
                 , cmd->u.write_acceleration_structures_properties_nv.acceleration_structure_count             , cmd->u.write_acceleration_structures_properties_nv.acceleration_structures             , cmd->u.write_acceleration_structures_properties_nv.query_type             , cmd->u.write_acceleration_structures_properties_nv.query_pool             , cmd->u.write_acceleration_structures_properties_nv.first_query          );
              break;
          case VK_CMD_BUILD_ACCELERATION_STRUCTURE_NV:
              disp->CmdBuildAccelerationStructureNV(commandBuffer
                 , cmd->u.build_acceleration_structure_nv.info             , cmd->u.build_acceleration_structure_nv.instance_data             , cmd->u.build_acceleration_structure_nv.instance_offset             , cmd->u.build_acceleration_structure_nv.update             , cmd->u.build_acceleration_structure_nv.dst             , cmd->u.build_acceleration_structure_nv.src             , cmd->u.build_acceleration_structure_nv.scratch             , cmd->u.build_acceleration_structure_nv.scratch_offset          );
              break;
          case VK_CMD_TRACE_RAYS_KHR:
              disp->CmdTraceRaysKHR(commandBuffer
                 , cmd->u.trace_rays_khr.raygen_shader_binding_table             , cmd->u.trace_rays_khr.miss_shader_binding_table             , cmd->u.trace_rays_khr.hit_shader_binding_table             , cmd->u.trace_rays_khr.callable_shader_binding_table             , cmd->u.trace_rays_khr.width             , cmd->u.trace_rays_khr.height             , cmd->u.trace_rays_khr.depth          );
              break;
          case VK_CMD_TRACE_RAYS_NV:
              disp->CmdTraceRaysNV(commandBuffer
                 , cmd->u.trace_rays_nv.raygen_shader_binding_table_buffer             , cmd->u.trace_rays_nv.raygen_shader_binding_offset             , cmd->u.trace_rays_nv.miss_shader_binding_table_buffer             , cmd->u.trace_rays_nv.miss_shader_binding_offset             , cmd->u.trace_rays_nv.miss_shader_binding_stride             , cmd->u.trace_rays_nv.hit_shader_binding_table_buffer             , cmd->u.trace_rays_nv.hit_shader_binding_offset             , cmd->u.trace_rays_nv.hit_shader_binding_stride             , cmd->u.trace_rays_nv.callable_shader_binding_table_buffer             , cmd->u.trace_rays_nv.callable_shader_binding_offset             , cmd->u.trace_rays_nv.callable_shader_binding_stride             , cmd->u.trace_rays_nv.width             , cmd->u.trace_rays_nv.height             , cmd->u.trace_rays_nv.depth          );
              break;
          case VK_CMD_TRACE_RAYS_INDIRECT_KHR:
              disp->CmdTraceRaysIndirectKHR(commandBuffer
                 , cmd->u.trace_rays_indirect_khr.raygen_shader_binding_table             , cmd->u.trace_rays_indirect_khr.miss_shader_binding_table             , cmd->u.trace_rays_indirect_khr.hit_shader_binding_table             , cmd->u.trace_rays_indirect_khr.callable_shader_binding_table             , cmd->u.trace_rays_indirect_khr.indirect_device_address          );
              break;
          case VK_CMD_TRACE_RAYS_INDIRECT2_KHR:
              disp->CmdTraceRaysIndirect2KHR(commandBuffer
                 , cmd->u.trace_rays_indirect2_khr.indirect_device_address          );
              break;
          case VK_CMD_SET_RAY_TRACING_PIPELINE_STACK_SIZE_KHR:
              disp->CmdSetRayTracingPipelineStackSizeKHR(commandBuffer
                 , cmd->u.set_ray_tracing_pipeline_stack_size_khr.pipeline_stack_size          );
              break;
          case VK_CMD_SET_PERFORMANCE_MARKER_INTEL:
              disp->CmdSetPerformanceMarkerINTEL(commandBuffer
                 , cmd->u.set_performance_marker_intel.marker_info          );
              break;
          case VK_CMD_SET_PERFORMANCE_STREAM_MARKER_INTEL:
              disp->CmdSetPerformanceStreamMarkerINTEL(commandBuffer
                 , cmd->u.set_performance_stream_marker_intel.marker_info          );
              break;
          case VK_CMD_SET_PERFORMANCE_OVERRIDE_INTEL:
              disp->CmdSetPerformanceOverrideINTEL(commandBuffer
                 , cmd->u.set_performance_override_intel.override_info          );
              break;
          case VK_CMD_SET_LINE_STIPPLE:
              disp->CmdSetLineStipple(commandBuffer
                 , cmd->u.set_line_stipple.line_stipple_factor             , cmd->u.set_line_stipple.line_stipple_pattern          );
              break;
          case VK_CMD_BUILD_ACCELERATION_STRUCTURES_KHR:
              disp->CmdBuildAccelerationStructuresKHR(commandBuffer
                 , cmd->u.build_acceleration_structures_khr.info_count             , cmd->u.build_acceleration_structures_khr.infos             , cmd->u.build_acceleration_structures_khr.pp_build_range_infos          );
              break;
          case VK_CMD_BUILD_ACCELERATION_STRUCTURES_INDIRECT_KHR:
              disp->CmdBuildAccelerationStructuresIndirectKHR(commandBuffer
                 , cmd->u.build_acceleration_structures_indirect_khr.info_count             , cmd->u.build_acceleration_structures_indirect_khr.infos             , cmd->u.build_acceleration_structures_indirect_khr.indirect_device_addresses             , cmd->u.build_acceleration_structures_indirect_khr.indirect_strides             , cmd->u.build_acceleration_structures_indirect_khr.pp_max_primitive_counts          );
              break;
          case VK_CMD_SET_CULL_MODE:
              disp->CmdSetCullMode(commandBuffer
                 , cmd->u.set_cull_mode.cull_mode          );
              break;
          case VK_CMD_SET_FRONT_FACE:
              disp->CmdSetFrontFace(commandBuffer
                 , cmd->u.set_front_face.front_face          );
              break;
          case VK_CMD_SET_PRIMITIVE_TOPOLOGY:
              disp->CmdSetPrimitiveTopology(commandBuffer
                 , cmd->u.set_primitive_topology.primitive_topology          );
              break;
          case VK_CMD_SET_VIEWPORT_WITH_COUNT:
              disp->CmdSetViewportWithCount(commandBuffer
                 , cmd->u.set_viewport_with_count.viewport_count             , cmd->u.set_viewport_with_count.viewports          );
              break;
          case VK_CMD_SET_SCISSOR_WITH_COUNT:
              disp->CmdSetScissorWithCount(commandBuffer
                 , cmd->u.set_scissor_with_count.scissor_count             , cmd->u.set_scissor_with_count.scissors          );
              break;
          case VK_CMD_BIND_INDEX_BUFFER2:
              disp->CmdBindIndexBuffer2(commandBuffer
                 , cmd->u.bind_index_buffer2.buffer             , cmd->u.bind_index_buffer2.offset             , cmd->u.bind_index_buffer2.size             , cmd->u.bind_index_buffer2.index_type          );
              break;
          case VK_CMD_BIND_VERTEX_BUFFERS2:
              disp->CmdBindVertexBuffers2(commandBuffer
                 , cmd->u.bind_vertex_buffers2.first_binding             , cmd->u.bind_vertex_buffers2.binding_count             , cmd->u.bind_vertex_buffers2.buffers             , cmd->u.bind_vertex_buffers2.offsets             , cmd->u.bind_vertex_buffers2.sizes             , cmd->u.bind_vertex_buffers2.strides          );
              break;
          case VK_CMD_SET_DEPTH_TEST_ENABLE:
              disp->CmdSetDepthTestEnable(commandBuffer
                 , cmd->u.set_depth_test_enable.depth_test_enable          );
              break;
          case VK_CMD_SET_DEPTH_WRITE_ENABLE:
              disp->CmdSetDepthWriteEnable(commandBuffer
                 , cmd->u.set_depth_write_enable.depth_write_enable          );
              break;
          case VK_CMD_SET_DEPTH_COMPARE_OP:
              disp->CmdSetDepthCompareOp(commandBuffer
                 , cmd->u.set_depth_compare_op.depth_compare_op          );
              break;
          case VK_CMD_SET_DEPTH_BOUNDS_TEST_ENABLE:
              disp->CmdSetDepthBoundsTestEnable(commandBuffer
                 , cmd->u.set_depth_bounds_test_enable.depth_bounds_test_enable          );
              break;
          case VK_CMD_SET_STENCIL_TEST_ENABLE:
              disp->CmdSetStencilTestEnable(commandBuffer
                 , cmd->u.set_stencil_test_enable.stencil_test_enable          );
              break;
          case VK_CMD_SET_STENCIL_OP:
              disp->CmdSetStencilOp(commandBuffer
                 , cmd->u.set_stencil_op.face_mask             , cmd->u.set_stencil_op.fail_op             , cmd->u.set_stencil_op.pass_op             , cmd->u.set_stencil_op.depth_fail_op             , cmd->u.set_stencil_op.compare_op          );
              break;
          case VK_CMD_SET_PATCH_CONTROL_POINTS_EXT:
              disp->CmdSetPatchControlPointsEXT(commandBuffer
                 , cmd->u.set_patch_control_points_ext.patch_control_points          );
              break;
          case VK_CMD_SET_RASTERIZER_DISCARD_ENABLE:
              disp->CmdSetRasterizerDiscardEnable(commandBuffer
                 , cmd->u.set_rasterizer_discard_enable.rasterizer_discard_enable          );
              break;
          case VK_CMD_SET_DEPTH_BIAS_ENABLE:
              disp->CmdSetDepthBiasEnable(commandBuffer
                 , cmd->u.set_depth_bias_enable.depth_bias_enable          );
              break;
          case VK_CMD_SET_LOGIC_OP_EXT:
              disp->CmdSetLogicOpEXT(commandBuffer
                 , cmd->u.set_logic_op_ext.logic_op          );
              break;
          case VK_CMD_SET_PRIMITIVE_RESTART_ENABLE:
              disp->CmdSetPrimitiveRestartEnable(commandBuffer
                 , cmd->u.set_primitive_restart_enable.primitive_restart_enable          );
              break;
          case VK_CMD_SET_TESSELLATION_DOMAIN_ORIGIN_EXT:
              disp->CmdSetTessellationDomainOriginEXT(commandBuffer
                 , cmd->u.set_tessellation_domain_origin_ext.domain_origin          );
              break;
          case VK_CMD_SET_DEPTH_CLAMP_ENABLE_EXT:
              disp->CmdSetDepthClampEnableEXT(commandBuffer
                 , cmd->u.set_depth_clamp_enable_ext.depth_clamp_enable          );
              break;
          case VK_CMD_SET_POLYGON_MODE_EXT:
              disp->CmdSetPolygonModeEXT(commandBuffer
                 , cmd->u.set_polygon_mode_ext.polygon_mode          );
              break;
          case VK_CMD_SET_RASTERIZATION_SAMPLES_EXT:
              disp->CmdSetRasterizationSamplesEXT(commandBuffer
                 , cmd->u.set_rasterization_samples_ext.rasterization_samples          );
              break;
          case VK_CMD_SET_SAMPLE_MASK_EXT:
              disp->CmdSetSampleMaskEXT(commandBuffer
                 , cmd->u.set_sample_mask_ext.samples             , cmd->u.set_sample_mask_ext.sample_mask          );
              break;
          case VK_CMD_SET_ALPHA_TO_COVERAGE_ENABLE_EXT:
              disp->CmdSetAlphaToCoverageEnableEXT(commandBuffer
                 , cmd->u.set_alpha_to_coverage_enable_ext.alpha_to_coverage_enable          );
              break;
          case VK_CMD_SET_ALPHA_TO_ONE_ENABLE_EXT:
              disp->CmdSetAlphaToOneEnableEXT(commandBuffer
                 , cmd->u.set_alpha_to_one_enable_ext.alpha_to_one_enable          );
              break;
          case VK_CMD_SET_LOGIC_OP_ENABLE_EXT:
              disp->CmdSetLogicOpEnableEXT(commandBuffer
                 , cmd->u.set_logic_op_enable_ext.logic_op_enable          );
              break;
          case VK_CMD_SET_COLOR_BLEND_ENABLE_EXT:
              disp->CmdSetColorBlendEnableEXT(commandBuffer
                 , cmd->u.set_color_blend_enable_ext.first_attachment             , cmd->u.set_color_blend_enable_ext.attachment_count             , cmd->u.set_color_blend_enable_ext.color_blend_enables          );
              break;
          case VK_CMD_SET_COLOR_BLEND_EQUATION_EXT:
              disp->CmdSetColorBlendEquationEXT(commandBuffer
                 , cmd->u.set_color_blend_equation_ext.first_attachment             , cmd->u.set_color_blend_equation_ext.attachment_count             , cmd->u.set_color_blend_equation_ext.color_blend_equations          );
              break;
          case VK_CMD_SET_COLOR_WRITE_MASK_EXT:
              disp->CmdSetColorWriteMaskEXT(commandBuffer
                 , cmd->u.set_color_write_mask_ext.first_attachment             , cmd->u.set_color_write_mask_ext.attachment_count             , cmd->u.set_color_write_mask_ext.color_write_masks          );
              break;
          case VK_CMD_SET_RASTERIZATION_STREAM_EXT:
              disp->CmdSetRasterizationStreamEXT(commandBuffer
                 , cmd->u.set_rasterization_stream_ext.rasterization_stream          );
              break;
          case VK_CMD_SET_CONSERVATIVE_RASTERIZATION_MODE_EXT:
              disp->CmdSetConservativeRasterizationModeEXT(commandBuffer
                 , cmd->u.set_conservative_rasterization_mode_ext.conservative_rasterization_mode          );
              break;
          case VK_CMD_SET_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT:
              disp->CmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer
                 , cmd->u.set_extra_primitive_overestimation_size_ext.extra_primitive_overestimation_size          );
              break;
          case VK_CMD_SET_DEPTH_CLIP_ENABLE_EXT:
              disp->CmdSetDepthClipEnableEXT(commandBuffer
                 , cmd->u.set_depth_clip_enable_ext.depth_clip_enable          );
              break;
          case VK_CMD_SET_SAMPLE_LOCATIONS_ENABLE_EXT:
              disp->CmdSetSampleLocationsEnableEXT(commandBuffer
                 , cmd->u.set_sample_locations_enable_ext.sample_locations_enable          );
              break;
          case VK_CMD_SET_COLOR_BLEND_ADVANCED_EXT:
              disp->CmdSetColorBlendAdvancedEXT(commandBuffer
                 , cmd->u.set_color_blend_advanced_ext.first_attachment             , cmd->u.set_color_blend_advanced_ext.attachment_count             , cmd->u.set_color_blend_advanced_ext.color_blend_advanced          );
              break;
          case VK_CMD_SET_PROVOKING_VERTEX_MODE_EXT:
              disp->CmdSetProvokingVertexModeEXT(commandBuffer
                 , cmd->u.set_provoking_vertex_mode_ext.provoking_vertex_mode          );
              break;
          case VK_CMD_SET_LINE_RASTERIZATION_MODE_EXT:
              disp->CmdSetLineRasterizationModeEXT(commandBuffer
                 , cmd->u.set_line_rasterization_mode_ext.line_rasterization_mode          );
              break;
          case VK_CMD_SET_LINE_STIPPLE_ENABLE_EXT:
              disp->CmdSetLineStippleEnableEXT(commandBuffer
                 , cmd->u.set_line_stipple_enable_ext.stippled_line_enable          );
              break;
          case VK_CMD_SET_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT:
              disp->CmdSetDepthClipNegativeOneToOneEXT(commandBuffer
                 , cmd->u.set_depth_clip_negative_one_to_one_ext.negative_one_to_one          );
              break;
          case VK_CMD_SET_VIEWPORT_WSCALING_ENABLE_NV:
              disp->CmdSetViewportWScalingEnableNV(commandBuffer
                 , cmd->u.set_viewport_wscaling_enable_nv.viewport_wscaling_enable          );
              break;
          case VK_CMD_SET_VIEWPORT_SWIZZLE_NV:
              disp->CmdSetViewportSwizzleNV(commandBuffer
                 , cmd->u.set_viewport_swizzle_nv.first_viewport             , cmd->u.set_viewport_swizzle_nv.viewport_count             , cmd->u.set_viewport_swizzle_nv.viewport_swizzles          );
              break;
          case VK_CMD_SET_COVERAGE_TO_COLOR_ENABLE_NV:
              disp->CmdSetCoverageToColorEnableNV(commandBuffer
                 , cmd->u.set_coverage_to_color_enable_nv.coverage_to_color_enable          );
              break;
          case VK_CMD_SET_COVERAGE_TO_COLOR_LOCATION_NV:
              disp->CmdSetCoverageToColorLocationNV(commandBuffer
                 , cmd->u.set_coverage_to_color_location_nv.coverage_to_color_location          );
              break;
          case VK_CMD_SET_COVERAGE_MODULATION_MODE_NV:
              disp->CmdSetCoverageModulationModeNV(commandBuffer
                 , cmd->u.set_coverage_modulation_mode_nv.coverage_modulation_mode          );
              break;
          case VK_CMD_SET_COVERAGE_MODULATION_TABLE_ENABLE_NV:
              disp->CmdSetCoverageModulationTableEnableNV(commandBuffer
                 , cmd->u.set_coverage_modulation_table_enable_nv.coverage_modulation_table_enable          );
              break;
          case VK_CMD_SET_COVERAGE_MODULATION_TABLE_NV:
              disp->CmdSetCoverageModulationTableNV(commandBuffer
                 , cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table_count             , cmd->u.set_coverage_modulation_table_nv.coverage_modulation_table          );
              break;
          case VK_CMD_SET_SHADING_RATE_IMAGE_ENABLE_NV:
              disp->CmdSetShadingRateImageEnableNV(commandBuffer
                 , cmd->u.set_shading_rate_image_enable_nv.shading_rate_image_enable          );
              break;
          case VK_CMD_SET_COVERAGE_REDUCTION_MODE_NV:
              disp->CmdSetCoverageReductionModeNV(commandBuffer
                 , cmd->u.set_coverage_reduction_mode_nv.coverage_reduction_mode          );
              break;
          case VK_CMD_SET_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV:
              disp->CmdSetRepresentativeFragmentTestEnableNV(commandBuffer
                 , cmd->u.set_representative_fragment_test_enable_nv.representative_fragment_test_enable          );
              break;
          case VK_CMD_COPY_BUFFER2:
              disp->CmdCopyBuffer2(commandBuffer
                 , cmd->u.copy_buffer2.copy_buffer_info          );
              break;
          case VK_CMD_COPY_IMAGE2:
              disp->CmdCopyImage2(commandBuffer
                 , cmd->u.copy_image2.copy_image_info          );
              break;
          case VK_CMD_BLIT_IMAGE2:
              disp->CmdBlitImage2(commandBuffer
                 , cmd->u.blit_image2.blit_image_info          );
              break;
          case VK_CMD_COPY_BUFFER_TO_IMAGE2:
              disp->CmdCopyBufferToImage2(commandBuffer
                 , cmd->u.copy_buffer_to_image2.copy_buffer_to_image_info          );
              break;
          case VK_CMD_COPY_IMAGE_TO_BUFFER2:
              disp->CmdCopyImageToBuffer2(commandBuffer
                 , cmd->u.copy_image_to_buffer2.copy_image_to_buffer_info          );
              break;
          case VK_CMD_RESOLVE_IMAGE2:
              disp->CmdResolveImage2(commandBuffer
                 , cmd->u.resolve_image2.resolve_image_info          );
              break;
          case VK_CMD_SET_FRAGMENT_SHADING_RATE_KHR:
              disp->CmdSetFragmentShadingRateKHR(commandBuffer
                 , cmd->u.set_fragment_shading_rate_khr.fragment_size             , cmd->u.set_fragment_shading_rate_khr.combiner_ops          );
              break;
          case VK_CMD_SET_FRAGMENT_SHADING_RATE_ENUM_NV:
              disp->CmdSetFragmentShadingRateEnumNV(commandBuffer
                 , cmd->u.set_fragment_shading_rate_enum_nv.shading_rate             , cmd->u.set_fragment_shading_rate_enum_nv.combiner_ops          );
              break;
          case VK_CMD_SET_VERTEX_INPUT_EXT:
              disp->CmdSetVertexInputEXT(commandBuffer
                 , cmd->u.set_vertex_input_ext.vertex_binding_description_count             , cmd->u.set_vertex_input_ext.vertex_binding_descriptions             , cmd->u.set_vertex_input_ext.vertex_attribute_description_count             , cmd->u.set_vertex_input_ext.vertex_attribute_descriptions          );
              break;
          case VK_CMD_SET_COLOR_WRITE_ENABLE_EXT:
              disp->CmdSetColorWriteEnableEXT(commandBuffer
                 , cmd->u.set_color_write_enable_ext.attachment_count             , cmd->u.set_color_write_enable_ext.color_write_enables          );
              break;
          case VK_CMD_SET_EVENT2:
              disp->CmdSetEvent2(commandBuffer
                 , cmd->u.set_event2.event             , cmd->u.set_event2.dependency_info          );
              break;
          case VK_CMD_RESET_EVENT2:
              disp->CmdResetEvent2(commandBuffer
                 , cmd->u.reset_event2.event             , cmd->u.reset_event2.stage_mask          );
              break;
          case VK_CMD_WAIT_EVENTS2:
              disp->CmdWaitEvents2(commandBuffer
                 , cmd->u.wait_events2.event_count             , cmd->u.wait_events2.events             , cmd->u.wait_events2.dependency_infos          );
              break;
          case VK_CMD_PIPELINE_BARRIER2:
              disp->CmdPipelineBarrier2(commandBuffer
                 , cmd->u.pipeline_barrier2.dependency_info          );
              break;
          case VK_CMD_WRITE_TIMESTAMP2:
              disp->CmdWriteTimestamp2(commandBuffer
                 , cmd->u.write_timestamp2.stage             , cmd->u.write_timestamp2.query_pool             , cmd->u.write_timestamp2.query          );
              break;
          case VK_CMD_WRITE_BUFFER_MARKER2_AMD:
              disp->CmdWriteBufferMarker2AMD(commandBuffer
                 , cmd->u.write_buffer_marker2_amd.stage             , cmd->u.write_buffer_marker2_amd.dst_buffer             , cmd->u.write_buffer_marker2_amd.dst_offset             , cmd->u.write_buffer_marker2_amd.marker          );
              break;
          case VK_CMD_DECODE_VIDEO_KHR:
              disp->CmdDecodeVideoKHR(commandBuffer
                 , cmd->u.decode_video_khr.decode_info          );
              break;
          case VK_CMD_BEGIN_VIDEO_CODING_KHR:
              disp->CmdBeginVideoCodingKHR(commandBuffer
                 , cmd->u.begin_video_coding_khr.begin_info          );
              break;
          case VK_CMD_CONTROL_VIDEO_CODING_KHR:
              disp->CmdControlVideoCodingKHR(commandBuffer
                 , cmd->u.control_video_coding_khr.coding_control_info          );
              break;
          case VK_CMD_END_VIDEO_CODING_KHR:
              disp->CmdEndVideoCodingKHR(commandBuffer
                 , cmd->u.end_video_coding_khr.end_coding_info          );
              break;
          case VK_CMD_ENCODE_VIDEO_KHR:
              disp->CmdEncodeVideoKHR(commandBuffer
                 , cmd->u.encode_video_khr.encode_info          );
              break;
          case VK_CMD_DECOMPRESS_MEMORY_NV:
              disp->CmdDecompressMemoryNV(commandBuffer
                 , cmd->u.decompress_memory_nv.decompress_region_count             , cmd->u.decompress_memory_nv.decompress_memory_regions          );
              break;
          case VK_CMD_DECOMPRESS_MEMORY_INDIRECT_COUNT_NV:
              disp->CmdDecompressMemoryIndirectCountNV(commandBuffer
                 , cmd->u.decompress_memory_indirect_count_nv.indirect_commands_address             , cmd->u.decompress_memory_indirect_count_nv.indirect_commands_count_address             , cmd->u.decompress_memory_indirect_count_nv.stride          );
              break;
          case VK_CMD_CU_LAUNCH_KERNEL_NVX:
              disp->CmdCuLaunchKernelNVX(commandBuffer
                 , cmd->u.cu_launch_kernel_nvx.launch_info          );
              break;
          case VK_CMD_BIND_DESCRIPTOR_BUFFERS_EXT:
              disp->CmdBindDescriptorBuffersEXT(commandBuffer
                 , cmd->u.bind_descriptor_buffers_ext.buffer_count             , cmd->u.bind_descriptor_buffers_ext.binding_infos          );
              break;
          case VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS_EXT:
              disp->CmdSetDescriptorBufferOffsetsEXT(commandBuffer
                 , cmd->u.set_descriptor_buffer_offsets_ext.pipeline_bind_point             , cmd->u.set_descriptor_buffer_offsets_ext.layout             , cmd->u.set_descriptor_buffer_offsets_ext.first_set             , cmd->u.set_descriptor_buffer_offsets_ext.set_count             , cmd->u.set_descriptor_buffer_offsets_ext.buffer_indices             , cmd->u.set_descriptor_buffer_offsets_ext.offsets          );
              break;
          case VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_EXT:
              disp->CmdBindDescriptorBufferEmbeddedSamplersEXT(commandBuffer
                 , cmd->u.bind_descriptor_buffer_embedded_samplers_ext.pipeline_bind_point             , cmd->u.bind_descriptor_buffer_embedded_samplers_ext.layout             , cmd->u.bind_descriptor_buffer_embedded_samplers_ext.set          );
              break;
          case VK_CMD_BEGIN_RENDERING:
              disp->CmdBeginRendering(commandBuffer
                 , cmd->u.begin_rendering.rendering_info          );
              break;
          case VK_CMD_END_RENDERING:
              disp->CmdEndRendering(commandBuffer
              );
              break;
          case VK_CMD_BUILD_MICROMAPS_EXT:
              disp->CmdBuildMicromapsEXT(commandBuffer
                 , cmd->u.build_micromaps_ext.info_count             , cmd->u.build_micromaps_ext.infos          );
              break;
          case VK_CMD_COPY_MICROMAP_EXT:
              disp->CmdCopyMicromapEXT(commandBuffer
                 , cmd->u.copy_micromap_ext.info          );
              break;
          case VK_CMD_COPY_MICROMAP_TO_MEMORY_EXT:
              disp->CmdCopyMicromapToMemoryEXT(commandBuffer
                 , cmd->u.copy_micromap_to_memory_ext.info          );
              break;
          case VK_CMD_COPY_MEMORY_TO_MICROMAP_EXT:
              disp->CmdCopyMemoryToMicromapEXT(commandBuffer
                 , cmd->u.copy_memory_to_micromap_ext.info          );
              break;
          case VK_CMD_WRITE_MICROMAPS_PROPERTIES_EXT:
              disp->CmdWriteMicromapsPropertiesEXT(commandBuffer
                 , cmd->u.write_micromaps_properties_ext.micromap_count             , cmd->u.write_micromaps_properties_ext.micromaps             , cmd->u.write_micromaps_properties_ext.query_type             , cmd->u.write_micromaps_properties_ext.query_pool             , cmd->u.write_micromaps_properties_ext.first_query          );
              break;
          case VK_CMD_OPTICAL_FLOW_EXECUTE_NV:
              disp->CmdOpticalFlowExecuteNV(commandBuffer
                 , cmd->u.optical_flow_execute_nv.session             , cmd->u.optical_flow_execute_nv.execute_info          );
              break;
          case VK_CMD_SET_DEPTH_BIAS2_EXT:
              disp->CmdSetDepthBias2EXT(commandBuffer
                 , cmd->u.set_depth_bias2_ext.depth_bias_info          );
              break;
          case VK_CMD_BIND_SHADERS_EXT:
              disp->CmdBindShadersEXT(commandBuffer
                 , cmd->u.bind_shaders_ext.stage_count             , cmd->u.bind_shaders_ext.stages             , cmd->u.bind_shaders_ext.shaders          );
              break;
          case VK_CMD_BIND_DESCRIPTOR_SETS2:
              disp->CmdBindDescriptorSets2(commandBuffer
                 , cmd->u.bind_descriptor_sets2.bind_descriptor_sets_info          );
              break;
          case VK_CMD_PUSH_CONSTANTS2:
              disp->CmdPushConstants2(commandBuffer
                 , cmd->u.push_constants2.push_constants_info          );
              break;
          case VK_CMD_PUSH_DESCRIPTOR_SET2:
              disp->CmdPushDescriptorSet2(commandBuffer
                 , cmd->u.push_descriptor_set2.push_descriptor_set_info          );
              break;
          case VK_CMD_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE2:
              disp->CmdPushDescriptorSetWithTemplate2(commandBuffer
                 , cmd->u.push_descriptor_set_with_template2.push_descriptor_set_with_template_info          );
              break;
          case VK_CMD_SET_DESCRIPTOR_BUFFER_OFFSETS2_EXT:
              disp->CmdSetDescriptorBufferOffsets2EXT(commandBuffer
                 , cmd->u.set_descriptor_buffer_offsets2_ext.set_descriptor_buffer_offsets_info          );
              break;
          case VK_CMD_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS2_EXT:
              disp->CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer
                 , cmd->u.bind_descriptor_buffer_embedded_samplers2_ext.bind_descriptor_buffer_embedded_samplers_info          );
              break;
          case VK_CMD_SET_RENDERING_ATTACHMENT_LOCATIONS:
              disp->CmdSetRenderingAttachmentLocations(commandBuffer
                 , cmd->u.set_rendering_attachment_locations.location_info          );
              break;
          case VK_CMD_SET_RENDERING_INPUT_ATTACHMENT_INDICES:
              disp->CmdSetRenderingInputAttachmentIndices(commandBuffer
                 , cmd->u.set_rendering_input_attachment_indices.input_attachment_index_info          );
              break;
          case VK_CMD_SET_DEPTH_CLAMP_RANGE_EXT:
              disp->CmdSetDepthClampRangeEXT(commandBuffer
                 , cmd->u.set_depth_clamp_range_ext.depth_clamp_mode             , cmd->u.set_depth_clamp_range_ext.depth_clamp_range          );
              break;
          default: unreachable("Unsupported command");
          }
       }
    }
    
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_pipeline(&cmd_buffer->cmd_queue,
                                           pipelineBindPoint, pipeline);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
       } else {
          vk_cmd_enqueue_CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetAttachmentFeedbackLoopEnableEXT(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_attachment_feedback_loop_enable_ext(&cmd_buffer->cmd_queue,
                                           aspectMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetAttachmentFeedbackLoopEnableEXT(VkCommandBuffer commandBuffer, VkImageAspectFlags aspectMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask);
       } else {
          vk_cmd_enqueue_CmdSetAttachmentFeedbackLoopEnableEXT(commandBuffer, aspectMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_viewport(&cmd_buffer->cmd_queue,
                                           firstViewport, viewportCount, pViewports);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
       } else {
          vk_cmd_enqueue_CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_scissor(&cmd_buffer->cmd_queue,
                                           firstScissor, scissorCount, pScissors);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
       } else {
          vk_cmd_enqueue_CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_line_width(&cmd_buffer->cmd_queue,
                                           lineWidth);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetLineWidth(commandBuffer, lineWidth);
       } else {
          vk_cmd_enqueue_CmdSetLineWidth(commandBuffer, lineWidth);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_bias(&cmd_buffer->cmd_queue,
                                           depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
       } else {
          vk_cmd_enqueue_CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_blend_constants(&cmd_buffer->cmd_queue,
                                           blendConstants);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetBlendConstants(commandBuffer, blendConstants);
       } else {
          vk_cmd_enqueue_CmdSetBlendConstants(commandBuffer, blendConstants);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_bounds(&cmd_buffer->cmd_queue,
                                           minDepthBounds, maxDepthBounds);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
       } else {
          vk_cmd_enqueue_CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_stencil_compare_mask(&cmd_buffer->cmd_queue,
                                           faceMask, compareMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
       } else {
          vk_cmd_enqueue_CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_stencil_write_mask(&cmd_buffer->cmd_queue,
                                           faceMask, writeMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
       } else {
          vk_cmd_enqueue_CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_stencil_reference(&cmd_buffer->cmd_queue,
                                           faceMask, reference);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetStencilReference(commandBuffer, faceMask, reference);
       } else {
          vk_cmd_enqueue_CmdSetStencilReference(commandBuffer, faceMask, reference);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdBindDescriptorSets() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
       } else {
          vk_cmd_enqueue_CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_index_buffer(&cmd_buffer->cmd_queue,
                                           buffer, offset, indexType);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
       } else {
          vk_cmd_enqueue_CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_vertex_buffers(&cmd_buffer->cmd_queue,
                                           firstBinding, bindingCount, pBuffers, pOffsets);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
       } else {
          vk_cmd_enqueue_CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw(&cmd_buffer->cmd_queue,
                                           vertexCount, instanceCount, firstVertex, firstInstance);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
       } else {
          vk_cmd_enqueue_CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_indexed(&cmd_buffer->cmd_queue,
                                           indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
       } else {
          vk_cmd_enqueue_CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdDrawMultiEXT() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMultiEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawInfoEXT* pVertexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride);
       } else {
          vk_cmd_enqueue_CmdDrawMultiEXT(commandBuffer, drawCount, pVertexInfo, instanceCount, firstInstance, stride);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdDrawMultiIndexedEXT() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer, uint32_t drawCount, const VkMultiDrawIndexedInfoEXT* pIndexInfo, uint32_t instanceCount, uint32_t firstInstance, uint32_t stride, const int32_t* pVertexOffset)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset);
       } else {
          vk_cmd_enqueue_CmdDrawMultiIndexedEXT(commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_indirect(&cmd_buffer->cmd_queue,
                                           buffer, offset, drawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_indexed_indirect(&cmd_buffer->cmd_queue,
                                           buffer, offset, drawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_dispatch(&cmd_buffer->cmd_queue,
                                           groupCountX, groupCountY, groupCountZ);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
       } else {
          vk_cmd_enqueue_CmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_dispatch_indirect(&cmd_buffer->cmd_queue,
                                           buffer, offset);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDispatchIndirect(commandBuffer, buffer, offset);
       } else {
          vk_cmd_enqueue_CmdDispatchIndirect(commandBuffer, buffer, offset);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSubpassShadingHUAWEI(VkCommandBuffer commandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_subpass_shading_huawei(&cmd_buffer->cmd_queue);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSubpassShadingHUAWEI(VkCommandBuffer commandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSubpassShadingHUAWEI(commandBuffer);
       } else {
          vk_cmd_enqueue_CmdSubpassShadingHUAWEI(commandBuffer);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawClusterHUAWEI(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_cluster_huawei(&cmd_buffer->cmd_queue,
                                           groupCountX, groupCountY, groupCountZ);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawClusterHUAWEI(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawClusterHUAWEI(commandBuffer, groupCountX, groupCountY, groupCountZ);
       } else {
          vk_cmd_enqueue_CmdDrawClusterHUAWEI(commandBuffer, groupCountX, groupCountY, groupCountZ);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawClusterIndirectHUAWEI(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_cluster_indirect_huawei(&cmd_buffer->cmd_queue,
                                           buffer, offset);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawClusterIndirectHUAWEI(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawClusterIndirectHUAWEI(commandBuffer, buffer, offset);
       } else {
          vk_cmd_enqueue_CmdDrawClusterIndirectHUAWEI(commandBuffer, buffer, offset);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdUpdatePipelineIndirectBufferNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint           pipelineBindPoint, VkPipeline                    pipeline)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_update_pipeline_indirect_buffer_nv(&cmd_buffer->cmd_queue,
                                           pipelineBindPoint, pipeline);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdUpdatePipelineIndirectBufferNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint           pipelineBindPoint, VkPipeline                    pipeline)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdUpdatePipelineIndirectBufferNV(commandBuffer, pipelineBindPoint, pipeline);
       } else {
          vk_cmd_enqueue_CmdUpdatePipelineIndirectBufferNV(commandBuffer, pipelineBindPoint, pipeline);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_buffer(&cmd_buffer->cmd_queue,
                                           srcBuffer, dstBuffer, regionCount, pRegions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
       } else {
          vk_cmd_enqueue_CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_image(&cmd_buffer->cmd_queue,
                                           srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
       } else {
          vk_cmd_enqueue_CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_blit_image(&cmd_buffer->cmd_queue,
                                           srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
       } else {
          vk_cmd_enqueue_CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_buffer_to_image(&cmd_buffer->cmd_queue,
                                           srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
       } else {
          vk_cmd_enqueue_CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_image_to_buffer(&cmd_buffer->cmd_queue,
                                           srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
       } else {
          vk_cmd_enqueue_CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyMemoryIndirectNV(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_memory_indirect_nv(&cmd_buffer->cmd_queue,
                                           copyBufferAddress, copyCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyMemoryIndirectNV(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyMemoryIndirectNV(commandBuffer, copyBufferAddress, copyCount, stride);
       } else {
          vk_cmd_enqueue_CmdCopyMemoryIndirectNV(commandBuffer, copyBufferAddress, copyCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyMemoryToImageIndirectNV(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride, VkImage dstImage, VkImageLayout dstImageLayout, const VkImageSubresourceLayers* pImageSubresources)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_memory_to_image_indirect_nv(&cmd_buffer->cmd_queue,
                                           copyBufferAddress, copyCount, stride, dstImage, dstImageLayout, pImageSubresources);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyMemoryToImageIndirectNV(VkCommandBuffer commandBuffer, VkDeviceAddress copyBufferAddress, uint32_t copyCount, uint32_t stride, VkImage dstImage, VkImageLayout dstImageLayout, const VkImageSubresourceLayers* pImageSubresources)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyMemoryToImageIndirectNV(commandBuffer, copyBufferAddress, copyCount, stride, dstImage, dstImageLayout, pImageSubresources);
       } else {
          vk_cmd_enqueue_CmdCopyMemoryToImageIndirectNV(commandBuffer, copyBufferAddress, copyCount, stride, dstImage, dstImageLayout, pImageSubresources);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_update_buffer(&cmd_buffer->cmd_queue,
                                           dstBuffer, dstOffset, dataSize, pData);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
       } else {
          vk_cmd_enqueue_CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_fill_buffer(&cmd_buffer->cmd_queue,
                                           dstBuffer, dstOffset, size, data);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
       } else {
          vk_cmd_enqueue_CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_clear_color_image(&cmd_buffer->cmd_queue,
                                           image, imageLayout, pColor, rangeCount, pRanges);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
       } else {
          vk_cmd_enqueue_CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_clear_depth_stencil_image(&cmd_buffer->cmd_queue,
                                           image, imageLayout, pDepthStencil, rangeCount, pRanges);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
       } else {
          vk_cmd_enqueue_CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_clear_attachments(&cmd_buffer->cmd_queue,
                                           attachmentCount, pAttachments, rectCount, pRects);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
       } else {
          vk_cmd_enqueue_CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_resolve_image(&cmd_buffer->cmd_queue,
                                           srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
       } else {
          vk_cmd_enqueue_CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_event(&cmd_buffer->cmd_queue,
                                           event, stageMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetEvent(commandBuffer, event, stageMask);
       } else {
          vk_cmd_enqueue_CmdSetEvent(commandBuffer, event, stageMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_reset_event(&cmd_buffer->cmd_queue,
                                           event, stageMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdResetEvent(commandBuffer, event, stageMask);
       } else {
          vk_cmd_enqueue_CmdResetEvent(commandBuffer, event, stageMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_wait_events(&cmd_buffer->cmd_queue,
                                           eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
       } else {
          vk_cmd_enqueue_CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_pipeline_barrier(&cmd_buffer->cmd_queue,
                                           srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
       } else {
          vk_cmd_enqueue_CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_query(&cmd_buffer->cmd_queue,
                                           queryPool, query, flags);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginQuery(commandBuffer, queryPool, query, flags);
       } else {
          vk_cmd_enqueue_CmdBeginQuery(commandBuffer, queryPool, query, flags);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_query(&cmd_buffer->cmd_queue,
                                           queryPool, query);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndQuery(commandBuffer, queryPool, query);
       } else {
          vk_cmd_enqueue_CmdEndQuery(commandBuffer, queryPool, query);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_conditional_rendering_ext(&cmd_buffer->cmd_queue,
                                           pConditionalRenderingBegin);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
       } else {
          vk_cmd_enqueue_CmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_conditional_rendering_ext(&cmd_buffer->cmd_queue);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndConditionalRenderingEXT(commandBuffer);
       } else {
          vk_cmd_enqueue_CmdEndConditionalRenderingEXT(commandBuffer);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_reset_query_pool(&cmd_buffer->cmd_queue,
                                           queryPool, firstQuery, queryCount);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
       } else {
          vk_cmd_enqueue_CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_timestamp(&cmd_buffer->cmd_queue,
                                           pipelineStage, queryPool, query);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
       } else {
          vk_cmd_enqueue_CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_query_pool_results(&cmd_buffer->cmd_queue,
                                           queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
       } else {
          vk_cmd_enqueue_CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_push_constants(&cmd_buffer->cmd_queue,
                                           layout, stageFlags, offset, size, pValues);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
       } else {
          vk_cmd_enqueue_CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_render_pass(&cmd_buffer->cmd_queue,
                                           pRenderPassBegin, contents);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
       } else {
          vk_cmd_enqueue_CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_next_subpass(&cmd_buffer->cmd_queue,
                                           contents);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdNextSubpass(commandBuffer, contents);
       } else {
          vk_cmd_enqueue_CmdNextSubpass(commandBuffer, contents);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndRenderPass(VkCommandBuffer commandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_render_pass(&cmd_buffer->cmd_queue);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndRenderPass(VkCommandBuffer commandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndRenderPass(commandBuffer);
       } else {
          vk_cmd_enqueue_CmdEndRenderPass(commandBuffer);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_execute_commands(&cmd_buffer->cmd_queue,
                                           commandBufferCount, pCommandBuffers);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
       } else {
          vk_cmd_enqueue_CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_debug_marker_begin_ext(&cmd_buffer->cmd_queue,
                                           pMarkerInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
       } else {
          vk_cmd_enqueue_CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_debug_marker_end_ext(&cmd_buffer->cmd_queue);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDebugMarkerEndEXT(commandBuffer);
       } else {
          vk_cmd_enqueue_CmdDebugMarkerEndEXT(commandBuffer);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_debug_marker_insert_ext(&cmd_buffer->cmd_queue,
                                           pMarkerInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
       } else {
          vk_cmd_enqueue_CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_execute_generated_commands_nv(&cmd_buffer->cmd_queue,
                                           isPreprocessed, pGeneratedCommandsInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo);
       } else {
          vk_cmd_enqueue_CmdExecuteGeneratedCommandsNV(commandBuffer, isPreprocessed, pGeneratedCommandsInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdPreprocessGeneratedCommandsNV(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_preprocess_generated_commands_nv(&cmd_buffer->cmd_queue,
                                           pGeneratedCommandsInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPreprocessGeneratedCommandsNV(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo);
       } else {
          vk_cmd_enqueue_CmdPreprocessGeneratedCommandsNV(commandBuffer, pGeneratedCommandsInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindPipelineShaderGroupNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_pipeline_shader_group_nv(&cmd_buffer->cmd_queue,
                                           pipelineBindPoint, pipeline, groupIndex);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindPipelineShaderGroupNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex);
       } else {
          vk_cmd_enqueue_CmdBindPipelineShaderGroupNV(commandBuffer, pipelineBindPoint, pipeline, groupIndex);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdExecuteGeneratedCommandsEXT(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_execute_generated_commands_ext(&cmd_buffer->cmd_queue,
                                           isPreprocessed, pGeneratedCommandsInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdExecuteGeneratedCommandsEXT(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdExecuteGeneratedCommandsEXT(commandBuffer, isPreprocessed, pGeneratedCommandsInfo);
       } else {
          vk_cmd_enqueue_CmdExecuteGeneratedCommandsEXT(commandBuffer, isPreprocessed, pGeneratedCommandsInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdPreprocessGeneratedCommandsEXT(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_preprocess_generated_commands_ext(&cmd_buffer->cmd_queue,
                                           pGeneratedCommandsInfo, stateCommandBuffer);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPreprocessGeneratedCommandsEXT(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoEXT* pGeneratedCommandsInfo, VkCommandBuffer stateCommandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPreprocessGeneratedCommandsEXT(commandBuffer, pGeneratedCommandsInfo, stateCommandBuffer);
       } else {
          vk_cmd_enqueue_CmdPreprocessGeneratedCommandsEXT(commandBuffer, pGeneratedCommandsInfo, stateCommandBuffer);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdPushDescriptorSet() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPushDescriptorSet(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
       } else {
          vk_cmd_enqueue_CmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_device_mask(&cmd_buffer->cmd_queue,
                                           deviceMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDeviceMask(commandBuffer, deviceMask);
       } else {
          vk_cmd_enqueue_CmdSetDeviceMask(commandBuffer, deviceMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_dispatch_base(&cmd_buffer->cmd_queue,
                                           baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
       } else {
          vk_cmd_enqueue_CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdPushDescriptorSetWithTemplate() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPushDescriptorSetWithTemplate(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
       } else {
          vk_cmd_enqueue_CmdPushDescriptorSetWithTemplate(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetViewportWScalingNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_viewport_wscaling_nv(&cmd_buffer->cmd_queue,
                                           firstViewport, viewportCount, pViewportWScalings);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetViewportWScalingNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
       } else {
          vk_cmd_enqueue_CmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_discard_rectangle_ext(&cmd_buffer->cmd_queue,
                                           firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
       } else {
          vk_cmd_enqueue_CmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDiscardRectangleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_discard_rectangle_enable_ext(&cmd_buffer->cmd_queue,
                                           discardRectangleEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDiscardRectangleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 discardRectangleEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable);
       } else {
          vk_cmd_enqueue_CmdSetDiscardRectangleEnableEXT(commandBuffer, discardRectangleEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDiscardRectangleModeEXT(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_discard_rectangle_mode_ext(&cmd_buffer->cmd_queue,
                                           discardRectangleMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDiscardRectangleModeEXT(VkCommandBuffer commandBuffer, VkDiscardRectangleModeEXT discardRectangleMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode);
       } else {
          vk_cmd_enqueue_CmdSetDiscardRectangleModeEXT(commandBuffer, discardRectangleMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_sample_locations_ext(&cmd_buffer->cmd_queue,
                                           pSampleLocationsInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
       } else {
          vk_cmd_enqueue_CmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_debug_utils_label_ext(&cmd_buffer->cmd_queue,
                                           pLabelInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
       } else {
          vk_cmd_enqueue_CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_debug_utils_label_ext(&cmd_buffer->cmd_queue);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndDebugUtilsLabelEXT(commandBuffer);
       } else {
          vk_cmd_enqueue_CmdEndDebugUtilsLabelEXT(commandBuffer);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_insert_debug_utils_label_ext(&cmd_buffer->cmd_queue,
                                           pLabelInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
       } else {
          vk_cmd_enqueue_CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteBufferMarkerAMD(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_buffer_marker_amd(&cmd_buffer->cmd_queue,
                                           pipelineStage, dstBuffer, dstOffset, marker);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteBufferMarkerAMD(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
       } else {
          vk_cmd_enqueue_CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo*      pRenderPassBegin, const VkSubpassBeginInfo*      pSubpassBeginInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_render_pass2(&cmd_buffer->cmd_queue,
                                           pRenderPassBegin, pSubpassBeginInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo*      pRenderPassBegin, const VkSubpassBeginInfo*      pSubpassBeginInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
       } else {
          vk_cmd_enqueue_CmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo*      pSubpassBeginInfo, const VkSubpassEndInfo*        pSubpassEndInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_next_subpass2(&cmd_buffer->cmd_queue,
                                           pSubpassBeginInfo, pSubpassEndInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo*      pSubpassBeginInfo, const VkSubpassEndInfo*        pSubpassEndInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
       } else {
          vk_cmd_enqueue_CmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo*        pSubpassEndInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_render_pass2(&cmd_buffer->cmd_queue,
                                           pSubpassEndInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfo*        pSubpassEndInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndRenderPass2(commandBuffer, pSubpassEndInfo);
       } else {
          vk_cmd_enqueue_CmdEndRenderPass2(commandBuffer, pSubpassEndInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_indirect_count(&cmd_buffer->cmd_queue,
                                           buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_indexed_indirect_count(&cmd_buffer->cmd_queue,
                                           buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCheckpointNV(VkCommandBuffer commandBuffer, const void* pCheckpointMarker)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_checkpoint_nv(&cmd_buffer->cmd_queue,
                                           pCheckpointMarker);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCheckpointNV(VkCommandBuffer commandBuffer, const void* pCheckpointMarker)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
       } else {
          vk_cmd_enqueue_CmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_transform_feedback_buffers_ext(&cmd_buffer->cmd_queue,
                                           firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
       } else {
          vk_cmd_enqueue_CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_transform_feedback_ext(&cmd_buffer->cmd_queue,
                                           firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
       } else {
          vk_cmd_enqueue_CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_transform_feedback_ext(&cmd_buffer->cmd_queue,
                                           firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
       } else {
          vk_cmd_enqueue_CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_query_indexed_ext(&cmd_buffer->cmd_queue,
                                           queryPool, query, flags, index);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
       } else {
          vk_cmd_enqueue_CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_query_indexed_ext(&cmd_buffer->cmd_queue,
                                           queryPool, query, index);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
       } else {
          vk_cmd_enqueue_CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_indirect_byte_count_ext(&cmd_buffer->cmd_queue,
                                           instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
       } else {
          vk_cmd_enqueue_CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetExclusiveScissorNV(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_exclusive_scissor_nv(&cmd_buffer->cmd_queue,
                                           firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetExclusiveScissorNV(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
       } else {
          vk_cmd_enqueue_CmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetExclusiveScissorEnableNV(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkBool32* pExclusiveScissorEnables)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_exclusive_scissor_enable_nv(&cmd_buffer->cmd_queue,
                                           firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetExclusiveScissorEnableNV(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkBool32* pExclusiveScissorEnables)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetExclusiveScissorEnableNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables);
       } else {
          vk_cmd_enqueue_CmdSetExclusiveScissorEnableNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissorEnables);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindShadingRateImageNV(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_shading_rate_image_nv(&cmd_buffer->cmd_queue,
                                           imageView, imageLayout);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindShadingRateImageNV(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
       } else {
          vk_cmd_enqueue_CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetViewportShadingRatePaletteNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_viewport_shading_rate_palette_nv(&cmd_buffer->cmd_queue,
                                           firstViewport, viewportCount, pShadingRatePalettes);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetViewportShadingRatePaletteNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
       } else {
          vk_cmd_enqueue_CmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoarseSampleOrderNV(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coarse_sample_order_nv(&cmd_buffer->cmd_queue,
                                           sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoarseSampleOrderNV(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
       } else {
          vk_cmd_enqueue_CmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_mesh_tasks_nv(&cmd_buffer->cmd_queue,
                                           taskCount, firstTask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
       } else {
          vk_cmd_enqueue_CmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_mesh_tasks_indirect_nv(&cmd_buffer->cmd_queue,
                                           buffer, offset, drawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_mesh_tasks_indirect_count_nv(&cmd_buffer->cmd_queue,
                                           buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawMeshTasksEXT(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_mesh_tasks_ext(&cmd_buffer->cmd_queue,
                                           groupCountX, groupCountY, groupCountZ);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMeshTasksEXT(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMeshTasksEXT(commandBuffer, groupCountX, groupCountY, groupCountZ);
       } else {
          vk_cmd_enqueue_CmdDrawMeshTasksEXT(commandBuffer, groupCountX, groupCountY, groupCountZ);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawMeshTasksIndirectEXT(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_mesh_tasks_indirect_ext(&cmd_buffer->cmd_queue,
                                           buffer, offset, drawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMeshTasksIndirectEXT(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMeshTasksIndirectEXT(commandBuffer, buffer, offset, drawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawMeshTasksIndirectEXT(commandBuffer, buffer, offset, drawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDrawMeshTasksIndirectCountEXT(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_draw_mesh_tasks_indirect_count_ext(&cmd_buffer->cmd_queue,
                                           buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDrawMeshTasksIndirectCountEXT(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDrawMeshTasksIndirectCountEXT(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       } else {
          vk_cmd_enqueue_CmdDrawMeshTasksIndirectCountEXT(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindInvocationMaskHUAWEI(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_invocation_mask_huawei(&cmd_buffer->cmd_queue,
                                           imageView, imageLayout);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindInvocationMaskHUAWEI(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout);
       } else {
          vk_cmd_enqueue_CmdBindInvocationMaskHUAWEI(commandBuffer, imageView, imageLayout);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyAccelerationStructureNV(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_acceleration_structure_nv(&cmd_buffer->cmd_queue,
                                           dst, src, mode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyAccelerationStructureNV(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
       } else {
          vk_cmd_enqueue_CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyAccelerationStructureKHR(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_acceleration_structure_khr(&cmd_buffer->cmd_queue,
                                           pInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyAccelerationStructureKHR(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyAccelerationStructureKHR(commandBuffer, pInfo);
       } else {
          vk_cmd_enqueue_CmdCopyAccelerationStructureKHR(commandBuffer, pInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyAccelerationStructureToMemoryKHR(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_acceleration_structure_to_memory_khr(&cmd_buffer->cmd_queue,
                                           pInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyAccelerationStructureToMemoryKHR(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyAccelerationStructureToMemoryKHR(commandBuffer, pInfo);
       } else {
          vk_cmd_enqueue_CmdCopyAccelerationStructureToMemoryKHR(commandBuffer, pInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyMemoryToAccelerationStructureKHR(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_memory_to_acceleration_structure_khr(&cmd_buffer->cmd_queue,
                                           pInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyMemoryToAccelerationStructureKHR(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyMemoryToAccelerationStructureKHR(commandBuffer, pInfo);
       } else {
          vk_cmd_enqueue_CmdCopyMemoryToAccelerationStructureKHR(commandBuffer, pInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteAccelerationStructuresPropertiesKHR(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_acceleration_structures_properties_khr(&cmd_buffer->cmd_queue,
                                           accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteAccelerationStructuresPropertiesKHR(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteAccelerationStructuresPropertiesKHR(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
       } else {
          vk_cmd_enqueue_CmdWriteAccelerationStructuresPropertiesKHR(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteAccelerationStructuresPropertiesNV(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_acceleration_structures_properties_nv(&cmd_buffer->cmd_queue,
                                           accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteAccelerationStructuresPropertiesNV(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
       } else {
          vk_cmd_enqueue_CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_build_acceleration_structure_nv(&cmd_buffer->cmd_queue,
                                           pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
       } else {
          vk_cmd_enqueue_CmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdTraceRaysKHR(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_trace_rays_khr(&cmd_buffer->cmd_queue,
                                           pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdTraceRaysKHR(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdTraceRaysKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth);
       } else {
          vk_cmd_enqueue_CmdTraceRaysKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_trace_rays_nv(&cmd_buffer->cmd_queue,
                                           raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
       } else {
          vk_cmd_enqueue_CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_trace_rays_indirect_khr(&cmd_buffer->cmd_queue,
                                           pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdTraceRaysIndirectKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress);
       } else {
          vk_cmd_enqueue_CmdTraceRaysIndirectKHR(commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, indirectDeviceAddress);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdTraceRaysIndirect2KHR(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_trace_rays_indirect2_khr(&cmd_buffer->cmd_queue,
                                           indirectDeviceAddress);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdTraceRaysIndirect2KHR(VkCommandBuffer commandBuffer, VkDeviceAddress indirectDeviceAddress)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress);
       } else {
          vk_cmd_enqueue_CmdTraceRaysIndirect2KHR(commandBuffer, indirectDeviceAddress);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRayTracingPipelineStackSizeKHR(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_ray_tracing_pipeline_stack_size_khr(&cmd_buffer->cmd_queue,
                                           pipelineStackSize);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRayTracingPipelineStackSizeKHR(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRayTracingPipelineStackSizeKHR(commandBuffer, pipelineStackSize);
       } else {
          vk_cmd_enqueue_CmdSetRayTracingPipelineStackSizeKHR(commandBuffer, pipelineStackSize);
       }
    }
    /* TODO: Generate vk_cmd_enqueue_CmdSetPerformanceMarkerINTEL() */
    /* TODO: Generate vk_cmd_enqueue_CmdSetPerformanceStreamMarkerINTEL() */
    /* TODO: Generate vk_cmd_enqueue_CmdSetPerformanceOverrideINTEL() */
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_line_stipple(&cmd_buffer->cmd_queue,
                                           lineStippleFactor, lineStipplePattern);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern);
       } else {
          vk_cmd_enqueue_CmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdBuildAccelerationStructuresKHR() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBuildAccelerationStructuresKHR(VkCommandBuffer                                    commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBuildAccelerationStructuresKHR(commandBuffer, infoCount, pInfos, ppBuildRangeInfos);
       } else {
          vk_cmd_enqueue_CmdBuildAccelerationStructuresKHR(commandBuffer, infoCount, pInfos, ppBuildRangeInfos);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBuildAccelerationStructuresIndirectKHR(VkCommandBuffer                  commandBuffer, uint32_t                                           infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress*             pIndirectDeviceAddresses, const uint32_t*                    pIndirectStrides, const uint32_t* const*             ppMaxPrimitiveCounts)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_build_acceleration_structures_indirect_khr(&cmd_buffer->cmd_queue,
                                           infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBuildAccelerationStructuresIndirectKHR(VkCommandBuffer                  commandBuffer, uint32_t                                           infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress*             pIndirectDeviceAddresses, const uint32_t*                    pIndirectStrides, const uint32_t* const*             ppMaxPrimitiveCounts)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBuildAccelerationStructuresIndirectKHR(commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts);
       } else {
          vk_cmd_enqueue_CmdBuildAccelerationStructuresIndirectKHR(commandBuffer, infoCount, pInfos, pIndirectDeviceAddresses, pIndirectStrides, ppMaxPrimitiveCounts);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_cull_mode(&cmd_buffer->cmd_queue,
                                           cullMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCullMode(commandBuffer, cullMode);
       } else {
          vk_cmd_enqueue_CmdSetCullMode(commandBuffer, cullMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_front_face(&cmd_buffer->cmd_queue,
                                           frontFace);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetFrontFace(commandBuffer, frontFace);
       } else {
          vk_cmd_enqueue_CmdSetFrontFace(commandBuffer, frontFace);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_primitive_topology(&cmd_buffer->cmd_queue,
                                           primitiveTopology);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetPrimitiveTopology(commandBuffer, primitiveTopology);
       } else {
          vk_cmd_enqueue_CmdSetPrimitiveTopology(commandBuffer, primitiveTopology);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_viewport_with_count(&cmd_buffer->cmd_queue,
                                           viewportCount, pViewports);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetViewportWithCount(commandBuffer, viewportCount, pViewports);
       } else {
          vk_cmd_enqueue_CmdSetViewportWithCount(commandBuffer, viewportCount, pViewports);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_scissor_with_count(&cmd_buffer->cmd_queue,
                                           scissorCount, pScissors);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetScissorWithCount(commandBuffer, scissorCount, pScissors);
       } else {
          vk_cmd_enqueue_CmdSetScissorWithCount(commandBuffer, scissorCount, pScissors);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_index_buffer2(&cmd_buffer->cmd_queue,
                                           buffer, offset, size, indexType);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType);
       } else {
          vk_cmd_enqueue_CmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_vertex_buffers2(&cmd_buffer->cmd_queue,
                                           firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
       } else {
          vk_cmd_enqueue_CmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_test_enable(&cmd_buffer->cmd_queue,
                                           depthTestEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthTestEnable(commandBuffer, depthTestEnable);
       } else {
          vk_cmd_enqueue_CmdSetDepthTestEnable(commandBuffer, depthTestEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_write_enable(&cmd_buffer->cmd_queue,
                                           depthWriteEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthWriteEnable(commandBuffer, depthWriteEnable);
       } else {
          vk_cmd_enqueue_CmdSetDepthWriteEnable(commandBuffer, depthWriteEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_compare_op(&cmd_buffer->cmd_queue,
                                           depthCompareOp);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthCompareOp(commandBuffer, depthCompareOp);
       } else {
          vk_cmd_enqueue_CmdSetDepthCompareOp(commandBuffer, depthCompareOp);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_bounds_test_enable(&cmd_buffer->cmd_queue,
                                           depthBoundsTestEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable);
       } else {
          vk_cmd_enqueue_CmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_stencil_test_enable(&cmd_buffer->cmd_queue,
                                           stencilTestEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetStencilTestEnable(commandBuffer, stencilTestEnable);
       } else {
          vk_cmd_enqueue_CmdSetStencilTestEnable(commandBuffer, stencilTestEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_stencil_op(&cmd_buffer->cmd_queue,
                                           faceMask, failOp, passOp, depthFailOp, compareOp);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp);
       } else {
          vk_cmd_enqueue_CmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_patch_control_points_ext(&cmd_buffer->cmd_queue,
                                           patchControlPoints);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer, uint32_t patchControlPoints)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints);
       } else {
          vk_cmd_enqueue_CmdSetPatchControlPointsEXT(commandBuffer, patchControlPoints);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_rasterizer_discard_enable(&cmd_buffer->cmd_queue,
                                           rasterizerDiscardEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable);
       } else {
          vk_cmd_enqueue_CmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_bias_enable(&cmd_buffer->cmd_queue,
                                           depthBiasEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthBiasEnable(commandBuffer, depthBiasEnable);
       } else {
          vk_cmd_enqueue_CmdSetDepthBiasEnable(commandBuffer, depthBiasEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_logic_op_ext(&cmd_buffer->cmd_queue,
                                           logicOp);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetLogicOpEXT(commandBuffer, logicOp);
       } else {
          vk_cmd_enqueue_CmdSetLogicOpEXT(commandBuffer, logicOp);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_primitive_restart_enable(&cmd_buffer->cmd_queue,
                                           primitiveRestartEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable);
       } else {
          vk_cmd_enqueue_CmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_tessellation_domain_origin_ext(&cmd_buffer->cmd_queue,
                                           domainOrigin);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetTessellationDomainOriginEXT(VkCommandBuffer commandBuffer, VkTessellationDomainOrigin domainOrigin)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin);
       } else {
          vk_cmd_enqueue_CmdSetTessellationDomainOriginEXT(commandBuffer, domainOrigin);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_clamp_enable_ext(&cmd_buffer->cmd_queue,
                                           depthClampEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthClampEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClampEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable);
       } else {
          vk_cmd_enqueue_CmdSetDepthClampEnableEXT(commandBuffer, depthClampEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetPolygonModeEXT(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_polygon_mode_ext(&cmd_buffer->cmd_queue,
                                           polygonMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetPolygonModeEXT(VkCommandBuffer commandBuffer, VkPolygonMode polygonMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetPolygonModeEXT(commandBuffer, polygonMode);
       } else {
          vk_cmd_enqueue_CmdSetPolygonModeEXT(commandBuffer, polygonMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits  rasterizationSamples)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_rasterization_samples_ext(&cmd_buffer->cmd_queue,
                                           rasterizationSamples);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRasterizationSamplesEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits  rasterizationSamples)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples);
       } else {
          vk_cmd_enqueue_CmdSetRasterizationSamplesEXT(commandBuffer, rasterizationSamples);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits  samples, const VkSampleMask*    pSampleMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_sample_mask_ext(&cmd_buffer->cmd_queue,
                                           samples, pSampleMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetSampleMaskEXT(VkCommandBuffer commandBuffer, VkSampleCountFlagBits  samples, const VkSampleMask*    pSampleMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask);
       } else {
          vk_cmd_enqueue_CmdSetSampleMaskEXT(commandBuffer, samples, pSampleMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_alpha_to_coverage_enable_ext(&cmd_buffer->cmd_queue,
                                           alphaToCoverageEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetAlphaToCoverageEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToCoverageEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable);
       } else {
          vk_cmd_enqueue_CmdSetAlphaToCoverageEnableEXT(commandBuffer, alphaToCoverageEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_alpha_to_one_enable_ext(&cmd_buffer->cmd_queue,
                                           alphaToOneEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetAlphaToOneEnableEXT(VkCommandBuffer commandBuffer, VkBool32 alphaToOneEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable);
       } else {
          vk_cmd_enqueue_CmdSetAlphaToOneEnableEXT(commandBuffer, alphaToOneEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetLogicOpEnableEXT(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_logic_op_enable_ext(&cmd_buffer->cmd_queue,
                                           logicOpEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetLogicOpEnableEXT(VkCommandBuffer commandBuffer, VkBool32 logicOpEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable);
       } else {
          vk_cmd_enqueue_CmdSetLogicOpEnableEXT(commandBuffer, logicOpEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetColorBlendEnableEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_color_blend_enable_ext(&cmd_buffer->cmd_queue,
                                           firstAttachment, attachmentCount, pColorBlendEnables);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetColorBlendEnableEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkBool32* pColorBlendEnables)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables);
       } else {
          vk_cmd_enqueue_CmdSetColorBlendEnableEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEnables);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetColorBlendEquationEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_color_blend_equation_ext(&cmd_buffer->cmd_queue,
                                           firstAttachment, attachmentCount, pColorBlendEquations);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetColorBlendEquationEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendEquationEXT* pColorBlendEquations)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations);
       } else {
          vk_cmd_enqueue_CmdSetColorBlendEquationEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendEquations);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetColorWriteMaskEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_color_write_mask_ext(&cmd_buffer->cmd_queue,
                                           firstAttachment, attachmentCount, pColorWriteMasks);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetColorWriteMaskEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorComponentFlags* pColorWriteMasks)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks);
       } else {
          vk_cmd_enqueue_CmdSetColorWriteMaskEXT(commandBuffer, firstAttachment, attachmentCount, pColorWriteMasks);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer, uint32_t rasterizationStream)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_rasterization_stream_ext(&cmd_buffer->cmd_queue,
                                           rasterizationStream);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRasterizationStreamEXT(VkCommandBuffer commandBuffer, uint32_t rasterizationStream)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream);
       } else {
          vk_cmd_enqueue_CmdSetRasterizationStreamEXT(commandBuffer, rasterizationStream);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetConservativeRasterizationModeEXT(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_conservative_rasterization_mode_ext(&cmd_buffer->cmd_queue,
                                           conservativeRasterizationMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetConservativeRasterizationModeEXT(VkCommandBuffer commandBuffer, VkConservativeRasterizationModeEXT conservativeRasterizationMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode);
       } else {
          vk_cmd_enqueue_CmdSetConservativeRasterizationModeEXT(commandBuffer, conservativeRasterizationMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetExtraPrimitiveOverestimationSizeEXT(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_extra_primitive_overestimation_size_ext(&cmd_buffer->cmd_queue,
                                           extraPrimitiveOverestimationSize);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetExtraPrimitiveOverestimationSizeEXT(VkCommandBuffer commandBuffer, float extraPrimitiveOverestimationSize)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize);
       } else {
          vk_cmd_enqueue_CmdSetExtraPrimitiveOverestimationSizeEXT(commandBuffer, extraPrimitiveOverestimationSize);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthClipEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_clip_enable_ext(&cmd_buffer->cmd_queue,
                                           depthClipEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthClipEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthClipEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable);
       } else {
          vk_cmd_enqueue_CmdSetDepthClipEnableEXT(commandBuffer, depthClipEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetSampleLocationsEnableEXT(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_sample_locations_enable_ext(&cmd_buffer->cmd_queue,
                                           sampleLocationsEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetSampleLocationsEnableEXT(VkCommandBuffer commandBuffer, VkBool32 sampleLocationsEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable);
       } else {
          vk_cmd_enqueue_CmdSetSampleLocationsEnableEXT(commandBuffer, sampleLocationsEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetColorBlendAdvancedEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_color_blend_advanced_ext(&cmd_buffer->cmd_queue,
                                           firstAttachment, attachmentCount, pColorBlendAdvanced);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetColorBlendAdvancedEXT(VkCommandBuffer commandBuffer, uint32_t firstAttachment, uint32_t attachmentCount, const VkColorBlendAdvancedEXT* pColorBlendAdvanced)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced);
       } else {
          vk_cmd_enqueue_CmdSetColorBlendAdvancedEXT(commandBuffer, firstAttachment, attachmentCount, pColorBlendAdvanced);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_provoking_vertex_mode_ext(&cmd_buffer->cmd_queue,
                                           provokingVertexMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetProvokingVertexModeEXT(VkCommandBuffer commandBuffer, VkProvokingVertexModeEXT provokingVertexMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode);
       } else {
          vk_cmd_enqueue_CmdSetProvokingVertexModeEXT(commandBuffer, provokingVertexMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_line_rasterization_mode_ext(&cmd_buffer->cmd_queue,
                                           lineRasterizationMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetLineRasterizationModeEXT(VkCommandBuffer commandBuffer, VkLineRasterizationModeEXT lineRasterizationMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode);
       } else {
          vk_cmd_enqueue_CmdSetLineRasterizationModeEXT(commandBuffer, lineRasterizationMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetLineStippleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_line_stipple_enable_ext(&cmd_buffer->cmd_queue,
                                           stippledLineEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetLineStippleEnableEXT(VkCommandBuffer commandBuffer, VkBool32 stippledLineEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable);
       } else {
          vk_cmd_enqueue_CmdSetLineStippleEnableEXT(commandBuffer, stippledLineEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_clip_negative_one_to_one_ext(&cmd_buffer->cmd_queue,
                                           negativeOneToOne);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthClipNegativeOneToOneEXT(VkCommandBuffer commandBuffer, VkBool32 negativeOneToOne)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne);
       } else {
          vk_cmd_enqueue_CmdSetDepthClipNegativeOneToOneEXT(commandBuffer, negativeOneToOne);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetViewportWScalingEnableNV(VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_viewport_wscaling_enable_nv(&cmd_buffer->cmd_queue,
                                           viewportWScalingEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetViewportWScalingEnableNV(VkCommandBuffer commandBuffer, VkBool32 viewportWScalingEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetViewportWScalingEnableNV(commandBuffer, viewportWScalingEnable);
       } else {
          vk_cmd_enqueue_CmdSetViewportWScalingEnableNV(commandBuffer, viewportWScalingEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetViewportSwizzleNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportSwizzleNV* pViewportSwizzles)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_viewport_swizzle_nv(&cmd_buffer->cmd_queue,
                                           firstViewport, viewportCount, pViewportSwizzles);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetViewportSwizzleNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportSwizzleNV* pViewportSwizzles)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetViewportSwizzleNV(commandBuffer, firstViewport, viewportCount, pViewportSwizzles);
       } else {
          vk_cmd_enqueue_CmdSetViewportSwizzleNV(commandBuffer, firstViewport, viewportCount, pViewportSwizzles);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoverageToColorEnableNV(VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coverage_to_color_enable_nv(&cmd_buffer->cmd_queue,
                                           coverageToColorEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoverageToColorEnableNV(VkCommandBuffer commandBuffer, VkBool32 coverageToColorEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoverageToColorEnableNV(commandBuffer, coverageToColorEnable);
       } else {
          vk_cmd_enqueue_CmdSetCoverageToColorEnableNV(commandBuffer, coverageToColorEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoverageToColorLocationNV(VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coverage_to_color_location_nv(&cmd_buffer->cmd_queue,
                                           coverageToColorLocation);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoverageToColorLocationNV(VkCommandBuffer commandBuffer, uint32_t coverageToColorLocation)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoverageToColorLocationNV(commandBuffer, coverageToColorLocation);
       } else {
          vk_cmd_enqueue_CmdSetCoverageToColorLocationNV(commandBuffer, coverageToColorLocation);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoverageModulationModeNV(VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coverage_modulation_mode_nv(&cmd_buffer->cmd_queue,
                                           coverageModulationMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoverageModulationModeNV(VkCommandBuffer commandBuffer, VkCoverageModulationModeNV coverageModulationMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoverageModulationModeNV(commandBuffer, coverageModulationMode);
       } else {
          vk_cmd_enqueue_CmdSetCoverageModulationModeNV(commandBuffer, coverageModulationMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoverageModulationTableEnableNV(VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coverage_modulation_table_enable_nv(&cmd_buffer->cmd_queue,
                                           coverageModulationTableEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoverageModulationTableEnableNV(VkCommandBuffer commandBuffer, VkBool32 coverageModulationTableEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoverageModulationTableEnableNV(commandBuffer, coverageModulationTableEnable);
       } else {
          vk_cmd_enqueue_CmdSetCoverageModulationTableEnableNV(commandBuffer, coverageModulationTableEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoverageModulationTableNV(VkCommandBuffer commandBuffer, uint32_t coverageModulationTableCount, const float* pCoverageModulationTable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coverage_modulation_table_nv(&cmd_buffer->cmd_queue,
                                           coverageModulationTableCount, pCoverageModulationTable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoverageModulationTableNV(VkCommandBuffer commandBuffer, uint32_t coverageModulationTableCount, const float* pCoverageModulationTable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoverageModulationTableNV(commandBuffer, coverageModulationTableCount, pCoverageModulationTable);
       } else {
          vk_cmd_enqueue_CmdSetCoverageModulationTableNV(commandBuffer, coverageModulationTableCount, pCoverageModulationTable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetShadingRateImageEnableNV(VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_shading_rate_image_enable_nv(&cmd_buffer->cmd_queue,
                                           shadingRateImageEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetShadingRateImageEnableNV(VkCommandBuffer commandBuffer, VkBool32 shadingRateImageEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetShadingRateImageEnableNV(commandBuffer, shadingRateImageEnable);
       } else {
          vk_cmd_enqueue_CmdSetShadingRateImageEnableNV(commandBuffer, shadingRateImageEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetCoverageReductionModeNV(VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_coverage_reduction_mode_nv(&cmd_buffer->cmd_queue,
                                           coverageReductionMode);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetCoverageReductionModeNV(VkCommandBuffer commandBuffer, VkCoverageReductionModeNV coverageReductionMode)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetCoverageReductionModeNV(commandBuffer, coverageReductionMode);
       } else {
          vk_cmd_enqueue_CmdSetCoverageReductionModeNV(commandBuffer, coverageReductionMode);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRepresentativeFragmentTestEnableNV(VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_representative_fragment_test_enable_nv(&cmd_buffer->cmd_queue,
                                           representativeFragmentTestEnable);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRepresentativeFragmentTestEnableNV(VkCommandBuffer commandBuffer, VkBool32 representativeFragmentTestEnable)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRepresentativeFragmentTestEnableNV(commandBuffer, representativeFragmentTestEnable);
       } else {
          vk_cmd_enqueue_CmdSetRepresentativeFragmentTestEnableNV(commandBuffer, representativeFragmentTestEnable);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_buffer2(&cmd_buffer->cmd_queue,
                                           pCopyBufferInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyBuffer2(commandBuffer, pCopyBufferInfo);
       } else {
          vk_cmd_enqueue_CmdCopyBuffer2(commandBuffer, pCopyBufferInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_image2(&cmd_buffer->cmd_queue,
                                           pCopyImageInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyImage2(commandBuffer, pCopyImageInfo);
       } else {
          vk_cmd_enqueue_CmdCopyImage2(commandBuffer, pCopyImageInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_blit_image2(&cmd_buffer->cmd_queue,
                                           pBlitImageInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBlitImage2(commandBuffer, pBlitImageInfo);
       } else {
          vk_cmd_enqueue_CmdBlitImage2(commandBuffer, pBlitImageInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_buffer_to_image2(&cmd_buffer->cmd_queue,
                                           pCopyBufferToImageInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo);
       } else {
          vk_cmd_enqueue_CmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_image_to_buffer2(&cmd_buffer->cmd_queue,
                                           pCopyImageToBufferInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo);
       } else {
          vk_cmd_enqueue_CmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_resolve_image2(&cmd_buffer->cmd_queue,
                                           pResolveImageInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdResolveImage2(commandBuffer, pResolveImageInfo);
       } else {
          vk_cmd_enqueue_CmdResolveImage2(commandBuffer, pResolveImageInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetFragmentShadingRateKHR(VkCommandBuffer           commandBuffer, const VkExtent2D*                           pFragmentSize, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2])
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_fragment_shading_rate_khr(&cmd_buffer->cmd_queue,
                                           pFragmentSize, combinerOps);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetFragmentShadingRateKHR(VkCommandBuffer           commandBuffer, const VkExtent2D*                           pFragmentSize, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2])
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps);
       } else {
          vk_cmd_enqueue_CmdSetFragmentShadingRateKHR(commandBuffer, pFragmentSize, combinerOps);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetFragmentShadingRateEnumNV(VkCommandBuffer           commandBuffer, VkFragmentShadingRateNV                     shadingRate, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2])
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_fragment_shading_rate_enum_nv(&cmd_buffer->cmd_queue,
                                           shadingRate, combinerOps);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetFragmentShadingRateEnumNV(VkCommandBuffer           commandBuffer, VkFragmentShadingRateNV                     shadingRate, const VkFragmentShadingRateCombinerOpKHR    combinerOps[2])
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps);
       } else {
          vk_cmd_enqueue_CmdSetFragmentShadingRateEnumNV(commandBuffer, shadingRate, combinerOps);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_vertex_input_ext(&cmd_buffer->cmd_queue,
                                           vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
       } else {
          vk_cmd_enqueue_CmdSetVertexInputEXT(commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetColorWriteEnableEXT(VkCommandBuffer       commandBuffer, uint32_t                                attachmentCount, const VkBool32*   pColorWriteEnables)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_color_write_enable_ext(&cmd_buffer->cmd_queue,
                                           attachmentCount, pColorWriteEnables);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetColorWriteEnableEXT(VkCommandBuffer       commandBuffer, uint32_t                                attachmentCount, const VkBool32*   pColorWriteEnables)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables);
       } else {
          vk_cmd_enqueue_CmdSetColorWriteEnableEXT(commandBuffer, attachmentCount, pColorWriteEnables);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetEvent2(VkCommandBuffer                   commandBuffer, VkEvent                                             event, const VkDependencyInfo*                             pDependencyInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_event2(&cmd_buffer->cmd_queue,
                                           event, pDependencyInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetEvent2(VkCommandBuffer                   commandBuffer, VkEvent                                             event, const VkDependencyInfo*                             pDependencyInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetEvent2(commandBuffer, event, pDependencyInfo);
       } else {
          vk_cmd_enqueue_CmdSetEvent2(commandBuffer, event, pDependencyInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdResetEvent2(VkCommandBuffer                   commandBuffer, VkEvent                                             event, VkPipelineStageFlags2               stageMask)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_reset_event2(&cmd_buffer->cmd_queue,
                                           event, stageMask);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdResetEvent2(VkCommandBuffer                   commandBuffer, VkEvent                                             event, VkPipelineStageFlags2               stageMask)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdResetEvent2(commandBuffer, event, stageMask);
       } else {
          vk_cmd_enqueue_CmdResetEvent2(commandBuffer, event, stageMask);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWaitEvents2(VkCommandBuffer                   commandBuffer, uint32_t                                            eventCount, const VkEvent*                     pEvents, const VkDependencyInfo*            pDependencyInfos)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_wait_events2(&cmd_buffer->cmd_queue,
                                           eventCount, pEvents, pDependencyInfos);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWaitEvents2(VkCommandBuffer                   commandBuffer, uint32_t                                            eventCount, const VkEvent*                     pEvents, const VkDependencyInfo*            pDependencyInfos)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos);
       } else {
          vk_cmd_enqueue_CmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdPipelineBarrier2(VkCommandBuffer                   commandBuffer, const VkDependencyInfo*                             pDependencyInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_pipeline_barrier2(&cmd_buffer->cmd_queue,
                                           pDependencyInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPipelineBarrier2(VkCommandBuffer                   commandBuffer, const VkDependencyInfo*                             pDependencyInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPipelineBarrier2(commandBuffer, pDependencyInfo);
       } else {
          vk_cmd_enqueue_CmdPipelineBarrier2(commandBuffer, pDependencyInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteTimestamp2(VkCommandBuffer                   commandBuffer, VkPipelineStageFlags2               stage, VkQueryPool                                         queryPool, uint32_t                                            query)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_timestamp2(&cmd_buffer->cmd_queue,
                                           stage, queryPool, query);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteTimestamp2(VkCommandBuffer                   commandBuffer, VkPipelineStageFlags2               stage, VkQueryPool                                         queryPool, uint32_t                                            query)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteTimestamp2(commandBuffer, stage, queryPool, query);
       } else {
          vk_cmd_enqueue_CmdWriteTimestamp2(commandBuffer, stage, queryPool, query);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteBufferMarker2AMD(VkCommandBuffer                   commandBuffer, VkPipelineStageFlags2               stage, VkBuffer                                            dstBuffer, VkDeviceSize                                        dstOffset, uint32_t                                            marker)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_buffer_marker2_amd(&cmd_buffer->cmd_queue,
                                           stage, dstBuffer, dstOffset, marker);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteBufferMarker2AMD(VkCommandBuffer                   commandBuffer, VkPipelineStageFlags2               stage, VkBuffer                                            dstBuffer, VkDeviceSize                                        dstOffset, uint32_t                                            marker)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker);
       } else {
          vk_cmd_enqueue_CmdWriteBufferMarker2AMD(commandBuffer, stage, dstBuffer, dstOffset, marker);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDecodeVideoKHR(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pDecodeInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_decode_video_khr(&cmd_buffer->cmd_queue,
                                           pDecodeInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDecodeVideoKHR(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pDecodeInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDecodeVideoKHR(commandBuffer, pDecodeInfo);
       } else {
          vk_cmd_enqueue_CmdDecodeVideoKHR(commandBuffer, pDecodeInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_video_coding_khr(&cmd_buffer->cmd_queue,
                                           pBeginInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginVideoCodingKHR(commandBuffer, pBeginInfo);
       } else {
          vk_cmd_enqueue_CmdBeginVideoCodingKHR(commandBuffer, pBeginInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdControlVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_control_video_coding_khr(&cmd_buffer->cmd_queue,
                                           pCodingControlInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdControlVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo);
       } else {
          vk_cmd_enqueue_CmdControlVideoCodingKHR(commandBuffer, pCodingControlInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_video_coding_khr(&cmd_buffer->cmd_queue,
                                           pEndCodingInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndVideoCodingKHR(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo);
       } else {
          vk_cmd_enqueue_CmdEndVideoCodingKHR(commandBuffer, pEndCodingInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEncodeVideoKHR(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_encode_video_khr(&cmd_buffer->cmd_queue,
                                           pEncodeInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEncodeVideoKHR(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEncodeVideoKHR(commandBuffer, pEncodeInfo);
       } else {
          vk_cmd_enqueue_CmdEncodeVideoKHR(commandBuffer, pEncodeInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDecompressMemoryNV(VkCommandBuffer commandBuffer, uint32_t decompressRegionCount, const VkDecompressMemoryRegionNV* pDecompressMemoryRegions)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_decompress_memory_nv(&cmd_buffer->cmd_queue,
                                           decompressRegionCount, pDecompressMemoryRegions);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDecompressMemoryNV(VkCommandBuffer commandBuffer, uint32_t decompressRegionCount, const VkDecompressMemoryRegionNV* pDecompressMemoryRegions)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDecompressMemoryNV(commandBuffer, decompressRegionCount, pDecompressMemoryRegions);
       } else {
          vk_cmd_enqueue_CmdDecompressMemoryNV(commandBuffer, decompressRegionCount, pDecompressMemoryRegions);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdDecompressMemoryIndirectCountNV(VkCommandBuffer commandBuffer, VkDeviceAddress indirectCommandsAddress, VkDeviceAddress indirectCommandsCountAddress, uint32_t stride)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_decompress_memory_indirect_count_nv(&cmd_buffer->cmd_queue,
                                           indirectCommandsAddress, indirectCommandsCountAddress, stride);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdDecompressMemoryIndirectCountNV(VkCommandBuffer commandBuffer, VkDeviceAddress indirectCommandsAddress, VkDeviceAddress indirectCommandsCountAddress, uint32_t stride)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdDecompressMemoryIndirectCountNV(commandBuffer, indirectCommandsAddress, indirectCommandsCountAddress, stride);
       } else {
          vk_cmd_enqueue_CmdDecompressMemoryIndirectCountNV(commandBuffer, indirectCommandsAddress, indirectCommandsCountAddress, stride);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCuLaunchKernelNVX(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX* pLaunchInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_cu_launch_kernel_nvx(&cmd_buffer->cmd_queue,
                                           pLaunchInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCuLaunchKernelNVX(VkCommandBuffer commandBuffer, const VkCuLaunchInfoNVX* pLaunchInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCuLaunchKernelNVX(commandBuffer, pLaunchInfo);
       } else {
          vk_cmd_enqueue_CmdCuLaunchKernelNVX(commandBuffer, pLaunchInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindDescriptorBuffersEXT(VkCommandBuffer commandBuffer, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT* pBindingInfos)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_descriptor_buffers_ext(&cmd_buffer->cmd_queue,
                                           bufferCount, pBindingInfos);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindDescriptorBuffersEXT(VkCommandBuffer commandBuffer, uint32_t bufferCount, const VkDescriptorBufferBindingInfoEXT* pBindingInfos)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindDescriptorBuffersEXT(commandBuffer, bufferCount, pBindingInfos);
       } else {
          vk_cmd_enqueue_CmdBindDescriptorBuffersEXT(commandBuffer, bufferCount, pBindingInfos);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDescriptorBufferOffsetsEXT(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const uint32_t* pBufferIndices, const VkDeviceSize* pOffsets)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_descriptor_buffer_offsets_ext(&cmd_buffer->cmd_queue,
                                           pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDescriptorBufferOffsetsEXT(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const uint32_t* pBufferIndices, const VkDeviceSize* pOffsets)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDescriptorBufferOffsetsEXT(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets);
       } else {
          vk_cmd_enqueue_CmdSetDescriptorBufferOffsetsEXT(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pBufferIndices, pOffsets);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindDescriptorBufferEmbeddedSamplersEXT(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_descriptor_buffer_embedded_samplers_ext(&cmd_buffer->cmd_queue,
                                           pipelineBindPoint, layout, set);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindDescriptorBufferEmbeddedSamplersEXT(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindDescriptorBufferEmbeddedSamplersEXT(commandBuffer, pipelineBindPoint, layout, set);
       } else {
          vk_cmd_enqueue_CmdBindDescriptorBufferEmbeddedSamplersEXT(commandBuffer, pipelineBindPoint, layout, set);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBeginRendering(VkCommandBuffer                   commandBuffer, const VkRenderingInfo*                              pRenderingInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_begin_rendering(&cmd_buffer->cmd_queue,
                                           pRenderingInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBeginRendering(VkCommandBuffer                   commandBuffer, const VkRenderingInfo*                              pRenderingInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBeginRendering(commandBuffer, pRenderingInfo);
       } else {
          vk_cmd_enqueue_CmdBeginRendering(commandBuffer, pRenderingInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdEndRendering(VkCommandBuffer                   commandBuffer)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_end_rendering(&cmd_buffer->cmd_queue);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdEndRendering(VkCommandBuffer                   commandBuffer)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdEndRendering(commandBuffer);
       } else {
          vk_cmd_enqueue_CmdEndRendering(commandBuffer);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBuildMicromapsEXT(VkCommandBuffer                                    commandBuffer, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_build_micromaps_ext(&cmd_buffer->cmd_queue,
                                           infoCount, pInfos);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBuildMicromapsEXT(VkCommandBuffer                                    commandBuffer, uint32_t infoCount, const VkMicromapBuildInfoEXT* pInfos)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBuildMicromapsEXT(commandBuffer, infoCount, pInfos);
       } else {
          vk_cmd_enqueue_CmdBuildMicromapsEXT(commandBuffer, infoCount, pInfos);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyMicromapEXT(VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT* pInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_micromap_ext(&cmd_buffer->cmd_queue,
                                           pInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyMicromapEXT(VkCommandBuffer commandBuffer, const VkCopyMicromapInfoEXT* pInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyMicromapEXT(commandBuffer, pInfo);
       } else {
          vk_cmd_enqueue_CmdCopyMicromapEXT(commandBuffer, pInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyMicromapToMemoryEXT(VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT* pInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_micromap_to_memory_ext(&cmd_buffer->cmd_queue,
                                           pInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyMicromapToMemoryEXT(VkCommandBuffer commandBuffer, const VkCopyMicromapToMemoryInfoEXT* pInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyMicromapToMemoryEXT(commandBuffer, pInfo);
       } else {
          vk_cmd_enqueue_CmdCopyMicromapToMemoryEXT(commandBuffer, pInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdCopyMemoryToMicromapEXT(VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT* pInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_copy_memory_to_micromap_ext(&cmd_buffer->cmd_queue,
                                           pInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdCopyMemoryToMicromapEXT(VkCommandBuffer commandBuffer, const VkCopyMemoryToMicromapInfoEXT* pInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdCopyMemoryToMicromapEXT(commandBuffer, pInfo);
       } else {
          vk_cmd_enqueue_CmdCopyMemoryToMicromapEXT(commandBuffer, pInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdWriteMicromapsPropertiesEXT(VkCommandBuffer commandBuffer, uint32_t micromapCount, const VkMicromapEXT* pMicromaps, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_write_micromaps_properties_ext(&cmd_buffer->cmd_queue,
                                           micromapCount, pMicromaps, queryType, queryPool, firstQuery);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdWriteMicromapsPropertiesEXT(VkCommandBuffer commandBuffer, uint32_t micromapCount, const VkMicromapEXT* pMicromaps, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdWriteMicromapsPropertiesEXT(commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery);
       } else {
          vk_cmd_enqueue_CmdWriteMicromapsPropertiesEXT(commandBuffer, micromapCount, pMicromaps, queryType, queryPool, firstQuery);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdOpticalFlowExecuteNV(VkCommandBuffer commandBuffer, VkOpticalFlowSessionNV session, const VkOpticalFlowExecuteInfoNV* pExecuteInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_optical_flow_execute_nv(&cmd_buffer->cmd_queue,
                                           session, pExecuteInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdOpticalFlowExecuteNV(VkCommandBuffer commandBuffer, VkOpticalFlowSessionNV session, const VkOpticalFlowExecuteInfoNV* pExecuteInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdOpticalFlowExecuteNV(commandBuffer, session, pExecuteInfo);
       } else {
          vk_cmd_enqueue_CmdOpticalFlowExecuteNV(commandBuffer, session, pExecuteInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthBias2EXT(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT*         pDepthBiasInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_bias2_ext(&cmd_buffer->cmd_queue,
                                           pDepthBiasInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthBias2EXT(VkCommandBuffer commandBuffer, const VkDepthBiasInfoEXT*         pDepthBiasInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo);
       } else {
          vk_cmd_enqueue_CmdSetDepthBias2EXT(commandBuffer, pDepthBiasInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindShadersEXT(VkCommandBuffer commandBuffer, uint32_t stageCount, const VkShaderStageFlagBits* pStages, const VkShaderEXT* pShaders)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_shaders_ext(&cmd_buffer->cmd_queue,
                                           stageCount, pStages, pShaders);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindShadersEXT(VkCommandBuffer commandBuffer, uint32_t stageCount, const VkShaderStageFlagBits* pStages, const VkShaderEXT* pShaders)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindShadersEXT(commandBuffer, stageCount, pStages, pShaders);
       } else {
          vk_cmd_enqueue_CmdBindShadersEXT(commandBuffer, stageCount, pStages, pShaders);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindDescriptorSets2(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo*   pBindDescriptorSetsInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_descriptor_sets2(&cmd_buffer->cmd_queue,
                                           pBindDescriptorSetsInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindDescriptorSets2(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo*   pBindDescriptorSetsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo);
       } else {
          vk_cmd_enqueue_CmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdPushConstants2() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPushConstants2(VkCommandBuffer commandBuffer, const VkPushConstantsInfo*        pPushConstantsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPushConstants2(commandBuffer, pPushConstantsInfo);
       } else {
          vk_cmd_enqueue_CmdPushConstants2(commandBuffer, pPushConstantsInfo);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdPushDescriptorSet2() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPushDescriptorSet2(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo*    pPushDescriptorSetInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo);
       } else {
          vk_cmd_enqueue_CmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo);
       }
    }
    
    
    
    /* vk_cmd_enqueue_CmdPushDescriptorSetWithTemplate2() is hand-typed in vk_cmd_enqueue.c */
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdPushDescriptorSetWithTemplate2(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdPushDescriptorSetWithTemplate2(commandBuffer, pPushDescriptorSetWithTemplateInfo);
       } else {
          vk_cmd_enqueue_CmdPushDescriptorSetWithTemplate2(commandBuffer, pPushDescriptorSetWithTemplateInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDescriptorBufferOffsets2EXT(VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_descriptor_buffer_offsets2_ext(&cmd_buffer->cmd_queue,
                                           pSetDescriptorBufferOffsetsInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDescriptorBufferOffsets2EXT(VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDescriptorBufferOffsets2EXT(commandBuffer, pSetDescriptorBufferOffsetsInfo);
       } else {
          vk_cmd_enqueue_CmdSetDescriptorBufferOffsets2EXT(commandBuffer, pSetDescriptorBufferOffsetsInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdBindDescriptorBufferEmbeddedSamplers2EXT(VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_bind_descriptor_buffer_embedded_samplers2_ext(&cmd_buffer->cmd_queue,
                                           pBindDescriptorBufferEmbeddedSamplersInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdBindDescriptorBufferEmbeddedSamplers2EXT(VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo);
       } else {
          vk_cmd_enqueue_CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer, pBindDescriptorBufferEmbeddedSamplersInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_rendering_attachment_locations(&cmd_buffer->cmd_queue,
                                           pLocationInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo);
       } else {
          vk_cmd_enqueue_CmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_rendering_input_attachment_indices(&cmd_buffer->cmd_queue,
                                           pInputAttachmentIndexInfo);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo);
       } else {
          vk_cmd_enqueue_CmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo);
       }
    }
    
    
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_CmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange)
    {
       VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (vk_command_buffer_has_error(cmd_buffer))
          return;
       VkResult result = vk_enqueue_cmd_set_depth_clamp_range_ext(&cmd_buffer->cmd_queue,
                                           depthClampMode, pDepthClampRange);
       if (unlikely(result != VK_SUCCESS))
          vk_command_buffer_set_error(cmd_buffer, result);
    }
    
    VKAPI_ATTR void VKAPI_CALL
    vk_cmd_enqueue_unless_primary_CmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer, VkDepthClampModeEXT depthClampMode, const VkDepthClampRangeEXT* pDepthClampRange)
    {
        VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
    
       if (cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) {
          const struct vk_device_dispatch_table *disp =
             cmd_buffer->base.device->command_dispatch_table;
    
          disp->CmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange);
       } else {
          vk_cmd_enqueue_CmdSetDepthClampRangeEXT(commandBuffer, depthClampMode, pDepthClampRange);
       }
    }