1d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Copyright (c) 2015 The Khronos Group Inc.
2d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//
3d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Permission is hereby granted, free of charge, to any person obtaining a
4d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// copy of this software and/or associated documentation files (the
5d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// "Materials"), to deal in the Materials without restriction, including
6d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// without limitation the rights to use, copy, modify, merge, publish,
7d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// distribute, sublicense, and/or sell copies of the Materials, and to
8d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// permit persons to whom the Materials are furnished to do so, subject to
9d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// the following conditions:
10d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//
11d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// The above copyright notice and this permission notice shall be included
12d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// in all copies or substantial portions of the Materials.
13d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//
14d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
21d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
22d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallimport platform "platform.api"
23d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall///////////////
25d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Constants //
26d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall///////////////
27d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// API version (major.minor.patch)
293dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Halldefine VERSION_MAJOR 1
303dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Halldefine VERSION_MINOR 0
312676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Halldefine VERSION_PATCH 13
32d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
33d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// API limits
3465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halldefine VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
3565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halldefine VK_UUID_SIZE                     16
3665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halldefine VK_MAX_EXTENSION_NAME_SIZE       256
3765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halldefine VK_MAX_DESCRIPTION_SIZE          256
3865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halldefine VK_MAX_MEMORY_TYPES              32
3965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halldefine VK_MAX_MEMORY_HEAPS              16    /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
40d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// API keywords
42d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Halldefine VK_TRUE        1
43d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Halldefine VK_FALSE       0
445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall// API keyword, but needs special handling by some templates
465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halldefine NULL_HANDLE 0
47d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4833faaad096afbd0b103bd1284ce5b78cce74aa01Jesse Hall@extension("VK_KHR_surface") define VK_KHR_SURFACE_SPEC_VERSION                 25
493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
501356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
512676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_SPEC_VERSION             68
523e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
531356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
54543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_display") define VK_KHR_DISPLAY_SPEC_VERSION                 21
553e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
561356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
57543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION     9
580e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_display_swapchain"
591356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
60543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_SPEC_VERSION       6
613e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME               "VK_KHR_xlib_surface"
621356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
63543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_SPEC_VERSION         6
643e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME                 "VK_KHR_xcb_surface"
651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
66543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 5
673e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME         "VK_KHR_wayland_surface"
681356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
69543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_SPEC_VERSION         4
703e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME                 "VK_KHR_mir_surface"
711356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
7233faaad096afbd0b103bd1284ce5b78cce74aa01Jesse Hall@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
733e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME         "VK_KHR_android_surface"
741356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
75543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_SPEC_VERSION     5
763e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME             "VK_KHR_win32_surface"
771356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
78b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu@extension("VK_ANDROID_native_buffer") define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION     5
79b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu@extension("VK_ANDROID_native_buffer") define VK_ANDROID_NATIVE_BUFFER_NAME             "VK_ANDROID_native_buffer"
80b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu
812676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_report") define VK_EXT_DEBUG_REPORT_SPEC_VERSION       2
82715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report") define VK_EXT_DEBUG_REPORT_NAME               "VK_EXT_debug_report"
83715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
842676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_NV_glsl_shader") define VK_NV_GLSL_SHADER_SPEC_VERSION           1
852676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_NV_glsl_shader") define VK_NV_GLSL_SHADER_NAME                   "VK_NV_glsl_shader"
862676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
872676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_KHR_sampler_mirror_clamp_to_edge") define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION   1
882676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_KHR_sampler_mirror_clamp_to_edge") define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_NAME           "VK_KHR_sampler_mirror_clamp_to_edge"
892676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
902676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_IMG_filter_cubic") define VK_IMG_FILTER_CUBIC_SPEC_VERSION       1
912676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_IMG_filter_cubic") define VK_IMG_FILTER_CUBIC_NAME               "VK_IMG_filter_cubic"
922676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
932676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_AMD_rasterization_order") define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION   1
942676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_AMD_rasterization_order") define VK_AMD_RASTERIZATION_ORDER_NAME           "VK_AMD_rasterization_order"
952676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
962676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker") define VK_EXT_DEBUG_MARKER_SPEC_VERSION       3
972676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker") define VK_EXT_DEBUG_MARKER_NAME               "VK_EXT_debug_marker"
982676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
99d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Types  //
102d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
103d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u32 VkBool32
1055ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u32 VkFlags
1065ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u64 VkDeviceSize
1075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u32 VkSampleMask
1085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Dispatchable handle types.
110d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkInstance
111d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkPhysicalDevice
112d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkDevice
113d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkQueue
1143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@dispatchHandle type u64 VkCommandBuffer
115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
116d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Non dispatchable handle types.
117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDeviceMemory
1183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@nonDispatchHandle type u64 VkCommandPool
119d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkBuffer
120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkBufferView
121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkImage
122d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkImageView
123d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkShaderModule
124d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkPipeline
125d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkPipelineLayout
126d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkSampler
127d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDescriptorSet
128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDescriptorSetLayout
129d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDescriptorPool
130d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkFence
131d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkSemaphore
132d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkEvent
133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkQueryPool
134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkFramebuffer
135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkRenderPass
136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkPipelineCache
1371356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1383e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")    @nonDispatchHandle type u64 VkSurfaceKHR
1391356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1403e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")  @nonDispatchHandle type u64 VkSwapchainKHR
1411356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1423e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayKHR
1433e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayModeKHR
144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
145715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report") @nonDispatchHandle type u64 VkDebugReportCallbackEXT
146715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
148d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
149d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Enums  //
150d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageLayout {
153d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_UNDEFINED                               = 0x00000000,   /// Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_GENERAL                                 = 0x00000001,   /// General layout when image can be used for any kind of access
155d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                = 0x00000002,   /// Optimal layout when image is only used for color attachment read/write
156d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL        = 0x00000003,   /// Optimal layout when image is only used for depth/stencil attachment read/write
157d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL         = 0x00000004,   /// Optimal layout when image is used for read only depth/stencil attachment and shader access
158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL                = 0x00000005,   /// Optimal layout when image is used for read only shader access
1593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL                    = 0x00000006,   /// Optimal layout when image is used only as source of transfer operations
1603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                    = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
1615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
1621356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1633e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
164bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 1000001002,
165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkAttachmentLoadOp {
168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_LOAD_OP_LOAD                              = 0x00000000,
169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_LOAD_OP_CLEAR                             = 0x00000001,
170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_LOAD_OP_DONT_CARE                         = 0x00000002,
171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
172d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkAttachmentStoreOp {
174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_STORE_OP_STORE                            = 0x00000000,
175d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_STORE_OP_DONT_CARE                        = 0x00000001,
176d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
177d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageType {
179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_TYPE_1D                                        = 0x00000000,
180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_TYPE_2D                                        = 0x00000001,
181d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_TYPE_3D                                        = 0x00000002,
182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageTiling {
185c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_IMAGE_TILING_OPTIMAL                                 = 0x00000000,
186c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_IMAGE_TILING_LINEAR                                  = 0x00000001,
187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
188d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageViewType {
190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_1D                                   = 0x00000000,
191d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_2D                                   = 0x00000001,
192d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_3D                                   = 0x00000002,
193d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_CUBE                                 = 0x00000003,
194d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_1D_ARRAY                             = 0x00000004,
195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_2D_ARRAY                             = 0x00000005,
196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY                           = 0x00000006,
197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
198d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1993fbc856120217247c72fb5ed88500000f3881c45Jesse Hallenum VkCommandBufferLevel {
2003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_LEVEL_PRIMARY                         = 0x00000000,
2013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_LEVEL_SECONDARY                       = 0x00000001,
202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
20465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkComponentSwizzle {
20565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_IDENTITY                           = 0x00000000,
20665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_ZERO                               = 0x00000001,
20765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_ONE                                = 0x00000002,
20865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_R                                  = 0x00000003,
20965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_G                                  = 0x00000004,
21065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_B                                  = 0x00000005,
21165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_A                                  = 0x00000006,
212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkDescriptorType {
215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_SAMPLER                              = 0x00000000,
216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER               = 0x00000001,
217d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE                        = 0x00000002,
218d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE                        = 0x00000003,
219d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER                 = 0x00000004,
220d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER                 = 0x00000005,
221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER                       = 0x00000006,
222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER                       = 0x00000007,
223d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC               = 0x00000008,
224d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC               = 0x00000009,
225d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT                     = 0x0000000a,
226d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
227d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
228d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkQueryType {
229d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_TYPE_OCCLUSION                                 = 0x00000000,
230d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_TYPE_PIPELINE_STATISTICS                       = 0x00000001, /// Optional
231a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall    VK_QUERY_TYPE_TIMESTAMP                                 = 0x00000002,
232d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
233d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
234d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkBorderColor {
235d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK                 = 0x00000000,
236d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK                   = 0x00000001,
237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK                      = 0x00000002,
238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_INT_OPAQUE_BLACK                        = 0x00000003,
239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE                      = 0x00000004,
240d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_INT_OPAQUE_WHITE                        = 0x00000005,
241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
242d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
243d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkPipelineBindPoint {
244c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_PIPELINE_BIND_POINT_GRAPHICS                         = 0x00000000,
245c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_PIPELINE_BIND_POINT_COMPUTE                          = 0x00000001,
246d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkPrimitiveTopology {
249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_POINT_LIST                        = 0x00000000,
250d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_LIST                         = 0x00000001,
251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                        = 0x00000002,
252d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                     = 0x00000003,
253d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP                    = 0x00000004,
254d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                      = 0x00000005,
2553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY          = 0x00000006,
2563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY         = 0x00000007,
2573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY      = 0x00000008,
2583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY     = 0x00000009,
259091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST                        = 0x0000000a,
260d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
261d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
262d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkSharingMode {
263d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHARING_MODE_EXCLUSIVE                               = 0x00000000,
264d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHARING_MODE_CONCURRENT                              = 0x00000001,
265d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
266d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
267d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkIndexType {
268d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_INDEX_TYPE_UINT16                                    = 0x00000000,
269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_INDEX_TYPE_UINT32                                    = 0x00000001,
270d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
271d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27223ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hallenum VkFilter {
27323ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_FILTER_NEAREST                                       = 0x00000000,
27423ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_FILTER_LINEAR                                        = 0x00000001,
2752676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
2762676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_IMG_filter_cubic")
2772676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_FILTER_CUBIC_IMG                                     = 1000015000,
278d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
279d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28023ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hallenum VkSamplerMipmapMode {
28123ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_SAMPLER_MIPMAP_MODE_NEAREST                          = 0x00000001,   /// Choose nearest mip level
28223ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_SAMPLER_MIPMAP_MODE_LINEAR                           = 0x00000002,   /// Linear filter between mip levels
283d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
284d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28523ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hallenum VkSamplerAddressMode {
286c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_REPEAT                          = 0x00000000,
287c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT                 = 0x00000001,
288c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE                   = 0x00000002,
289c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER                 = 0x00000003,
290c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE            = 0x00000004,
291d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
292d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
293d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkCompareOp {
294d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_NEVER                                     = 0x00000000,
295d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_LESS                                      = 0x00000001,
296d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_EQUAL                                     = 0x00000002,
2973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMPARE_OP_LESS_OR_EQUAL                             = 0x00000003,
298d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_GREATER                                   = 0x00000004,
299d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_NOT_EQUAL                                 = 0x00000005,
3003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMPARE_OP_GREATER_OR_EQUAL                          = 0x00000006,
301d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_ALWAYS                                    = 0x00000007,
302d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
303d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
30465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkPolygonMode {
30565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_POLYGON_MODE_FILL                                    = 0x00000000,
30665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_POLYGON_MODE_LINE                                    = 0x00000001,
30765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_POLYGON_MODE_POINT                                   = 0x00000002,
308d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkFrontFace {
3113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FRONT_FACE_COUNTER_CLOCKWISE                         = 0x00000000,
3123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FRONT_FACE_CLOCKWISE                                 = 0x00000001,
313d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
31565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkBlendFactor {
31665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ZERO                                    = 0x00000000,
31765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE                                     = 0x00000001,
31865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC_COLOR                               = 0x00000002,
31965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR                     = 0x00000003,
32065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_DST_COLOR                               = 0x00000004,
32165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR                     = 0x00000005,
32265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC_ALPHA                               = 0x00000006,
32365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA                     = 0x00000007,
32465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_DST_ALPHA                               = 0x00000008,
32565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA                     = 0x00000009,
32665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_CONSTANT_COLOR                          = 0x0000000a,
32765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR                = 0x0000000b,
32865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_CONSTANT_ALPHA                          = 0x0000000c,
32965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA                = 0x0000000d,
33065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE                      = 0x0000000e,
33165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC1_COLOR                              = 0x0000000f,
33265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR                    = 0x00000010,
33365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC1_ALPHA                              = 0x00000011,
33465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA                    = 0x00000012,
335d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
337d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkBlendOp {
338d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_ADD                                         = 0x00000000,
339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_SUBTRACT                                    = 0x00000001,
340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_REVERSE_SUBTRACT                            = 0x00000002,
341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_MIN                                         = 0x00000003,
342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_MAX                                         = 0x00000004,
343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkStencilOp {
346d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_KEEP                                      = 0x00000000,
347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_ZERO                                      = 0x00000001,
348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_REPLACE                                   = 0x00000002,
3493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_INCREMENT_AND_CLAMP                       = 0x00000003,
3503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_DECREMENT_AND_CLAMP                       = 0x00000004,
351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_INVERT                                    = 0x00000005,
3523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_INCREMENT_AND_WRAP                        = 0x00000006,
3533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_DECREMENT_AND_WRAP                        = 0x00000007,
354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkLogicOp {
357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_CLEAR                                       = 0x00000000,
358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_AND                                         = 0x00000001,
359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_AND_REVERSE                                 = 0x00000002,
360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_COPY                                        = 0x00000003,
361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_AND_INVERTED                                = 0x00000004,
3623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_LOGIC_OP_NO_OP                                       = 0x00000005,
363d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_XOR                                         = 0x00000006,
364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_OR                                          = 0x00000007,
365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_NOR                                         = 0x00000008,
3663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_LOGIC_OP_EQUIVALENT                                  = 0x00000009,
367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_INVERT                                      = 0x0000000a,
368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_OR_REVERSE                                  = 0x0000000b,
369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_COPY_INVERTED                               = 0x0000000c,
370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_OR_INVERTED                                 = 0x0000000d,
371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_NAND                                        = 0x0000000e,
372d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_SET                                         = 0x0000000f,
373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
374d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3753fbc856120217247c72fb5ed88500000f3881c45Jesse Hallenum VkSystemAllocationScope {
3763e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND                      = 0x00000000,
3773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT                       = 0x00000001,
3783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_CACHE                        = 0x00000002,
3793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE                       = 0x00000003,
3803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE                     = 0x00000004,
38103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
38203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall
3833fbc856120217247c72fb5ed88500000f3881c45Jesse Hallenum VkInternalAllocationType {
3843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE                  = 0x00000000,
385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
386d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkPhysicalDeviceType {
388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_OTHER                           = 0x00000000,
389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU                  = 0x00000001,
390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU                    = 0x00000002,
391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU                     = 0x00000003,
392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_CPU                             = 0x00000004,
393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
394d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
39565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkVertexInputRate {
39665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_VERTEX_INPUT_RATE_VERTEX                             = 0x00000000,
39765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_VERTEX_INPUT_RATE_INSTANCE                           = 0x00000001,
398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
399d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Vulkan format definitions
401d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkFormat {
402f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_UNDEFINED                                     = 0,
403f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R4G4_UNORM_PACK8                              = 1,
404f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R4G4B4A4_UNORM_PACK16                         = 2,
405f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B4G4R4A4_UNORM_PACK16                         = 3,
406f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R5G6B5_UNORM_PACK16                           = 4,
407f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B5G6R5_UNORM_PACK16                           = 5,
408f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R5G5B5A1_UNORM_PACK16                         = 6,
409f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B5G5R5A1_UNORM_PACK16                         = 7,
410f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A1R5G5B5_UNORM_PACK16                         = 8,
411f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_UNORM                                      = 9,
412f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_SNORM                                      = 10,
413f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_USCALED                                    = 11,
414f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_SSCALED                                    = 12,
415f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_UINT                                       = 13,
416f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_SINT                                       = 14,
417f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8_SRGB                                       = 15,
418f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_UNORM                                    = 16,
419f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_SNORM                                    = 17,
420f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_USCALED                                  = 18,
421f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_SSCALED                                  = 19,
422f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_UINT                                     = 20,
423f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_SINT                                     = 21,
424f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8_SRGB                                     = 22,
425f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_UNORM                                  = 23,
426f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_SNORM                                  = 24,
427f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_USCALED                                = 25,
428f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_SSCALED                                = 26,
429f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_UINT                                   = 27,
430f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_SINT                                   = 28,
431f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8_SRGB                                   = 29,
432f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_UNORM                                  = 30,
433f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_SNORM                                  = 31,
434f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_USCALED                                = 32,
435f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_SSCALED                                = 33,
436f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_UINT                                   = 34,
437f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_SINT                                   = 35,
438f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8_SRGB                                   = 36,
439f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_UNORM                                = 37,
440f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_SNORM                                = 38,
441f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_USCALED                              = 39,
442f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_SSCALED                              = 40,
443f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_UINT                                 = 41,
444f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_SINT                                 = 42,
445f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R8G8B8A8_SRGB                                 = 43,
446f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_UNORM                                = 44,
447f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_SNORM                                = 45,
448f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_USCALED                              = 46,
449f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_SSCALED                              = 47,
450f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_UINT                                 = 48,
451f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_SINT                                 = 49,
452f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B8G8R8A8_SRGB                                 = 50,
453f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_UNORM_PACK32                         = 51,
454f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_SNORM_PACK32                         = 52,
455f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_USCALED_PACK32                       = 53,
456f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_SSCALED_PACK32                       = 54,
457f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_UINT_PACK32                          = 55,
458f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_SINT_PACK32                          = 56,
459f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A8B8G8R8_SRGB_PACK32                          = 57,
460f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2R10G10B10_UNORM_PACK32                      = 58,
461f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2R10G10B10_SNORM_PACK32                      = 59,
462f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2R10G10B10_USCALED_PACK32                    = 60,
463f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2R10G10B10_SSCALED_PACK32                    = 61,
464f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2R10G10B10_UINT_PACK32                       = 62,
465f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2R10G10B10_SINT_PACK32                       = 63,
466f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2B10G10R10_UNORM_PACK32                      = 64,
467f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2B10G10R10_SNORM_PACK32                      = 65,
468f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2B10G10R10_USCALED_PACK32                    = 66,
469f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2B10G10R10_SSCALED_PACK32                    = 67,
470f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2B10G10R10_UINT_PACK32                       = 68,
471f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_A2B10G10R10_SINT_PACK32                       = 69,
472f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_UNORM                                     = 70,
473f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_SNORM                                     = 71,
474f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_USCALED                                   = 72,
475f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_SSCALED                                   = 73,
476f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_UINT                                      = 74,
477f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_SINT                                      = 75,
478f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16_SFLOAT                                    = 76,
479f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_UNORM                                  = 77,
480f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_SNORM                                  = 78,
481f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_USCALED                                = 79,
482f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_SSCALED                                = 80,
483f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_UINT                                   = 81,
484f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_SINT                                   = 82,
485f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16_SFLOAT                                 = 83,
486f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_UNORM                               = 84,
487f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_SNORM                               = 85,
488f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_USCALED                             = 86,
489f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_SSCALED                             = 87,
490f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_UINT                                = 88,
491f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_SINT                                = 89,
492f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16_SFLOAT                              = 90,
493f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_UNORM                            = 91,
494f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_SNORM                            = 92,
495f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_USCALED                          = 93,
496f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_SSCALED                          = 94,
497f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_UINT                             = 95,
498f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_SINT                             = 96,
499f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R16G16B16A16_SFLOAT                           = 97,
500f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32_UINT                                      = 98,
501f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32_SINT                                      = 99,
502f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32_SFLOAT                                    = 100,
503f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32_UINT                                   = 101,
504f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32_SINT                                   = 102,
505f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32_SFLOAT                                 = 103,
506f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32B32_UINT                                = 104,
507f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32B32_SINT                                = 105,
508f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32B32_SFLOAT                              = 106,
509f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32B32A32_UINT                             = 107,
510f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32B32A32_SINT                             = 108,
511f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R32G32B32A32_SFLOAT                           = 109,
512f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64_UINT                                      = 110,
513f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64_SINT                                      = 111,
514f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64_SFLOAT                                    = 112,
515f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64_UINT                                   = 113,
516f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64_SINT                                   = 114,
517f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64_SFLOAT                                 = 115,
518f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64B64_UINT                                = 116,
519f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64B64_SINT                                = 117,
520f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64B64_SFLOAT                              = 118,
521f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64B64A64_UINT                             = 119,
522f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64B64A64_SINT                             = 120,
523f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_R64G64B64A64_SFLOAT                           = 121,
524f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_B10G11R11_UFLOAT_PACK32                       = 122,
525f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32                        = 123,
526f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_D16_UNORM                                     = 124,
527f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_X8_D24_UNORM_PACK32                           = 125,
528f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_D32_SFLOAT                                    = 126,
529f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_S8_UINT                                       = 127,
530f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_D16_UNORM_S8_UINT                             = 128,
531f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_D24_UNORM_S8_UINT                             = 129,
532f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_D32_SFLOAT_S8_UINT                            = 130,
533f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC1_RGB_UNORM_BLOCK                           = 131,
534f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC1_RGB_SRGB_BLOCK                            = 132,
535f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC1_RGBA_UNORM_BLOCK                          = 133,
536f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC1_RGBA_SRGB_BLOCK                           = 134,
537f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC2_UNORM_BLOCK                               = 135,
538f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC2_SRGB_BLOCK                                = 136,
539f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC3_UNORM_BLOCK                               = 137,
540f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC3_SRGB_BLOCK                                = 138,
541f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC4_UNORM_BLOCK                               = 139,
542f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC4_SNORM_BLOCK                               = 140,
543f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC5_UNORM_BLOCK                               = 141,
544f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC5_SNORM_BLOCK                               = 142,
545f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC6H_UFLOAT_BLOCK                             = 143,
546f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC6H_SFLOAT_BLOCK                             = 144,
547f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC7_UNORM_BLOCK                               = 145,
548f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_BC7_SRGB_BLOCK                                = 146,
549f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK                       = 147,
550f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK                        = 148,
551f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK                     = 149,
552f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK                      = 150,
553f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK                     = 151,
554f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK                      = 152,
555f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_EAC_R11_UNORM_BLOCK                           = 153,
556f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_EAC_R11_SNORM_BLOCK                           = 154,
557f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_EAC_R11G11_UNORM_BLOCK                        = 155,
558f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_EAC_R11G11_SNORM_BLOCK                        = 156,
559f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_4x4_UNORM_BLOCK                          = 157,
560f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_4x4_SRGB_BLOCK                           = 158,
561f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_5x4_UNORM_BLOCK                          = 159,
562f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_5x4_SRGB_BLOCK                           = 160,
563f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_5x5_UNORM_BLOCK                          = 161,
564f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_5x5_SRGB_BLOCK                           = 162,
565f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_6x5_UNORM_BLOCK                          = 163,
566f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_6x5_SRGB_BLOCK                           = 164,
567f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_6x6_UNORM_BLOCK                          = 165,
568f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_6x6_SRGB_BLOCK                           = 166,
569f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_8x5_UNORM_BLOCK                          = 167,
570f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_8x5_SRGB_BLOCK                           = 168,
571f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_8x6_UNORM_BLOCK                          = 169,
572f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_8x6_SRGB_BLOCK                           = 170,
573f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_8x8_UNORM_BLOCK                          = 171,
574f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_8x8_SRGB_BLOCK                           = 172,
575f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x5_UNORM_BLOCK                         = 173,
576f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x5_SRGB_BLOCK                          = 174,
577f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x6_UNORM_BLOCK                         = 175,
578f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x6_SRGB_BLOCK                          = 176,
579f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x8_UNORM_BLOCK                         = 177,
580f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x8_SRGB_BLOCK                          = 178,
581f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x10_UNORM_BLOCK                        = 179,
582f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_10x10_SRGB_BLOCK                         = 180,
583f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_12x10_UNORM_BLOCK                        = 181,
584f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_12x10_SRGB_BLOCK                         = 182,
585f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_12x12_UNORM_BLOCK                        = 183,
586f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_FORMAT_ASTC_12x12_SRGB_BLOCK                         = 184,
587d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
588d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
589d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Structure type enumerant
590d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkStructureType {
591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STRUCTURE_TYPE_APPLICATION_INFO                          = 0,
592c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                      = 1,
593c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 2,
594c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                        = 3,
595c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 4,
596f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO                      = 5,
597c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 6,
598c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 7,
599c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 8,
600c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 9,
6015ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                         = 10,
602c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                    = 11,
603c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                        = 12,
604c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                   = 13,
605c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 14,
606c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                    = 15,
607c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 16,
6083e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 17,
6093e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 18,
6103e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 19,
6113e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
6123e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 21,
6133e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 22,
6143e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO  = 23,
6153e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 24,
6163e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 25,
6173e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 26,
6183e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 27,
6193e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 28,
6203e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 29,
6213e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 30,
6223e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 31,
6233e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 32,
6243e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 33,
625f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO              = 34,
6263e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 35,
6273e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 36,
6283e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 37,
6293e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 38,
6303e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 39,
631f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO              = 40,
6323dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO           = 41,
6333dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 42,
6343dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 43,
6353dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 44,
6363dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 45,
6373dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 46,
6383dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO               = 47,
6393dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                 = 48,
6403e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall
6413e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
642bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 1000001000,
643bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR                          = 1000001001,
6441356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6453e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_display")
646bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 1000002000,
647bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 1000002001,
6481356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_display_swapchain")
650bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 1000003000,
651f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
652f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    //@extension("VK_KHR_xlib_surface")
653f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR              = 1000004000,
654f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
655f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    //@extension("VK_KHR_xcb_surface")
656f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR               = 1000005000,
657f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
658f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    //@extension("VK_KHR_wayland_surface")
659f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR           = 1000006000,
660f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
661f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    //@extension("VK_KHR_mir_surface")
662f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR               = 1000007000,
663f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
664f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    //@extension("VK_KHR_android_surface")
665f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR           = 1000008000,
666f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
667f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    //@extension("VK_KHR_win32_surface")
668f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR             = 1000009000,
669543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall
670b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    //@extension("VK_ANDROID_native_buffer")
671b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID                     = 1000010000,
672b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu
673543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    //@extension("VK_EXT_debug_report")
6742676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT     = 1000011000,
6752676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
6762676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_AMD_rasterization_order")
6772676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
6782676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
6792676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_EXT_debug_marker")
6802676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT         = 1000022000,
6812676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
6822676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_EXT_debug_marker")
6832676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT          = 1000022001,
6842676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
6852676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_EXT_debug_marker")
6862676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT              = 1000022002,
687d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
688d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
68965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkSubpassContents {
69065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_SUBPASS_CONTENTS_INLINE                              = 0x00000000,
69165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS           = 0x00000001,
692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
693d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
694543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hallenum VkPipelineCacheHeaderVersion {
695543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VK_PIPELINE_CACHE_HEADER_VERSION_ONE                    = 1,
696543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall}
697543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall
698bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall@lastUnused(-11)
699d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Error and return codes
700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkResult {
701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Return codes for successful operation execution (positive values)
702bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_SUCCESS                                              = 0,
703bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_NOT_READY                                            = 1,
704bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_TIMEOUT                                              = 2,
705bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_EVENT_SET                                            = 3,
706bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_EVENT_RESET                                          = 4,
707bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_INCOMPLETE                                           = 5,
708d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
7093e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
710bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_SUBOPTIMAL_KHR                                       = 1000001003,
7111356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Error codes (negative values)
713bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF, // -1
714bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE, // -2
715bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_INITIALIZATION_FAILED                          = 0xFFFFFFFD, // -3
716bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_DEVICE_LOST                                    = 0xFFFFFFFC, // -4
717bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB, // -5
718bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA, // -6
719bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9, // -7
720bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8, // -8
721bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7, // -9
722bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6, // -10
723bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5, // -11
7241356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
7253e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_surface")
726bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_SURFACE_LOST_KHR                               = 0xC4653600, // -1000000000
727a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
728563380d389732337a84e7455caa01ec955ebee30Jesse Hall    //@extension("VK_KHR_surface")
729563380d389732337a84e7455caa01ec955ebee30Jesse Hall    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                       = 0xC46535FF, // -1000008001
730563380d389732337a84e7455caa01ec955ebee30Jesse Hall
7313e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
732bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_OUT_OF_DATE_KHR                                = 0xC4653214, // -1000001004
7331356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
7343e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_display_swapchain")
735bd88884111a3ef38322741c15de9bd215f7a7eb9Jesse Hall    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC4652A47, // -1000003001
7361356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
737543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    //@extension("VK_EXT_debug_report")
738543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VK_ERROR_VALIDATION_FAILED_EXT                          = 0xC4650B07, // -1000011001
7392676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
7402676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_NV_glsl_shader")
7412676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_ERROR_INVALID_SHADER_NV                              = 0xC4650720, // -1000012000
7425ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
7435ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
7445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallenum VkDynamicState {
7455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_VIEWPORT                               = 0x00000000,
7465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_SCISSOR                                = 0x00000001,
7475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_LINE_WIDTH                             = 0x00000002,
7485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_DEPTH_BIAS                             = 0x00000003,
7495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_BLEND_CONSTANTS                        = 0x00000004,
7505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_DEPTH_BOUNDS                           = 0x00000005,
7515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK                   = 0x00000006,
7525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK                     = 0x00000007,
7535ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
754d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
755d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
756523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_surface")
75788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentineenum VkPresentModeKHR {
75888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
75988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
76088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_PRESENT_MODE_FIFO_KHR                                = 0x00000002,
76103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
76288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
76388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
764523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_surface")
76588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentineenum VkColorSpaceKHR {
76688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = 0x00000000,
76788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
768d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
769715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
770715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallenum VkDebugReportObjectTypeEXT {
771715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT                 = 0,
772715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT                = 1,
773715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT         = 2,
774715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT                  = 3,
775715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT                   = 4,
776715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT               = 5,
777715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT          = 6,
778715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT                   = 7,
779715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT           = 8,
780715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT                  = 9,
781715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT                   = 10,
782715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT                   = 11,
783715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT              = 12,
784715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT             = 13,
785715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT              = 14,
786715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT           = 15,
787715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT          = 16,
788715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT         = 17,
789715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT             = 18,
790715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT                = 19,
791715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT   = 20,
792715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT                 = 21,
793715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT         = 22,
794715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT          = 23,
795715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT             = 24,
796715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT            = 25,
797715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT             = 26,
798715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT           = 27,
799715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT            = 28,
800715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
801715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
802715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
803715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallenum VkDebugReportErrorEXT {
804715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_ERROR_NONE_EXT                          = 0,
805715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT                  = 1,
806715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
807715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
8082676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_AMD_rasterization_order")
8092676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallenum VkRasterizationOrderAMD {
8102676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_RASTERIZATION_ORDER_STRICT_AMD                       = 0,
8112676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_RASTERIZATION_ORDER_RELAXED_AMD                      = 1,
8122676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
8132676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
814715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
815d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////
816d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Bitfields  //
817d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////
818d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Queue capabilities
820d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueueFlags
821d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueueFlagBits {
822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUEUE_GRAPHICS_BIT                                   = 0x00000001,    /// Queue supports graphics operations
823d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUEUE_COMPUTE_BIT                                    = 0x00000002,    /// Queue supports compute operations
82465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_QUEUE_TRANSFER_BIT                                   = 0x00000004,    /// Queue supports transfer operations
825b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_QUEUE_SPARSE_BINDING_BIT                             = 0x00000008,    /// Queue supports sparse resource memory management operations
826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
827d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
828d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Memory properties passed into vkAllocMemory().
829d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkMemoryPropertyFlags
830d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkMemoryPropertyFlagBits {
831d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT                     = 0x00000001,
832d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT                     = 0x00000002,
833d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT                    = 0x00000004,
834d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_HOST_CACHED_BIT                      = 0x00000008,
835d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000010,
836d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
837d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
838d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Memory heap flags
839d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkMemoryHeapFlags
840d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkMemoryHeapFlagBits {
841d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT                         = 0x00000001,
842d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
843d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
8443e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall/// Access flags
8453e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Halltype VkFlags VkAccessFlags
8463e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hallbitfield VkAccessFlagBits {
8473e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_INDIRECT_COMMAND_READ_BIT                     = 0x00000001,
8483e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_INDEX_READ_BIT                                = 0x00000002,
8493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                     = 0x00000004,
8503e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_UNIFORM_READ_BIT                              = 0x00000008,
8513e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                     = 0x00000010,
8523e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_SHADER_READ_BIT                               = 0x00000020,
8533e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_SHADER_WRITE_BIT                              = 0x00000040,
8543e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                     = 0x00000080,
8553e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                    = 0x00000100,
8563e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT             = 0x00000200,
8573e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT            = 0x00000400,
8583e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_TRANSFER_READ_BIT                             = 0x00000800,
8593e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_TRANSFER_WRITE_BIT                            = 0x00001000,
8603e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_HOST_READ_BIT                                 = 0x00002000,
8613e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_HOST_WRITE_BIT                                = 0x00004000,
8623e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_MEMORY_READ_BIT                               = 0x00008000,
8633e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_MEMORY_WRITE_BIT                              = 0x00010000,
864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
865d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
866d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Buffer usage flags
867d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkBufferUsageFlags
868d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkBufferUsageFlagBits {
8693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_BUFFER_USAGE_TRANSFER_SRC_BIT                        = 0x00000001,    /// Can be used as a source of transfer operations
8703fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_BUFFER_USAGE_TRANSFER_DST_BIT                        = 0x00000002,    /// Can be used as a destination of transfer operations
871d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT                = 0x00000004,    /// Can be used as TBO
872d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT                = 0x00000008,    /// Can be used as IBO
873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT                      = 0x00000010,    /// Can be used as UBO
874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT                      = 0x00000020,    /// Can be used as SSBO
875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_INDEX_BUFFER_BIT                        = 0x00000040,    /// Can be used as source of fixed function index fetch (index buffer)
876d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT                       = 0x00000080,    /// Can be used as source of fixed function vertex fetch (VBO)
877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT                     = 0x00000100,    /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Buffer creation flags
881d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkBufferCreateFlags
882d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkBufferCreateFlagBits {
8835ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_BUFFER_CREATE_SPARSE_BINDING_BIT                     = 0x00000001,    /// Buffer should support sparse backing
884d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT                   = 0x00000002,    /// Buffer should support sparse backing with partial residency
885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT                     = 0x00000004,    /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
888d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Shader stage flags
889d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkShaderStageFlags
890d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkShaderStageFlagBits {
891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_VERTEX_BIT                              = 0x00000001,
892ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT                = 0x00000002,
893ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT             = 0x00000004,
894d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_GEOMETRY_BIT                            = 0x00000008,
895d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_FRAGMENT_BIT                            = 0x00000010,
896d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_COMPUTE_BIT                             = 0x00000020,
897c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SHADER_STAGE_ALL_GRAPHICS                            = 0x0000001F,
898d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
899d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_ALL                                     = 0x7FFFFFFF,
900d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
901d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
902fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall/// Descriptor pool create flags
903d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkDescriptorPoolCreateFlags
904d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkDescriptorPoolCreateFlagBits {
905fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT       = 0x00000001,
906fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall}
907fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
908fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall/// Descriptor pool reset flags
909d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkDescriptorPoolResetFlags
910a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDescriptorPoolResetFlagBits {
911a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
912fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
913d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Image usage flags
914d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageUsageFlags
915d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkImageUsageFlagBits {
9163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_USAGE_TRANSFER_SRC_BIT                         = 0x00000001,    /// Can be used as a source of transfer operations
9173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_USAGE_TRANSFER_DST_BIT                         = 0x00000002,    /// Can be used as a destination of transfer operations
918d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_SAMPLED_BIT                              = 0x00000004,    /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_STORAGE_BIT                              = 0x00000008,    /// Can be used as storage image (STORAGE_IMAGE descriptor type)
920d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                     = 0x00000010,    /// Can be used as framebuffer color attachment
9215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT             = 0x00000020,    /// Can be used as framebuffer depth/stencil attachment
922d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                 = 0x00000040,    /// Image data not needed outside of rendering
923d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT                     = 0x00000080,    /// Can be used as framebuffer input attachment
924d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
925d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
926d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Image creation flags
927d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageCreateFlags
928d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkImageCreateFlagBits {
9295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_CREATE_SPARSE_BINDING_BIT                      = 0x00000001,    /// Image should support sparse backing
930d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT                    = 0x00000002,    /// Image should support sparse backing with partial residency
931d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT                      = 0x00000004,    /// Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images
9325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = 0x00000008,    /// Allows image views to have different format than the base image
9335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000010,    /// Allows creating image views with cube type from the created image
934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
936b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall/// Image view creation flags
937d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageViewCreateFlags
938b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall//bitfield VkImageViewCreateFlagBits {
939b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall//}
940d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
941d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Pipeline creation flags
942d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkPipelineCreateFlags
943d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkPipelineCreateFlagBits {
944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT             = 0x00000001,
945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                = 0x00000002,
946d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_CREATE_DERIVATIVE_BIT                       = 0x00000004,
947d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
948d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
94965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall/// Color component flags
95065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halltype VkFlags VkColorComponentFlags
95165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallbitfield VkColorComponentFlagBits {
95265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_R_BIT                                = 0x00000001,
95365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_G_BIT                                = 0x00000002,
95465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_B_BIT                                = 0x00000004,
95565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_A_BIT                                = 0x00000008,
956d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
958d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Fence creation flags
959d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkFenceCreateFlags
960d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkFenceCreateFlagBits {
961d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FENCE_CREATE_SIGNALED_BIT                            = 0x00000001,
962d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
964d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Semaphore creation flags
965d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSemaphoreCreateFlags
966a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkSemaphoreCreateFlagBits {
967a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
968d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
969d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Format capability flags
970d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkFormatFeatureFlags
971d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkFormatFeatureFlagBits {
972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                     = 0x00000001,    /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
973d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                     = 0x00000002,    /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
974d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT              = 0x00000004,    /// Format supports atomic operations in case it's used for storage images
975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT              = 0x00000008,    /// Format can be used for uniform texel buffers (TBOs)
976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT              = 0x00000010,    /// Format can be used for storage texel buffers (IBOs)
977d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT       = 0x00000020,    /// Format supports atomic operations in case it's used for storage texel buffers
978d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT                     = 0x00000040,    /// Format can be used for vertex buffers (VBOs)
979d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT                  = 0x00000080,    /// Format can be used for color attachment images
980d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT            = 0x00000100,    /// Format supports blending in case it's used for color attachment images
981d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT          = 0x00000200,    /// Format can be used for depth/stencil attachment images
9823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FORMAT_FEATURE_BLIT_SRC_BIT                          = 0x00000400,    /// Format can be used as the source image of blits with vkCommandBlitImage
9833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FORMAT_FEATURE_BLIT_DST_BIT                          = 0x00000800,    /// Format can be used as the destination image of blits with vkCommandBlitImage
98433faaad096afbd0b103bd1284ce5b78cce74aa01Jesse Hall    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT       = 0x00001000,
9852676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
9862676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    //@extension("VK_IMG_filter_cubic")
9872676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG    = 0x00002000,
988d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
989d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
990d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Query control flags
991d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueryControlFlags
992d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueryControlFlagBits {
99365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_QUERY_CONTROL_PRECISE_BIT                            = 0x00000001,
994d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
995d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
996d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Query result flags
997d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueryResultFlags
998d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueryResultFlagBits {
999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_64_BIT                                  = 0x00000001,   /// Results of the queries are written to the destination buffer as 64-bit values
1000d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_WAIT_BIT                                = 0x00000002,   /// Results of the queries are waited on before proceeding with the result copy
1001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT                   = 0x00000004,   /// Besides the results of the query, the availability of the results is also written
1002d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_PARTIAL_BIT                             = 0x00000008,   /// Copy the partial results of the query even if the final results aren't available
1003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1004d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1005d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Shader module creation flags
1006d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkShaderModuleCreateFlags
1007a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkShaderModuleCreateFlagBits {
1008a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1010d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Event creation flags
1011d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkEventCreateFlags
1012a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkEventCreateFlagBits {
1013a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1015a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall/// Command buffer usage flags
10163fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandBufferUsageFlags
10173fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandBufferUsageFlagBits {
10183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT             = 0x00000001,
10193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT        = 0x00000002,
10203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT            = 0x00000004,
1021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1022d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1023d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Pipeline statistics flags
1024d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueryPipelineStatisticFlags
1025d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueryPipelineStatisticFlagBits {
1026ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT                     = 0x00000001,  /// Optional
1027ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT                   = 0x00000002,  /// Optional
1028ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT                   = 0x00000004,  /// Optional
1029ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT                 = 0x00000008,  /// Optional
1030ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT                  = 0x00000010,  /// Optional
1031ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT                        = 0x00000020,  /// Optional
1032ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT                         = 0x00000040,  /// Optional
1033ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT                 = 0x00000080,  /// Optional
1034ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT         = 0x00000100,  /// Optional
1035ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT  = 0x00000200,  /// Optional
1036ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT                  = 0x00000400,  /// Optional
1037d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1039d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Memory mapping flags
1040d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkMemoryMapFlags
1041a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkMemoryMapFlagBits {
1042a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1043d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1044d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Bitfield of image aspects
1045d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageAspectFlags
1046d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkImageAspectFlagBits {
1047d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_COLOR_BIT                               = 0x00000001,
1048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_DEPTH_BIT                               = 0x00000002,
1049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_STENCIL_BIT                             = 0x00000004,
1050d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_METADATA_BIT                            = 0x00000008,
1051d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Sparse memory bind flags
1054d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSparseMemoryBindFlags
1055091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hallbitfield VkSparseMemoryBindFlagBits {
1056091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_SPARSE_MEMORY_BIND_METADATA_BIT                      = 0x00000001,
1057091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall}
1058d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1059d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Sparse image memory requirements flags
1060d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSparseImageFormatFlags
1061d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSparseImageFormatFlagBits {
1062b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT                  = 0x00000001,  /// Image uses a single miptail region for all array slices
1063b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT                = 0x00000002,  /// Image requires mip levels to be an exact multiple of the sparse iamge block size for non-mip-tail levels.
1064b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT          = 0x00000004,  /// Image uses a non-standard sparse block size
1065d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1066d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1067d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Pipeline stages
1068d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkPipelineStageFlags
1069d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkPipelineStageFlagBits {
1070d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                       = 0x00000001,  /// Before subsequent commands are processed
1071d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                     = 0x00000002,  /// Draw/DispatchIndirect command fetch
1072d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                      = 0x00000004,  /// Vertex/index fetch
1073d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                     = 0x00000008,  /// Vertex shading
1074ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT       = 0x00000010,  /// Tessellation control shading
1075ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT    = 0x00000020,  /// Tessellation evaluation shading
1076d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                   = 0x00000040,  /// Geometry shading
1077d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                   = 0x00000080,  /// Fragment shading
1078d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT              = 0x00000100,  /// Early fragment (depth/stencil) tests
1079d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT               = 0x00000200,  /// Late fragment (depth/stencil) tests
1080d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT           = 0x00000400,  /// Color attachment writes
1081d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                    = 0x00000800,  /// Compute shading
1082d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_TRANSFER_BIT                          = 0x00001000,  /// Transfer/copy operations
1083543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT                    = 0x00002000,
1084543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VK_PIPELINE_STAGE_HOST_BIT                              = 0x00004000,  /// Indicates host (CPU) is a source/sink of the dependency
1085d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1086543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                      = 0x00008000,  /// All stages of the graphics pipeline
1087543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                      = 0x00010000,  /// All graphics, compute, copy, and transition commands
10885ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
10895ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
10905ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall/// Render pass attachment description flags
1091d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkAttachmentDescriptionFlags
1092d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkAttachmentDescriptionFlagBits {
10935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT                 = 0x00000001,  /// The attachment may alias physical memory of another attachment in the same renderpass
1094d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1095d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1096d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Subpass description flags
1097d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSubpassDescriptionFlags
1098d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSubpassDescriptionFlagBits {
1099d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Command pool creation flags
11023fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandPoolCreateFlags
11033fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandPoolCreateFlagBits {
11043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT                    = 0x00000001,  /// Command buffers have a short lifetime
11053fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT         = 0x00000002,  /// Command buffers may release their memory individually
1106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1107d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Command pool reset flags
11093fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandPoolResetFlags
11103fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandPoolResetFlagBits {
11113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT             = 0x00000001,  /// Release resources owned by the pool
1112d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1113d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
11143fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandBufferResetFlags
11153fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandBufferResetFlagBits {
11163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT           = 0x00000001,  /// Release resources owned by the buffer
11175ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
11185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1119d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSampleCountFlags
1120d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSampleCountFlagBits {
11215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_1_BIT                                   = 0x00000001,
11225ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_2_BIT                                   = 0x00000002,
11235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_4_BIT                                   = 0x00000004,
11245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_8_BIT                                   = 0x00000008,
11255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_16_BIT                                  = 0x00000010,
11265ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_32_BIT                                  = 0x00000020,
11275ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_64_BIT                                  = 0x00000040,
11285ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
11295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1130d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkStencilFaceFlags
1131d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkStencilFaceFlagBits {
11325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STENCIL_FACE_FRONT_BIT                               = 0x00000001,   /// Front face
11335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
1134c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STENCIL_FRONT_AND_BACK                               = 0x00000003,
1135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1137a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Instance creation flags
1138a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkInstanceCreateFlags
1139a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkInstanceCreateFlagBits {
1140a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1141a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1142a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Device creation flags
1143a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkDeviceCreateFlags
1144a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDeviceCreateFlagBits {
1145a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1146a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1147a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Device queue creation flags
1148a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkDeviceQueueCreateFlags
1149a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDeviceQueueCreateFlagBits {
1150a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1151a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1152a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Query pool creation flags
1153a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkQueryPoolCreateFlags
1154a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkQueryPoolCreateFlagBits {
1155a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1156a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1157a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Buffer view creation flags
1158a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkBufferViewCreateFlags
1159a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkBufferViewCreateFlagBits {
1160a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1161a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1162a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline cache creation flags
1163a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineCacheCreateFlags
1164a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineCacheCreateFlagBits {
1165a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1166a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1167a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline shader stage creation flags
1168a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineShaderStageCreateFlags
1169a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineShaderStageCreateFlagBits {
1170a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1171a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1172a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Descriptor set layout creation flags
1173a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkDescriptorSetLayoutCreateFlags
1174a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDescriptorSetLayoutCreateFlagBits {
1175a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1176a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1177a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline vertex input state creation flags
1178a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineVertexInputStateCreateFlags
1179a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineVertexInputStateCreateFlagBits {
1180a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1181a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1182a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline input assembly state creation flags
1183a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineInputAssemblyStateCreateFlags
1184a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
1185a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1186a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1187a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Tessellation state creation flags
1188a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineTessellationStateCreateFlags
1189a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineTessellationStateCreateFlagBits {
1190a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1191a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1192a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Viewport state creation flags
1193a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineViewportStateCreateFlags
1194a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineViewportStateCreateFlagBits {
1195a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1196a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
11973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall/// Rasterization state creation flags
11983fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkPipelineRasterizationStateCreateFlags
11993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall//bitfield VkPipelineRasterizationStateCreateFlagBits {
1200a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1201a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1202a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Multisample state creation flags
1203a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineMultisampleStateCreateFlags
1204a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineMultisampleStateCreateFlagBits {
1205a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1206a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1207a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Color blend state creation flags
1208a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineColorBlendStateCreateFlags
1209a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineColorBlendStateCreateFlagBits {
1210a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1211a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1212a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Depth/stencil state creation flags
1213a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineDepthStencilStateCreateFlags
1214a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineDepthStencilStateCreateFlagBits {
1215a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1216a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1217a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Dynamic state creation flags
1218a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineDynamicStateCreateFlags
1219a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineDynamicStateCreateFlagBits {
1220a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1221a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1222a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline layout creation flags
1223a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineLayoutCreateFlags
1224a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineLayoutCreateFlagBits {
1225a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1226a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1227a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Sampler creation flags
1228a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkSamplerCreateFlags
1229a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkSamplerCreateFlagBits {
1230a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1231a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1232a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Render pass creation flags
1233a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkRenderPassCreateFlags
1234a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkRenderPassCreateFlagBits {
1235a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1236a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1237a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Framebuffer creation flags
1238a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkFramebufferCreateFlags
1239a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkFramebufferCreateFlagBits {
1240a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1241a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1242dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall/// Dependency flags
1243dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Halltype VkFlags VkDependencyFlags
1244dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hallbitfield VkDependencyFlagBits {
1245dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VK_DEPENDENCY_BY_REGION_BIT                             = 0x00000001,
1246dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall}
1247dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall
1248c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall/// Cull mode flags
1249c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Halltype VkFlags VkCullModeFlags
1250c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hallbitfield VkCullModeFlagBits {
1251c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_NONE                                       = 0x00000000,
1252c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_FRONT_BIT                                  = 0x00000001,
1253c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_BACK_BIT                                   = 0x00000002,
1254c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
1255c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall}
1256c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall
1257523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_surface")
1258d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSurfaceTransformFlagsKHR
1259523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_surface")
1260d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSurfaceTransformFlagBitsKHR {
1261f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR                       = 0x00000001,
12629ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR                      = 0x00000002,
12639ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR                     = 0x00000004,
12649ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR                     = 0x00000008,
12659ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR              = 0x00000010,
12669ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR    = 0x00000020,
12679ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR   = 0x00000040,
12689ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR   = 0x00000080,
12699ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                        = 0x00000100,
127088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
1271d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1272523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_surface")
1273a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkCompositeAlphaFlagsKHR
1274523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_surface")
1275a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallbitfield VkCompositeAlphaFlagBitsKHR {
1276a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
1277a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
1278a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR              = 0x00000004,
1279a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
1280a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1281a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1282f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall@extension("VK_KHR_swapchain")
1283f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Halltype VkFlags VkSwapchainCreateFlagsKHR
1284f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall//@extension("VK_KHR_swapchain")
1285f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall//bitfield VkSwapchainCreateFlagBitsKHR {
1286f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall//}
1287f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall
12883e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
1289d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkDisplayPlaneAlphaFlagsKHR
12903e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
1291d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkDisplayPlaneAlphaFlagBitsKHR {
1292f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR                   = 0x00000001,
1293f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000002,
1294f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000004,
1295f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000008,
12961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
12971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1298f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall@extension("VK_KHR_display")
1299f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Halltype VkFlags VkDisplaySurfaceCreateFlagsKHR
1300f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall//@extension("VK_KHR_display")
1301f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall//bitfield VkDisplaySurfaceCreateFlagBitsKHR {
1302f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall//}
1303f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall
13049ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall@extension("VK_KHR_display")
13059ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Halltype VkFlags VkDisplayModeCreateFlagsKHR
13069ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall//@extension("VK_KHR_display")
13079ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall//bitfield VkDisplayModeCreateFlagBitsKHR {
13089ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall//}
13099ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall
1310f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_xlib_surface")
1311f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Halltype VkFlags VkXlibSurfaceCreateFlagsKHR
1312f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//@extension("VK_KHR_xlib_surface")
1313f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//bitfield VkXlibSurfaceCreateFlagBitsKHR {
1314f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//}
1315f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
1316f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_xcb_surface")
1317f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Halltype VkFlags VkXcbSurfaceCreateFlagsKHR
1318f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//@extension("VK_KHR_xcb_surface")
1319f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//bitfield VkXcbSurfaceCreateFlagBitsKHR {
1320f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//}
1321f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
1322f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_wayland_surface")
1323f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Halltype VkFlags VkWaylandSurfaceCreateFlagsKHR
1324f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//@extension("VK_KHR_wayland_surface")
1325f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//bitfield VkWaylandSurfaceCreateFlagBitsKHR {
1326f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//}
1327f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
1328f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_mir_surface")
1329f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Halltype VkFlags VkMirSurfaceCreateFlagsKHR
1330f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//@extension("VK_KHR_mir_surface")
1331f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//bitfield VkMirSurfaceCreateFlagBitsKHR {
1332f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//}
1333f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
1334f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_android_surface")
1335f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Halltype VkFlags VkAndroidSurfaceCreateFlagsKHR
1336f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//@extension("VK_KHR_android_surface")
1337f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//bitfield VkAndroidSurfaceCreateFlagBitsKHR {
1338f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//}
1339f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
1340f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_win32_surface")
1341f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Halltype VkFlags VkWin32SurfaceCreateFlagsKHR
1342f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//@extension("VK_KHR_win32_surface")
1343f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//bitfield VkWin32SurfaceCreateFlagBitsKHR {
1344f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall//}
1345f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
1346715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
1347715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Halltype VkFlags VkDebugReportFlagsEXT
1348715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
1349715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallbitfield VkDebugReportFlagBitsEXT {
1350e2948d83f352b9a093252a06757f76a88f5355d3Jesse Hall    VK_DEBUG_REPORT_INFORMATION_BIT_EXT                     = 0x00000001,
1351e2948d83f352b9a093252a06757f76a88f5355d3Jesse Hall    VK_DEBUG_REPORT_WARNING_BIT_EXT                         = 0x00000002,
1352e2948d83f352b9a093252a06757f76a88f5355d3Jesse Hall    VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT             = 0x00000004,
1353715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_ERROR_BIT_EXT                           = 0x00000008,
1354715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VK_DEBUG_REPORT_DEBUG_BIT_EXT                           = 0x00000010,
1355715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
1356715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
13571356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//////////////////
1359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Structures  //
1360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//////////////////
1361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1362d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkOffset2D {
1363d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         x
1364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         y
1365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkOffset3D {
1368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         x
1369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         y
1370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         z
1371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1372d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkExtent2D {
13743dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         width
13753dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         height
1376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1377d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1378d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkExtent3D {
13793dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         width
13803dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         height
13813dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         depth
1382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkViewport {
138565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    f32                                         x
138665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    f32                                         y
1387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         width
1388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         height
1389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minDepth
1390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxDepth
1391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkRect2D {
1394d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset2D                                  offset
1395d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent2D                                  extent
1396d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1398a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hallclass VkClearRect {
1399a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkRect2D                                    rect
1400a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         baseArrayLayer
14013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         layerCount
1402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1403d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
140465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallclass VkComponentMapping {
140565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          r
140665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          g
140765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          b
140865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          a
1409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceProperties {
1412d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         apiVersion
1413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         driverVersion
141465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         vendorID
141565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         deviceID
1416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPhysicalDeviceType                        deviceType
141765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]      deviceName
141865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u8[VK_UUID_SIZE]                            pipelineCacheUUID
14195ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkPhysicalDeviceLimits                      limits
14205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkPhysicalDeviceSparseProperties            sparseProperties
1421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1423d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkExtensionProperties {
142465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_EXTENSION_NAME_SIZE]            extensionName      /// extension name
1425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         specVersion        /// version of the extension specification implemented
1426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkLayerProperties {
142965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_EXTENSION_NAME_SIZE]            layerName               /// layer name
14303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         specVersion             /// version of the layer specification implemented
14313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         implementationVersion   /// build or release version of the layer's library
143265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_DESCRIPTION_SIZE]               description             /// Free-form description of the layer
1433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1435a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hallclass VkSubmitInfo {
143603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO
143703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    const void*                                 pNext              /// Next structure in chain
143803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         waitSemaphoreCount
1439a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    const VkSemaphore*                          pWaitSemaphores
1440543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    const VkPipelineStageFlags*                 pWaitDstStageMask
144103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         commandBufferCount
14423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const VkCommandBuffer*                      pCommandBuffers
144303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         signalSemaphoreCount
1444a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    const VkSemaphore*                          pSignalSemaphores
1445a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall}
1446a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall
1447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkApplicationInfo {
1448d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Next structure in chain
14503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const char*                                 pApplicationName
14513fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         applicationVersion
1452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char*                                 pEngineName
1453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         engineVersion
1454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         apiVersion
1455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
14573fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkAllocationCallbacks {
1458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    void*                                       pUserData
14593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    PFN_vkAllocationFunction                    pfnAllocation
14603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    PFN_vkReallocationFunction                  pfnReallocation
1461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    PFN_vkFreeFunction                          pfnFree
14623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    PFN_vkInternalAllocationNotification        pfnInternalAllocation
146303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    PFN_vkInternalFreeNotification              pfnInternalFree
1464d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDeviceQueueCreateInfo {
14675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
14685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const void*                                 pNext                     /// Pointer to next structure
1469a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDeviceQueueCreateFlags                    flags
1470d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         queueFamilyIndex
1471dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    u32                                         queueCount
1472fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const f32*                                  pQueuePriorities
1473d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDeviceCreateInfo {
1476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1477d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
1478a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDeviceCreateFlags                         flags
1479dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    u32                                         queueCreateInfoCount
1480dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    const VkDeviceQueueCreateInfo*              pQueueCreateInfos
14813dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         enabledLayerCount
1482d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
14833dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         enabledExtensionCount
1484d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledExtensionNames
1485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPhysicalDeviceFeatures*             pEnabledFeatures
1486d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkInstanceCreateInfo {
1489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
1491a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkInstanceCreateFlags                       flags
14923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const VkApplicationInfo*                    pApplicationInfo
14933dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         enabledLayerCount
1494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
14953dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         enabledExtensionCount
1496d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledExtensionNames    /// Extension names to be enabled
1497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
14995ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkQueueFamilyProperties {
1500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueueFlags                                queueFlags                 /// Queue flags
1501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         queueCount
1502acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall    u32                                         timestampValidBits
150365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkExtent3D                                  minImageTransferGranularity
1504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceMemoryProperties {
1507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryTypeCount
1508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryType[VK_MAX_MEMORY_TYPES]           memoryTypes
1509d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryHeapCount
1510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryHeap[VK_MAX_MEMORY_HEAPS]           memoryHeaps
1511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
15133fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkMemoryAllocateInfo {
1514f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
1515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
15165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                allocationSize             /// Size of memory allocation
1517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryTypeIndex            /// Index of the of the memory type to allocate from
1518d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1519d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryRequirements {
15215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Specified in bytes
15225ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                alignment                  /// Specified in bytes
1523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryTypeBits             /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1525d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSparseImageFormatProperties {
15273e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkImageAspectFlagBits                       aspectMask
1528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  imageGranularity
1529d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSparseImageFormatFlags                    flags
1530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSparseImageMemoryRequirements {
1533b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkSparseImageFormatProperties               formatProperties
1534f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    u32                                         imageMipTailFirstLod
15355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                imageMipTailSize           /// Specified in bytes, must be a multiple of image block size / alignment
15365ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                imageMipTailOffset         /// Specified in bytes, must be a multiple of image block size / alignment
15375ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                imageMipTailStride         /// Specified in bytes, must be a multiple of image block size / alignment
1538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryType {
1541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryPropertyFlags                       propertyFlags              /// Memory properties of this memory type
1542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         heapIndex                  /// Index of the memory heap allocations of this memory type are taken from
1543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1544d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1545d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryHeap {
15465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Available memory in the heap
1547d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryHeapFlags                           flags                      /// Flags for the heap
1548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1549d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMappedMemoryRange {
1551d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
15533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory                              memory                     /// Mapped memory object
15545ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Offset within the mapped memory the range starts from
15555ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Size of the range within the mapped memory
1556d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkFormatProperties {
1559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormatFeatureFlags                        linearTilingFeatures       /// Format features in case of linear tiling
1560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormatFeatureFlags                        optimalTilingFeatures      /// Format features in case of optimal tiling
15615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkFormatFeatureFlags                        bufferFeatures             /// Format features supported by buffers
1562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1564d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageFormatProperties {
15655ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkExtent3D                                  maxExtent                  /// max image dimensions for this resource type
15665ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxMipLevels               /// max number of mipmap levels for this resource type
1567a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         maxArrayLayers             /// max array layers for this resource type
15685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkSampleCountFlags                          sampleCounts               /// supported sample counts for this resource type
15695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                maxResourceSize            /// max size (in bytes) of this resource type
15705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
15715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1572a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hallclass VkDescriptorImageInfo {
1573a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkSampler                                   sampler
1574a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkImageView                                 imageView
1575a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkImageLayout                               imageLayout
1576a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall}
1577a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall
15785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkDescriptorBufferInfo {
15795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBuffer                                    buffer                     /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
15805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Base offset from buffer start in bytes to update in the descriptor set.
15815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                range                      /// Size in bytes of the buffer resource for this descriptor update.
1582d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1583d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1584d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkWriteDescriptorSet {
1585d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1586d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
15873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDescriptorSet                             dstSet                     /// Destination descriptor set
15883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstBinding                 /// Binding within the destination descriptor set to write
15893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstArrayElement            /// Array element within the destination binding to write
159003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         descriptorCount            /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
1591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorType                            descriptorType             /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
1592fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkDescriptorImageInfo*                pImageInfo
1593fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkDescriptorBufferInfo*               pBufferInfo
1594fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkBufferView*                         pTexelBufferView
1595d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1596d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1597d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkCopyDescriptorSet {
1598d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1599d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
1600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorSet                             srcSet                     /// Source descriptor set
1601d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcBinding                 /// Binding within the source descriptor set to copy from
1602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcArrayElement            /// Array element within the source binding to copy from
16033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDescriptorSet                             dstSet                     /// Destination descriptor set
16043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstBinding                 /// Binding within the destination descriptor set to copy to
16053fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstArrayElement            /// Array element within the destination binding to copy to
160603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         descriptorCount            /// Number of descriptors to copy
1607d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1608d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1609d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferCreateInfo {
1610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1611d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
1612a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBufferCreateFlags                         flags                      /// Buffer creation flags
16135ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Specified in bytes
1614d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBufferUsageFlags                          usage                      /// Buffer usage flags
1615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSharingMode                               sharingMode
161603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queueFamilyIndexCount
1617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const u32*                                  pQueueFamilyIndices
1618d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1619d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1620d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferViewCreateInfo {
1621d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1622d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
1623a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBufferViewCreateFlags                     flags
1624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBuffer                                    buffer
1625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format                     /// Optionally specifies format of elements
16265ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Specified in bytes
16275ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                range                      /// View size specified in bytes
1628d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1629d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1630d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageSubresource {
16313e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkImageAspectFlagBits                       aspectMask
1632d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mipLevel
16335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         arrayLayer
1634d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1635d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1636d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageSubresourceRange {
16375ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkImageAspectFlags                          aspectMask
1638d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         baseMipLevel
16393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         levelCount
16405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         baseArrayLayer
16413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         layerCount
1642d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1643d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1644d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryBarrier {
1645d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1646d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
16473e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
16483e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
1649d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1650d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1651d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferMemoryBarrier {
1652d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1653d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
16543e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
16553e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
1656d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
16573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
1658d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBuffer                                    buffer                     /// Buffer to sync
16595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Offset within the buffer to sync
16605ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Amount of bytes to sync
1661d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1662d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1663d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageMemoryBarrier {
1664d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1665d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
16663e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
16673e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
1668d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               oldLayout                  /// Current layout of the image
1669d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               newLayout                  /// New layout to transition the image to
1670d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
16713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
1672d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImage                                     image                      /// Image to sync
1673d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageSubresourceRange                     subresourceRange           /// Subresource range to sync
1674d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1675d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1676d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageCreateInfo {
1677d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1678d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
1679a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImageCreateFlags                          flags                      /// Image creation flags
1680d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageType                                 imageType
1681d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format
1682d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent
1683d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mipLevels
1684a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         arrayLayers
1685091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlagBits                       samples
1686d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageTiling                               tiling
1687d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageUsageFlags                           usage                      /// Image usage flags
1688d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
168903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queueFamilyIndexCount      /// Number of queue families to share across
1690d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const u32*                                  pQueueFamilyIndices        /// Array of queue family indices to share across
16915ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkImageLayout                               initialLayout              /// Initial image layout for all subresources
1692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1693d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1694d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSubresourceLayout {
16955ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                 /// Specified in bytes
16965ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                   /// Specified in bytes
16975ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                rowPitch               /// Specified in bytes
1698543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VkDeviceSize                                arrayPitch             /// Specified in bytes
16995ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                depthPitch             /// Specified in bytes
1700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1702d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageViewCreateInfo {
1703d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                  /// Pointer to next structure
1705a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImageViewCreateFlags                      flags
1706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImage                                     image
1707d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageViewType                             viewType
1708d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format
170965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentMapping                          components
1710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageSubresourceRange                     subresourceRange
1711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1713d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferCopy {
17145ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                srcOffset              /// Specified in bytes
17153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                                dstOffset              /// Specified in bytes
1716b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkDeviceSize                                size                   /// Specified in bytes
1717d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1718d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1719a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseMemoryBind {
1720b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkDeviceSize                                resourceOffset        /// Specified in bytes
1721b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkDeviceSize                                size                  /// Specified in bytes
17223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory                              memory
17233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                                memoryOffset          /// Specified in bytes
1724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSparseMemoryBindFlags                     flags
1725d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1727a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseImageMemoryBind {
1728d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageSubresource                          subresource
1729d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  offset
1730d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent
17313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory                              memory
17323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                                memoryOffset          /// Specified in bytes
1733d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSparseMemoryBindFlags                     flags
1734d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1735d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1736a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseBufferMemoryBindInfo {
1737a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBuffer                                    buffer
1738a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         bindCount
1739a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseMemoryBind*                   pBinds
1740a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1741a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1742a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseImageOpaqueMemoryBindInfo {
1743a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImage                                     image
1744a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         bindCount
1745a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseMemoryBind*                   pBinds
1746a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1747a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1748a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseImageMemoryBindInfo {
1749a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImage                                     image
1750a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         bindCount
1751a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseMemoryBind*                   pBinds
1752a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1753a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1754a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkBindSparseInfo {
1755a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
1756a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const void*                                 pNext
1757a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         waitSemaphoreCount
1758a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSemaphore*                          pWaitSemaphores
1759a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         numBufferBinds
1760a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseBufferMemoryBindInfo*         pBufferBinds
1761a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         numImageOpaqueBinds
1762a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds
1763a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         numImageBinds
1764a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseImageMemoryBindInfo*          pImageBinds
1765a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         signalSemaphoreCount
1766a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSemaphore*                          pSignalSemaphores
1767a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1768a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
176965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallclass VkImageSubresourceLayers {
177065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageAspectFlags                          aspectMask
17715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         mipLevel
1772a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         baseArrayLayer
17733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         layerCount
17745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
17755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1776d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageCopy {
177765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    srcSubresource
1778d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  srcOffset             /// Specified in pixels for both compressed and uncompressed images
177965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    dstSubresource
17803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkOffset3D                                  dstOffset             /// Specified in pixels for both compressed and uncompressed images
1781d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent                /// Specified in pixels for both compressed and uncompressed images
1782d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1784d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageBlit {
178565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    srcSubresource
17863dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VkOffset3D[2]                               srcOffsets
178765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    dstSubresource
17883dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VkOffset3D[2]                               dstOffsets
1789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1790d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1791d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferImageCopy {
17925ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                bufferOffset           /// Specified in bytes
1793d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         bufferRowLength        /// Specified in texels
1794d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         bufferImageHeight
179565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    imageSubresource
1796d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  imageOffset            /// Specified in pixels for both compressed and uncompressed images
1797d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  imageExtent            /// Specified in pixels for both compressed and uncompressed images
1798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1799d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1800d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageResolve {
180165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    srcSubresource
1802d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  srcOffset
180365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    dstSubresource
18043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkOffset3D                                  dstOffset
1805d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent
1806d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1807d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkShaderModuleCreateInfo {
1809d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1810d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                  /// Pointer to next structure
1811a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkShaderModuleCreateFlags                   flags                  /// Reserved
1812d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    platform.size_t                             codeSize               /// Specified in bytes
1813a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    const u32*                                  pCode                  /// Binary code of size codeSize
1814d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1815d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1816d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDescriptorSetLayoutBinding {
1817091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    u32                                         binding
1818d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorType                            descriptorType     /// Type of the descriptors in this binding
1819dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    u32                                         descriptorCount    /// Number of descriptors in this binding
1820d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkShaderStageFlags                          stageFlags         /// Shader stages this binding is visible to
1821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSampler*                            pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
1822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1823d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1824d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDescriptorSetLayoutCreateInfo {
1825d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1827a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDescriptorSetLayoutCreateFlags            flags
182803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         bindingCount       /// Number of bindings in the descriptor set layout
1829543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
1830d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1831d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
183265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallclass VkDescriptorPoolSize {
1833d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorType                            type
183403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         descriptorCount
1835d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1836d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1837d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDescriptorPoolCreateInfo {
1838d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1839d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1840fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkDescriptorPoolCreateFlags                 flags
18415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxSets
184265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         poolSizeCount
184365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    const VkDescriptorPoolSize*                 pPoolSizes
1844d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1845d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
18463fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDescriptorSetAllocateInfo {
1847f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
1848fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1849fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkDescriptorPool                            descriptorPool
185003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         setCount
1851fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkDescriptorSetLayout*                pSetLayouts
1852fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall}
1853fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
1854d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSpecializationMapEntry {
185565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         constantID         /// The SpecConstant ID specified in the BIL
1856d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         offset             /// Offset of the value in the data block
1857b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    platform.size_t                             size               /// Size in bytes of the SpecConstant
1858d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1859d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSpecializationInfo {
1861d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mapEntryCount      /// Number of entries in the map
1862b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const VkSpecializationMapEntry*             pMapEntries        /// Array of map entries
1863d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    platform.size_t                             dataSize           /// Size in bytes of pData
1864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pData              /// Pointer to SpecConstant data
1865d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1866d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1867d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineShaderStageCreateInfo {
1868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1869d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1870a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineShaderStageCreateFlags            flags
18713e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkShaderStageFlagBits                       stage
18723e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkShaderModule                              module
18733e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    const char*                                 pName
1874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSpecializationInfo*                 pSpecializationInfo
1875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1876d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkComputePipelineCreateInfo {
1878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipelineCreateFlags                       flags              /// Pipeline creation flags
1881a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineShaderStageCreateInfo             stage
1882d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipelineLayout                            layout             /// Interface layout of the pipeline
1883d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipeline                                  basePipelineHandle /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
1884d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         basePipelineIndex  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
1885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkVertexInputBindingDescription {
1888b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         binding               /// Vertex buffer binding id
1889b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         stride                /// Distance between vertices in bytes (0 = no advancement)
189065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkVertexInputRate                           inputRate             /// Rate at which binding is incremented
1891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1893d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkVertexInputAttributeDescription {
1894b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         location              /// location of the shader vertex attrib
1895b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         binding               /// Vertex buffer binding id
1896b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkFormat                                    format                /// format of source data
1897b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         offset                /// Offset of first element in bytes from base of vertex
1898d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1899d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1900d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineVertexInputStateCreateInfo {
190103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VkStructureType                             sType                           /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
190203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    const void*                                 pNext                           /// Pointer to next structure
1903a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineVertexInputStateCreateFlags       flags
190403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         vertexBindingDescriptionCount   /// number of bindings
1905d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkVertexInputBindingDescription*      pVertexBindingDescriptions
190603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         vertexAttributeDescriptionCount /// number of attributes
1907d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions
1908d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1909d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1910d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineInputAssemblyStateCreateInfo {
1911d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
1912d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1913a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineInputAssemblyStateCreateFlags     flags
1914d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPrimitiveTopology                         topology
19155ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    primitiveRestartEnable
1916d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1917d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1918d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineTessellationStateCreateInfo {
1919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
1920d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1921a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineTessellationStateCreateFlags      flags
1922d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         patchControlPoints
1923d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1924d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1925d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineViewportStateCreateInfo {
1926d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
1927d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1928a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineViewportStateCreateFlags          flags
1929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         viewportCount
19305ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkViewport*                           pViewports
19315ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         scissorCount
19325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkRect2D*                             pScissors
1933d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
19353fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkPipelineRasterizationStateCreateInfo {
193665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
1937d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
19383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkPipelineRasterizationStateCreateFlags     flags
1939ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkBool32                                    depthClampEnable
19405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    rasterizerDiscardEnable
194165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkPolygonMode                               polygonMode                   /// optional (GL45)
1942c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VkCullModeFlags                             cullMode
1943d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFrontFace                                 frontFace
19445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBiasEnable
1945a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    f32                                         depthBiasConstantFactor
19465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         depthBiasClamp
1947a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    f32                                         depthBiasSlopeFactor
19485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         lineWidth
1949d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1950d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1951d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineMultisampleStateCreateInfo {
1952d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
1953d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1954a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineMultisampleStateCreateFlags       flags
1955091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlagBits                       rasterizationSamples       /// Number of samples used for rasterization
19565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sampleShadingEnable        /// optional (GL45)
1957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minSampleShading           /// optional (GL45)
19585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkSampleMask*                         pSampleMask
1959acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall    VkBool32                                    alphaToCoverageEnable
1960acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall    VkBool32                                    alphaToOneEnable
1961d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1962d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineColorBlendAttachmentState {
19645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    blendEnable
196565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               srcColorBlendFactor
196665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               dstColorBlendFactor
196765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendOp                                   colorBlendOp
196865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               srcAlphaBlendFactor
196965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               dstAlphaBlendFactor
197065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendOp                                   alphaBlendOp
197165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkColorComponentFlags                       colorWriteMask
1972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1973d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1974d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineColorBlendStateCreateInfo {
1975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
1976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1977a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineColorBlendStateCreateFlags        flags
19785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    logicOpEnable
1979d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkLogicOp                                   logicOp
1980d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachmentCount    /// # of pAttachments
1981d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineColorBlendAttachmentState*  pAttachments
1982b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    f32[4]                                      blendConstants
1983d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1984d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkStencilOpState {
198665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStencilOp                                 failOp
198765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStencilOp                                 passOp
198865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStencilOp                                 depthFailOp
198965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkCompareOp                                 compareOp
199065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         compareMask
199165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         writeMask
199265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         reference
1993d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1994d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1995d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineDepthStencilStateCreateInfo {
1996d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
1997d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1998a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineDepthStencilStateCreateFlags      flags
19995ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthTestEnable
20005ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthWriteEnable
2001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkCompareOp                                 depthCompareOp
20025ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBoundsTestEnable  /// optional (depth_bounds_test)
20035ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    stencilTestEnable
2004d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStencilOpState                            front
2005d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStencilOpState                            back
20065ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         minDepthBounds
20075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         maxDepthBounds
20085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
20095ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
20105ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkPipelineDynamicStateCreateInfo {
20115ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
20125ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2013a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineDynamicStateCreateFlags           flags
20145ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         dynamicStateCount
20155ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkDynamicState*                       pDynamicStates
2016d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2017d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2018d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkGraphicsPipelineCreateInfo {
2019a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkStructureType                                 sType               /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
2020a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const void*                                     pNext               /// Pointer to next structure
2021a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineCreateFlags                           flags               /// Pipeline creation flags
2022d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                             stageCount
2023a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkPipelineShaderStageCreateInfo*          pStages             /// One entry for each active shader stage
2024d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineVertexInputStateCreateInfo*     pVertexInputState
2025d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState
2026d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineTessellationStateCreateInfo*    pTessellationState
2027d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineViewportStateCreateInfo*        pViewportState
20283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const VkPipelineRasterizationStateCreateInfo*   pRasterizationState
2029d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineMultisampleStateCreateInfo*     pMultisampleState
2030d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
2031d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
20325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkPipelineDynamicStateCreateInfo*         pDynamicState
2033a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineLayout                                layout              /// Interface layout of the pipeline
2034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                    renderPass
2035d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                             subpass
2036a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipeline                                      basePipelineHandle  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
2037a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    s32                                             basePipelineIndex   /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
2038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2039d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2040d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineCacheCreateInfo {
2041b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
2042b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const void*                                 pNext                 /// Pointer to next structure
2043a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineCacheCreateFlags                  flags
2044b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    platform.size_t                             initialDataSize       /// Size of initial data to populate cache, in bytes
2045b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const void*                                 pInitialData          /// Initial data to populate cache
2046d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2047d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPushConstantRange {
2049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkShaderStageFlags                          stageFlags   /// Which stages use the range
205003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         offset       /// Start of the range, in bytes
205103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         size        /// Length of the range, in bytes
2052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2054d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineLayoutCreateInfo {
2055d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                   /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
2056d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                   /// Pointer to next structure
2057a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineLayoutCreateFlags                 flags
20583dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         descriptorSetCount      /// Number of descriptor sets interfaced by the pipeline
2059d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkDescriptorSetLayout*                pSetLayouts             /// Array of <setCount> number of descriptor set layout objects defining the layout of the
2060d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         pushConstantRangeCount  /// Number of push-constant ranges used by the pipeline
2061d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPushConstantRange*                  pPushConstantRanges     /// Array of pushConstantRangeCount number of ranges used by various shader stages
2062d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2063d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2064d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSamplerCreateInfo {
2065d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType          /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
2066d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext          /// Pointer to next structure
2067a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkSamplerCreateFlags                        flags
206823ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkFilter                                    magFilter      /// Filter mode for magnification
206923ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkFilter                                    minFilter      /// Filter mode for minifiation
207023ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerMipmapMode                         mipmapMode     /// Mipmap selection mode
207123ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerAddressMode                        addressModeU
207223ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerAddressMode                        addressModeV
207323ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerAddressMode                        addressModeW
2074d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         mipLodBias
2075f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkBool32                                    anisotropyEnable
2076d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxAnisotropy
20775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    compareEnable
2078d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkCompareOp                                 compareOp
2079d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minLod
2080d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxLod
2081d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBorderColor                               borderColor
20825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    unnormalizedCoordinates
2083d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2084d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
20853fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkCommandPoolCreateInfo {
20863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
2087d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext            /// Pointer to next structure
20883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandPoolCreateFlags                    flags            /// Command pool creation flags
2089a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         queueFamilyIndex
2090d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2091d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
20923fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkCommandBufferAllocateInfo {
2093f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
2094d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
20953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandPool                               commandPool
20963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandBufferLevel                        level
20973dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         commandBufferCount
2098d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2099d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
21003dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hallclass VkCommandBufferInheritanceInfo {
21013dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
2102d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext       /// Pointer to next structure
2103d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                renderPass  /// Render pass for secondary command buffers
21045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         subpass
2105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
2106f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkBool32                                    occlusionQueryEnable
2107f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkQueryControlFlags                         queryFlags
2108f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkQueryPipelineStatisticFlags               pipelineStatistics
2109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2110d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
21113dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hallclass VkCommandBufferBeginInfo {
21123dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
21133dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    const void*                                 pNext       /// Pointer to next structure
21143dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    VkCommandBufferUsageFlags                   flags       /// Command buffer usage flags
21153dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    const VkCommandBufferInheritanceInfo*       pInheritanceInfo
21163dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall}
21173dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall
2118d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkRenderPassBeginInfo {
2119d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
2120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext       /// Pointer to next structure
2121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                renderPass
2122d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFramebuffer                               framebuffer
2123d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRect2D                                    renderArea
21245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         clearValueCount
21255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkClearValue*                         pClearValues
2126d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2127d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@union
2129d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
2130d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkClearColorValue {
21315ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32[4]                                      float32
21325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    s32[4]                                      int32
21335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32[4]                                      uint32
2134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkClearDepthStencilValue {
2137d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         depth
2138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         stencil
2139d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2140d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2141d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@union
2142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
2143d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkClearValue {
2144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkClearColorValue                           color
21455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkClearDepthStencilValue                    depthStencil
2146d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2148ae38f7355fd03b777313e13586585a74e0dee05bJesse Hallclass VkClearAttachment {
2149ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkImageAspectFlags                          aspectMask
2150ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         colorAttachment
2151ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkClearValue                                clearValue
2152ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall}
2153ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall
2154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkAttachmentDescription {
2155a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkAttachmentDescriptionFlags                flags
2156d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format
2157091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlagBits                       samples
2158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentLoadOp                          loadOp          /// Load op for color or depth data
2159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentStoreOp                         storeOp         /// Store op for color or depth data
2160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentLoadOp                          stencilLoadOp   /// Load op for stencil data
2161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentStoreOp                         stencilStoreOp  /// Store op for stencil data
2162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               initialLayout
2163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               finalLayout
2164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkAttachmentReference {
2167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachment
2168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               layout
2169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSubpassDescription {
2172d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSubpassDescriptionFlags                   flags
2173a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
217403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         inputAttachmentCount
21755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pInputAttachments
217603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         colorAttachmentCount
21775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pColorAttachments
21785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pResolveAttachments
2179c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    const VkAttachmentReference*                pDepthStencilAttachment
218003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         preserveAttachmentCount
21813dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    const u32*                                  pPreserveAttachments
2182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSubpassDependency {
2185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcSubpass
21863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstSubpass
2187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipelineStageFlags                        srcStageMask
21883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkPipelineStageFlags                        dstStageMask
21893e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
21903e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
2191dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDependencyFlags                           dependencyFlags
2192d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2193d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2194d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkRenderPassCreateInfo {
2195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
2196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2197a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkRenderPassCreateFlags                     flags
2198d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachmentCount
2199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkAttachmentDescription*              pAttachments
2200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subpassCount
2201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSubpassDescription*                 pSubpasses
2202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         dependencyCount
2203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSubpassDependency*                  pDependencies
2204d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2205d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2206d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkEventCreateInfo {
2207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
2208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkEventCreateFlags                          flags      /// Event creation flags
2210d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2211d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkFenceCreateInfo {
2213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
2214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFenceCreateFlags                          flags      /// Fence creation flags
2216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2217d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2218d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceFeatures {
22195ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    robustBufferAccess                        /// out of bounds buffer accesses are well defined
22205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    fullDrawIndexUint32                       /// full 32-bit range of indices for indexed draw calls
22215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    imageCubeArray                            /// image views which are arrays of cube maps
22225ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    independentBlend                          /// blending operations are controlled per-attachment
22235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    geometryShader                            /// geometry stage
22245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    tessellationShader                        /// tessellation control and evaluation stage
22255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sampleRateShading                         /// per-sample shading and interpolation
22263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkBool32                                    dualSrcBlend                              /// blend operations which take two sources
22275ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    logicOp                                   /// logic operations
22285ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    multiDrawIndirect                         /// multi draw indirect
2229543a7ffb9845637b4dc0d40898bf5b1057dbc3eaJesse Hall    VkBool32                                    drawIndirectFirstInstance
2230ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkBool32                                    depthClamp                                /// depth clamping
22315ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBiasClamp                            /// depth bias clamping
22325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
22335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBounds                               /// depth bounds test
22345ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    wideLines                                 /// lines with width greater than 1
22355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    largePoints                               /// points with size greater than 1
2236fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
2237fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkBool32                                    multiViewport
2238fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkBool32                                    samplerAnisotropy
22395ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    textureCompressionETC2                    /// ETC texture compression formats
22405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    textureCompressionASTC_LDR                /// ASTC LDR texture compression formats
22415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    textureCompressionBC                      /// BC1-7 texture compressed formats
224265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBool32                                    occlusionQueryPrecise
22435ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    pipelineStatisticsQuery                   /// pipeline statistics query
2244dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkBool32                                    vertexPipelineStoresAndAtomics
2245dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkBool32                                    fragmentStoresAndAtomics
2246dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkBool32                                    shaderTessellationAndGeometryPointSize
22475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderImageGatherExtended                 /// texture gather with run-time values and independent offsets
22485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageImageExtendedFormats         /// the extended set of formats can be used for storage images
22495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageImageMultisample             /// multisample images can be used for storage images
2250d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VkBool32                                    shaderStorageImageReadWithoutFormat
2251d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VkBool32                                    shaderStorageImageWriteWithoutFormat
22525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderUniformBufferArrayDynamicIndexing   /// arrays of uniform buffers can be accessed with dynamically uniform indices
22535ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderSampledImageArrayDynamicIndexing    /// arrays of sampled images can be accessed with dynamically uniform indices
22545ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageBufferArrayDynamicIndexing   /// arrays of storage buffers can be accessed with dynamically uniform indices
22555ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageImageArrayDynamicIndexing    /// arrays of storage images can be accessed with dynamically uniform indices
22565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderClipDistance                        /// clip distance in shaders
22575ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderCullDistance                        /// cull distance in shaders
22585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderFloat64                             /// 64-bit floats (doubles) in shaders
22595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderInt64                               /// 64-bit integers in shaders
22605ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderInt16                               /// 16-bit integers in shaders
22615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderResourceResidency                   /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
226265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBool32                                    shaderResourceMinLod                      /// shader can use texture operations that specify minimum resource LOD
22635ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseBinding                             /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
22645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyBuffer                     /// Sparse resources support: GPU can access partially resident buffers
22655ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyImage2D                    /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
22665ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyImage3D                    /// Sparse resources support: GPU can access partially resident 3D images
22675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency2Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
22685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency4Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
22695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency8Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
22705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency16Samples                  /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
22715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyAliased                    /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
2272d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VkBool32                                    variableMultisampleRate
2273f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkBool32                                    inheritedQueries
2274d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2275d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2276d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceLimits {
2277d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// resource maximum sizes
2278d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimension1D                       /// max 1D image dimension
2279d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimension2D                       /// max 2D image dimension
2280d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimension3D                       /// max 3D image dimension
2281d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimensionCube                     /// max cubemap image dimension
2282d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageArrayLayers                       /// max layers for image arrays
2283b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         maxTexelBufferElements
2284fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         maxUniformBufferRange                     /// max uniform buffer size (bytes)
2285fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         maxStorageBufferRange                     /// max storage buffer size (bytes)
2286d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPushConstantsSize                      /// max size of the push constants pool (bytes)
2287d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// memory limits
2288d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxMemoryAllocationCount                  /// max number of device memory allocations supported
2289091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    u32                                         maxSamplerAllocationCount
22905ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                bufferImageGranularity                    /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
22915ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                sparseAddressSpaceSize                    /// Total address space available for sparse allocations (bytes)
2292d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// descriptor set limits
2293d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxBoundDescriptorSets                    /// max number of descriptors sets that can be bound to a pipeline
2294d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorSamplers             /// max num of samplers allowed per-stage in a descriptor set
2295d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorUniformBuffers       /// max num of uniform buffers allowed per-stage in a descriptor set
2296d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorStorageBuffers       /// max num of storage buffers allowed per-stage in a descriptor set
2297d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorSampledImages        /// max num of sampled images allowed per-stage in a descriptor set
2298d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorStorageImages        /// max num of storage images allowed per-stage in a descriptor set
2299e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall    u32                                         maxPerStageDescriptorInputAttachments
2300dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    u32                                         maxPerStageResources
2301d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetSamplers                  /// max num of samplers allowed in all stages in a descriptor set
2302d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetUniformBuffers            /// max num of uniform buffers allowed in all stages in a descriptor set
23035ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxDescriptorSetUniformBuffersDynamic     /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
2304d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetStorageBuffers            /// max num of storage buffers allowed in all stages in a descriptor set
23055ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxDescriptorSetStorageBuffersDynamic     /// max num of dynamic storage buffers allowed in all stages in a descriptor set
2306d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetSampledImages             /// max num of sampled images allowed in all stages in a descriptor set
2307d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetStorageImages             /// max num of storage images allowed in all stages in a descriptor set
2308e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall    u32                                         maxDescriptorSetInputAttachments
2309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// vertex stage limits
2310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexInputAttributes                  /// max num of vertex input attribute slots
23115ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxVertexInputBindings                    /// max num of vertex input binding slots
2312d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexInputAttributeOffset             /// max vertex input attribute offset added to vertex buffer offset
2313d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexInputBindingStride               /// max vertex input binding stride
2314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexOutputComponents                 /// max num of output components written by vertex shader
2315d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// tessellation control stage limits
23163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         maxTessellationGenerationLevel                  /// max level supported by tess primitive generator
2317ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationPatchSize                        /// max patch size (vertices)
2318ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlPerVertexInputComponents  /// max num of input components per-vertex in TCS
2319ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
2320ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlPerPatchOutputComponents  /// max num of output components per-patch in TCS
2321ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlTotalOutputComponents     /// max total num of per-vertex and per-patch output components in TCS
2322ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationEvaluationInputComponents        /// max num of input components per vertex in TES
2323ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationEvaluationOutputComponents       /// max num of output components per vertex in TES
2324d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// geometry stage limits
2325d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryShaderInvocations              /// max invocation count supported in geometry shader
2326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryInputComponents                /// max num of input components read in geometry stage
2327d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryOutputComponents               /// max num of output components written in geometry stage
2328d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryOutputVertices                 /// max num of vertices that can be emitted in geometry stage
2329d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryTotalOutputComponents          /// max total num of components (all vertices) written in geometry stage
2330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// fragment stage limits
2331d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFragmentInputComponents                /// max num of input compontents read in fragment stage
2332fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         maxFragmentOutputAttachments              /// max num of output attachments written in fragment stage
23333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         maxFragmentDualSrcAttachments             /// max num of output attachments written when using dual source blending
2334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFragmentCombinedOutputResources        /// max total num of storage buffers, storage images and output buffers
2335d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// compute stage limits
2336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxComputeSharedMemorySize                /// max total storage size of work group local storage (bytes)
2337d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32[3]                                      maxComputeWorkGroupCount                  /// max num of compute work groups that may be dispatched by a single command (x,y,z)
2338d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxComputeWorkGroupInvocations            /// max total compute invocations in a single local work group
2339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32[3]                                      maxComputeWorkGroupSize                   /// max local size of a compute work group (x,y,z)
2340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subPixelPrecisionBits                     /// num bits of subpixel precision in screen x and y
2342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subTexelPrecisionBits                     /// num bits of subtexel precision
2343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mipmapPrecisionBits                       /// num bits of mipmap precision
2344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDrawIndexedIndexValue                  /// max index value for indexed draw calls (for 32-bit indices)
2346dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    u32                                         maxDrawIndirectCount
2347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxSamplerLodBias                         /// max absolute sampler level of detail bias
2349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxSamplerAnisotropy                      /// max degree of sampler anisotropy
2350d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxViewports                              /// max number of active viewports
2352d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32[2]                                      maxViewportDimensions                     /// max viewport dimensions (x,y)
2353d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32[2]                                      viewportBoundsRange                       /// viewport bounds range (min,max)
2354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         viewportSubPixelBits                      /// num bits of subpixel precision for viewport
2355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2356dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    platform.size_t                             minMemoryMapAlignment                     /// min required alignment of pointers returned by MapMemory (bytes)
2357dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDeviceSize                                minTexelBufferOffsetAlignment             /// min required alignment for texel buffer offsets (bytes)
2358dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDeviceSize                                minUniformBufferOffsetAlignment           /// min required alignment for uniform buffer sizes and offsets (bytes)
2359dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDeviceSize                                minStorageBufferOffsetAlignment           /// min required alignment for storage buffer offsets (bytes)
2360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2361fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    s32                                         minTexelOffset                            /// min texel offset for OpTextureSampleOffset
2362d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxTexelOffset                            /// max texel offset for OpTextureSampleOffset
2363fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    s32                                         minTexelGatherOffset                      /// min texel offset for OpTextureGatherOffset
2364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxTexelGatherOffset                      /// max texel offset for OpTextureGatherOffset
2365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minInterpolationOffset                    /// furthest negative offset for interpolateAtOffset
2366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxInterpolationOffset                    /// furthest positive offset for interpolateAtOffset
2367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subPixelInterpolationOffsetBits           /// num of subpixel bits for interpolateAtOffset
2368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFramebufferWidth                       /// max width for a framebuffer
2370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFramebufferHeight                      /// max height for a framebuffer
2371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFramebufferLayers                      /// max layer count for a layered framebuffer
2372091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferColorSampleCounts
2373091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferDepthSampleCounts
2374091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferStencilSampleCounts
2375091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferNoAttachmentSampleCounts
2376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxColorAttachments                       /// max num of framebuffer color attachments
2377d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2378091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageColorSampleCounts
2379091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageIntegerSampleCounts
2380091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageDepthSampleCounts
2381091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageStencilSampleCounts
2382091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          storageImageSampleCounts
2383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxSampleMaskWords                        /// max num of sample mask words
2384f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkBool32                                    timestampComputeAndGraphics
2385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2386a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    f32                                         timestampPeriod
2387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxClipDistances                          /// max number of clip distances
2389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxCullDistances                          /// max number of cull distances
2390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxCombinedClipAndCullDistances           /// max combined number of user clipping
2391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2392fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         discreteQueuePriorities
2393fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
23945ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32[2]                                      pointSizeRange                            /// range (min,max) of supported point sizes
23955ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32[2]                                      lineWidthRange                            /// range (min,max) of supported line widths
2396d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         pointSizeGranularity                      /// granularity of supported point sizes
2397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         lineWidthGranularity                      /// granularity of supported line widths
239803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VkBool32                                    strictLines
2399091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkBool32                                    standardSampleLocations
2400a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall
240165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkDeviceSize                                optimalBufferCopyOffsetAlignment
240265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkDeviceSize                                optimalBufferCopyRowPitchAlignment
2403dba27f71fad236f08deae3d0b987e83700b32f94Jesse Hall    VkDeviceSize                                nonCoherentAtomSize
2404d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2405d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24065ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkPhysicalDeviceSparseProperties {
24075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    residencyStandard2DBlockShape             /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
2408b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkBool32                                    residencyStandard2DMultisampleBlockShape  /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
24095ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    residencyStandard3DBlockShape             /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
24105ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    residencyAlignedMipSize                   /// Sparse resources support: Images with mip-level dimensions that are NOT a multiple of the block size will be placed in the mip tail
24115ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    residencyNonResidentStrict                /// Sparse resources support: GPU can safely access non-resident regions of a resource, all reads return as if data is 0, writes are discarded
24125ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
24135ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
2414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSemaphoreCreateInfo {
2415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
2416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSemaphoreCreateFlags                      flags      /// Semaphore creation flags
2418d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkQueryPoolCreateInfo {
2421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
2422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
2423a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkQueryPoolCreateFlags                      flags
2424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueryType                                 queryType
24253dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    u32                                         queryCount
2426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueryPipelineStatisticFlags               pipelineStatistics /// Optional
2427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkFramebufferCreateInfo {
2430d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType  /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
2431d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext  /// Pointer to next structure
2432a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkFramebufferCreateFlags                    flags
2433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                renderPass
2434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachmentCount
24355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkImageView*                          pAttachments
2436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         width
2437d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         height
2438d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         layers
2439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24413fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDrawIndirectCommand {
2442d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         vertexCount
2443d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         instanceCount
2444d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstVertex
2445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstInstance
2446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24483fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDrawIndexedIndirectCommand {
2449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         indexCount
2450d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         instanceCount
2451d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstIndex
2452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         vertexOffset
2453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstInstance
2454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24563fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDispatchIndirectCommand {
2457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         x
2458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         y
2459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         z
2460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24623e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
2463b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallclass VkSurfaceCapabilitiesKHR {
24641356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         minImageCount
24651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         maxImageCount
24661356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  currentExtent
24671356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  minImageExtent
24681356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  maxImageExtent
2469f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    u32                                         maxImageArrayLayers
24701356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformFlagsKHR                  supportedTransforms
2471f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkSurfaceTransformFlagBitsKHR               currentTransform
2472a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
24731356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkImageUsageFlags                           supportedUsageFlags
247488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
247588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
24763e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
24771356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkSurfaceFormatKHR {
24781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkFormat                                    format
24791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkColorSpaceKHR                             colorSpace
248088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
248188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
24823e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
24831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkSwapchainCreateInfoKHR {
24841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
24851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
2486f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkSwapchainCreateFlagsKHR                   flags
24871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceKHR                                surface
24881356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         minImageCount
24891356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkFormat                                    imageFormat
24901356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkColorSpaceKHR                             imageColorSpace
24911356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  imageExtent
2492f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    u32                                         imageArrayLayers
2493f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkImageUsageFlags                           imageUsage
24941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSharingMode                               sharingMode
249503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queueFamilyIndexCount
24961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const u32*                                  pQueueFamilyIndices
2497f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkSurfaceTransformFlagBitsKHR               preTransform
2498f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
24991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkPresentModeKHR                            presentMode
25001356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkBool32                                    clipped
2501f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkSwapchainKHR                              oldSwapchain
250288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
250388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
25043e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
25051356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkPresentInfoKHR {
25061356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
25071356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
2508b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         waitSemaphoreCount
2509b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const VkSemaphore*                          pWaitSemaphores
25101356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         swapchainCount
251103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    const VkSwapchainKHR*                       pSwapchains
2512f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    const u32*                                  pImageIndices
2513e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall    VkResult*                                   pResults
25141356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25151356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25163e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
25171356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayPropertiesKHR {
25181356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayKHR                                display
25191356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const char*                                 displayName
25201356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  physicalDimensions
25211356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  physicalResolution
25221356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformFlagsKHR                  supportedTransforms
25231356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkBool32                                    planeReorderPossible
2524a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBool32                                    persistentContent
25251356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25261356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25273e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
2528a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkDisplayModeParametersKHR {
25291356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  visibleRegion
2530a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         refreshRate
25311356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25321356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25333e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
25341356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayModePropertiesKHR {
25351356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayModeKHR                            displayMode
2536a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDisplayModeParametersKHR                  parameters
25371356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25381356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25393e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
25401356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayModeCreateInfoKHR {
25411356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
25421356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
25439ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    VkDisplayModeCreateFlagsKHR                 flags
2544a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDisplayModeParametersKHR                  parameters
25451356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25461356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25473e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
25481356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayPlanePropertiesKHR {
2549a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDisplayKHR                                currentDisplay
2550a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         currentStackIndex
2551a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
2552a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
25533e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
2554a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkDisplayPlaneCapabilitiesKHR {
25551356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
25561356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  minSrcPosition
25571356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  maxSrcPosition
25581356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  minSrcExtent
25591356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  maxSrcExtent
25601356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  minDstPosition
25611356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  maxDstPosition
25621356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  minDstExtent
25631356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  maxDstExtent
25641356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25663e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
2567a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkDisplaySurfaceCreateInfoKHR {
25681356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
25691356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
2570f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkDisplaySurfaceCreateFlagsKHR              flags
25711356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayModeKHR                            displayMode
25721356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         planeIndex
25731356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         planeStackIndex
2574f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkSurfaceTransformFlagBitsKHR               transform
25751356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    f32                                         globalAlpha
2576f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkDisplayPlaneAlphaFlagBitsKHR              alphaMode
2577f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    VkExtent2D                                  imageExtent
25781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
25791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
25803e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display_swapchain")
25811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayPresentInfoKHR {
25821356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
25831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
25841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkRect2D                                    srcRect
25851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkRect2D                                    dstRect
2586a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBool32                                    persistent
258788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
2588d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2589f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_xlib_surface")
2590f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallclass VkXlibSurfaceCreateInfoKHR {
2591f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkStructureType                             sType
2592f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    const void*                                 pNext
2593f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkXlibSurfaceCreateFlagsKHR                 flags
2594f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.Display*                           dpy
2595f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.Window                             window
2596f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall}
2597f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
2598f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_xcb_surface")
2599f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallclass VkXcbSurfaceCreateInfoKHR {
2600f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkStructureType                             sType
2601f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    const void*                                 pNext
2602f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkXcbSurfaceCreateFlagsKHR                  flags
2603f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.xcb_connection_t*                  connection
2604f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.xcb_window_t                       window
2605f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall}
2606f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
2607f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_wayland_surface")
2608f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallclass VkWaylandSurfaceCreateInfoKHR {
2609f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkStructureType                             sType
2610f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    const void*                                 pNext
2611f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkWaylandSurfaceCreateFlagsKHR              flags
2612f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.wl_display*                        display
2613f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.wl_surface*                        surface
2614f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall}
2615f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
2616f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_mir_surface")
2617f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallclass VkMirSurfaceCreateInfoKHR {
2618f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkStructureType                             sType
2619f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    const void*                                 pNext
2620f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkMirSurfaceCreateFlagsKHR                  flags
2621f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.MirConnection*                     connection
2622f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.MirSurface*                        mirSurface
2623f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall}
2624f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
2625f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_android_surface")
2626f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallclass VkAndroidSurfaceCreateInfoKHR {
2627f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkStructureType                             sType
2628f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    const void*                                 pNext
2629f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkAndroidSurfaceCreateFlagsKHR              flags
2630f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.ANativeWindow*                     window
2631f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall}
2632f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
2633f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall@extension("VK_KHR_win32_surface")
2634f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallclass VkWin32SurfaceCreateInfoKHR {
2635f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkStructureType                             sType
2636f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    const void*                                 pNext
2637f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    VkWin32SurfaceCreateFlagsKHR                flags
2638f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.HINSTANCE                          hinstance
2639f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    platform.HWND                               hwnd
2640f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall}
2641f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall
2642b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu@extension("VK_ANDROID_native_buffer")
2643b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wuclass VkNativeBufferANDROID {
2644b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    VkStructureType                             sType
2645b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    const void*                                 pNext
2646b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    platform.buffer_handle_t                    handle
2647b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    int                                         stride
2648b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    int                                         format
2649b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    int                                         usage
2650b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu}
2651b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu
2652715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
2653715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallclass VkDebugReportCallbackCreateInfoEXT {
2654715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VkStructureType                             sType
2655715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    const void*                                 pNext
2656715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    VkDebugReportFlagsEXT                       flags
2657715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    PFN_vkDebugReportCallbackEXT                pfnCallback
2658715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    void*                                       pUserData
2659715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
2660715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
26612676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_AMD_rasterization_order")
26622676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallclass VkPipelineRasterizationStateRasterizationOrderAMD {
26632676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkStructureType                             sType
26642676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const void*                                 pNext
26652676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkRasterizationOrderAMD                     rasterizationOrder
26662676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
26672676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
26682676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
26692676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallclass VkDebugMarkerObjectNameInfoEXT {
26702676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkStructureType                             sType
26712676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const void*                                 pNext
26722676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkDebugReportObjectTypeEXT                  objectType
26732676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    u64                                         object
26742676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const char*                                 pObjectName
26752676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
26762676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
26772676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
26782676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallclass VkDebugMarkerObjectTagInfoEXT {
26792676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkStructureType                             sType
26802676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const void*                                 pNext
26812676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkDebugReportObjectTypeEXT                  objectType
26822676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    u64                                         object
26832676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    u64                                         tagName
26842676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    platform.size_t                             tagSize
26852676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const void*                                 pTag
26862676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
26872676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
26882676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
26892676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallclass VkDebugMarkerMarkerInfoEXT {
26902676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    VkStructureType                             sType
26912676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const void*                                 pNext
26922676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    const char*                                 pMarkerName
26932676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    f32[4]                                      color
26942676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
26952676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
26961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
2697d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
2698d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Commands  //
2699d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
2700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Function pointers. TODO: add support for function pointers.
2702d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2703d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@external type void* PFN_vkVoidFunction
2704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@pfn cmd void vkVoidFunction() {
2705d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@external type void* PFN_vkAllocationFunction
27083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@pfn cmd void* vkAllocationFunction(
2709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pUserData,
2710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        platform.size_t                             size,
2711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        platform.size_t                             alignment,
27123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
271303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    return ?
271403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
271503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall
27163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@external type void* PFN_vkReallocationFunction
27173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@pfn cmd void* vkReallocationFunction(
271803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pUserData,
271903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pOriginal,
272003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             size,
272103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             alignment,
27223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
2723d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2725d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@external type void* PFN_vkFreeFunction
2727d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@pfn cmd void vkFreeFunction(
2728d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pUserData,
27293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        void*                                       pMemory) {
2730d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2731d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@external type void* PFN_vkInternalAllocationNotification
27333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@pfn cmd void vkInternalAllocationNotification(
273403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pUserData,
273503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             size,
27363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkInternalAllocationType                    allocationType,
27373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
273803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
273903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall
274003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall@external type void* PFN_vkInternalFreeNotification
274103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall@pfn cmd void vkInternalFreeNotification(
274203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pUserData,
274303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             size,
27443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkInternalAllocationType                    allocationType,
27453fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
274603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
2747d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2748d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Global functions
2749d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2750d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2751d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateInstance(
2752d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkInstanceCreateInfo*                 pCreateInfo,
27533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
2754d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkInstance*                                 pInstance) {
2755d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2756d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2757d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    instance := ?
2758d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pInstance[0] = instance
2759d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Instances[instance] = new!InstanceObject()
2760d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27613dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerCount]
27623dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionCount]
2763d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2764d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2765d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2766d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2767d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
27685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyInstance(
276903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkInstance                                  instance,
27703fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
2771d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    instanceObject := GetInstance(instance)
2772d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2773d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Instances[instance] = null
2774d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2775d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2776d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2777d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkEnumeratePhysicalDevices(
2778d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkInstance                                  instance,
2779d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32*                                        pPhysicalDeviceCount,
2780d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice*                           pPhysicalDevices) {
2781d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    instanceObject := GetInstance(instance)
2782d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceCount := as!u32(?)
2784d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pPhysicalDeviceCount[0] = physicalDeviceCount
2785d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2786d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2787d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. physicalDeviceCount) {
2788d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        physicalDevice := ?
2789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        physicalDevices[i] = physicalDevice
2790d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        if !(physicalDevice in State.PhysicalDevices) {
2791d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2792d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        }
2793d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2794d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2795d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2796d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2797d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2799d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2800d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pName) {
28015ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if device != NULL_HANDLE {
2802d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        device := GetDevice(device)
2803d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2804d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2805d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2806d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2807d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2809d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkInstance                                  instance,
2810d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pName) {
28115ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if instance != NULL_HANDLE {
2812d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        instanceObject := GetInstance(instance)
2813d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2814d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2815d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2816d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2817d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2818606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceProperties(
2819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2820d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDeviceProperties*                 pProperties) {
2821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2823d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := ?
2824d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pProperties[0] = properties
2825d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2827606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceQueueFamilyProperties(
2828d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
282903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pQueueFamilyPropertyCount,
28305ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkQueueFamilyProperties*                    pQueueFamilyProperties) {
2831d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
28325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // TODO: Figure out how to express fetch-count-or-properties
28335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // This version fails 'apic validate' with 'fence not allowed in
28345ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // *semantic.Branch'. Other attempts have failed with the same or other
28355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // errors.
28365ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // if pQueueFamilyProperties != null {
28375ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     queuesProperties := pQueueFamilyProperties[0:pCount[0]]
28385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     for i in (0 .. pCount[0]) {
28395ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //         queueProperties := as!VkQueueFamilyProperties(?)
28405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //         queuesProperties[i] = queueProperties
28415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //    }
28425ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // } else {
28435ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     count := ?
28445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     pCount[0] = count
28455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // }
2846d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2847d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2848606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceMemoryProperties(
2849d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2850d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDeviceMemoryProperties*           pMemoryProperties) {
2851d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2852d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2853d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    memoryProperties := ?
2854d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pMemoryProperties[0] = memoryProperties
2855d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2856d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2857606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceFeatures(
2858d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2859d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDeviceFeatures*                   pFeatures) {
2860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2861d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2862d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    features := ?
2863d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFeatures[0] = features
2864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2865d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2866606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceFormatProperties(
2867d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormat                                    format,
2869d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormatProperties*                         pFormatProperties) {
2870d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2871d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2872d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    formatProperties := ?
2873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFormatProperties[0] = formatProperties
2874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2876a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hallcmd VkResult vkGetPhysicalDeviceImageFormatProperties(
2877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormat                                    format,
2879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageType                                 type,
2880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageTiling                               tiling,
2881d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageUsageFlags                           usage,
28825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkImageCreateFlags                          flags,
2883d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageFormatProperties*                    pImageFormatProperties) {
2884d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageFormatProperties := ?
2887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pImageFormatProperties[0] = imageFormatProperties
2888a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hall
2889a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hall    return ?
2890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2893d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Device functions
2894d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2895d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2896d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateDevice(
2897d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2898d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkDeviceCreateInfo*                   pCreateInfo,
28993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
2900d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice*                                   pDevice) {
2901d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2902d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2903d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2904d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    device := ?
2905d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pDevice[0] = device
2906d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2907d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2908d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2909d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2910d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2911d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
29125ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyDevice(
291303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDevice                                    device,
29143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
2915d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2916d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2917d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Devices[device] = null
2918d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2920d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2921d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Extension discovery functions
2922d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
29235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateInstanceLayerProperties(
292403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2925d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkLayerProperties*                          pProperties) {
2926d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
292703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2928d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2930d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2931d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2932d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2933d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2936d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2937d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
29385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateInstanceExtensionProperties(
2939d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pLayerName,
294003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2941d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkExtensionProperties*                      pProperties) {
2942d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
294303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2946d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2947d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2948d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2949d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2950d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2951d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2952d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2953d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
29545ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateDeviceLayerProperties(
2955d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
295603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkLayerProperties*                          pProperties) {
2958d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2959d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
296003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2961d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2962d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2964d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2965d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2966d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2967d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2968d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2969d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2970d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
29715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateDeviceExtensionProperties(
2972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2973d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pLayerName,
297403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkExtensionProperties*                      pProperties) {
2976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2977d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2978d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
297903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2980d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2981d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2982d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2983d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2984d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2986d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2987d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2988d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2989d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2990d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2991d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Queue functions
2992d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2993d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2994606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetDeviceQueue(
2995d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2996d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queueFamilyIndex,
2997d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queueIndex,
2998d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue*                                    pQueue) {
2999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3000d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queue := ?
3002d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pQueue[0] = queue
3003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3004d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    if !(queue in State.Queues) {
3005d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.Queues[queue] = new!QueueObject(device: device)
3006d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3007d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3008d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3010d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkQueueSubmit(
3011d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue                                     queue,
3012a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall        u32                                         submitCount,
3013b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        const VkSubmitInfo*                         pSubmits,
3014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFence                                     fence) {
3015d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queueObject := GetQueue(queue)
3016d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
30175ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if fence != NULL_HANDLE {
3018d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject := GetFence(fence)
3019d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(fenceObject.device == queueObject.device)
3020d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
30223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    // commandBuffers := pcommandBuffers[0:commandBufferCount]
30233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    // for i in (0 .. commandBufferCount) {
30243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    commandBuffer := commandBuffers[i]
30253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    commandBufferObject := GetCommandBuffer(commandBuffer)
30263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    assert(commandBufferObject.device == queueObject.device)
3027a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    //
30283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
30293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //        "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
3030a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    // }
3031d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3032d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3033d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3035d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3036d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkQueueWaitIdle(
3037d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue                                     queue) {
3038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queueObject := GetQueue(queue)
3039d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3040d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3041d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3042d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3043d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3044d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkDeviceWaitIdle(
3045d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device) {
3046d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3047d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3050d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3051d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Memory functions
3053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3054d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
30553fbc856120217247c72fb5ed88500000f3881c45Jesse Hallcmd VkResult vkAllocateMemory(
3056d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
30573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkMemoryAllocateInfo*                 pAllocateInfo,
30583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
30593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory*                             pMemory) {
3060f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
3061d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3062d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
30633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memory := ?
30643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    pMemory[0] = memory
30653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.DeviceMemories[memory] = new!DeviceMemoryObject(
3066d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        device: device,
30673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        allocationSize: pAllocateInfo[0].allocationSize)
3068d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3069d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3070d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3071d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3072d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
30735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkFreeMemory(
3074d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
30753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
30763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3077d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
30783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
30793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memoryObject.device == device)
3080d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3081d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Check that no objects are still bound before freeing.
30823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
3083d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        "vkFreeMemory: objects still bound")
30843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
30853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        "vkFreeMemory: commandBuffers still bound")
30863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.DeviceMemories[memory] = null
3087d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3088d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3089d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3090d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkMapMemory(
3091d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
30923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
30935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
30945ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                size,
3095d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkMemoryMapFlags                            flags,
3096d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void**                                      ppData) {
3097d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
30983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
30993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memoryObject.device == device)
3100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(flags == as!VkMemoryMapFlags(0))
31023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert((offset + size) <= memoryObject.allocationSize)
3103d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3104d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3107d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
31085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkUnmapMemory(
3109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
31103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory) {
3111d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
31123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
31133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memoryObject.device == device)
3114d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3116d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkFlushMappedMemoryRanges(
3117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
31183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryRangeCount
31193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkMappedMemoryRange*                  pMemoryRanges) {
3120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
31223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryRanges := pMemoryRanges[0:memoryRangeCount]
31233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryRangeCount) {
31243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryRange := memoryRanges[i]
31253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memoryRange.memory)
31263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
31273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
3128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3129d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3130d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3131d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3132d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkInvalidateMappedMemoryRanges(
3134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
31353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryRangeCount,
31363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkMappedMemoryRange*                  pMemoryRanges) {
3137d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
31393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryRanges := pMemoryRanges[0:memoryRangeCount]
31403fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryRangeCount) {
31413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryRange := memoryRanges[i]
31423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memoryRange.memory)
31433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
31443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
3145d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3146d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3148d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3149d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3150d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Memory management API functions
3152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3153606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetDeviceMemoryCommitment(
3154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3155d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDeviceMemory                              memory,
31565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize*                               pCommittedMemoryInBytes) {
3157d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
31595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if memory != NULL_HANDLE {
3160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        memoryObject := GetDeviceMemory(memory)
3161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(memoryObject.device == device)
3162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    committedMemoryInBytes := ?
3165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pCommittedMemoryInBytes[0] = committedMemoryInBytes
3166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3168606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetBufferMemoryRequirements(
3169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
3171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkMemoryRequirements*                       pMemoryRequirements) {
3172d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
3174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
3175d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3176d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3177d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkBindBufferMemory(
3178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
31803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
31813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                memoryOffset) {
3182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
3184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
3185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3186d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
31873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if bufferObject.memory != NULL_HANDLE {
31883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(bufferObject.memory)
31893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(buffer)] = null
3190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3191d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3192d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Bind buffer to given memory object, if not VK_NULL_HANDLE.
31933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if memory != NULL_HANDLE {
31943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memory)
31953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
31963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
3197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
31983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bufferObject.memory = memory
31993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bufferObject.memoryOffset = memoryOffset
3200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3204606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetImageMemoryRequirements(
3205d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3206d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
3207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkMemoryRequirements*                       pMemoryRequirements) {
3208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3210d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3211d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkBindImageMemory(
3214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
32163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
32173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                memoryOffset) {
3218d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3219d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3220d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Unbind image from previous memory object, if not VK_NULL_HANDLE.
32233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if imageObject.memory != NULL_HANDLE {
32243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(imageObject.memory)
32253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(image)] = null
3226d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3227d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3228d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Bind image to given memory object, if not VK_NULL_HANDLE.
32293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if memory != NULL_HANDLE {
32303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memory)
32313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
32323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(image)] = memoryOffset
3233d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
32343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    imageObject.memory = memory
32353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    imageObject.memoryOffset = memoryOffset
3236d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3240606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetImageSparseMemoryRequirements(
3241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3242d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
324303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pSparseMemoryRequirementCount,
3244d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSparseImageMemoryRequirements*            pSparseMemoryRequirements) {
3245d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3246d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3250606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceSparseImageFormatProperties(
3251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
3252d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormat                                    format,
3253d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageType                                 type,
3254091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall        VkSampleCountFlagBits                       samples,
3255d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageUsageFlags                           usage,
3256d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageTiling                               tiling,
325703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
3258d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSparseImageFormatProperties*              pProperties) {
3259d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
3260d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3261d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3262a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkQueueBindSparse(
3263d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue                                     queue,
326403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         bindInfoCount,
3265a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        const VkBindSparseInfo*                     pBindInfo,
3266a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkFence                                     fence) {
3267d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queueObject := GetQueue(queue)
3268d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3270d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3271d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3272d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3273d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Fence functions
3274d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3275d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3276d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateFence(
3277d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3278d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFenceCreateInfo*                    pCreateInfo,
32793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3280d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFence*                                    pFence) {
3281d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
3282d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3283d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3284d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fence := ?
3285d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFence[0] = fence
3286d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Fences[fence] = new!FenceObject(
3287d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall        device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
3288d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3289d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3290d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3291d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3292d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
32935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyFence(
3294d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
329503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkFence                                     fence,
32963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3297d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3298d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fenceObject := GetFence(fence)
3299d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(fenceObject.device == device)
3300d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3301d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Fences[fence] = null
3302d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3303d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3304d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3305d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetFences(
3306d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3307d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         fenceCount,
3308d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFence*                              pFences) {
3309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3311d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fences := pFences[0:fenceCount]
3312d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. fenceCount) {
3313d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fence := fences[i]
3314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject := GetFence(fence)
3315d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(fenceObject.device == device)
3316d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject.signaled = false
3317d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3318d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3319d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3320d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3321d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3322d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3323d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetFenceStatus(
3324d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3325d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFence                                     fence) {
3326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3327d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fenceObject := GetFence(fence)
3328d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(fenceObject.device == device)
3329d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3331d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3332d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkWaitForFences(
3335d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         fenceCount,
3337d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFence*                              pFences,
33385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkBool32                                    waitAll,
3339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u64                                         timeout) {  /// timeout in nanoseconds
3340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fences := pFences[0:fenceCount]
3343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. fenceCount) {
3344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fence := fences[i]
3345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject := GetFence(fence)
3346d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(fenceObject.device == device)
3347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3350d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3352d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3353d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Queue semaphore functions
3354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateSemaphore(
3357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkSemaphoreCreateInfo*                pCreateInfo,
33593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSemaphore*                                pSemaphore) {
3361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
3362d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3363d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    semaphore := ?
3365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pSemaphore[0] = semaphore
3366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
3367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
33725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroySemaphore(
3373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
337403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkSemaphore                                 semaphore,
33753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3377d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    semaphoreObject := GetSemaphore(semaphore)
3378d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(semaphoreObject.device == device)
3379d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3380d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Semaphores[semaphore] = null
3381d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Event functions
3385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3386d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateEvent(
3388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkEventCreateInfo*                    pCreateInfo,
33903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent*                                    pEvent) {
3392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
3393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3394d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3395d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    event := ?
3396d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pEvent[0] = event
3397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Events[event] = new!EventObject(device: device)
3398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3399d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3401d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
34035ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyEvent(
3404d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
340503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkEvent                                     event,
34063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3407d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Events[event] = null
3412d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetEventStatus(
3416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event) {
3418d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3423d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkSetEvent(
3427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event) {
3429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3430d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3431d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3437d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetEvent(
3438d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event) {
3440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3441d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3442d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3443d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3444d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3448d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Query functions
3449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3450d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3451d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateQueryPool(
3452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkQueryPoolCreateInfo*                pCreateInfo,
34543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool*                                pQueryPool) {
3456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
3457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPool := ?
3460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pQueryPool[0] = queryPool
3461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
3462d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3464d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
34675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyQueryPool(
3468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
346903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkQueryPool                                 queryPool,
34703fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3472d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
3473d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queryPoolObject.device == device)
3474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.QueryPools[queryPool] = null
3476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3477d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetQueryPoolResults(
3480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
3482f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        u32                                         firstQuery,
3483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queryCount,
3484a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        platform.size_t                             dataSize,
3485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pData,
3486a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        VkDeviceSize                                stride,
3487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryResultFlags                          flags) {
3488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
3490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queryPoolObject.device == device)
3491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3492d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    data := pData[0:dataSize]
3493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3495d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3496d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Buffer functions
3498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3499d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateBuffer(
3501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3502d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferCreateInfo*                   pCreateInfo,
35033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer*                                   pBuffer) {
3505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
3506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    buffer := ?
3509d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pBuffer[0] = buffer
3510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Buffers[buffer] = new!BufferObject(device: device)
3511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3514d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
35165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyBuffer(
3517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
351803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkBuffer                                    buffer,
35193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3521d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
3522d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
3523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
35243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(bufferObject.memory == 0)
3525d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Buffers[buffer] = null
3526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3529d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Buffer view functions
3530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateBufferView(
3533d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferViewCreateInfo*               pCreateInfo,
35353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3536d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBufferView*                               pView) {
3537d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
3538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(pCreateInfo.buffer)
3541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
3542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    view := ?
3544d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pView[0] = view
3545d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
3546d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3547d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3549d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
35515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyBufferView(
3552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
355303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkBufferView                                bufferView,
35543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3556d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferViewObject := GetBufferView(bufferView)
3557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferViewObject.device == device)
3558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.BufferViews[bufferView] = null
3560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3561d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Image functions
3564d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3565d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3566d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateImage(
3567d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3568d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageCreateInfo*                    pCreateInfo,
35693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3570d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage*                                    pImage) {
3571d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
3572d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3573d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3574d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    image := ?
3575d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pImage[0] = image
3576d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Images[image] = new!ImageObject(device: device)
3577d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3578d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3579d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3580d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3581d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
35825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyImage(
3583d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
358403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkImage                                     image,
35853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3586d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3587d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3588d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3589d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
35903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(imageObject.memory == 0)
3591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Images[image] = null
3592d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3593d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3594606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetImageSubresourceLayout(
3595d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3596d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
3597d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageSubresource*                   pSubresource,
3598d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSubresourceLayout*                        pLayout) {
3599d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3601d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3603d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3604d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3605d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Image view functions
3606d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3607d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3608d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateImageView(
3609d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageViewCreateInfo*                pCreateInfo,
36113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3612d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageView*                                pView) {
3613d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3614d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3616d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(pCreateInfo.image)
3617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3618d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3619d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    view := ?
3620d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pView[0] = view
3621d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
3622d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3623d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3626d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
36275ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyImageView(
3628d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
362903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkImageView                                 imageView,
36303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3631d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3632d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageViewObject := GetImageView(imageView)
3633d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageViewObject.device == device)
3634d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3635d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ImageViews[imageView] = null
3636d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3637d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3638d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3639d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Shader functions
3640d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3641d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateShaderModule(
3642d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3643d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkShaderModuleCreateInfo*             pCreateInfo,
36443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3645d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkShaderModule*                             pShaderModule) {
3646d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3647d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3648d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3649d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    shaderModule := ?
3650d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pShaderModule[0] = shaderModule
3651d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3652d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3653d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3654d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3655d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
36565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyShaderModule(
3657d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
365803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkShaderModule                              shaderModule,
36593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3660d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3661d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    shaderModuleObject := GetShaderModule(shaderModule)
3662d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(shaderModuleObject.device == device)
3663d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3664d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ShaderModules[shaderModule] = null
3665d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3666d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3667d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3668d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Pipeline functions
3669d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3670d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreatePipelineCache(
3671d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3672d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkPipelineCacheCreateInfo*            pCreateInfo,
36733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3674d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache*                            pPipelineCache) {
3675d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3676d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3677d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3678d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineCache := ?
3679d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pPipelineCache[0] = pipelineCache
3680d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3681d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3682d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3683d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3684d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
36855ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyPipelineCache(
3686d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
368703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkPipelineCache                             pipelineCache,
36883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3689d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3690d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineCacheObject := GetPipelineCache(pipelineCache)
3691d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineCacheObject.device == device)
3692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3693d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineCaches[pipelineCache] = null
3694d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3695d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3696d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetPipelineCacheData(
3697d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3698d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache                             pipelineCache,
3699a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        platform.size_t*                            pDataSize,
3700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pData) {
3701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3702d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineCacheObject := GetPipelineCache(pipelineCache)
3703d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineCacheObject.device == device)
3704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3705d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3707d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3708d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkMergePipelineCaches(
3709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
37103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkPipelineCache                             dstCache,
3711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         srcCacheCount,
3712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkPipelineCache*                      pSrcCaches) {
3713d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
37143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstCacheObject := GetPipelineCache(dstCache)
37153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(dstCacheObject.device == device)
3716d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3717d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcCaches := pSrcCaches[0:srcCacheCount]
3718d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. srcCacheCount) {
3719d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        srcCache := srcCaches[i]
3720d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        srcCacheObject := GetPipelineCache(srcCache)
3721d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(srcCacheObject.device == device)
3722d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3723d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3725d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3727d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateGraphicsPipelines(
3728d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3729d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache                             pipelineCache,
373003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         createInfoCount,
3731d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkGraphicsPipelineCreateInfo*         pCreateInfos,
37323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3733d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipeline*                                 pPipelines) {
3734d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
37355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if pipelineCache != NULL_HANDLE {
3736d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelineCacheObject := GetPipelineCache(pipelineCache)
3737d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(pipelineCacheObject.device == device)
3738d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3739d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
374003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    createInfos := pCreateInfos[0:createInfoCount]
374103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pipelines := pPipelines[0:createInfoCount]
374203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. createInfoCount) {
3743d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipeline := ?
3744d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelines[i] = pipeline
3745d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.Pipelines[pipeline] = new!PipelineObject(device: device)
3746d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3747d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3748d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3749d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3750d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3751d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateComputePipelines(
3752d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3753d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache                             pipelineCache,
375403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         createInfoCount,
3755d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkComputePipelineCreateInfo*          pCreateInfos,
37563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3757d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipeline*                                 pPipelines) {
3758d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
37595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if pipelineCache != NULL_HANDLE {
3760d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelineCacheObject := GetPipelineCache(pipelineCache)
3761d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(pipelineCacheObject.device == device)
3762d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3763d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
376403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    createInfos := pCreateInfos[0:createInfoCount]
376503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pipelines := pPipelines[0:createInfoCount]
376603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. createInfoCount) {
3767d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipeline := ?
3768d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelines[i] = pipeline
3769d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.Pipelines[pipeline] = new!PipelineObject(device: device)
3770d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3771d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3772d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3773d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3774d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3775d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
37765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyPipeline(
3777d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
377803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkPipeline                                  pipeline,
37793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3780d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3781d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineObjects := GetPipeline(pipeline)
3782d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineObjects.device == device)
3783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3784d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Pipelines[pipeline] = null
3785d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3786d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3787d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3788d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Pipeline layout functions
3789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3790d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3791d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreatePipelineLayout(
3792d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3793d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkPipelineLayoutCreateInfo*           pCreateInfo,
37943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3795d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineLayout*                           pPipelineLayout) {
3796d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3797d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3799d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineLayout := ?
3800d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pPipelineLayout[0] = pipelineLayout
3801d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3802d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3803d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3804d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3805d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3806d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
38075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyPipelineLayout(
3808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
380903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkPipelineLayout                            pipelineLayout,
38103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3811d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3812d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3813d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineLayoutObjects.device == device)
3814d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3815d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineLayouts[pipelineLayout] = null
3816d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3817d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3818d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Sampler functions
3820d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateSampler(
3823d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3824d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkSamplerCreateInfo*                  pCreateInfo,
38253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSampler*                                  pSampler) {
3827d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3828d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3829d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3830d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    sampler := ?
3831d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pSampler[0] = sampler
3832d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Samplers[sampler] = new!SamplerObject(device: device)
3833d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3834d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3835d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3836d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3837d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
38385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroySampler(
3839d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
384003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkSampler                                   sampler,
38413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3842d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3843d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    samplerObject := GetSampler(sampler)
3844d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(samplerObject.device == device)
3845d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3846d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Samplers[sampler] = null
3847d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3848d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3849d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3850d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Descriptor set functions
3851d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3852d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3853d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateDescriptorSetLayout(
3854d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3855d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
38563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3857d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDescriptorSetLayout*                      pSetLayout) {
3858d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3859d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3861d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    setLayout := ?
3862d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pSetLayout[0] = setLayout
3863d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3865d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3866d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3867d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
38695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyDescriptorSetLayout(
3870d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
387103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDescriptorSetLayout                       descriptorSetLayout,
38723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorSetLayoutObject.device == device)
3876d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorSetLayouts[descriptorSetLayout] = null
3878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3881d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateDescriptorPool(
3882d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
388303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        const VkDescriptorPoolCreateInfo*           pCreateInfo,
38843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDescriptorPool*                           pDescriptorPool) {
3886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3888d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3889d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorPool := ?
3890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pDescriptorPool[0] = descriptorPool
3891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3893d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3894d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3895d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3896d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
38975ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyDescriptorPool(
3898d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
389903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDescriptorPool                            descriptorPool,
39003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3901d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3902d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorPoolObject := GetDescriptorPool(descriptorPool)
3903d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorPoolObject.device == device)
3904d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3905d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorPools[descriptorPool] = null
3906d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3907d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3908d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3909d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetDescriptorPool(
3910d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3911fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall        VkDescriptorPool                            descriptorPool,
3912fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall        VkDescriptorPoolResetFlags                  flags) {
3913d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3914d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorPoolObject := GetDescriptorPool(descriptorPool)
3915d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorPoolObject.device == device)
3916d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3917d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3918d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3920d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
39213fbc856120217247c72fb5ed88500000f3881c45Jesse Hallcmd VkResult vkAllocateDescriptorSets(
3922d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
39233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkDescriptorSetAllocateInfo*          pAllocateInfo,
39245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDescriptorSet*                            pDescriptorSets) {
3925d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
39263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    allocInfo := pAllocateInfo[0]
3927fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
3928d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
392903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
393003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. allocInfo.setCount) {
3931d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        setLayout := setLayouts[i]
3932d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        setLayoutObject := GetDescriptorSetLayout(setLayout)
3933d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(setLayoutObject.device == device)
3934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
393603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    descriptorSets := pDescriptorSets[0:allocInfo.setCount]
393703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. allocInfo.setCount) {
3938d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSet := ?
3939d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSets[i] = descriptorSet
3940d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3941d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3942d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3943d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3946f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hallcmd VkResult vkFreeDescriptorSets(
3947f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        VkDevice                                    device,
3948f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        VkDescriptorPool                            descriptorPool,
394903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         descriptorSetCount,
3950f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        const VkDescriptorSet*                      pDescriptorSets) {
3951f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    deviceObject := GetDevice(device)
3952f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    descriptorPoolObject := GetDescriptorPool(descriptorPool)
3953f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall
395403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    descriptorSets := pDescriptorSets[0:descriptorSetCount]
395503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. descriptorSetCount) {
3956f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        descriptorSet := descriptorSets[i]
3957f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        descriptorSetObject := GetDescriptorSet(descriptorSet)
3958f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        assert(descriptorSetObject.device == device)
3959f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        State.DescriptorSets[descriptorSet] = null
3960f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    }
3961f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall
3962f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    return ?
3963f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall}
3964f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall
39655ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkUpdateDescriptorSets(
3966d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3967b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        u32                                         descriptorWriteCount,
3968d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkWriteDescriptorSet*                 pDescriptorWrites,
3969b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        u32                                         descriptorCopyCount,
3970d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkCopyDescriptorSet*                  pDescriptorCopies) {
3971d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3973b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
3974b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    for i in (0 .. descriptorWriteCount) {
3975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorWrite := descriptorWrites[i]
39763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
3977d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(descriptorWriteObject.device == device)
3978d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3979d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3980b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
3981b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    for i in (0 .. descriptorCopyCount) {
3982d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorCopy := descriptorCopies[i]
39833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
3984d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(descriptorCopyObject.device == device)
3985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3986d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3987d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3988d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3989d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Framebuffer functions
3990d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3991d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3992d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateFramebuffer(
3993d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3994d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFramebufferCreateInfo*              pCreateInfo,
39953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3996d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFramebuffer*                              pFramebuffer) {
3997d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3998d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4000d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    framebuffer := ?
4001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFramebuffer[0] = framebuffer
4002d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
4003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4004d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4005d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4006d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4007d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
40085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyFramebuffer(
4009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
401003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkFramebuffer                               framebuffer,
40113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
4012d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
4013d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    framebufferObject := GetFramebuffer(framebuffer)
4014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(framebufferObject.device == device)
4015d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4016d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Framebuffers[framebuffer] = null
4017d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4018d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4019d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4020d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Renderpass functions
4021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4022d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
4023d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateRenderPass(
4024d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
4025d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkRenderPassCreateInfo*               pCreateInfo,
40263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
4027d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkRenderPass*                               pRenderPass) {
4028d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4029d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
4030d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4031d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderpass := ?
4032d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pRenderPass[0] = renderpass
4033d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
4034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4035d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4036d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4037d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
40395ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyRenderPass(
4040d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
404103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkRenderPass                                renderPass,
40423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
4043d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
4044d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderPassObject := GetRenderPass(renderPass)
4045d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(renderPassObject.device == device)
4046d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4047d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.RenderPasses[renderPass] = null
4048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4050606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetRenderAreaGranularity(
4051d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
4052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkRenderPass                                renderPass,
4053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkExtent2D*                                 pGranularity) {
4054d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
4055d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderPassObject := GetRenderPass(renderPass)
4056d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4057d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    granularity := ?
4058d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pGranularity[0] = granularity
4059d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4060d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4061d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Command pool functions
4062d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4063d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateCommandPool(
4064d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
40653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandPoolCreateInfo*              pCreateInfo,
40663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
40673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool*                              pCommandPool) {
40683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
4069d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
4070d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandPool := ?
40723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    pCommandPool[0] = commandPool
40733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
4074d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4075d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4076d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4077d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyCommandPool(
4079d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
40803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool                               commandPool,
40813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
4082d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
40833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandPoolObject := GetCommandPool(commandPool)
40843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandPoolObject.device == device)
4085d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.CommandPools[commandPool] = null
4087d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4088d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4089d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetCommandPool(
4090d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
40913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool                               commandPool,
40923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPoolResetFlags                     flags) {
4093d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
40943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandPoolObject := GetCommandPool(commandPool)
40953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandPoolObject.device == device)
4096d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4097d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4098d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4099d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Command buffer functions
4101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41023fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
41033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
41043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
4105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
41073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.boundObjects[as!u64(obj)] = memory
4108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41103fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
41113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
41123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject.boundCommandBuffers[commandBuffer] = null
4113d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
41153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.boundObjects[as!u64(obj)] = null
4116d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4118d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
41193fbc856120217247c72fb5ed88500000f3881c45Jesse Hallcmd VkResult vkAllocateCommandBuffers(
4120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
41213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBufferAllocateInfo*          pAllocateInfo,
41223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer*                            pCommandBuffers) {
4123f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall    assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
4124d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41253dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    count := pAllocateInfo[0].commandBufferCount
41263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBuffers := pCommandBuffers[0:count]
4127fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    for i in (0 .. count) {
41283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        commandBuffer := ?
41293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        commandBuffers[i] = commandBuffer
41303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
4131fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    }
4132d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
4137fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hallcmd void vkFreeCommandBuffers(
4138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
41393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool                               commandPool,
414003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         commandBufferCount,
41413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBuffer*                      pCommandBuffers) {
4142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
4143d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBuffers := pCommandBuffers[0:commandBufferCount]
414503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. commandBufferCount) {
41463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        commandBufferObject := GetCommandBuffer(commandBuffers[i])
41473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == device)
4148fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall        // TODO: iterate over boundObjects and clear memory bindings
41493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        State.CommandBuffers[commandBuffers[i]] = null
4150fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    }
4151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4153d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkBeginCommandBuffer(
41553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
41563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBufferBeginInfo*             pBeginInfo) {
41573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
41583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // TODO: iterate over boundObjects and clear memory bindings
4161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkEndCommandBuffer(
41673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer) {
41683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4172d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetCommandBuffer(
41753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
41763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBufferResetFlags                   flags) {
41773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // TODO: iterate over boundObjects and clear memory bindings
4180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4181d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
4182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Command buffer building functions
4186d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4188d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindPipeline(
41893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineBindPoint                         pipelineBindPoint,
4191d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipeline                                  pipeline) {
41923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4193d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineObject := GetPipeline(pipeline)
41943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == pipelineObject.device)
4195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4196d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall    queue := switch (pipelineBindPoint) {
4197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
4198d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
4199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
42003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
4201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
42045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetViewport(
42053fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4206f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        u32                                         firstViewport,
42075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         viewportCount,
42085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkViewport*                           pViewports) {
42093fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
42115ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
4212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42135ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
42145ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetScissor(
42153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4216f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        u32                                         firstScissor,
42175ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         scissorCount,
42185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkRect2D*                             pScissors) {
42193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4223d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
42245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetLineWidth(
42253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42265ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         lineWidth) {
42273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
42295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
4230d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42315ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
42325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetDepthBias(
42333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4234a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        f32                                         depthBiasConstantFactor,
42355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         depthBiasClamp,
4236a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        f32                                         depthBiasSlopeFactor) {
42373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4240d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
42425ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetBlendConstants(
42433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        // TODO(jessehall): apic only supports 'const' on pointer types. Using
42455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        // an annotation as a quick hack to pass this to the template without
42465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        // having to modify the AST and semantic model.
4247b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        @readonly f32[4]                            blendConstants) {
42483fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
42505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
4251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
42535ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetDepthBounds(
42543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42555ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         minDepthBounds,
42565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         maxDepthBounds) {
42573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4259d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4260d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4261d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
42625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetStencilCompareMask(
42633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkStencilFaceFlags                          faceMask,
426565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         compareMask) {
42663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
42685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
4269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
42715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetStencilWriteMask(
42723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkStencilFaceFlags                          faceMask,
427465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         writeMask) {
42753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
42775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
42785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
42795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
42805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetStencilReference(
42813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkStencilFaceFlags                          faceMask,
428365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         reference) {
42843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4286d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4287d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4288d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4289d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindDescriptorSets(
42903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4291d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineBindPoint                         pipelineBindPoint,
4292d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineLayout                            layout,
4293d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         firstSet,
429403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         descriptorSetCount,
4295d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkDescriptorSet*                      pDescriptorSets,
4296d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         dynamicOffsetCount,
4297d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const u32*                                  pDynamicOffsets) {
42983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4299d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
430003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    descriptorSets := pDescriptorSets[0:descriptorSetCount]
430103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. descriptorSetCount) {
4302d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSet := descriptorSets[i]
4303d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSetObject := GetDescriptorSet(descriptorSet)
43043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == descriptorSetObject.device)
4305d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4306d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4307d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
4308d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. dynamicOffsetCount) {
4309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        dynamicOffset := dynamicOffsets[i]
4310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4311d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4312d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall    queue := switch (pipelineBindPoint) {
4313d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
4314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
4315d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
43163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
4317d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4318d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4319d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4320d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindIndexBuffer(
43213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4322d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
43235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
4324d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkIndexType                                 indexType) {
43253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
43273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4328d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4332d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4335d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindVertexBuffers(
43363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4337f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        u32                                         firstBinding,
4338d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         bindingCount,
4339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBuffer*                             pBuffers,
43405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkDeviceSize*                         pOffsets) {
43413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4343f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall    // TODO: check if not [firstBinding:firstBinding+bindingCount]
4344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    buffers := pBuffers[0:bindingCount]
4345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    offsets := pOffsets[0:bindingCount]
4346d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. bindingCount) {
4347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        buffer := buffers[i]
4348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        offset := offsets[i]
4349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        bufferObject := GetBuffer(buffer)
43503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == bufferObject.device)
4351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4353d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDraw(
43603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         vertexCount,
43625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         instanceCount,
43635ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstVertex,
43645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstInstance) {
43653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDrawIndexed(
43723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         indexCount,
43745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         instanceCount,
43755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstIndex,
4376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        s32                                         vertexOffset,
43775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstInstance) {
43783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4379d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4381d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDrawIndirect(
43853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4386d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
43875ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
438803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         drawCount,
4389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         stride) {
43903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
43923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4395d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4399d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDrawIndexedIndirect(
44013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
44035ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
440403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         drawCount,
4405d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         stride) {
44063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4407d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
44083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDispatch(
44173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4418d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         x,
4419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         y,
4420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         z) {
44213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
4424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDispatchIndirect(
44283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
44305ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset) {
44313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
44333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
4438d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4441d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyBuffer(
44423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4443d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    srcBuffer,
44443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
4445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferCopy*                         pRegions) {
44473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4448d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcBufferObject := GetBuffer(srcBuffer)
44493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
44503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcBufferObject.device)
44513fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
44593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
4460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
446165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4462d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4464d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyImage(
44663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4467d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
44693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
44703fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4472d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageCopy*                          pRegions) {
44733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
44753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
44763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
44773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4482d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
44853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4486d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
448765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBlitImage(
44923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
44953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
44963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageBlit*                          pRegions,
449923ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall        VkFilter                                    filter) {
45003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
45023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
45033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
45043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4509d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
45123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4516d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4518d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyBufferToImage(
45193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    srcBuffer,
45213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
45223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferImageCopy*                    pRegions) {
45253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcBufferObject := GetBuffer(srcBuffer)
45273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
45283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcBufferObject.device)
45293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4533d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4535d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
45373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
453965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyImageToBuffer(
45443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4545d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4546d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
45473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
4548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4549d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferImageCopy*                    pRegions) {
45503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4551d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
45523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
45533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
45543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4556d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
45623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
4563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
456465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4565d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4566d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4567d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4568d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdUpdateBuffer(
45693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
45703fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
45713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                dstOffset,
45725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                dataSize,
4573d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const u32*                                  pData) {
45743fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
45753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
45763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4577d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4578d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    data := pData[0:dataSize]
4579d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
4581d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
458265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4583d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4584d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4585d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4586d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdFillBuffer(
45873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
45883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
45893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                dstOffset,
4590b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkDeviceSize                                size,
4591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         data) {
45923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
45933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
45943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4595d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
459665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4597d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4598d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4599d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdClearColorImage(
46013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
4603d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               imageLayout,
4604d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkClearColorValue*                    pColor,
4605d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         rangeCount,
4606d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageSubresourceRange*              pRanges) {
46073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4608d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
46093fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == imageObject.device)
4610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4611d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    ranges := pRanges[0:rangeCount]
4612d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. rangeCount) {
4613d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        range := ranges[i]
4614d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, image, imageObject.memory)
4617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4619d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4620d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4621d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4622d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdClearDepthStencilImage(
46233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
4625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               imageLayout,
46265ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkClearDepthStencilValue*             pDepthStencil,
4627d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         rangeCount,
4628d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageSubresourceRange*              pRanges) {
46293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4630d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
46313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == imageObject.device)
4632d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4633d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    ranges := pRanges[0:rangeCount]
4634d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. rangeCount) {
4635d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        range := ranges[i]
4636d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4637d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, image, imageObject.memory)
4639d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46403fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4641d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4642d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4643d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4644ae38f7355fd03b777313e13586585a74e0dee05bJesse Hallcmd void vkCmdClearAttachments(
46453fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4646ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall        u32                                         attachmentCount,
4647ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall        const VkClearAttachment*                    pAttachments,
4648d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         rectCount,
4649a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall        const VkClearRect*                          pRects) {
46503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4651d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4652d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    rects := pRects[0:rectCount]
4653d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. rectCount) {
4654d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        rect := rects[i]
4655d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4656d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4658d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4659d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4660d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4661d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdResolveImage(
46623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4663d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4664d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
46653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
46663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4667d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4668d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageResolve*                       pRegions) {
46693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4670d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
46713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
46723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
46733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4674d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4675d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4676d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4677d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4678d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4679d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
46813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4682d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
46833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4684d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4685d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4686d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4687d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdSetEvent(
46883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4689d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event,
4690d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        stageMask) {
46913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
46933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == eventObject.device)
4694d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4695d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4696d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4697d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdResetEvent(
46983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4699d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event,
4700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        stageMask) {
47013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4702d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
47033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == eventObject.device)
4704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4705d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4707d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdWaitEvents(
47083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         eventCount,
4710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkEvent*                              pEvents,
4711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        srcStageMask,
47123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkPipelineStageFlags                        dstStageMask,
47133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryBarrierCount,
47143dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        const VkMemoryBarrier*                      pMemoryBarriers,
47153dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         bufferMemoryBarrierCount,
47163dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
47173dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         imageMemoryBarrierCount,
47183dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        const VkImageMemoryBarrier*                 pImageMemoryBarriers) {
47193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4720d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4721d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    events := pEvents[0:eventCount]
4722d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. eventCount) {
4723d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        event := events[i]
4724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        eventObject := GetEvent(event)
47253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == eventObject.device)
4726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4727d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
47283dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    memoryBarriers := pMemoryBarriers[0:memoryBarrierCount]
47293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryBarrierCount) {
47303dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        memoryBarrier := memoryBarriers[i]
47313dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    }
47323dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    bufferMemoryBarriers := pBufferMemoryBarriers[0:bufferMemoryBarrierCount]
47333dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    for i in (0 .. bufferMemoryBarrierCount) {
47343dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        bufferMemoryBarrier := bufferMemoryBarriers[i]
47353dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
47363dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        assert(bufferObject.device == commandBufferObject.device)
47373dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    }
47383dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    imageMemoryBarriers := pImageMemoryBarriers[0:imageMemoryBarrierCount]
47393dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    for i in (0 .. imageMemoryBarrierCount) {
47403dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        imageMemoryBarrier := imageMemoryBarriers[i]
47413dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        imageObject := GetImage(imageMemoryBarrier.image)
47423dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        assert(imageObject.device == commandBufferObject.device)
4743d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4744d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4745d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4746d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4747d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdPipelineBarrier(
47483fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4749d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        srcStageMask,
47503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkPipelineStageFlags                        dstStageMask,
4751dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall        VkDependencyFlags                           dependencyFlags,
47523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryBarrierCount,
47533dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        const VkMemoryBarrier*                      pMemoryBarriers,
47543dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         bufferMemoryBarrierCount,
47553dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
47563dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         imageMemoryBarrierCount,
47573dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        const VkImageMemoryBarrier*                 pImageMemoryBarriers) {
47583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4759d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
47603dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    memoryBarriers := pMemoryBarriers[0:memoryBarrierCount]
47613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryBarrierCount) {
47623dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        memoryBarrier := memoryBarriers[i]
47633dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    }
47643dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    bufferMemoryBarriers := pBufferMemoryBarriers[0:bufferMemoryBarrierCount]
47653dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    for i in (0 .. bufferMemoryBarrierCount) {
47663dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        bufferMemoryBarrier := bufferMemoryBarriers[i]
47673dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
47683dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        assert(bufferObject.device == commandBufferObject.device)
47693dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    }
47703dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    imageMemoryBarriers := pImageMemoryBarriers[0:imageMemoryBarrierCount]
47713dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    for i in (0 .. imageMemoryBarrierCount) {
47723dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        imageMemoryBarrier := imageMemoryBarriers[i]
47733dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        imageObject := GetImage(imageMemoryBarrier.image)
47743dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        assert(imageObject.device == commandBufferObject.device)
4775d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4776d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4777d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4778d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4779d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBeginQuery(
47803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4781d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
47823dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         query,
4783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryControlFlags                         flags) {
47843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4785d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
47863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4787d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4788d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4790d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdEndQuery(
47913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4792d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
47933dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         query) {
47943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4795d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
47963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4797d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4799d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4800d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdResetQueryPool(
48013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4802d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
4803f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        u32                                         firstQuery,
4804d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queryCount) {
48053fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4806d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
48073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4809d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4810d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4811d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdWriteTimestamp(
48123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
48136f39a6d1c6202b5d1bb0aa0dc9b2e130e5b73666Jesse Hall        VkPipelineStageFlagBits                     pipelineStage,
4814a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall        VkQueryPool                                 queryPool,
48153dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         query) {
48163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4817a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall    queryPoolObject := GetQueryPool(queryPool)
48183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4820d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyQueryPoolResults(
48233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4824d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
4825f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        u32                                         firstQuery,
4826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queryCount,
48273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
48283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                dstOffset,
4829a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        VkDeviceSize                                stride,
4830d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryResultFlags                          flags) {
48313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4832d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
48333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
48343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
48353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4836d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4837d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4838d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdPushConstants(
48393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4840d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineLayout                            layout,
4841d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkShaderStageFlags                          stageFlags,
484203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         offset,
484303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         size,
4844f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall        const void*                                 pValues) {
48453fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4846d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    layoutObject := GetPipelineLayout(layout)
48473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == layoutObject.device)
4848d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4849d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4850d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4851d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBeginRenderPass(
48523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4853d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkRenderPassBeginInfo*                pRenderPassBegin,
485465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        VkSubpassContents                           contents) {
48553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4856d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4857d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
48583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == renderPassObject.device)
48593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == framebufferObject.device)
4860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
48613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4862d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4863d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdNextSubpass(
48653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
486665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        VkSubpassContents                           contents) {
48673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4869d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4870d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4871d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdEndRenderPass(
48723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer) {
48733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
48753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4876d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdExecuteCommands(
48793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
48803dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                         commandBufferCount,
48813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBuffer*                      pCommandBuffers) {
48823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
48833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall
48843dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    commandBuffers := pCommandBuffers[0:commandBufferCount]
48853dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall    for i in (0 .. commandBufferCount) {
48863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        secondaryCommandBuffer := commandBuffers[i]
48873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
48883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == secondaryCommandBufferObject.device)
4889d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
48923e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
48931356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd void vkDestroySurfaceKHR(
48941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                                  instance,
48950e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        VkSurfaceKHR                                surface,
48960e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
48971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
48981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    surfaceObject := GetSurface(surface)
48991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    assert(surfaceObject.instance == instance)
490088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
49011356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    State.Surfaces[surface] = null
49021356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
49031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
49043e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4905a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
49061356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                            physicalDevice,
49071356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        u32                                         queueFamilyIndex,
4908b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkSurfaceKHR                                surface,
4909b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkBool32*                                   pSupported) {
49102818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
49112818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall
4912b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    return ?
49132818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall}
49142818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall
49153e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4916b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4917b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkPhysicalDevice                            physicalDevice,
49181356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR                                surface,
4919b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities) {
4920b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
492188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
4922b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    surfaceCapabilities := ?
4923b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    pSurfaceCapabilities[0] = surfaceCapabilities
492488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
492588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
492688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
492788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
49283e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4929b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
4930b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkPhysicalDevice                            physicalDevice,
49311356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR                                surface,
493203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pSurfaceFormatCount,
49331356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceFormatKHR*                         pSurfaceFormats) {
4934b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
493588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
493688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    count := as!u32(?)
493703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pSurfaceFormatCount[0] = count
493888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    surfaceFormats := pSurfaceFormats[0:count]
493988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
494088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    for i in (0 .. count) {
494188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        surfaceFormat := ?
494288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        surfaceFormats[i] = surfaceFormat
494388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    }
494488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
494588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
494688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
494788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
49483e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4949b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
4950b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkPhysicalDevice                            physicalDevice,
49511356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR                                surface,
495203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPresentModeCount,
49531356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPresentModeKHR*                           pPresentModes) {
4954b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
495588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
495688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    count := as!u32(?)
495703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPresentModeCount[0] = count
495888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    presentModes := pPresentModes[0:count]
495988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
496088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    for i in (0 .. count) {
496188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        presentMode := ?
496288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        presentModes[i] = presentMode
496388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    }
496488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
496588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
496688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
496788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
49683e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
496988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkCreateSwapchainKHR(
497088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
497188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        const VkSwapchainCreateInfoKHR*          pCreateInfo,
49720e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*             pAllocator,
497388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSwapchainKHR*                          pSwapchain) {
49741356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
497588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
497688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
497788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchain := ?
497888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    pSwapchain[0] = swapchain
497988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    State.Swapchains[swapchain] = new!SwapchainObject(device: device)
498088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
498188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
498288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
498388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
49843e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
49851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd void vkDestroySwapchainKHR(
498688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
49870e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        VkSwapchainKHR                           swapchain,
49880e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*             pAllocator) {
498988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
499088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchainObject := GetSwapchain(swapchain)
499188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    assert(swapchainObject.device == device)
499288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
499388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    State.Swapchains[swapchain] = null
499488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
499588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
49963e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
499788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkGetSwapchainImagesKHR(
499888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
499988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSwapchainKHR                           swapchain,
500003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                     pSwapchainImageCount,
500188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkImage*                                 pSwapchainImages) {
500288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
500388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
500488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    count := as!u32(?)
500503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pSwapchainImageCount[0] = count
500688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchainImages := pSwapchainImages[0:count]
500788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
500888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    for i in (0 .. count) {
500988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        swapchainImage := ?
501088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        swapchainImages[i] = swapchainImage
50111356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        State.Images[swapchainImage] = new!ImageObject(device: device)
501288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    }
501388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
501488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
501588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
501688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
50173e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
501888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkAcquireNextImageKHR(
501988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
502088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSwapchainKHR                           swapchain,
502188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        u64                                      timeout,
502288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSemaphore                              semaphore,
50231356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkFence                                  fence,
502488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        u32*                                     pImageIndex) {
502588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
502688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchainObject := GetSwapchain(swapchain)
502788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
502888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    imageIndex := ?
502988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    pImageIndex[0] = imageIndex
503088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
503188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
503288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
503388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
50343e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
503588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkQueuePresentKHR(
503688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkQueue                                  queue,
5037f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall        const VkPresentInfoKHR*                  pPresentInfo) {
503888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    queueObject := GetQueue(queue)
503988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
504088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    presentInfo := ?
504188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    pPresentInfo[0] = presentInfo
504288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
504388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
504488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
504588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
50463e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
50471356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
50481356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
504903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                    pPropertyCount,
50501356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayPropertiesKHR*                 pProperties) {
50511356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
50521356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
50531356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
50541356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
50553e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
5056a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
5057a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
5058a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32*                                    pPropertyCount,
5059a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkDisplayPlanePropertiesKHR*            pProperties) {
5060a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5061a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5062a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5063a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
50643e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
5065a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
5066a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
50673dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall        u32                                     planeIndex,
5068f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall        u32*                                    pDisplayCount,
5069f4ab2b18391ab5045b44af9ea1d5698af7c2a0cdJesse Hall        VkDisplayKHR*                           pDisplays) {
5070a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5071a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5072a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5073a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
50743e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
50751356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkGetDisplayModePropertiesKHR(
50761356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
50771356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayKHR                            display,
507803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                    pPropertyCount,
507903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDisplayModePropertiesKHR*             pProperties) {
50801356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
50811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
50821356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
50831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
50843e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
50851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateDisplayModeKHR(
50861356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
50871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayKHR                            display,
50881356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        const VkDisplayModeCreateInfoKHR*       pCreateInfo,
50890e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
50901356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayModeKHR*                       pMode) {
50911356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
50921356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
50931356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
50941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
50953e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
5096a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
50971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
50989ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall        VkDisplayModeKHR                        mode,
50991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        u32                                     planeIndex,
5100a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkDisplayPlaneCapabilitiesKHR*          pCapabilities) {
51011356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
51021356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
51031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
51041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
51053e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
5106a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkCreateDisplayPlaneSurfaceKHR(
5107a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkInstance                              instance,
5108a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
51090e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
5110a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkSurfaceKHR*                           pSurface) {
5111a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5112a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5113a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
51149ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall@extension("VK_KHR_display_swapchain")
51159ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hallcmd VkResult vkCreateSharedSwapchainsKHR(
51169ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall        VkDevice                                device,
51179ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall        u32                                     swapchainCount,
51189ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall        const VkSwapchainCreateInfoKHR*         pCreateInfos,
51199ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall        const VkAllocationCallbacks*            pAllocator,
51209ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall        VkSwapchainKHR*                         pSwapchains) {
51219ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall    return ?
51229ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall}
51239ba8bc8d8769cd4d7b56b44222323b7f06783b11Jesse Hall
51243e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface")
5125a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkCreateXlibSurfaceKHR(
51261356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
5127f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        const VkXlibSurfaceCreateInfoKHR*       pCreateInfo,
51280e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
51291356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
51301356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
51311356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
51321356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
51331356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
51343e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface")
5135a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
5136a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
5137a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
5138a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.Display*                       dpy,
513965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        platform.VisualID                       visualID) {
5140a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5141a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5142a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5143a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
51443e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xcb_surface")
5145f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallcmd VkResult vkCreateXcbSurfaceKHR(
51461356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
5147f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        const VkXcbSurfaceCreateInfoKHR*        pCreateInfo,
51480e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
51491356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
51501356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
51511356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
51521356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
51531356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
5154523db34c1308c066ff9fe0a301ba6ed09f82b8aeJesse Hall@extension("VK_KHR_xcb_surface")
5155a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
5156a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
5157a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
5158a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.xcb_connection_t*              connection,
5159a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.xcb_visualid_t                 visual_id) {
5160a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5161a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5162a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5163a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
51643e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface")
51651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateWaylandSurfaceKHR(
51661356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
5167f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        const VkWaylandSurfaceCreateInfoKHR*    pCreateInfo,
51680e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
51691356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
51701356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
51711356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
51721356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
51731356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
51743e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface")
5175a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
5176a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
5177a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
5178a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.wl_display*                    display) {
5179a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5180a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5181a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5182a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
51833e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface")
51841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateMirSurfaceKHR(
51851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
5186f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        const VkMirSurfaceCreateInfoKHR*        pCreateInfo,
51870e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
51881356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
51891356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
51901356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
51911356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
51921356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
51933e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface")
5194a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
5195a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
5196a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
5197a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.MirConnection*                 connection) {
5198a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5199a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5200a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5201a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
52023e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_android_surface")
52031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateAndroidSurfaceKHR(
52041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
5205f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        const VkAndroidSurfaceCreateInfoKHR*    pCreateInfo,
52060e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
52071356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
52081356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
52091356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
52101356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
52111356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
52123e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface")
52131356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateWin32SurfaceKHR(
52141356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
5215f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hall        const VkWin32SurfaceCreateInfoKHR*      pCreateInfo,
52160e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
52171356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
52181356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
52191356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
52201356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
52211356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
52223e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface")
5223a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
5224a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
5225a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex) {
5226e2948d83f352b9a093252a06757f76a88f5355d3Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
5227a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
5228a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
5229a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
5230b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu@extension("VK_ANDROID_native_buffer")
5231b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wucmd VkResult vkGetSwapchainGrallocUsageANDROID(
5232b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkDevice                                device,
5233b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkFormat                                format,
5234b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkImageUsageFlags                       imageUsage,
5235b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        int*                                    grallocUsage) {
5236b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    return ?
5237b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu}
5238b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu
5239b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu@extension("VK_ANDROID_native_buffer")
5240b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wucmd VkResult vkAcquireImageANDROID(
5241b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkDevice                                device,
5242b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkImage                                 image,
5243b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        int                                     nativeFenceFd,
5244b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkSemaphore                             semaphore,
5245b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkFence                                 fence) {
5246b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    return ?
5247b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu}
5248b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu
5249b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu@extension("VK_ANDROID_native_buffer")
5250b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wucmd VkResult vkQueueSignalReleaseImageANDROID(
5251b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkQueue                                 queue,
5252b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        u32                                     waitSemaphoreCount,
5253b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        const VkSemaphore*                      pWaitSemaphores,
5254b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        VkImage                                 image,
5255b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu        int*                                    pNativeFenceFd) {
5256b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu    return ?
5257b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu}
5258b262ddcfaba592ca153beddb120aeb68b64e6e63Chia-I Wu
5259715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
5260715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@external type void* PFN_vkDebugReportCallbackEXT
5261715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
5262715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@pfn cmd VkBool32 vkDebugReportCallbackEXT(
5263715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkDebugReportFlagsEXT                   flags,
5264715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkDebugReportObjectTypeEXT              objectType,
5265715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        u64                                     object,
5266715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        platform.size_t                         location,
5267715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        s32                                     messageCode,
5268715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const char*                             pLayerPrefix,
5269715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const char*                             pMessage,
5270715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        void*                                   pUserData) {
5271715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    return ?
5272715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
5273715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
5274715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
5275715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallcmd VkResult vkCreateDebugReportCallbackEXT(
5276715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkInstance                                  instance,
5277715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
5278715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const VkAllocationCallbacks*                pAllocator,
5279715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkDebugReportCallbackEXT*                   pCallback) {
5280715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall    return ?
5281715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
5282715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
5283715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
5284715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallcmd void vkDestroyDebugReportCallbackEXT(
5285715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkInstance                                  instance,
5286715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkDebugReportCallbackEXT                    callback,
5287715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
5288715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
5289715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
5290715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall@extension("VK_EXT_debug_report")
5291715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallcmd void vkDebugReportMessageEXT(
5292715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkInstance                                  instance,
5293715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkDebugReportFlagsEXT                       flags,
5294715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        VkDebugReportObjectTypeEXT                  objectType,
5295715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        u64                                         object,
5296715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        platform.size_t                             location,
5297715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        s32                                         messageCode,
5298715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const char*                                 pLayerPrefix,
5299715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall        const char*                                 pMessage) {
5300715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall}
5301715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall
53022676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
53032676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallcmd VkResult vkDebugMarkerSetObjectTagEXT(
53042676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkDevice                                    device,
53052676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkDebugMarkerObjectTagInfoEXT*              pTagInfo) {
53062676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    return ?
53072676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
53082676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
53092676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
53102676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallcmd VkResult vkDebugMarkerSetObjectNameEXT(
53112676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkDevice                                    device,
53122676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkDebugMarkerObjectNameInfoEXT*             pNameInfo) {
53132676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall    return ?
53142676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
53152676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
53162676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
53172676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallcmd void vkCmdDebugMarkerBeginEXT(
53182676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkCommandBuffer                             commandBuffer,
53192676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkDebugMarkerMarkerInfoEXT*                 pMarkerInfo) {
53202676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
53212676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
53222676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
53232676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallcmd void vkCmdDebugMarkerEndEXT(
53242676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkCommandBuffer                             commandBuffer) {
53252676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
53262676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
53272676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall@extension("VK_EXT_debug_marker")
53282676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hallcmd void vkCmdDebugMarkerInsertEXT(
53292676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkCommandBuffer                             commandBuffer,
53302676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall        VkDebugMarkerMarkerInfoEXT*                 pMarkerInfo) {
53312676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall}
53322676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall
5333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
5335d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Validation //
5336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
5337d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5338d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallextern void validate(string layerName, bool condition, string message)
5339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////////////////
5342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Internal State Tracking //
5343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////////////////
5344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse HallStateObject State
5346d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class StateObject {
5348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Dispatchable objects.
5349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkInstance,       ref!InstanceObject)       Instances
5350d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
5351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDevice,         ref!DeviceObject)         Devices
5352d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkQueue,          ref!QueueObject)          Queues
53533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(VkCommandBuffer,  ref!CommandBufferObject)  CommandBuffers
5354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Non-dispatchable objects.
5356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDeviceMemory,             ref!DeviceMemoryObject)             DeviceMemories
5357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkBuffer,                   ref!BufferObject)                   Buffers
5358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkBufferView,               ref!BufferViewObject)               BufferViews
5359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkImage,                    ref!ImageObject)                    Images
5360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkImageView,                ref!ImageViewObject)                ImageViews
5361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkShaderModule,             ref!ShaderModuleObject)             ShaderModules
5362d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPipeline,                 ref!PipelineObject)                 Pipelines
5363d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPipelineLayout,           ref!PipelineLayoutObject)           PipelineLayouts
5364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkSampler,                  ref!SamplerObject)                  Samplers
5365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDescriptorSet,            ref!DescriptorSetObject)            DescriptorSets
5366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDescriptorSetLayout,      ref!DescriptorSetLayoutObject)      DescriptorSetLayouts
5367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDescriptorPool,           ref!DescriptorPoolObject)           DescriptorPools
5368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkFence,                    ref!FenceObject)                    Fences
5369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkSemaphore,                ref!SemaphoreObject)                Semaphores
5370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkEvent,                    ref!EventObject)                    Events
5371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkQueryPool,                ref!QueryPoolObject)                QueryPools
5372d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkFramebuffer,              ref!FramebufferObject)              Framebuffers
5373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkRenderPass,               ref!RenderPassObject)               RenderPasses
5374d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPipelineCache,            ref!PipelineCacheObject)            PipelineCaches
53753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(VkCommandPool,              ref!CommandPoolObject)              CommandPools
53761356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    map!(VkSurfaceKHR,               ref!SurfaceObject)                  Surfaces
537788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    map!(VkSwapchainKHR,             ref!SwapchainObject)                Swapchains
5378d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5379d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5380d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class InstanceObject {
5381d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PhysicalDeviceObject {
5384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkInstance instance
5385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5386d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DeviceObject {
5388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPhysicalDevice physicalDevice
5389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class QueueObject {
5392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueueFlags  flags
5394d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5395d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
53963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@internal class CommandBufferObject {
5397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice                  device
5398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(u64, VkDeviceMemory) boundObjects
5399d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueueFlags              queueFlags
5400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5401d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DeviceMemoryObject {
54033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDevice                                device
54043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                            allocationSize
54053fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(u64, VkDeviceSize)                 boundObjects
54063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(VkCommandBuffer, VkCommandBuffer)  boundCommandBuffers
5407d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class BufferObject {
5410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice              device
54113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory        memory
54123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize          memoryOffset
5413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class BufferViewObject {
5416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBuffer      buffer
5418d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ImageObject {
5421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice              device
54223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory        memory
54233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize          memoryOffset
5424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ImageViewObject {
5427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImage       image
5429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5430d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5431d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ShaderObject {
5432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ShaderModuleObject {
5436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5437d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5438d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PipelineObject {
5440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5441d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5442d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5443d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PipelineLayoutObject {
5444d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class SamplerObject {
5448d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5450d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5451d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DescriptorSetObject {
5452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DescriptorSetLayoutObject {
5456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DescriptorPoolObject {
5460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5462d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class FenceObject {
5464d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bool          signaled
5466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5467d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class SemaphoreObject {
5469d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5470d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5472d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class EventObject {
5473d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class QueryPoolObject {
5477d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class FramebufferObject {
5481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5482d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5484d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class RenderPassObject {
5485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5486d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PipelineCacheObject {
5489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
54923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@internal class CommandPoolObject {
5493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5495d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
54961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall@internal class SurfaceObject {
54971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkInstance    instance
54981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
54991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
550088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine@internal class SwapchainObject {
550188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VkDevice      device
550288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
550388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
5504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!InstanceObject GetInstance(VkInstance instance) {
5505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(instance in State.Instances)
5506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Instances[instance]
5507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5509d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
5510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(physicalDevice in State.PhysicalDevices)
5511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.PhysicalDevices[physicalDevice]
5512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5514d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DeviceObject GetDevice(VkDevice device) {
5515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(device in State.Devices)
5516d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Devices[device]
5517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5518d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5519d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!QueueObject GetQueue(VkQueue queue) {
5520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queue in State.Queues)
5521d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Queues[queue]
5522d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
55243fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
55253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBuffer in State.CommandBuffers)
55263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    return State.CommandBuffers[commandBuffer]
5527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
55293fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
55303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memory in State.DeviceMemories)
55313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    return State.DeviceMemories[memory]
5532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5533d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!BufferObject GetBuffer(VkBuffer buffer) {
5535d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(buffer in State.Buffers)
5536d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Buffers[buffer]
5537d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
5540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferView in State.BufferViews)
5541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.BufferViews[bufferView]
5542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5544d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!ImageObject GetImage(VkImage image) {
5545d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(image in State.Images)
5546d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Images[image]
5547d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5549d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!ImageViewObject GetImageView(VkImageView imageView) {
5550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageView in State.ImageViews)
5551d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.ImageViews[imageView]
5552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5553d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5554d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
5555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(shaderModule in State.ShaderModules)
5556d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.ShaderModules[shaderModule]
5557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
5560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipeline in State.Pipelines)
5561d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Pipelines[pipeline]
5562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5564d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
5565d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineLayout in State.PipelineLayouts)
5566d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.PipelineLayouts[pipelineLayout]
5567d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5568d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5569d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!SamplerObject GetSampler(VkSampler sampler) {
5570d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(sampler in State.Samplers)
5571d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Samplers[sampler]
5572d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5573d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5574d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
5575d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorSet in State.DescriptorSets)
5576d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.DescriptorSets[descriptorSet]
5577d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5578d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5579d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
5580d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorSetLayout in State.DescriptorSetLayouts)
5581d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.DescriptorSetLayouts[descriptorSetLayout]
5582d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5583d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5584d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
5585d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorPool in State.DescriptorPools)
5586d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.DescriptorPools[descriptorPool]
5587d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5588d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5589d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!FenceObject GetFence(VkFence fence) {
5590d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(fence in State.Fences)
5591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Fences[fence]
5592d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5593d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5594d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
5595d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(semaphore in State.Semaphores)
5596d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Semaphores[semaphore]
5597d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5598d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5599d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!EventObject GetEvent(VkEvent event) {
5600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(event in State.Events)
5601d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Events[event]
5602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5603d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5604d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
5605d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queryPool in State.QueryPools)
5606d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.QueryPools[queryPool]
5607d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5608d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5609d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
5610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(framebuffer in State.Framebuffers)
5611d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Framebuffers[framebuffer]
5612d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5613d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5614d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
5615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(renderPass in State.RenderPasses)
5616d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.RenderPasses[renderPass]
5617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5618d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5619d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
5620d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineCache in State.PipelineCaches)
5621d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.PipelineCaches[pipelineCache]
5622d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5623d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
56243fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
56253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandPool in State.CommandPools)
56263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    return State.CommandPools[commandPool]
5627f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall}
562888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
56291356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallmacro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
56301356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    assert(surface in State.Surfaces)
56311356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return State.Surfaces[surface]
56321356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
56331356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
563488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinemacro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
563588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    assert(swapchain in State.Swapchains)
563688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return State.Swapchains[swapchain]
563788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
5638d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall
5639d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallmacro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
5640d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall    return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
5641d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall}
5642