vulkan.api revision 0e74f00af03b7e705774d0dcf69c2ba8ce7a15a8
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)
29d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Halldefine VERSION_MAJOR 0
300e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Halldefine VERSION_MINOR 205
31ae38f7355fd03b777313e13586585a74e0dee05bJesse Halldefine VERSION_PATCH 0
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
480e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION                     23
493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER             1
503e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
511356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
520e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 66
533e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
543e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
551356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
560e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION                     19
573e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER             3
583e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
591356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
600e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_REVISION         8
610e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
620e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_display_swapchain"
631356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
640e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION           5
653e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NUMBER             5
663e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME               "VK_KHR_xlib_surface"
671356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
680e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION             5
693e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NUMBER               6
703e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME                 "VK_KHR_xcb_surface"
711356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
720e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION     4
733e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NUMBER       7
743e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME         "VK_KHR_wayland_surface"
751356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
760e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION             4
773e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NUMBER               8
783e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME                 "VK_KHR_mir_surface"
791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
800e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION     3
813e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NUMBER       8
823e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME         "VK_KHR_android_surface"
831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
840e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION         4
853e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NUMBER           9
863e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME             "VK_KHR_win32_surface"
871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
88d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
89d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
90d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Types  //
91d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
92d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u32 VkBool32
945ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u32 VkFlags
955ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u64 VkDeviceSize
965ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Halltype u32 VkSampleMask
975ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
98d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Dispatchable handle types.
99d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkInstance
100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkPhysicalDevice
101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkDevice
102d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@dispatchHandle type u64 VkQueue
1033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@dispatchHandle type u64 VkCommandBuffer
104d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Non dispatchable handle types.
106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDeviceMemory
1073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@nonDispatchHandle type u64 VkCommandPool
108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkBuffer
109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkBufferView
110d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkImage
111d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkImageView
112d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkShaderModule
113d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkPipeline
114d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkPipelineLayout
115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkSampler
116d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDescriptorSet
117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDescriptorSetLayout
118d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkDescriptorPool
119d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkFence
120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkSemaphore
121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkEvent
122d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkQueryPool
123d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkFramebuffer
124d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkRenderPass
125d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@nonDispatchHandle type u64 VkPipelineCache
1261356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1273e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")    @nonDispatchHandle type u64 VkSurfaceKHR
1281356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1293e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")  @nonDispatchHandle type u64 VkSwapchainKHR
1301356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1313e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayKHR
1323e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayModeKHR
133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Enums  //
137d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////
138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
139d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageLayout {
140d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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)
141d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_GENERAL                                 = 0x00000001,   /// General layout when image can be used for any kind of access
142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL                = 0x00000002,   /// Optimal layout when image is only used for color attachment read/write
143d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL        = 0x00000003,   /// Optimal layout when image is only used for depth/stencil attachment read/write
144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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
145d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL                = 0x00000005,   /// Optimal layout when image is used for read only shader access
1463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL                    = 0x00000006,   /// Optimal layout when image is used only as source of transfer operations
1473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                    = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
1485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
1491356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1503e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
1513fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 0xc0000802,
152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
153d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkAttachmentLoadOp {
155d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_LOAD_OP_LOAD                              = 0x00000000,
156d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_LOAD_OP_CLEAR                             = 0x00000001,
157d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_LOAD_OP_DONT_CARE                         = 0x00000002,
158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkAttachmentStoreOp {
161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_STORE_OP_STORE                            = 0x00000000,
162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ATTACHMENT_STORE_OP_DONT_CARE                        = 0x00000001,
163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageType {
166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_TYPE_1D                                        = 0x00000000,
167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_TYPE_2D                                        = 0x00000001,
168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_TYPE_3D                                        = 0x00000002,
169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageTiling {
172c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_IMAGE_TILING_OPTIMAL                                 = 0x00000000,
173c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_IMAGE_TILING_LINEAR                                  = 0x00000001,
174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
175d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
176d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkImageViewType {
177d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_1D                                   = 0x00000000,
178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_2D                                   = 0x00000001,
179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_3D                                   = 0x00000002,
180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_CUBE                                 = 0x00000003,
181d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_1D_ARRAY                             = 0x00000004,
182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_2D_ARRAY                             = 0x00000005,
183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_VIEW_TYPE_CUBE_ARRAY                           = 0x00000006,
184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1863fbc856120217247c72fb5ed88500000f3881c45Jesse Hallenum VkCommandBufferLevel {
1873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_LEVEL_PRIMARY                         = 0x00000000,
1883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_LEVEL_SECONDARY                       = 0x00000001,
189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
19165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkComponentSwizzle {
19265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_IDENTITY                           = 0x00000000,
19365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_ZERO                               = 0x00000001,
19465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_ONE                                = 0x00000002,
19565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_R                                  = 0x00000003,
19665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_G                                  = 0x00000004,
19765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_B                                  = 0x00000005,
19865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COMPONENT_SWIZZLE_A                                  = 0x00000006,
199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkDescriptorType {
202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_SAMPLER                              = 0x00000000,
203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER               = 0x00000001,
204d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE                        = 0x00000002,
205d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE                        = 0x00000003,
206d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER                 = 0x00000004,
207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER                 = 0x00000005,
208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER                       = 0x00000006,
209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER                       = 0x00000007,
210d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC               = 0x00000008,
211d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC               = 0x00000009,
212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT                     = 0x0000000a,
213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkQueryType {
216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_TYPE_OCCLUSION                                 = 0x00000000,
217d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_TYPE_PIPELINE_STATISTICS                       = 0x00000001, /// Optional
218a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall    VK_QUERY_TYPE_TIMESTAMP                                 = 0x00000002,
219d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
220d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkBorderColor {
222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK                 = 0x00000000,
223d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_INT_TRANSPARENT_BLACK                   = 0x00000001,
224d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK                      = 0x00000002,
225d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_INT_OPAQUE_BLACK                        = 0x00000003,
226d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE                      = 0x00000004,
227d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BORDER_COLOR_INT_OPAQUE_WHITE                        = 0x00000005,
228d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
229d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
230d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkPipelineBindPoint {
231c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_PIPELINE_BIND_POINT_GRAPHICS                         = 0x00000000,
232c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_PIPELINE_BIND_POINT_COMPUTE                          = 0x00000001,
233d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
234d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
235d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkPrimitiveTopology {
236d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_POINT_LIST                        = 0x00000000,
237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_LIST                         = 0x00000001,
238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP                        = 0x00000002,
239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                     = 0x00000003,
240d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP                    = 0x00000004,
241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                      = 0x00000005,
2423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY          = 0x00000006,
2433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY         = 0x00000007,
2443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY      = 0x00000008,
2453fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY     = 0x00000009,
246091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST                        = 0x0000000a,
247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkSharingMode {
250d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHARING_MODE_EXCLUSIVE                               = 0x00000000,
251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHARING_MODE_CONCURRENT                              = 0x00000001,
252d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
253d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
254d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkIndexType {
255d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_INDEX_TYPE_UINT16                                    = 0x00000000,
256d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_INDEX_TYPE_UINT32                                    = 0x00000001,
257d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
258d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
25923ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hallenum VkFilter {
26023ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_FILTER_NEAREST                                       = 0x00000000,
26123ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_FILTER_LINEAR                                        = 0x00000001,
262d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
263d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
26423ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hallenum VkSamplerMipmapMode {
26523ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_SAMPLER_MIPMAP_MODE_BASE                             = 0x00000000,   /// Always choose base level
26623ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_SAMPLER_MIPMAP_MODE_NEAREST                          = 0x00000001,   /// Choose nearest mip level
26723ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VK_SAMPLER_MIPMAP_MODE_LINEAR                           = 0x00000002,   /// Linear filter between mip levels
268d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27023ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hallenum VkSamplerAddressMode {
271c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_REPEAT                          = 0x00000000,
272c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT                 = 0x00000001,
273c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE                   = 0x00000002,
274c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER                 = 0x00000003,
275c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE            = 0x00000004,
276d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
277d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
278d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkCompareOp {
279d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_NEVER                                     = 0x00000000,
280d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_LESS                                      = 0x00000001,
281d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_EQUAL                                     = 0x00000002,
2823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMPARE_OP_LESS_OR_EQUAL                             = 0x00000003,
283d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_GREATER                                   = 0x00000004,
284d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_NOT_EQUAL                                 = 0x00000005,
2853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMPARE_OP_GREATER_OR_EQUAL                          = 0x00000006,
286d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_COMPARE_OP_ALWAYS                                    = 0x00000007,
287d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
288d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkPolygonMode {
29065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_POLYGON_MODE_FILL                                    = 0x00000000,
29165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_POLYGON_MODE_LINE                                    = 0x00000001,
29265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_POLYGON_MODE_POINT                                   = 0x00000002,
293d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
294d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
295d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkFrontFace {
2963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FRONT_FACE_COUNTER_CLOCKWISE                         = 0x00000000,
2973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FRONT_FACE_CLOCKWISE                                 = 0x00000001,
298d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
299d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
30065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkBlendFactor {
30165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ZERO                                    = 0x00000000,
30265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE                                     = 0x00000001,
30365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC_COLOR                               = 0x00000002,
30465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR                     = 0x00000003,
30565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_DST_COLOR                               = 0x00000004,
30665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR                     = 0x00000005,
30765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC_ALPHA                               = 0x00000006,
30865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA                     = 0x00000007,
30965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_DST_ALPHA                               = 0x00000008,
31065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA                     = 0x00000009,
31165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_CONSTANT_COLOR                          = 0x0000000a,
31265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR                = 0x0000000b,
31365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_CONSTANT_ALPHA                          = 0x0000000c,
31465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA                = 0x0000000d,
31565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE                      = 0x0000000e,
31665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC1_COLOR                              = 0x0000000f,
31765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR                    = 0x00000010,
31865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_SRC1_ALPHA                              = 0x00000011,
31965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA                    = 0x00000012,
320d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
321d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
322d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkBlendOp {
323d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_ADD                                         = 0x00000000,
324d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_SUBTRACT                                    = 0x00000001,
325d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_REVERSE_SUBTRACT                            = 0x00000002,
326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_MIN                                         = 0x00000003,
327d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BLEND_OP_MAX                                         = 0x00000004,
328d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
329d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkStencilOp {
331d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_KEEP                                      = 0x00000000,
332d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_ZERO                                      = 0x00000001,
333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_REPLACE                                   = 0x00000002,
3343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_INCREMENT_AND_CLAMP                       = 0x00000003,
3353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_DECREMENT_AND_CLAMP                       = 0x00000004,
336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STENCIL_OP_INVERT                                    = 0x00000005,
3373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_INCREMENT_AND_WRAP                        = 0x00000006,
3383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_STENCIL_OP_DECREMENT_AND_WRAP                        = 0x00000007,
339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkLogicOp {
342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_CLEAR                                       = 0x00000000,
343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_AND                                         = 0x00000001,
344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_AND_REVERSE                                 = 0x00000002,
345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_COPY                                        = 0x00000003,
346d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_AND_INVERTED                                = 0x00000004,
3473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_LOGIC_OP_NO_OP                                       = 0x00000005,
348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_XOR                                         = 0x00000006,
349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_OR                                          = 0x00000007,
350d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_NOR                                         = 0x00000008,
3513fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_LOGIC_OP_EQUIVALENT                                  = 0x00000009,
352d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_INVERT                                      = 0x0000000a,
353d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_OR_REVERSE                                  = 0x0000000b,
354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_COPY_INVERTED                               = 0x0000000c,
355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_OR_INVERTED                                 = 0x0000000d,
356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_NAND                                        = 0x0000000e,
357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_LOGIC_OP_SET                                         = 0x0000000f,
358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3603fbc856120217247c72fb5ed88500000f3881c45Jesse Hallenum VkSystemAllocationScope {
3613e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND                      = 0x00000000,
3623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT                       = 0x00000001,
3633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_CACHE                        = 0x00000002,
3643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE                       = 0x00000003,
3653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE                     = 0x00000004,
36603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
36703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall
3683fbc856120217247c72fb5ed88500000f3881c45Jesse Hallenum VkInternalAllocationType {
3693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE                  = 0x00000000,
370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
372d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkPhysicalDeviceType {
373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_OTHER                           = 0x00000000,
374d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU                  = 0x00000001,
375d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU                    = 0x00000002,
376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU                     = 0x00000003,
377d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PHYSICAL_DEVICE_TYPE_CPU                             = 0x00000004,
378d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
379d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkVertexInputRate {
38165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_VERTEX_INPUT_RATE_VERTEX                             = 0x00000000,
38265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_VERTEX_INPUT_RATE_INSTANCE                           = 0x00000001,
383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Vulkan format definitions
386d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkFormat {
387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_UNDEFINED                                     = 0x00000000,
388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R4G4_UNORM                                    = 0x00000001,
389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R4G4_USCALED                                  = 0x00000002,
390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R4G4B4A4_UNORM                                = 0x00000003,
391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R4G4B4A4_USCALED                              = 0x00000004,
392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R5G6B5_UNORM                                  = 0x00000005,
393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R5G6B5_USCALED                                = 0x00000006,
394d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R5G5B5A1_UNORM                                = 0x00000007,
395d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R5G5B5A1_USCALED                              = 0x00000008,
396d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_UNORM                                      = 0x00000009,
397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_SNORM                                      = 0x0000000A,
398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_USCALED                                    = 0x0000000B,
399d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_SSCALED                                    = 0x0000000C,
400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_UINT                                       = 0x0000000D,
401d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_SINT                                       = 0x0000000E,
402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8_SRGB                                       = 0x0000000F,
403d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_UNORM                                    = 0x00000010,
404d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_SNORM                                    = 0x00000011,
405d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_USCALED                                  = 0x00000012,
406d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_SSCALED                                  = 0x00000013,
407d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_UINT                                     = 0x00000014,
408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_SINT                                     = 0x00000015,
409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8_SRGB                                     = 0x00000016,
410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_UNORM                                  = 0x00000017,
411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_SNORM                                  = 0x00000018,
412d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_USCALED                                = 0x00000019,
413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_SSCALED                                = 0x0000001A,
414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_UINT                                   = 0x0000001B,
415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_SINT                                   = 0x0000001C,
416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8_SRGB                                   = 0x0000001D,
417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_UNORM                                = 0x0000001E,
418d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_SNORM                                = 0x0000001F,
419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_USCALED                              = 0x00000020,
420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_SSCALED                              = 0x00000021,
421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_UINT                                 = 0x00000022,
422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_SINT                                 = 0x00000023,
423d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R8G8B8A8_SRGB                                 = 0x00000024,
424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R10G10B10A2_UNORM                             = 0x00000025,
425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R10G10B10A2_SNORM                             = 0x00000026,
426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R10G10B10A2_USCALED                           = 0x00000027,
427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R10G10B10A2_SSCALED                           = 0x00000028,
428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R10G10B10A2_UINT                              = 0x00000029,
429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R10G10B10A2_SINT                              = 0x0000002A,
430d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_UNORM                                     = 0x0000002B,
431d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_SNORM                                     = 0x0000002C,
432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_USCALED                                   = 0x0000002D,
433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_SSCALED                                   = 0x0000002E,
434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_UINT                                      = 0x0000002F,
435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_SINT                                      = 0x00000030,
436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16_SFLOAT                                    = 0x00000031,
437d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_UNORM                                  = 0x00000032,
438d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_SNORM                                  = 0x00000033,
439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_USCALED                                = 0x00000034,
440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_SSCALED                                = 0x00000035,
441d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_UINT                                   = 0x00000036,
442d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_SINT                                   = 0x00000037,
443d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16_SFLOAT                                 = 0x00000038,
444d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_UNORM                               = 0x00000039,
445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_SNORM                               = 0x0000003A,
446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_USCALED                             = 0x0000003B,
447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_SSCALED                             = 0x0000003C,
448d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_UINT                                = 0x0000003D,
449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_SINT                                = 0x0000003E,
450d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16_SFLOAT                              = 0x0000003F,
451d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_UNORM                            = 0x00000040,
452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_SNORM                            = 0x00000041,
453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_USCALED                          = 0x00000042,
454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_SSCALED                          = 0x00000043,
455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_UINT                             = 0x00000044,
456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_SINT                             = 0x00000045,
457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R16G16B16A16_SFLOAT                           = 0x00000046,
458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32_UINT                                      = 0x00000047,
459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32_SINT                                      = 0x00000048,
460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32_SFLOAT                                    = 0x00000049,
461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32_UINT                                   = 0x0000004A,
462d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32_SINT                                   = 0x0000004B,
463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32_SFLOAT                                 = 0x0000004C,
464d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32B32_UINT                                = 0x0000004D,
465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32B32_SINT                                = 0x0000004E,
466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32B32_SFLOAT                              = 0x0000004F,
467d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32B32A32_UINT                             = 0x00000050,
468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32B32A32_SINT                             = 0x00000051,
469d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R32G32B32A32_SFLOAT                           = 0x00000052,
470d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R64_SFLOAT                                    = 0x00000053,
471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R64G64_SFLOAT                                 = 0x00000054,
472d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R64G64B64_SFLOAT                              = 0x00000055,
473d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R64G64B64A64_SFLOAT                           = 0x00000056,
474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R11G11B10_UFLOAT                              = 0x00000057,
475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_R9G9B9E5_UFLOAT                               = 0x00000058,
476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_D16_UNORM                                     = 0x00000059,
4775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_FORMAT_D24_UNORM_X8                                  = 0x0000005A,
478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_D32_SFLOAT                                    = 0x0000005B,
479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_S8_UINT                                       = 0x0000005C,
480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_D16_UNORM_S8_UINT                             = 0x0000005D,
481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_D24_UNORM_S8_UINT                             = 0x0000005E,
482d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_D32_SFLOAT_S8_UINT                            = 0x0000005F,
483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC1_RGB_UNORM                                 = 0x00000060,
484d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC1_RGB_SRGB                                  = 0x00000061,
485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC1_RGBA_UNORM                                = 0x00000062,
486d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC1_RGBA_SRGB                                 = 0x00000063,
487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC2_UNORM                                     = 0x00000064,
488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC2_SRGB                                      = 0x00000065,
489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC3_UNORM                                     = 0x00000066,
490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC3_SRGB                                      = 0x00000067,
491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC4_UNORM                                     = 0x00000068,
492d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC4_SNORM                                     = 0x00000069,
493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC5_UNORM                                     = 0x0000006A,
494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC5_SNORM                                     = 0x0000006B,
495d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC6H_UFLOAT                                   = 0x0000006C,
496d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC6H_SFLOAT                                   = 0x0000006D,
497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC7_UNORM                                     = 0x0000006E,
498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_BC7_SRGB                                      = 0x0000006F,
499d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ETC2_R8G8B8_UNORM                             = 0x00000070,
500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ETC2_R8G8B8_SRGB                              = 0x00000071,
501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ETC2_R8G8B8A1_UNORM                           = 0x00000072,
502d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ETC2_R8G8B8A1_SRGB                            = 0x00000073,
503d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ETC2_R8G8B8A8_UNORM                           = 0x00000074,
504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ETC2_R8G8B8A8_SRGB                            = 0x00000075,
505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_EAC_R11_UNORM                                 = 0x00000076,
506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_EAC_R11_SNORM                                 = 0x00000077,
507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_EAC_R11G11_UNORM                              = 0x00000078,
508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_EAC_R11G11_SNORM                              = 0x00000079,
509d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_4x4_UNORM                                = 0x0000007A,
510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_4x4_SRGB                                 = 0x0000007B,
511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_5x4_UNORM                                = 0x0000007C,
512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_5x4_SRGB                                 = 0x0000007D,
513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_5x5_UNORM                                = 0x0000007E,
514d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_5x5_SRGB                                 = 0x0000007F,
515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_6x5_UNORM                                = 0x00000080,
516d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_6x5_SRGB                                 = 0x00000081,
517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_6x6_UNORM                                = 0x00000082,
518d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_6x6_SRGB                                 = 0x00000083,
519d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_8x5_UNORM                                = 0x00000084,
520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_8x5_SRGB                                 = 0x00000085,
521d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_8x6_UNORM                                = 0x00000086,
522d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_8x6_SRGB                                 = 0x00000087,
523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_8x8_UNORM                                = 0x00000088,
524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_8x8_SRGB                                 = 0x00000089,
525d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x5_UNORM                               = 0x0000008A,
526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x5_SRGB                                = 0x0000008B,
527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x6_UNORM                               = 0x0000008C,
528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x6_SRGB                                = 0x0000008D,
529d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x8_UNORM                               = 0x0000008E,
530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x8_SRGB                                = 0x0000008F,
531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x10_UNORM                              = 0x00000090,
532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_10x10_SRGB                               = 0x00000091,
533d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_12x10_UNORM                              = 0x00000092,
534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_12x10_SRGB                               = 0x00000093,
535d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_12x12_UNORM                              = 0x00000094,
536d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_ASTC_12x12_SRGB                               = 0x00000095,
537d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B4G4R4A4_UNORM                                = 0x00000096,
538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B5G5R5A1_UNORM                                = 0x00000097,
539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B5G6R5_UNORM                                  = 0x00000098,
540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B5G6R5_USCALED                                = 0x00000099,
541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_UNORM                                  = 0x0000009A,
542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_SNORM                                  = 0x0000009B,
543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_USCALED                                = 0x0000009C,
544d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_SSCALED                                = 0x0000009D,
545d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_UINT                                   = 0x0000009E,
546d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_SINT                                   = 0x0000009F,
547d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8_SRGB                                   = 0x000000A0,
548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_UNORM                                = 0x000000A1,
549d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_SNORM                                = 0x000000A2,
550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_USCALED                              = 0x000000A3,
551d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_SSCALED                              = 0x000000A4,
552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_UINT                                 = 0x000000A5,
553d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_SINT                                 = 0x000000A6,
554d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B8G8R8A8_SRGB                                 = 0x000000A7,
555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B10G10R10A2_UNORM                             = 0x000000A8,
556d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B10G10R10A2_SNORM                             = 0x000000A9,
557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B10G10R10A2_USCALED                           = 0x000000AA,
558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B10G10R10A2_SSCALED                           = 0x000000AB,
559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B10G10R10A2_UINT                              = 0x000000AC,
560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_B10G10R10A2_SINT                              = 0x000000AD,
561d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Structure type enumerant
564d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkStructureType {
565d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_STRUCTURE_TYPE_APPLICATION_INFO                          = 0,
566c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                      = 1,
567c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 2,
568c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                        = 3,
569c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 4,
570c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                         = 5,
571c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 6,
572c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 7,
573c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 8,
574c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 9,
5755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                         = 10,
576c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                    = 11,
577c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                        = 12,
578c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                   = 13,
579c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 14,
580c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                    = 15,
581c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 16,
5823e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 17,
5833e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 18,
5843e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 19,
5853e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
5863e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 21,
5873e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 22,
5883e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO  = 23,
5893e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 24,
5903e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 25,
5913e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 26,
5923e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 27,
5933e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 28,
5943e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 29,
5953e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 30,
5963e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 31,
5973e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 32,
5983e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 33,
5993e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 34,
6003e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 35,
6013e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 36,
6023e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 37,
6033e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 38,
6043e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 39,
6053e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO                 = 40,
6063e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 41,
6073e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 42,
6083e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 43,
6093e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 44,
6103e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 45,
6113e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 46,
6123e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 47,
6133e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall
6143e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
6151356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
6161356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6173e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_display")
6181356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 0xc0000c00,
619a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 0xc0000c01,
6201356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6213e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_display_swapchain")
6221356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR         = 0xc0001000,
6231356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001001,
624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
62665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallenum VkSubpassContents {
62765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_SUBPASS_CONTENTS_INLINE                              = 0x00000000,
62865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS           = 0x00000001,
629d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
630d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
631091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall@lastUnused(-10)
632d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Error and return codes
633d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallenum VkResult {
634d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Return codes for successful operation execution (positive values)
635d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SUCCESS                                              = 0x00000000,
636a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VK_NOT_READY                                            = 0x00000001,
637a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VK_TIMEOUT                                              = 0x00000002,
638a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VK_EVENT_SET                                            = 0x00000003,
639a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VK_EVENT_RESET                                          = 0x00000004,
640a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VK_INCOMPLETE                                           = 0x00000005,
641d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
6423e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
6431356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_SUBOPTIMAL_KHR                                       = 0x40000403,
6441356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
645d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Error codes (negative values)
6465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF,
6475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE,
648d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_ERROR_INITIALIZATION_FAILED                          = 0xFFFFFFFD,
6495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ERROR_DEVICE_LOST                                    = 0xFFFFFFFC,
6505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB,
6515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA,
6525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9,
653606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
654606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
655091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6,
656a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hall    VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5,
6571356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6583e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_surface")
659a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
660a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
6613e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_swapchain")
6621356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
6631356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6643e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_display_swapchain")
6651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001002,
6661356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
6673e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    //@extension("VK_KHR_android_surface")
6681356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_ERROR_INVALID_ANDROID_WINDOW_KHR                     = 0xC002400,
6691356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_ERROR_ANDROID_WINDOW_IN_USE_KHR                      = 0xC002401,
6705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
6715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
6725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallenum VkDynamicState {
6735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_VIEWPORT                               = 0x00000000,
6745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_SCISSOR                                = 0x00000001,
6755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_LINE_WIDTH                             = 0x00000002,
6765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_DEPTH_BIAS                             = 0x00000003,
6775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_BLEND_CONSTANTS                        = 0x00000004,
6785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_DEPTH_BOUNDS                           = 0x00000005,
6795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK                   = 0x00000006,
6805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK                     = 0x00000007,
6815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
682d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
683d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
6843e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
68588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentineenum VkSurfaceTransformKHR {
68688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_NONE_KHR                           = 0x00000000,
68788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_ROT90_KHR                          = 0x00000001,
68888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_ROT180_KHR                         = 0x00000002,
68988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_ROT270_KHR                         = 0x00000003,
69088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_KHR                        = 0x00000004,
69188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR                  = 0x00000005,
69288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR                 = 0x00000006,
69388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR                 = 0x00000007,
69488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_INHERIT_KHR                        = 0x00000008,
69588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
69688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
6973e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
69888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentineenum VkPresentModeKHR {
69988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
70088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
70188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_PRESENT_MODE_FIFO_KHR                                = 0x00000002,
70203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
70388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
70488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
7053e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
70688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentineenum VkColorSpaceKHR {
70788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = 0x00000000,
70888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////
711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Bitfields  //
712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////
713d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
714d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Queue capabilities
715d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueueFlags
716d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueueFlagBits {
717d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUEUE_GRAPHICS_BIT                                   = 0x00000001,    /// Queue supports graphics operations
718d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUEUE_COMPUTE_BIT                                    = 0x00000002,    /// Queue supports compute operations
71965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_QUEUE_TRANSFER_BIT                                   = 0x00000004,    /// Queue supports transfer operations
720b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_QUEUE_SPARSE_BINDING_BIT                             = 0x00000008,    /// Queue supports sparse resource memory management operations
721d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
722d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
723d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Memory properties passed into vkAllocMemory().
724d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkMemoryPropertyFlags
725d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkMemoryPropertyFlagBits {
726d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT                     = 0x00000001,
727d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT                     = 0x00000002,
728d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT                    = 0x00000004,
729d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_HOST_CACHED_BIT                      = 0x00000008,
730d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000010,
731d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
732d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
733d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Memory heap flags
734d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkMemoryHeapFlags
735d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkMemoryHeapFlagBits {
736d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT                         = 0x00000001,
737d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
738d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
7393e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall/// Access flags
7403e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Halltype VkFlags VkAccessFlags
7413e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hallbitfield VkAccessFlagBits {
7423e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_INDIRECT_COMMAND_READ_BIT                     = 0x00000001,
7433e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_INDEX_READ_BIT                                = 0x00000002,
7443e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                     = 0x00000004,
7453e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_UNIFORM_READ_BIT                              = 0x00000008,
7463e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                     = 0x00000010,
7473e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_SHADER_READ_BIT                               = 0x00000020,
7483e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_SHADER_WRITE_BIT                              = 0x00000040,
7493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                     = 0x00000080,
7503e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                    = 0x00000100,
7513e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT             = 0x00000200,
7523e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT            = 0x00000400,
7533e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_TRANSFER_READ_BIT                             = 0x00000800,
7543e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_TRANSFER_WRITE_BIT                            = 0x00001000,
7553e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_HOST_READ_BIT                                 = 0x00002000,
7563e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_HOST_WRITE_BIT                                = 0x00004000,
7573e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_MEMORY_READ_BIT                               = 0x00008000,
7583e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VK_ACCESS_MEMORY_WRITE_BIT                              = 0x00010000,
759d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
760d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
761d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Buffer usage flags
762d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkBufferUsageFlags
763d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkBufferUsageFlagBits {
7643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_BUFFER_USAGE_TRANSFER_SRC_BIT                        = 0x00000001,    /// Can be used as a source of transfer operations
7653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_BUFFER_USAGE_TRANSFER_DST_BIT                        = 0x00000002,    /// Can be used as a destination of transfer operations
766d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT                = 0x00000004,    /// Can be used as TBO
767d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT                = 0x00000008,    /// Can be used as IBO
768d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT                      = 0x00000010,    /// Can be used as UBO
769d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT                      = 0x00000020,    /// Can be used as SSBO
770d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_INDEX_BUFFER_BIT                        = 0x00000040,    /// Can be used as source of fixed function index fetch (index buffer)
771d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_VERTEX_BUFFER_BIT                       = 0x00000080,    /// Can be used as source of fixed function vertex fetch (VBO)
772d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT                     = 0x00000100,    /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
773d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
774d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
775d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Buffer creation flags
776d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkBufferCreateFlags
777d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkBufferCreateFlagBits {
7785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_BUFFER_CREATE_SPARSE_BINDING_BIT                     = 0x00000001,    /// Buffer should support sparse backing
779d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT                   = 0x00000002,    /// Buffer should support sparse backing with partial residency
780d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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
781d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
782d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Shader stage flags
784d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkShaderStageFlags
785d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkShaderStageFlagBits {
786d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_VERTEX_BIT                              = 0x00000001,
787ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT                = 0x00000002,
788ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT             = 0x00000004,
789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_GEOMETRY_BIT                            = 0x00000008,
790d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_FRAGMENT_BIT                            = 0x00000010,
791d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_COMPUTE_BIT                             = 0x00000020,
792c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_SHADER_STAGE_ALL_GRAPHICS                            = 0x0000001F,
793d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
794d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_SHADER_STAGE_ALL                                     = 0x7FFFFFFF,
795d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
796d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
797fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall/// Descriptor pool create flags
798d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkDescriptorPoolCreateFlags
799d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkDescriptorPoolCreateFlagBits {
800fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT       = 0x00000001,
801fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall}
802fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
803fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall/// Descriptor pool reset flags
804d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkDescriptorPoolResetFlags
805a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDescriptorPoolResetFlagBits {
806a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
807fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Image usage flags
809d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageUsageFlags
810d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkImageUsageFlagBits {
8113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_USAGE_TRANSFER_SRC_BIT                         = 0x00000001,    /// Can be used as a source of transfer operations
8123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_IMAGE_USAGE_TRANSFER_DST_BIT                         = 0x00000002,    /// Can be used as a destination of transfer operations
813d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_SAMPLED_BIT                              = 0x00000004,    /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
814d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_STORAGE_BIT                              = 0x00000008,    /// Can be used as storage image (STORAGE_IMAGE descriptor type)
815d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                     = 0x00000010,    /// Can be used as framebuffer color attachment
8165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT             = 0x00000020,    /// Can be used as framebuffer depth/stencil attachment
817d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                 = 0x00000040,    /// Image data not needed outside of rendering
818d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT                     = 0x00000080,    /// Can be used as framebuffer input attachment
819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
820d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Image creation flags
822d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageCreateFlags
823d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkImageCreateFlagBits {
8245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_CREATE_SPARSE_BINDING_BIT                      = 0x00000001,    /// Image should support sparse backing
825d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT                    = 0x00000002,    /// Image should support sparse backing with partial residency
826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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
8275ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = 0x00000008,    /// Allows image views to have different format than the base image
8285ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000010,    /// Allows creating image views with cube type from the created image
829d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
830d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
831b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall/// Image view creation flags
832d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageViewCreateFlags
833b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall//bitfield VkImageViewCreateFlagBits {
834b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall//}
835d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
836d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Pipeline creation flags
837d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkPipelineCreateFlags
838d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkPipelineCreateFlagBits {
839d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT             = 0x00000001,
840d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                = 0x00000002,
841d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_CREATE_DERIVATIVE_BIT                       = 0x00000004,
842d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
843d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
84465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall/// Color component flags
84565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Halltype VkFlags VkColorComponentFlags
84665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallbitfield VkColorComponentFlagBits {
84765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_R_BIT                                = 0x00000001,
84865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_G_BIT                                = 0x00000002,
84965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_B_BIT                                = 0x00000004,
85065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_COLOR_COMPONENT_A_BIT                                = 0x00000008,
851d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
852d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
853d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Fence creation flags
854d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkFenceCreateFlags
855d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkFenceCreateFlagBits {
856d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FENCE_CREATE_SIGNALED_BIT                            = 0x00000001,
857d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
858d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
859d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Semaphore creation flags
860d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSemaphoreCreateFlags
861a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkSemaphoreCreateFlagBits {
862a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
863d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Format capability flags
865d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkFormatFeatureFlags
866d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkFormatFeatureFlagBits {
867d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                     = 0x00000001,    /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                     = 0x00000002,    /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
869d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT              = 0x00000004,    /// Format supports atomic operations in case it's used for storage images
870d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT              = 0x00000008,    /// Format can be used for uniform texel buffers (TBOs)
871d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT              = 0x00000010,    /// Format can be used for storage texel buffers (IBOs)
872d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT       = 0x00000020,    /// Format supports atomic operations in case it's used for storage texel buffers
873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT                     = 0x00000040,    /// Format can be used for vertex buffers (VBOs)
874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT                  = 0x00000080,    /// Format can be used for color attachment images
875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT            = 0x00000100,    /// Format supports blending in case it's used for color attachment images
876d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT          = 0x00000200,    /// Format can be used for depth/stencil attachment images
8773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FORMAT_FEATURE_BLIT_SRC_BIT                          = 0x00000400,    /// Format can be used as the source image of blits with vkCommandBlitImage
8783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_FORMAT_FEATURE_BLIT_DST_BIT                          = 0x00000800,    /// Format can be used as the destination image of blits with vkCommandBlitImage
879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
881d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Query control flags
882d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueryControlFlags
883d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueryControlFlagBits {
88465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VK_QUERY_CONTROL_PRECISE_BIT                            = 0x00000001,
885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Query result flags
888d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueryResultFlags
889d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueryResultFlagBits {
890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_DEFAULT                                 = 0x00000000,   /// Results of the queries are immediately written to the destination buffer as 32-bit values
891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_64_BIT                                  = 0x00000001,   /// Results of the queries are written to the destination buffer as 64-bit values
892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_WAIT_BIT                                = 0x00000002,   /// Results of the queries are waited on before proceeding with the result copy
893d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_WITH_AVAILABILITY_BIT                   = 0x00000004,   /// Besides the results of the query, the availability of the results is also written
894d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_QUERY_RESULT_PARTIAL_BIT                             = 0x00000008,   /// Copy the partial results of the query even if the final results aren't available
895d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
896d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
897d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Shader module creation flags
898d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkShaderModuleCreateFlags
899a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkShaderModuleCreateFlagBits {
900a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
901d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
902d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Event creation flags
903d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkEventCreateFlags
904a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkEventCreateFlagBits {
905a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
906d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
907a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall/// Command buffer usage flags
9083fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandBufferUsageFlags
9093fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandBufferUsageFlagBits {
9103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT             = 0x00000001,
9113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT        = 0x00000002,
9123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT            = 0x00000004,
913d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
914d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
915d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Pipeline statistics flags
916d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkQueryPipelineStatisticFlags
917d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkQueryPipelineStatisticFlagBits {
918ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT                     = 0x00000001,  /// Optional
919ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT                   = 0x00000002,  /// Optional
920ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT                   = 0x00000004,  /// Optional
921ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT                 = 0x00000008,  /// Optional
922ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT                  = 0x00000010,  /// Optional
923ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT                        = 0x00000020,  /// Optional
924ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT                         = 0x00000040,  /// Optional
925ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT                 = 0x00000080,  /// Optional
926ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT         = 0x00000100,  /// Optional
927ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT  = 0x00000200,  /// Optional
928ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT                  = 0x00000400,  /// Optional
929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
930d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
931d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Memory mapping flags
932d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkMemoryMapFlags
933a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkMemoryMapFlagBits {
934a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
936d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Bitfield of image aspects
937d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkImageAspectFlags
938d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkImageAspectFlagBits {
939d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_COLOR_BIT                               = 0x00000001,
940d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_DEPTH_BIT                               = 0x00000002,
941d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_STENCIL_BIT                             = 0x00000004,
942d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_IMAGE_ASPECT_METADATA_BIT                            = 0x00000008,
943d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Sparse memory bind flags
946d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSparseMemoryBindFlags
947091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hallbitfield VkSparseMemoryBindFlagBits {
948091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_SPARSE_MEMORY_BIND_METADATA_BIT                      = 0x00000001,
949091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall}
950d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
951d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Sparse image memory requirements flags
952d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSparseImageFormatFlags
953d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSparseImageFormatFlagBits {
954b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT                  = 0x00000001,  /// Image uses a single miptail region for all array slices
955b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse 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.
956b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT          = 0x00000004,  /// Image uses a non-standard sparse block size
957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
958d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
959d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Pipeline stages
960d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkPipelineStageFlags
961d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkPipelineStageFlagBits {
962d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                       = 0x00000001,  /// Before subsequent commands are processed
963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                     = 0x00000002,  /// Draw/DispatchIndirect command fetch
964d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                      = 0x00000004,  /// Vertex/index fetch
965d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                     = 0x00000008,  /// Vertex shading
966ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT       = 0x00000010,  /// Tessellation control shading
967ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT    = 0x00000020,  /// Tessellation evaluation shading
968d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                   = 0x00000040,  /// Geometry shading
969d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                   = 0x00000080,  /// Fragment shading
970d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT              = 0x00000100,  /// Early fragment (depth/stencil) tests
971d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT               = 0x00000200,  /// Late fragment (depth/stencil) tests
972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT           = 0x00000400,  /// Color attachment writes
973d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                    = 0x00000800,  /// Compute shading
974d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VK_PIPELINE_STAGE_TRANSFER_BIT                          = 0x00001000,  /// Transfer/copy operations
9755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_PIPELINE_STAGE_HOST_BIT                              = 0x00002000,  /// Indicates host (CPU) is a source/sink of the dependency
976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
977091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                      = 0x00004000,  /// All stages of the graphics pipeline
978091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                      = 0x00008000,  /// All graphics, compute, copy, and transition commands
9795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
9805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
9815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall/// Render pass attachment description flags
982d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkAttachmentDescriptionFlags
983d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkAttachmentDescriptionFlagBits {
9845ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT                 = 0x00000001,  /// The attachment may alias physical memory of another attachment in the same renderpass
985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
986d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
987d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Subpass description flags
988d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSubpassDescriptionFlags
989d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSubpassDescriptionFlagBits {
990d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
991d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
992d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Command pool creation flags
9933fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandPoolCreateFlags
9943fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandPoolCreateFlagBits {
9953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT                    = 0x00000001,  /// Command buffers have a short lifetime
9963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT         = 0x00000002,  /// Command buffers may release their memory individually
997d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
998d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Command pool reset flags
10003fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandPoolResetFlags
10013fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandPoolResetFlagBits {
10023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT             = 0x00000001,  /// Release resources owned by the pool
1003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1004d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
10053fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkCommandBufferResetFlags
10063fbc856120217247c72fb5ed88500000f3881c45Jesse Hallbitfield VkCommandBufferResetFlagBits {
10073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT           = 0x00000001,  /// Release resources owned by the buffer
10085ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
10095ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1010d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSampleCountFlags
1011d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSampleCountFlagBits {
10125ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_1_BIT                                   = 0x00000001,
10135ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_2_BIT                                   = 0x00000002,
10145ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_4_BIT                                   = 0x00000004,
10155ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_8_BIT                                   = 0x00000008,
10165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_16_BIT                                  = 0x00000010,
10175ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_32_BIT                                  = 0x00000020,
10185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_SAMPLE_COUNT_64_BIT                                  = 0x00000040,
10195ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
10205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1021d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkStencilFaceFlags
1022d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkStencilFaceFlagBits {
10235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STENCIL_FACE_NONE                                    = 0x00000000,   /// No faces
10245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STENCIL_FACE_FRONT_BIT                               = 0x00000001,   /// Front face
10255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
1026c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_STENCIL_FRONT_AND_BACK                               = 0x00000003,
1027d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1028d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1029a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Instance creation flags
1030a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkInstanceCreateFlags
1031a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkInstanceCreateFlagBits {
1032a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1033a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1034a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Device creation flags
1035a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkDeviceCreateFlags
1036a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDeviceCreateFlagBits {
1037a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1038a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1039a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Device queue creation flags
1040a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkDeviceQueueCreateFlags
1041a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDeviceQueueCreateFlagBits {
1042a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1043a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1044a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Query pool creation flags
1045a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkQueryPoolCreateFlags
1046a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkQueryPoolCreateFlagBits {
1047a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1048a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1049a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Buffer view creation flags
1050a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkBufferViewCreateFlags
1051a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkBufferViewCreateFlagBits {
1052a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1053a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1054a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline cache creation flags
1055a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineCacheCreateFlags
1056a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineCacheCreateFlagBits {
1057a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1058a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1059a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline shader stage creation flags
1060a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineShaderStageCreateFlags
1061a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineShaderStageCreateFlagBits {
1062a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1063a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1064a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Descriptor set layout creation flags
1065a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkDescriptorSetLayoutCreateFlags
1066a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkDescriptorSetLayoutCreateFlagBits {
1067a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1068a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1069a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline vertex input state creation flags
1070a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineVertexInputStateCreateFlags
1071a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineVertexInputStateCreateFlagBits {
1072a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1073a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1074a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline input assembly state creation flags
1075a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineInputAssemblyStateCreateFlags
1076a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
1077a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1078a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1079a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Tessellation state creation flags
1080a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineTessellationStateCreateFlags
1081a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineTessellationStateCreateFlagBits {
1082a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1083a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1084a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Viewport state creation flags
1085a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineViewportStateCreateFlags
1086a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineViewportStateCreateFlagBits {
1087a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1088a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
10893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall/// Rasterization state creation flags
10903fbc856120217247c72fb5ed88500000f3881c45Jesse Halltype VkFlags VkPipelineRasterizationStateCreateFlags
10913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall//bitfield VkPipelineRasterizationStateCreateFlagBits {
1092a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1093a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1094a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Multisample state creation flags
1095a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineMultisampleStateCreateFlags
1096a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineMultisampleStateCreateFlagBits {
1097a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1098a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1099a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Color blend state creation flags
1100a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineColorBlendStateCreateFlags
1101a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineColorBlendStateCreateFlagBits {
1102a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1103a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1104a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Depth/stencil state creation flags
1105a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineDepthStencilStateCreateFlags
1106a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineDepthStencilStateCreateFlagBits {
1107a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1108a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1109a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Dynamic state creation flags
1110a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineDynamicStateCreateFlags
1111a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineDynamicStateCreateFlagBits {
1112a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1113a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1114a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Pipeline layout creation flags
1115a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkPipelineLayoutCreateFlags
1116a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkPipelineLayoutCreateFlagBits {
1117a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1118a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1119a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Sampler creation flags
1120a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkSamplerCreateFlags
1121a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkSamplerCreateFlagBits {
1122a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1123a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1124a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Render pass creation flags
1125a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkRenderPassCreateFlags
1126a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkRenderPassCreateFlagBits {
1127a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1128a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1129a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall/// Framebuffer creation flags
1130a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkFramebufferCreateFlags
1131a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//bitfield VkFramebufferCreateFlagBits {
1132a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall//}
1133a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1134dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall/// Dependency flags
1135dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Halltype VkFlags VkDependencyFlags
1136dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hallbitfield VkDependencyFlagBits {
1137dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VK_DEPENDENCY_BY_REGION_BIT                             = 0x00000001,
1138dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall}
1139dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall
1140c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall/// Cull mode flags
1141c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Halltype VkFlags VkCullModeFlags
1142c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hallbitfield VkCullModeFlagBits {
1143c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_NONE                                       = 0x00000000,
1144c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_FRONT_BIT                                  = 0x00000001,
1145c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_BACK_BIT                                   = 0x00000002,
1146c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
1147c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall}
1148c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall
11493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
1150d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkSurfaceTransformFlagsKHR
11513e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
1152d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkSurfaceTransformFlagBitsKHR {
115388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_NONE_BIT_KHR                       = 0x00000001,
115488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_ROT90_BIT_KHR                      = 0x00000002,
115588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_ROT180_BIT_KHR                     = 0x00000004,
115688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_ROT270_BIT_KHR                     = 0x00000008,
115788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR                    = 0x00000010,
115888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR              = 0x00000020,
115988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR             = 0x00000040,
116088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR             = 0x00000080,
116188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                    = 0x00000100,
116288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
1163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
11643e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
1165a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Halltype VkFlags VkCompositeAlphaFlagsKHR
11663e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
1167a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallbitfield VkCompositeAlphaFlagBitsKHR {
1168a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
1169a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
1170a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR              = 0x00000004,
1171a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
1172a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1173a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
11743e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
1175d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Halltype VkFlags VkDisplayPlaneAlphaFlagsKHR
11763e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
1177d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallbitfield VkDisplayPlaneAlphaFlagBitsKHR {
11781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000001,
11791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000002,
11801356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000004,
11811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
11821356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
11831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
1184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//////////////////
1185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Structures  //
1186d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//////////////////
1187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1188d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkOffset2D {
1189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         x
1190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         y
1191d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1192d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1193d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkOffset3D {
1194d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         x
1195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         y
1196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         z
1197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1198d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkExtent2D {
1200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         width
1201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         height
1202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1204d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkExtent3D {
1205d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         width
1206d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         height
1207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         depth
1208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1210d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkViewport {
121165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    f32                                         x
121265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    f32                                         y
1213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         width
1214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         height
1215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minDepth
1216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxDepth
1217d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1218d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1219d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkRect2D {
1220d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset2D                                  offset
1221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent2D                                  extent
1222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1223d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1224a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hallclass VkClearRect {
1225a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkRect2D                                    rect
1226a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         baseArrayLayer
12273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         layerCount
1228d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1229d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
123065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallclass VkComponentMapping {
123165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          r
123265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          g
123365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          b
123465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentSwizzle                          a
1235d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1236d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceProperties {
1238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         apiVersion
1239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         driverVersion
124065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         vendorID
124165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         deviceID
1242d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPhysicalDeviceType                        deviceType
124365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]      deviceName
124465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u8[VK_UUID_SIZE]                            pipelineCacheUUID
12455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkPhysicalDeviceLimits                      limits
12465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkPhysicalDeviceSparseProperties            sparseProperties
1247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkExtensionProperties {
125065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_EXTENSION_NAME_SIZE]            extensionName      /// extension name
1251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         specVersion        /// version of the extension specification implemented
1252d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1253d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1254d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkLayerProperties {
125565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_EXTENSION_NAME_SIZE]            layerName               /// layer name
12563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         specVersion             /// version of the layer specification implemented
12573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         implementationVersion   /// build or release version of the layer's library
125865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    char[VK_MAX_DESCRIPTION_SIZE]               description             /// Free-form description of the layer
1259d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1260d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1261a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hallclass VkSubmitInfo {
126203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO
126303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    const void*                                 pNext              /// Next structure in chain
126403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         waitSemaphoreCount
1265a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    const VkSemaphore*                          pWaitSemaphores
126603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         commandBufferCount
12673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const VkCommandBuffer*                      pCommandBuffers
126803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         signalSemaphoreCount
1269a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    const VkSemaphore*                          pSignalSemaphores
1270a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall}
1271a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall
1272d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkApplicationInfo {
1273d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1274d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Next structure in chain
12753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const char*                                 pApplicationName
12763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         applicationVersion
1277d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char*                                 pEngineName
1278d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         engineVersion
1279d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         apiVersion
1280d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1281d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
12823fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkAllocationCallbacks {
1283d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    void*                                       pUserData
12843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    PFN_vkAllocationFunction                    pfnAllocation
12853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    PFN_vkReallocationFunction                  pfnReallocation
1286d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    PFN_vkFreeFunction                          pfnFree
12873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    PFN_vkInternalAllocationNotification        pfnInternalAllocation
128803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    PFN_vkInternalFreeNotification              pfnInternalFree
1289d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1290d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1291d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDeviceQueueCreateInfo {
12925ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
12935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const void*                                 pNext                     /// Pointer to next structure
1294a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDeviceQueueCreateFlags                    flags
1295d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         queueFamilyIndex
129603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queuePriorityCount
1297fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const f32*                                  pQueuePriorities
1298d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1299d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1300d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDeviceCreateInfo {
1301d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1302d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
1303a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDeviceCreateFlags                         flags
1304ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         requestedQueueRecordCount
1305d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkDeviceQueueCreateInfo*              pRequestedQueues
130603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         enabledLayerNameCount
1307d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
130803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         enabledExtensionNameCount
1309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledExtensionNames
1310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPhysicalDeviceFeatures*             pEnabledFeatures
1311d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1312d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1313d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkInstanceCreateInfo {
1314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1315d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
1316a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkInstanceCreateFlags                       flags
13173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const VkApplicationInfo*                    pApplicationInfo
131803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         enabledLayerNameCount
1319d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
132003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         enabledExtensionNameCount
1321d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const char* const*                          ppEnabledExtensionNames    /// Extension names to be enabled
1322d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1323d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
13245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkQueueFamilyProperties {
1325d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueueFlags                                queueFlags                 /// Queue flags
1326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         queueCount
1327acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall    u32                                         timestampValidBits
132865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkExtent3D                                  minImageTransferGranularity
1329d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1331d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceMemoryProperties {
1332d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryTypeCount
1333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryType[VK_MAX_MEMORY_TYPES]           memoryTypes
1334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryHeapCount
1335d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryHeap[VK_MAX_MEMORY_HEAPS]           memoryHeaps
1336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1337d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
13383fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkMemoryAllocateInfo {
1339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
13415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                allocationSize             /// Size of memory allocation
1342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryTypeIndex            /// Index of the of the memory type to allocate from
1343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryRequirements {
13465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Specified in bytes
13475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                alignment                  /// Specified in bytes
1348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         memoryTypeBits             /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1350d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSparseImageFormatProperties {
13523e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkImageAspectFlagBits                       aspectMask
1353d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  imageGranularity
1354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSparseImageFormatFlags                    flags
1355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSparseImageMemoryRequirements {
1358b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkSparseImageFormatProperties               formatProperties
135965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         imageMipTailStartLod
13605ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                imageMipTailSize           /// Specified in bytes, must be a multiple of image block size / alignment
13615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                imageMipTailOffset         /// Specified in bytes, must be a multiple of image block size / alignment
13625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                imageMipTailStride         /// Specified in bytes, must be a multiple of image block size / alignment
1363d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryType {
1366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryPropertyFlags                       propertyFlags              /// Memory properties of this memory type
1367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         heapIndex                  /// Index of the memory heap allocations of this memory type are taken from
1368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryHeap {
13715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Available memory in the heap
1372d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkMemoryHeapFlags                           flags                      /// Flags for the heap
1373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1374d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1375d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMappedMemoryRange {
1376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1377d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
13783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory                              memory                     /// Mapped memory object
13795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Offset within the mapped memory the range starts from
13805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Size of the range within the mapped memory
1381d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkFormatProperties {
1384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormatFeatureFlags                        linearTilingFeatures       /// Format features in case of linear tiling
1385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormatFeatureFlags                        optimalTilingFeatures      /// Format features in case of optimal tiling
13865ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkFormatFeatureFlags                        bufferFeatures             /// Format features supported by buffers
1387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageFormatProperties {
13905ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkExtent3D                                  maxExtent                  /// max image dimensions for this resource type
13915ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxMipLevels               /// max number of mipmap levels for this resource type
1392a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         maxArrayLayers             /// max array layers for this resource type
13935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkSampleCountFlags                          sampleCounts               /// supported sample counts for this resource type
13945ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                maxResourceSize            /// max size (in bytes) of this resource type
13955ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
13965ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1397a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hallclass VkDescriptorImageInfo {
1398a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkSampler                                   sampler
1399a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkImageView                                 imageView
1400a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    VkImageLayout                               imageLayout
1401a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall}
1402a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall
14035ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkDescriptorBufferInfo {
14045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBuffer                                    buffer                     /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
14055ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Base offset from buffer start in bytes to update in the descriptor set.
14065ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                range                      /// Size in bytes of the buffer resource for this descriptor update.
1407d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkWriteDescriptorSet {
1410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
14123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDescriptorSet                             dstSet                     /// Destination descriptor set
14133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstBinding                 /// Binding within the destination descriptor set to write
14143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstArrayElement            /// Array element within the destination binding to write
141503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         descriptorCount            /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
1416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorType                            descriptorType             /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
1417fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkDescriptorImageInfo*                pImageInfo
1418fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkDescriptorBufferInfo*               pBufferInfo
1419fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkBufferView*                         pTexelBufferView
1420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkCopyDescriptorSet {
1423d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure
1425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorSet                             srcSet                     /// Source descriptor set
1426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcBinding                 /// Binding within the source descriptor set to copy from
1427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcArrayElement            /// Array element within the source binding to copy from
14283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDescriptorSet                             dstSet                     /// Destination descriptor set
14293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstBinding                 /// Binding within the destination descriptor set to copy to
14303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstArrayElement            /// Array element within the destination binding to copy to
143103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         descriptorCount            /// Number of descriptors to copy
1432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferCreateInfo {
1435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
1437a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBufferCreateFlags                         flags                      /// Buffer creation flags
14385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Specified in bytes
1439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBufferUsageFlags                          usage                      /// Buffer usage flags
1440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSharingMode                               sharingMode
144103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queueFamilyIndexCount
1442d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const u32*                                  pQueueFamilyIndices
1443d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1444d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferViewCreateInfo {
1446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
1448a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBufferViewCreateFlags                     flags
1449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBuffer                                    buffer
1450d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format                     /// Optionally specifies format of elements
14515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Specified in bytes
14525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                range                      /// View size specified in bytes
1453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageSubresource {
14563e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkImageAspectFlagBits                       aspectMask
1457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mipLevel
14585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         arrayLayer
1459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageSubresourceRange {
14625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkImageAspectFlags                          aspectMask
1463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         baseMipLevel
14643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         levelCount
14655ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         baseArrayLayer
14663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         layerCount
1467d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1469d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkMemoryBarrier {
1470d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
14723e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
14733e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
1474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferMemoryBarrier {
1477d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
14793e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
14803e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
1481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
14823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
1483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBuffer                                    buffer                     /// Buffer to sync
14845ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                     /// Offset within the buffer to sync
14855ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                       /// Amount of bytes to sync
1486d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageMemoryBarrier {
1489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
14913e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
14923e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
1493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               oldLayout                  /// Current layout of the image
1494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               newLayout                  /// New layout to transition the image to
1495d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
14963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
1497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImage                                     image                      /// Image to sync
1498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageSubresourceRange                     subresourceRange           /// Subresource range to sync
1499d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageCreateInfo {
1502d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1503d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                      /// Pointer to next structure.
1504a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImageCreateFlags                          flags                      /// Image creation flags
1505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageType                                 imageType
1506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format
1507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent
1508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mipLevels
1509a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         arrayLayers
1510091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlagBits                       samples
1511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageTiling                               tiling
1512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageUsageFlags                           usage                      /// Image usage flags
1513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
151403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queueFamilyIndexCount      /// Number of queue families to share across
1515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const u32*                                  pQueueFamilyIndices        /// Array of queue family indices to share across
15165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkImageLayout                               initialLayout              /// Initial image layout for all subresources
1517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1518d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1519d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSubresourceLayout {
15205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                offset                 /// Specified in bytes
15215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                size                   /// Specified in bytes
15225ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                rowPitch               /// Specified in bytes
15235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                depthPitch             /// Specified in bytes
1524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1525d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageViewCreateInfo {
1527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                  /// Pointer to next structure
1529a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImageViewCreateFlags                      flags
1530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImage                                     image
1531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageViewType                             viewType
1532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format
153365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkComponentMapping                          components
1534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageSubresourceRange                     subresourceRange
1535d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1536d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1537d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferCopy {
15385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                srcOffset              /// Specified in bytes
15393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                                dstOffset              /// Specified in bytes
1540b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkDeviceSize                                size                   /// Specified in bytes
1541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1543a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseMemoryBind {
1544b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkDeviceSize                                resourceOffset        /// Specified in bytes
1545b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkDeviceSize                                size                  /// Specified in bytes
15463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory                              memory
15473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                                memoryOffset          /// Specified in bytes
1548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSparseMemoryBindFlags                     flags
1549d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1551a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseImageMemoryBind {
1552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageSubresource                          subresource
1553d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  offset
1554d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent
15553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory                              memory
15563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                                memoryOffset          /// Specified in bytes
1557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSparseMemoryBindFlags                     flags
1558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1560a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseBufferMemoryBindInfo {
1561a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBuffer                                    buffer
1562a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         bindCount
1563a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseMemoryBind*                   pBinds
1564a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1565a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1566a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseImageOpaqueMemoryBindInfo {
1567a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImage                                     image
1568a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         bindCount
1569a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseMemoryBind*                   pBinds
1570a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1571a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1572a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkSparseImageMemoryBindInfo {
1573a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkImage                                     image
1574a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         bindCount
1575a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseMemoryBind*                   pBinds
1576a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1577a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
1578a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkBindSparseInfo {
1579a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
1580a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const void*                                 pNext
1581a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         waitSemaphoreCount
1582a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSemaphore*                          pWaitSemaphores
1583a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         numBufferBinds
1584a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseBufferMemoryBindInfo*         pBufferBinds
1585a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         numImageOpaqueBinds
1586a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds
1587a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         numImageBinds
1588a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSparseImageMemoryBindInfo*          pImageBinds
1589a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         signalSemaphoreCount
1590a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkSemaphore*                          pSignalSemaphores
1591a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
1592a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
159365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallclass VkImageSubresourceLayers {
159465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageAspectFlags                          aspectMask
15955ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         mipLevel
1596a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall    u32                                         baseArrayLayer
15973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         layerCount
15985ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
15995ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
1600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageCopy {
160165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    srcSubresource
1602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  srcOffset             /// Specified in pixels for both compressed and uncompressed images
160365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    dstSubresource
16043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkOffset3D                                  dstOffset             /// Specified in pixels for both compressed and uncompressed images
1605d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent                /// Specified in pixels for both compressed and uncompressed images
1606d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1607d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1608d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageBlit {
160965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    srcSubresource
1610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  srcOffset              /// Specified in pixels for both compressed and uncompressed images
1611d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  srcExtent              /// Specified in pixels for both compressed and uncompressed images
161265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    dstSubresource
16133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkOffset3D                                  dstOffset              /// Specified in pixels for both compressed and uncompressed images
16143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkExtent3D                                  dstExtent              /// Specified in pixels for both compressed and uncompressed images
1615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1616d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkBufferImageCopy {
16185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                bufferOffset           /// Specified in bytes
1619d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         bufferRowLength        /// Specified in texels
1620d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         bufferImageHeight
162165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    imageSubresource
1622d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  imageOffset            /// Specified in pixels for both compressed and uncompressed images
1623d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  imageExtent            /// Specified in pixels for both compressed and uncompressed images
1624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1626d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkImageResolve {
162765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    srcSubresource
1628d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkOffset3D                                  srcOffset
162965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkImageSubresourceLayers                    dstSubresource
16303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkOffset3D                                  dstOffset
1631d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkExtent3D                                  extent
1632d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1633d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1634d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkShaderModuleCreateInfo {
1635d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1636d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                  /// Pointer to next structure
1637a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkShaderModuleCreateFlags                   flags                  /// Reserved
1638d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    platform.size_t                             codeSize               /// Specified in bytes
1639a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    const u32*                                  pCode                  /// Binary code of size codeSize
1640d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1641d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1642d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDescriptorSetLayoutBinding {
1643091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    u32                                         binding
1644d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorType                            descriptorType     /// Type of the descriptors in this binding
1645d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         arraySize          /// Number of descriptors in this binding
1646d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkShaderStageFlags                          stageFlags         /// Shader stages this binding is visible to
1647d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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)
1648d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1649d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1650d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDescriptorSetLayoutCreateInfo {
1651d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1652d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1653a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDescriptorSetLayoutCreateFlags            flags
165403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         bindingCount       /// Number of bindings in the descriptor set layout
16553e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    const VkDescriptorSetLayoutBinding*         pBinding           /// Array of descriptor set layout bindings
1656d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1657d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
165865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallclass VkDescriptorPoolSize {
1659d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDescriptorType                            type
166003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         descriptorCount
1661d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1662d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1663d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkDescriptorPoolCreateInfo {
1664d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1665d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1666fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkDescriptorPoolCreateFlags                 flags
16675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxSets
166865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         poolSizeCount
166965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    const VkDescriptorPoolSize*                 pPoolSizes
1670d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1671d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
16723fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDescriptorSetAllocateInfo {
1673fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
1674fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1675fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkDescriptorPool                            descriptorPool
167603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         setCount
1677fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    const VkDescriptorSetLayout*                pSetLayouts
1678fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall}
1679fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
1680d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSpecializationMapEntry {
168165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         constantID         /// The SpecConstant ID specified in the BIL
1682d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         offset             /// Offset of the value in the data block
1683b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    platform.size_t                             size               /// Size in bytes of the SpecConstant
1684d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1685d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1686d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSpecializationInfo {
1687d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mapEntryCount      /// Number of entries in the map
1688b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const VkSpecializationMapEntry*             pMapEntries        /// Array of map entries
1689d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    platform.size_t                             dataSize           /// Size in bytes of pData
1690d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pData              /// Pointer to SpecConstant data
1691d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1693d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineShaderStageCreateInfo {
1694d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1695d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1696a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineShaderStageCreateFlags            flags
16973e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkShaderStageFlagBits                       stage
16983e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkShaderModule                              module
16993e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    const char*                                 pName
1700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSpecializationInfo*                 pSpecializationInfo
1701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1702d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1703d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkComputePipelineCreateInfo {
1704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1705d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
1706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipelineCreateFlags                       flags              /// Pipeline creation flags
1707a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineShaderStageCreateInfo             stage
1708d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipelineLayout                            layout             /// Interface layout of the pipeline
1709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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
1710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse 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
1711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1713d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkVertexInputBindingDescription {
1714b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         binding               /// Vertex buffer binding id
1715b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         stride                /// Distance between vertices in bytes (0 = no advancement)
171665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkVertexInputRate                           inputRate             /// Rate at which binding is incremented
1717d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1718d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1719d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkVertexInputAttributeDescription {
1720b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         location              /// location of the shader vertex attrib
1721b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         binding               /// Vertex buffer binding id
1722b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkFormat                                    format                /// format of source data
1723b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         offset                /// Offset of first element in bytes from base of vertex
1724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1725d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineVertexInputStateCreateInfo {
172703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VkStructureType                             sType                           /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
172803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    const void*                                 pNext                           /// Pointer to next structure
1729a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineVertexInputStateCreateFlags       flags
173003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         vertexBindingDescriptionCount   /// number of bindings
1731d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkVertexInputBindingDescription*      pVertexBindingDescriptions
173203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         vertexAttributeDescriptionCount /// number of attributes
1733d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions
1734d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1735d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1736d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineInputAssemblyStateCreateInfo {
1737d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
1738d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1739a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineInputAssemblyStateCreateFlags     flags
1740d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPrimitiveTopology                         topology
17415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    primitiveRestartEnable
1742d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1743d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1744d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineTessellationStateCreateInfo {
1745d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
1746d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1747a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineTessellationStateCreateFlags      flags
1748d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         patchControlPoints
1749d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1750d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1751d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineViewportStateCreateInfo {
1752d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
1753d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1754a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineViewportStateCreateFlags          flags
1755d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         viewportCount
17565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkViewport*                           pViewports
17575ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         scissorCount
17585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkRect2D*                             pScissors
1759d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1760d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
17613fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkPipelineRasterizationStateCreateInfo {
176265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
1763d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
17643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkPipelineRasterizationStateCreateFlags     flags
1765ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkBool32                                    depthClampEnable
17665ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    rasterizerDiscardEnable
176765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkPolygonMode                               polygonMode                   /// optional (GL45)
1768c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    VkCullModeFlags                             cullMode
1769d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFrontFace                                 frontFace
17705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBiasEnable
1771a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    f32                                         depthBiasConstantFactor
17725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         depthBiasClamp
1773a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    f32                                         depthBiasSlopeFactor
17745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         lineWidth
1775d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1776d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1777d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineMultisampleStateCreateInfo {
1778d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
1779d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1780a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineMultisampleStateCreateFlags       flags
1781091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlagBits                       rasterizationSamples       /// Number of samples used for rasterization
17825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sampleShadingEnable        /// optional (GL45)
1783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minSampleShading           /// optional (GL45)
17845ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkSampleMask*                         pSampleMask
1785acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall    VkBool32                                    alphaToCoverageEnable
1786acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall    VkBool32                                    alphaToOneEnable
1787d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1788d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineColorBlendAttachmentState {
17905ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    blendEnable
179165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               srcColorBlendFactor
179265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               dstColorBlendFactor
179365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendOp                                   colorBlendOp
179465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               srcAlphaBlendFactor
179565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendFactor                               dstAlphaBlendFactor
179665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBlendOp                                   alphaBlendOp
179765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkColorComponentFlags                       colorWriteMask
1798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1799d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1800d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineColorBlendStateCreateInfo {
1801d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
1802d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1803a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineColorBlendStateCreateFlags        flags
18045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    logicOpEnable
1805d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkLogicOp                                   logicOp
1806d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachmentCount    /// # of pAttachments
1807d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineColorBlendAttachmentState*  pAttachments
1808b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    f32[4]                                      blendConstants
1809d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1810d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1811d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkStencilOpState {
181265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStencilOp                                 failOp
181365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStencilOp                                 passOp
181465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkStencilOp                                 depthFailOp
181565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkCompareOp                                 compareOp
181665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         compareMask
181765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         writeMask
181865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         reference
1819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1820d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineDepthStencilStateCreateInfo {
1822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
1823d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1824a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineDepthStencilStateCreateFlags      flags
18255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthTestEnable
18265ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthWriteEnable
1827d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkCompareOp                                 depthCompareOp
18285ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBoundsTestEnable  /// optional (depth_bounds_test)
18295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    stencilTestEnable
1830d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStencilOpState                            front
1831d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStencilOpState                            back
18325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         minDepthBounds
18335ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32                                         maxDepthBounds
18345ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
18355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
18365ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkPipelineDynamicStateCreateInfo {
18375ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
18385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const void*                                 pNext      /// Pointer to next structure
1839a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineDynamicStateCreateFlags           flags
18405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         dynamicStateCount
18415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkDynamicState*                       pDynamicStates
1842d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1843d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1844d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkGraphicsPipelineCreateInfo {
1845a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkStructureType                                 sType               /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
1846a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const void*                                     pNext               /// Pointer to next structure
1847a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineCreateFlags                           flags               /// Pipeline creation flags
1848d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                             stageCount
1849a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    const VkPipelineShaderStageCreateInfo*          pStages             /// One entry for each active shader stage
1850d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineVertexInputStateCreateInfo*     pVertexInputState
1851d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState
1852d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineTessellationStateCreateInfo*    pTessellationState
1853d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineViewportStateCreateInfo*        pViewportState
18543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    const VkPipelineRasterizationStateCreateInfo*   pRasterizationState
1855d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineMultisampleStateCreateInfo*     pMultisampleState
1856d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
1857d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
18585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkPipelineDynamicStateCreateInfo*         pDynamicState
1859a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineLayout                                layout              /// Interface layout of the pipeline
1860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                    renderPass
1861d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                             subpass
1862a64292517b1876c4bbe5d3e62c577812f40bd922Jesse 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
1863a64292517b1876c4bbe5d3e62c577812f40bd922Jesse 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
1864d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1865d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1866d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineCacheCreateInfo {
1867b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
1868b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const void*                                 pNext                 /// Pointer to next structure
1869a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineCacheCreateFlags                  flags
1870b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    platform.size_t                             initialDataSize       /// Size of initial data to populate cache, in bytes
1871b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const void*                                 pInitialData          /// Initial data to populate cache
1872d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPushConstantRange {
1875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkShaderStageFlags                          stageFlags   /// Which stages use the range
187603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         offset       /// Start of the range, in bytes
187703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         size        /// Length of the range, in bytes
1878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPipelineLayoutCreateInfo {
1881d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType                   /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
1882d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext                   /// Pointer to next structure
1883a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineLayoutCreateFlags                 flags
188403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         setLayoutCount          /// Number of descriptor sets interfaced by the pipeline
1885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkDescriptorSetLayout*                pSetLayouts             /// Array of <setCount> number of descriptor set layout objects defining the layout of the
1886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         pushConstantRangeCount  /// Number of push-constant ranges used by the pipeline
1887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkPushConstantRange*                  pPushConstantRanges     /// Array of pushConstantRangeCount number of ranges used by various shader stages
1888d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1889d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSamplerCreateInfo {
1891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType          /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
1892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext          /// Pointer to next structure
1893a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkSamplerCreateFlags                        flags
189423ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkFilter                                    magFilter      /// Filter mode for magnification
189523ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkFilter                                    minFilter      /// Filter mode for minifiation
189623ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerMipmapMode                         mipmapMode     /// Mipmap selection mode
189723ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerAddressMode                        addressModeU
189823ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerAddressMode                        addressModeV
189923ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall    VkSamplerAddressMode                        addressModeW
1900d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         mipLodBias
1901d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxAnisotropy
19025ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    compareEnable
1903d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkCompareOp                                 compareOp
1904d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minLod
1905d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxLod
1906d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBorderColor                               borderColor
19075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    unnormalizedCoordinates
1908d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1909d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
19103fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkCommandPoolCreateInfo {
19113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
1912d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext            /// Pointer to next structure
19133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandPoolCreateFlags                    flags            /// Command pool creation flags
1914a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         queueFamilyIndex
1915d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1916d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
19173fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkCommandBufferAllocateInfo {
19183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO
1919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
19203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandPool                               commandPool
19213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandBufferLevel                        level
192203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         bufferCount
1923d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1924d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
19253fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkCommandBufferBeginInfo {
19263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
1927d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext       /// Pointer to next structure
19283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkCommandBufferUsageFlags                   flags       /// Command buffer usage flags
1929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                renderPass  /// Render pass for secondary command buffers
19305ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         subpass
1931d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
1932d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1933d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkRenderPassBeginInfo {
1935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
1936d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext       /// Pointer to next structure
1937d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                renderPass
1938d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFramebuffer                               framebuffer
1939d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRect2D                                    renderArea
19405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         clearValueCount
19415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkClearValue*                         pClearValues
1942d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1943d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@union
1945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
1946d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkClearColorValue {
19475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32[4]                                      float32
19485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    s32[4]                                      int32
19495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32[4]                                      uint32
1950d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1951d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1952d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkClearDepthStencilValue {
1953d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         depth
1954d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         stencil
1955d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1956d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@union
1958d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
1959d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkClearValue {
1960d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkClearColorValue                           color
19615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkClearDepthStencilValue                    depthStencil
1962d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1964ae38f7355fd03b777313e13586585a74e0dee05bJesse Hallclass VkClearAttachment {
1965ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkImageAspectFlags                          aspectMask
1966ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         colorAttachment
1967ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkClearValue                                clearValue
1968ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall}
1969ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall
1970d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkAttachmentDescription {
1971a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkAttachmentDescriptionFlags                flags
1972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFormat                                    format
1973091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlagBits                       samples
1974d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentLoadOp                          loadOp          /// Load op for color or depth data
1975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentStoreOp                         storeOp         /// Store op for color or depth data
1976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentLoadOp                          stencilLoadOp   /// Load op for stencil data
1977d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkAttachmentStoreOp                         stencilStoreOp  /// Store op for stencil data
1978d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               initialLayout
1979d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               finalLayout
1980d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1981d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1982d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkAttachmentReference {
1983d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachment
1984d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImageLayout                               layout
1985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1986d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
1987d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSubpassDescription {
1988d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSubpassDescriptionFlags                   flags
1989a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
199003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         inputAttachmentCount
19915ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pInputAttachments
199203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         colorAttachmentCount
19935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pColorAttachments
19945ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pResolveAttachments
1995c7467b74d3411eb7b9fde67368fad1052eb51c8dJesse Hall    const VkAttachmentReference*                pDepthStencilAttachment
199603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         preserveAttachmentCount
19975ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkAttachmentReference*                pPreserveAttachments
1998d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
1999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2000d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSubpassDependency {
2001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         srcSubpass
20023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         dstSubpass
2003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPipelineStageFlags                        srcStageMask
20043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkPipelineStageFlags                        dstStageMask
20053e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               srcAccessMask
20063e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall    VkAccessFlags                               dstAccessMask
2007dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDependencyFlags                           dependencyFlags
2008d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2010d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkRenderPassCreateInfo {
2011d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
2012d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2013a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkRenderPassCreateFlags                     flags
2014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachmentCount
2015d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkAttachmentDescription*              pAttachments
2016d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subpassCount
2017d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSubpassDescription*                 pSubpasses
2018d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         dependencyCount
2019d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const VkSubpassDependency*                  pDependencies
2020d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2022d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkEventCreateInfo {
2023d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
2024d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2025d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkEventCreateFlags                          flags      /// Event creation flags
2026d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2027d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2028d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkFenceCreateInfo {
2029d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
2030d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2031d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkFenceCreateFlags                          flags      /// Fence creation flags
2032d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2033d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceFeatures {
20355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    robustBufferAccess                        /// out of bounds buffer accesses are well defined
20365ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    fullDrawIndexUint32                       /// full 32-bit range of indices for indexed draw calls
20375ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    imageCubeArray                            /// image views which are arrays of cube maps
20385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    independentBlend                          /// blending operations are controlled per-attachment
20395ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    geometryShader                            /// geometry stage
20405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    tessellationShader                        /// tessellation control and evaluation stage
20415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sampleRateShading                         /// per-sample shading and interpolation
20423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkBool32                                    dualSrcBlend                              /// blend operations which take two sources
20435ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    logicOp                                   /// logic operations
20445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    multiDrawIndirect                         /// multi draw indirect
2045ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    VkBool32                                    depthClamp                                /// depth clamping
20465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBiasClamp                            /// depth bias clamping
20475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
20485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    depthBounds                               /// depth bounds test
20495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    wideLines                                 /// lines with width greater than 1
20505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    largePoints                               /// points with size greater than 1
2051fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
2052fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkBool32                                    multiViewport
2053fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    VkBool32                                    samplerAnisotropy
20545ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    textureCompressionETC2                    /// ETC texture compression formats
20555ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    textureCompressionASTC_LDR                /// ASTC LDR texture compression formats
20565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    textureCompressionBC                      /// BC1-7 texture compressed formats
205765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBool32                                    occlusionQueryPrecise
20585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    pipelineStatisticsQuery                   /// pipeline statistics query
2059dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkBool32                                    vertexPipelineStoresAndAtomics
2060dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkBool32                                    fragmentStoresAndAtomics
2061dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkBool32                                    shaderTessellationAndGeometryPointSize
20625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderImageGatherExtended                 /// texture gather with run-time values and independent offsets
20635ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageImageExtendedFormats         /// the extended set of formats can be used for storage images
20645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageImageMultisample             /// multisample images can be used for storage images
2065d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VkBool32                                    shaderStorageImageReadWithoutFormat
2066d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VkBool32                                    shaderStorageImageWriteWithoutFormat
20675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderUniformBufferArrayDynamicIndexing   /// arrays of uniform buffers can be accessed with dynamically uniform indices
20685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderSampledImageArrayDynamicIndexing    /// arrays of sampled images can be accessed with dynamically uniform indices
20695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageBufferArrayDynamicIndexing   /// arrays of storage buffers can be accessed with dynamically uniform indices
20705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderStorageImageArrayDynamicIndexing    /// arrays of storage images can be accessed with dynamically uniform indices
20715ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderClipDistance                        /// clip distance in shaders
20725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderCullDistance                        /// cull distance in shaders
20735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderFloat64                             /// 64-bit floats (doubles) in shaders
20745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderInt64                               /// 64-bit integers in shaders
20755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderInt16                               /// 16-bit integers in shaders
20765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    shaderResourceResidency                   /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
207765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkBool32                                    shaderResourceMinLod                      /// shader can use texture operations that specify minimum resource LOD
20785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseBinding                             /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
20795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyBuffer                     /// Sparse resources support: GPU can access partially resident buffers
20805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyImage2D                    /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
20815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyImage3D                    /// Sparse resources support: GPU can access partially resident 3D images
20825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency2Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
20835ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency4Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
20845ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency8Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
20855ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidency16Samples                  /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
20865ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    sparseResidencyAliased                    /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
2087d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall    VkBool32                                    variableMultisampleRate
2088d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2089d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2090d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkPhysicalDeviceLimits {
2091d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// resource maximum sizes
2092d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimension1D                       /// max 1D image dimension
2093d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimension2D                       /// max 2D image dimension
2094d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimension3D                       /// max 3D image dimension
2095d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageDimensionCube                     /// max cubemap image dimension
2096d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxImageArrayLayers                       /// max layers for image arrays
2097b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         maxTexelBufferElements
2098fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         maxUniformBufferRange                     /// max uniform buffer size (bytes)
2099fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         maxStorageBufferRange                     /// max storage buffer size (bytes)
2100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPushConstantsSize                      /// max size of the push constants pool (bytes)
2101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// memory limits
2102d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxMemoryAllocationCount                  /// max number of device memory allocations supported
2103091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    u32                                         maxSamplerAllocationCount
21045ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                bufferImageGranularity                    /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
21055ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkDeviceSize                                sparseAddressSpaceSize                    /// Total address space available for sparse allocations (bytes)
2106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// descriptor set limits
2107d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxBoundDescriptorSets                    /// max number of descriptors sets that can be bound to a pipeline
2108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorSamplers             /// max num of samplers allowed per-stage in a descriptor set
2109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorUniformBuffers       /// max num of uniform buffers allowed per-stage in a descriptor set
2110d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorStorageBuffers       /// max num of storage buffers allowed per-stage in a descriptor set
2111d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorSampledImages        /// max num of sampled images allowed per-stage in a descriptor set
2112d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxPerStageDescriptorStorageImages        /// max num of storage images allowed per-stage in a descriptor set
2113e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall    u32                                         maxPerStageDescriptorInputAttachments
2114d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetSamplers                  /// max num of samplers allowed in all stages in a descriptor set
2115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetUniformBuffers            /// max num of uniform buffers allowed in all stages in a descriptor set
21165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxDescriptorSetUniformBuffersDynamic     /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
2117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetStorageBuffers            /// max num of storage buffers allowed in all stages in a descriptor set
21185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxDescriptorSetStorageBuffersDynamic     /// max num of dynamic storage buffers allowed in all stages in a descriptor set
2119d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetSampledImages             /// max num of sampled images allowed in all stages in a descriptor set
2120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDescriptorSetStorageImages             /// max num of storage images allowed in all stages in a descriptor set
2121e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall    u32                                         maxDescriptorSetInputAttachments
2122d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// vertex stage limits
2123d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexInputAttributes                  /// max num of vertex input attribute slots
21245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    u32                                         maxVertexInputBindings                    /// max num of vertex input binding slots
2125d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexInputAttributeOffset             /// max vertex input attribute offset added to vertex buffer offset
2126d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexInputBindingStride               /// max vertex input binding stride
2127d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxVertexOutputComponents                 /// max num of output components written by vertex shader
2128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// tessellation control stage limits
21293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         maxTessellationGenerationLevel                  /// max level supported by tess primitive generator
2130ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationPatchSize                        /// max patch size (vertices)
2131ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlPerVertexInputComponents  /// max num of input components per-vertex in TCS
2132ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
2133ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlPerPatchOutputComponents  /// max num of output components per-patch in TCS
2134ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationControlTotalOutputComponents     /// max total num of per-vertex and per-patch output components in TCS
2135ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationEvaluationInputComponents        /// max num of input components per vertex in TES
2136ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall    u32                                         maxTessellationEvaluationOutputComponents       /// max num of output components per vertex in TES
2137d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// geometry stage limits
2138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryShaderInvocations              /// max invocation count supported in geometry shader
2139d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryInputComponents                /// max num of input components read in geometry stage
2140d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryOutputComponents               /// max num of output components written in geometry stage
2141d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryOutputVertices                 /// max num of vertices that can be emitted in geometry stage
2142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxGeometryTotalOutputComponents          /// max total num of components (all vertices) written in geometry stage
2143d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// fragment stage limits
2144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFragmentInputComponents                /// max num of input compontents read in fragment stage
2145fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         maxFragmentOutputAttachments              /// max num of output attachments written in fragment stage
21463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    u32                                         maxFragmentDualSrcAttachments             /// max num of output attachments written when using dual source blending
2147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFragmentCombinedOutputResources        /// max total num of storage buffers, storage images and output buffers
2148d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    /// compute stage limits
2149d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxComputeSharedMemorySize                /// max total storage size of work group local storage (bytes)
2150d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32[3]                                      maxComputeWorkGroupCount                  /// max num of compute work groups that may be dispatched by a single command (x,y,z)
2151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxComputeWorkGroupInvocations            /// max total compute invocations in a single local work group
2152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32[3]                                      maxComputeWorkGroupSize                   /// max local size of a compute work group (x,y,z)
2153d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subPixelPrecisionBits                     /// num bits of subpixel precision in screen x and y
2155d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subTexelPrecisionBits                     /// num bits of subtexel precision
2156d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         mipmapPrecisionBits                       /// num bits of mipmap precision
2157d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDrawIndexedIndexValue                  /// max index value for indexed draw calls (for 32-bit indices)
2159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxDrawIndirectInstanceCount              /// max instance count for indirect draw calls
2160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxSamplerLodBias                         /// max absolute sampler level of detail bias
2162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxSamplerAnisotropy                      /// max degree of sampler anisotropy
2163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxViewports                              /// max number of active viewports
2165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32[2]                                      maxViewportDimensions                     /// max viewport dimensions (x,y)
2166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32[2]                                      viewportBoundsRange                       /// viewport bounds range (min,max)
2167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         viewportSubPixelBits                      /// num bits of subpixel precision for viewport
2168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2169dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    platform.size_t                             minMemoryMapAlignment                     /// min required alignment of pointers returned by MapMemory (bytes)
2170dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDeviceSize                                minTexelBufferOffsetAlignment             /// min required alignment for texel buffer offsets (bytes)
2171dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDeviceSize                                minUniformBufferOffsetAlignment           /// min required alignment for uniform buffer sizes and offsets (bytes)
2172dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall    VkDeviceSize                                minStorageBufferOffsetAlignment           /// min required alignment for storage buffer offsets (bytes)
2173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2174fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    s32                                         minTexelOffset                            /// min texel offset for OpTextureSampleOffset
2175d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxTexelOffset                            /// max texel offset for OpTextureSampleOffset
2176fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    s32                                         minTexelGatherOffset                      /// min texel offset for OpTextureGatherOffset
2177d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxTexelGatherOffset                      /// max texel offset for OpTextureGatherOffset
2178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         minInterpolationOffset                    /// furthest negative offset for interpolateAtOffset
2179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         maxInterpolationOffset                    /// furthest positive offset for interpolateAtOffset
2180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         subPixelInterpolationOffsetBits           /// num of subpixel bits for interpolateAtOffset
2181d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFramebufferWidth                       /// max width for a framebuffer
2183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFramebufferHeight                      /// max height for a framebuffer
2184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxFramebufferLayers                      /// max layer count for a layered framebuffer
2185091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferColorSampleCounts
2186091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferDepthSampleCounts
2187091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferStencilSampleCounts
2188091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          framebufferNoAttachmentSampleCounts
2189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxColorAttachments                       /// max num of framebuffer color attachments
2190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2191091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageColorSampleCounts
2192091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageIntegerSampleCounts
2193091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageDepthSampleCounts
2194091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          sampledImageStencilSampleCounts
2195091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkSampleCountFlags                          storageImageSampleCounts
2196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxSampleMaskWords                        /// max num of sample mask words
2197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2198a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall    f32                                         timestampPeriod
2199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxClipDistances                          /// max number of clip distances
2201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxCullDistances                          /// max number of cull distances
2202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         maxCombinedClipAndCullDistances           /// max combined number of user clipping
2203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2204fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    u32                                         discreteQueuePriorities
2205fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall
22065ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32[2]                                      pointSizeRange                            /// range (min,max) of supported point sizes
22075ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    f32[2]                                      lineWidthRange                            /// range (min,max) of supported line widths
2208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         pointSizeGranularity                      /// granularity of supported point sizes
2209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    f32                                         lineWidthGranularity                      /// granularity of supported line widths
221003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    VkBool32                                    strictLines
2211091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall    VkBool32                                    standardSampleLocations
2212a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall
221365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkDeviceSize                                optimalBufferCopyOffsetAlignment
221465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    VkDeviceSize                                optimalBufferCopyRowPitchAlignment
2215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
22175ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallclass VkPhysicalDeviceSparseProperties {
22185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    residencyStandard2DBlockShape             /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
2219b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    VkBool32                                    residencyStandard2DMultisampleBlockShape  /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
22205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    VkBool32                                    residencyStandard3DBlockShape             /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
22215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse 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
22225ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse 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
22235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
22245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
2225d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkSemaphoreCreateInfo {
2226d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
2227d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext      /// Pointer to next structure
2228d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkSemaphoreCreateFlags                      flags      /// Semaphore creation flags
2229d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2230d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2231d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkQueryPoolCreateInfo {
2232d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
2233d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext              /// Pointer to next structure
2234a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkQueryPoolCreateFlags                      flags
2235d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueryType                                 queryType
223665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    u32                                         entryCount
2237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueryPipelineStatisticFlags               pipelineStatistics /// Optional
2238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2240d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallclass VkFramebufferCreateInfo {
2241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkStructureType                             sType  /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
2242d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    const void*                                 pNext  /// Pointer to next structure
2243a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkFramebufferCreateFlags                    flags
2244d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkRenderPass                                renderPass
2245d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         attachmentCount
22465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    const VkImageView*                          pAttachments
2247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         width
2248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         height
2249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         layers
2250d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
22523fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDrawIndirectCommand {
2253d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         vertexCount
2254d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         instanceCount
2255d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstVertex
2256d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstInstance
2257d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2258d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
22593fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDrawIndexedIndirectCommand {
2260d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         indexCount
2261d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         instanceCount
2262d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstIndex
2263d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    s32                                         vertexOffset
2264d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         firstInstance
2265d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2266d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
22673fbc856120217247c72fb5ed88500000f3881c45Jesse Hallclass VkDispatchIndirectCommand {
2268d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         x
2269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         y
2270d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    u32                                         z
2271d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2272d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
22733e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
2274b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallclass VkSurfaceCapabilitiesKHR {
22751356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         minImageCount
22761356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         maxImageCount
22771356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  currentExtent
22781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  minImageExtent
22791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  maxImageExtent
22801356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformFlagsKHR                  supportedTransforms
22811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformKHR                       currentTransform
2282a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
22831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         maxImageArraySize
22841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkImageUsageFlags                           supportedUsageFlags
228588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
228688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
22873e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
22881356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkSurfaceFormatKHR {
22891356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkFormat                                    format
22901356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkColorSpaceKHR                             colorSpace
229188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
229288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
22933e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
22941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkSwapchainCreateInfoKHR {
22951356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
22961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
22971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceKHR                                surface
22981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         minImageCount
22991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkFormat                                    imageFormat
23001356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkColorSpaceKHR                             imageColorSpace
23011356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  imageExtent
23021356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkImageUsageFlags                           imageUsageFlags
23031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformKHR                       preTransform
2304a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
23051356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         imageArraySize
23061356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSharingMode                               sharingMode
230703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    u32                                         queueFamilyIndexCount
23081356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const u32*                                  pQueueFamilyIndices
23091356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkPresentModeKHR                            presentMode
23101356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSwapchainKHR                              oldSwapchain
23111356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkBool32                                    clipped
231288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
231388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
23143e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
23151356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkPresentInfoKHR {
23161356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
23171356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
2318b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    u32                                         waitSemaphoreCount
2319b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    const VkSemaphore*                          pWaitSemaphores
23201356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         swapchainCount
232103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    const VkSwapchainKHR*                       pSwapchains
23221356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const u32*                                  imageIndices
2323e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall    VkResult*                                   pResults
23241356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23251356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23263e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
23271356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayPropertiesKHR {
23281356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayKHR                                display
23291356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const char*                                 displayName
23301356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  physicalDimensions
23311356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  physicalResolution
23321356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformFlagsKHR                  supportedTransforms
23331356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkBool32                                    planeReorderPossible
2334a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBool32                                    persistentContent
23351356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23361356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23373e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
2338a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkDisplayModeParametersKHR {
23391356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  visibleRegion
2340a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         refreshRate
23411356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23421356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23433e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
23441356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayModePropertiesKHR {
23451356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayModeKHR                            displayMode
2346a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDisplayModeParametersKHR                  parameters
23471356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23481356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23493e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
23501356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayModeCreateInfoKHR {
23511356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
23521356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
2353a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDisplayModeParametersKHR                  parameters
23541356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23551356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23563e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
23571356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayPlanePropertiesKHR {
2358a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkDisplayKHR                                currentDisplay
2359a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    u32                                         currentStackIndex
2360a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
2361a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
23623e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
2363a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkDisplayPlaneCapabilitiesKHR {
23641356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
23651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  minSrcPosition
23661356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  maxSrcPosition
23671356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  minSrcExtent
23681356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  maxSrcExtent
23691356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  minDstPosition
23701356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkOffset2D                                  maxDstPosition
23711356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  minDstExtent
23721356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  maxDstExtent
23731356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23741356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23753e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
2376a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallclass VkDisplaySurfaceCreateInfoKHR {
23771356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
23781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
23791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayModeKHR                            displayMode
23801356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         planeIndex
23811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    u32                                         planeStackIndex
23821356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkSurfaceTransformKHR                       transform
23831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    f32                                         globalAlpha
23841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkDisplayPlaneAlphaFlagsKHR                 alphaMode
23851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkExtent2D                                  imageSize
23861356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23883e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display_swapchain")
23891356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplaySwapchainCreateInfoKHR {
23901356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
23911356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
23921356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo
23931356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
23941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
23953e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display_swapchain")
23961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallclass VkDisplayPresentInfoKHR {
23971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkStructureType                             sType
23981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    const void*                                 pNext
23991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkRect2D                                    srcRect
24001356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkRect2D                                    dstRect
2401a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    VkBool32                                    persistent
240288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
2403d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
2405d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
2406d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall//  Commands  //
2407d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
2408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Function pointers. TODO: add support for function pointers.
2410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@external type void* PFN_vkVoidFunction
2412d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@pfn cmd void vkVoidFunction() {
2413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@external type void* PFN_vkAllocationFunction
24163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@pfn cmd void* vkAllocationFunction(
2417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pUserData,
2418d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        platform.size_t                             size,
2419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        platform.size_t                             alignment,
24203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
242103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    return ?
242203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
242303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall
24243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@external type void* PFN_vkReallocationFunction
24253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@pfn cmd void* vkReallocationFunction(
242603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pUserData,
242703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pOriginal,
242803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             size,
242903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             alignment,
24303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
2431d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@external type void* PFN_vkFreeFunction
2435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@pfn cmd void vkFreeFunction(
2436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pUserData,
24373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        void*                                       pMemory) {
2438d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
24403fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@external type void* PFN_vkInternalAllocationNotification
24413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@pfn cmd void vkInternalAllocationNotification(
244203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pUserData,
244303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             size,
24443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkInternalAllocationType                    allocationType,
24453fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
244603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
244703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall
244803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall@external type void* PFN_vkInternalFreeNotification
244903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall@pfn cmd void vkInternalFreeNotification(
245003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        void*                                       pUserData,
245103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        platform.size_t                             size,
24523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkInternalAllocationType                    allocationType,
24533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkSystemAllocationScope                     allocationScope) {
245403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}
2455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Global functions
2457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateInstance(
2460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkInstanceCreateInfo*                 pCreateInfo,
24613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
2462d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkInstance*                                 pInstance) {
2463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2464d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    instance := ?
2466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pInstance[0] = instance
2467d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Instances[instance] = new!InstanceObject()
2468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
246903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerNameCount]
247003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionNameCount]
2471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2472d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2473d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2474d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
24765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyInstance(
247703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkInstance                                  instance,
24783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
2479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    instanceObject := GetInstance(instance)
2480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Instances[instance] = null
2482d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2484d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkEnumeratePhysicalDevices(
2486d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkInstance                                  instance,
2487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32*                                        pPhysicalDeviceCount,
2488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice*                           pPhysicalDevices) {
2489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    instanceObject := GetInstance(instance)
2490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceCount := as!u32(?)
2492d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pPhysicalDeviceCount[0] = physicalDeviceCount
2493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2495d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. physicalDeviceCount) {
2496d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        physicalDevice := ?
2497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        physicalDevices[i] = physicalDevice
2498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        if !(physicalDevice in State.PhysicalDevices) {
2499d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        }
2501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2502d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2503d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pName) {
25095ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if device != NULL_HANDLE {
2510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        device := GetDevice(device)
2511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2514d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2515d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2516d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2517d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkInstance                                  instance,
2518d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pName) {
25195ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if instance != NULL_HANDLE {
2520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        instanceObject := GetInstance(instance)
2521d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2522d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2525d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2526606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceProperties(
2527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDeviceProperties*                 pProperties) {
2529d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := ?
2532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pProperties[0] = properties
2533d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2535606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceQueueFamilyProperties(
2536d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
253703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pQueueFamilyPropertyCount,
25385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkQueueFamilyProperties*                    pQueueFamilyProperties) {
2539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
25405ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // TODO: Figure out how to express fetch-count-or-properties
25415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // This version fails 'apic validate' with 'fence not allowed in
25425ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // *semantic.Branch'. Other attempts have failed with the same or other
25435ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // errors.
25445ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // if pQueueFamilyProperties != null {
25455ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     queuesProperties := pQueueFamilyProperties[0:pCount[0]]
25465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     for i in (0 .. pCount[0]) {
25475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //         queueProperties := as!VkQueueFamilyProperties(?)
25485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //         queuesProperties[i] = queueProperties
25495ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //    }
25505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // } else {
25515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     count := ?
25525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    //     pCount[0] = count
25535ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    // }
2554d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2556606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceMemoryProperties(
2557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDeviceMemoryProperties*           pMemoryProperties) {
2559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2561d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    memoryProperties := ?
2562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pMemoryProperties[0] = memoryProperties
2563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2564d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2565606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceFeatures(
2566d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2567d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDeviceFeatures*                   pFeatures) {
2568d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2569d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2570d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    features := ?
2571d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFeatures[0] = features
2572d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2573d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2574606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceFormatProperties(
2575d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2576d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormat                                    format,
2577d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormatProperties*                         pFormatProperties) {
2578d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2579d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2580d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    formatProperties := ?
2581d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFormatProperties[0] = formatProperties
2582d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2583d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2584a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hallcmd VkResult vkGetPhysicalDeviceImageFormatProperties(
2585d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2586d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormat                                    format,
2587d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageType                                 type,
2588d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageTiling                               tiling,
2589d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageUsageFlags                           usage,
25905ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkImageCreateFlags                          flags,
2591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageFormatProperties*                    pImageFormatProperties) {
2592d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2593d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2594d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageFormatProperties := ?
2595d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pImageFormatProperties[0] = imageFormatProperties
2596a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hall
2597a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hall    return ?
2598d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2599d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2601d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Device functions
2602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2603d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2604d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateDevice(
2605d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2606d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkDeviceCreateInfo*                   pCreateInfo,
26073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
2608d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice*                                   pDevice) {
2609d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2611d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2612d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    device := ?
2613d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pDevice[0] = device
2614d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2616d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2618d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2619d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
26205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyDevice(
262103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDevice                                    device,
26223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
2623d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Devices[device] = null
2626d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2627d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2628d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2629d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Extension discovery functions
2630d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
26315ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateInstanceLayerProperties(
263203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2633d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkLayerProperties*                          pProperties) {
2634d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
263503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2636d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2637d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2638d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2639d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2640d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2641d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2642d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2643d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2644d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2645d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
26465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateInstanceExtensionProperties(
2647d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pLayerName,
264803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2649d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkExtensionProperties*                      pProperties) {
2650d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
265103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2652d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2653d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2654d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2655d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2656d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2657d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2658d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2659d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2660d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2661d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
26625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateDeviceLayerProperties(
2663d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
266403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2665d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkLayerProperties*                          pProperties) {
2666d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2667d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
266803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2669d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2670d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2671d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2672d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2673d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2674d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2675d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2676d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2677d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2678d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
26795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd VkResult vkEnumerateDeviceExtensionProperties(
2680d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2681d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const char*                                 pLayerName,
268203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2683d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkExtensionProperties*                      pProperties) {
2684d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2685d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2686d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    count := as!u32(?)
268703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPropertyCount[0] = count
2688d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2689d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    properties := pProperties[0:count]
2690d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. count) {
2691d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        property := ?
2692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        properties[i] = property
2693d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2694d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2695d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2696d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2697d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2698d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2699d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Queue functions
2700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2702606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetDeviceQueue(
2703d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queueFamilyIndex,
2705d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queueIndex,
2706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue*                                    pQueue) {
2707d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2708d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queue := ?
2710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pQueue[0] = queue
2711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    if !(queue in State.Queues) {
2713d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.Queues[queue] = new!QueueObject(device: device)
2714d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2715d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2716d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2717d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
2718d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkQueueSubmit(
2719d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue                                     queue,
2720a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall        u32                                         submitCount,
2721b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        const VkSubmitInfo*                         pSubmits,
2722d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFence                                     fence) {
2723d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queueObject := GetQueue(queue)
2724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if fence != NULL_HANDLE {
2726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject := GetFence(fence)
2727d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(fenceObject.device == queueObject.device)
2728d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2729d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    // commandBuffers := pcommandBuffers[0:commandBufferCount]
27313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    // for i in (0 .. commandBufferCount) {
27323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    commandBuffer := commandBuffers[i]
27333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    commandBufferObject := GetCommandBuffer(commandBuffer)
27343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    assert(commandBufferObject.device == queueObject.device)
2735a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    //
27363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //    validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
27373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    //        "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
2738a366a5186ea941c5653cbdb8df18dc19318912b6Jesse Hall    // }
2739d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2740d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2741d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2742d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2743d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2744d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkQueueWaitIdle(
2745d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue                                     queue) {
2746d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queueObject := GetQueue(queue)
2747d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2748d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2749d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2750d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2751d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2752d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkDeviceWaitIdle(
2753d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device) {
2754d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2755d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2756d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2757d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2758d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2759d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2760d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Memory functions
2761d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2762d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
27633fbc856120217247c72fb5ed88500000f3881c45Jesse Hallcmd VkResult vkAllocateMemory(
2764d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
27653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkMemoryAllocateInfo*                 pAllocateInfo,
27663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
27673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory*                             pMemory) {
27683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
2769d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2770d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
27713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memory := ?
27723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    pMemory[0] = memory
27733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.DeviceMemories[memory] = new!DeviceMemoryObject(
2774d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        device: device,
27753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        allocationSize: pAllocateInfo[0].allocationSize)
2776d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2777d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2778d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2779d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2780d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
27815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkFreeMemory(
2782d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
27833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
27843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
2785d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
27863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
27873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memoryObject.device == device)
2788d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2789d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Check that no objects are still bound before freeing.
27903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
2791d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        "vkFreeMemory: objects still bound")
27923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
27933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        "vkFreeMemory: commandBuffers still bound")
27943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.DeviceMemories[memory] = null
2795d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2796d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2797d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
2798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkMapMemory(
2799d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
28003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
28015ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
28025ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                size,
2803d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkMemoryMapFlags                            flags,
2804d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void**                                      ppData) {
2805d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
28063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
28073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memoryObject.device == device)
2808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2809d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(flags == as!VkMemoryMapFlags(0))
28103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert((offset + size) <= memoryObject.allocationSize)
2811d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2812d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2813d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2814d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2815d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
28165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkUnmapMemory(
2817d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
28183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory) {
2819d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
28203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
28213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memoryObject.device == device)
2822d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2823d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2824d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkFlushMappedMemoryRanges(
2825d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
28263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryRangeCount
28273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkMappedMemoryRange*                  pMemoryRanges) {
2828d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2829d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryRanges := pMemoryRanges[0:memoryRangeCount]
28313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryRangeCount) {
28323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryRange := memoryRanges[i]
28333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memoryRange.memory)
28343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
28353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
2836d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2837d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2838d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2839d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2840d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2841d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkInvalidateMappedMemoryRanges(
2842d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
28433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryRangeCount,
28443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkMappedMemoryRange*                  pMemoryRanges) {
2845d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2846d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryRanges := pMemoryRanges[0:memoryRangeCount]
28483fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryRangeCount) {
28493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryRange := memoryRanges[i]
28503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memoryRange.memory)
28513fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
28523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
2853d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2854d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2855d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2856d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2857d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2858d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2859d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Memory management API functions
2860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2861606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetDeviceMemoryCommitment(
2862d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2863d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDeviceMemory                              memory,
28645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize*                               pCommittedMemoryInBytes) {
2865d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2866d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
28675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if memory != NULL_HANDLE {
2868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        memoryObject := GetDeviceMemory(memory)
2869d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(memoryObject.device == device)
2870d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2871d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2872d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    committedMemoryInBytes := ?
2873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pCommittedMemoryInBytes[0] = committedMemoryInBytes
2874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2875d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2876606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetBufferMemoryRequirements(
2877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
2879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkMemoryRequirements*                       pMemoryRequirements) {
2880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2881d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
2882d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
2883d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2884d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2885d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkBindBufferMemory(
2886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
28883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
28893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                memoryOffset) {
2890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
2892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
2893d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2894d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
28953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if bufferObject.memory != NULL_HANDLE {
28963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(bufferObject.memory)
28973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(buffer)] = null
2898d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2899d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2900d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Bind buffer to given memory object, if not VK_NULL_HANDLE.
29013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if memory != NULL_HANDLE {
29023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memory)
29033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
29043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
2905d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
29063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bufferObject.memory = memory
29073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bufferObject.memoryOffset = memoryOffset
2908d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2909d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2910d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2911d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2912606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetImageMemoryRequirements(
2913d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2914d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
2915d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkMemoryRequirements*                       pMemoryRequirements) {
2916d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2917d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
2918d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
2919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2920d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2921d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkBindImageMemory(
2922d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2923d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
29243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceMemory                              memory,
29253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                memoryOffset) {
2926d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2927d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
2928d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
2929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2930d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Unbind image from previous memory object, if not VK_NULL_HANDLE.
29313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if imageObject.memory != NULL_HANDLE {
29323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(imageObject.memory)
29333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(image)] = null
2934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
2935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2936d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Bind image to given memory object, if not VK_NULL_HANDLE.
29373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    if memory != NULL_HANDLE {
29383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject := GetDeviceMemory(memory)
29393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(memoryObject.device == device)
29403fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        memoryObject.boundObjects[as!u64(image)] = memoryOffset
2941d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
29423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    imageObject.memory = memory
29433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    imageObject.memoryOffset = memoryOffset
2944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2946d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2947d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2948606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetImageSparseMemoryRequirements(
2949d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2950d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
295103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pSparseMemoryRequirementCount,
2952d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSparseImageMemoryRequirements*            pSparseMemoryRequirements) {
2953d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2954d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
2955d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
2956d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2958606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetPhysicalDeviceSparseImageFormatProperties(
2959d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPhysicalDevice                            physicalDevice,
2960d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFormat                                    format,
2961d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageType                                 type,
2962091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hall        VkSampleCountFlagBits                       samples,
2963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageUsageFlags                           usage,
2964d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageTiling                               tiling,
296503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPropertyCount,
2966d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSparseImageFormatProperties*              pProperties) {
2967d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2968d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2969d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2970a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkQueueBindSparse(
2971d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueue                                     queue,
297203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         bindInfoCount,
2973a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        const VkBindSparseInfo*                     pBindInfo,
2974a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkFence                                     fence) {
2975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queueObject := GetQueue(queue)
2976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2977d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2978d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2979d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2980d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2981d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Fence functions
2982d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2983d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
2984d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateFence(
2985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
2986d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFenceCreateInfo*                    pCreateInfo,
29873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
2988d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFence*                                    pFence) {
2989d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2990d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
2991d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2992d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fence := ?
2993d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFence[0] = fence
2994d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Fences[fence] = new!FenceObject(
2995d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall        device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
2996d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
2997d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
2998d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
2999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3000d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
30015ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyFence(
3002d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
300303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkFence                                     fence,
30043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3005d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3006d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fenceObject := GetFence(fence)
3007d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(fenceObject.device == device)
3008d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Fences[fence] = null
3010d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3011d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3012d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3013d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetFences(
3014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3015d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         fenceCount,
3016d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFence*                              pFences) {
3017d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3018d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3019d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fences := pFences[0:fenceCount]
3020d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. fenceCount) {
3021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fence := fences[i]
3022d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject := GetFence(fence)
3023d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(fenceObject.device == device)
3024d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject.signaled = false
3025d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3026d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3027d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3028d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3029d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3030d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3031d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetFenceStatus(
3032d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3033d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFence                                     fence) {
3034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3035d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fenceObject := GetFence(fence)
3036d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(fenceObject.device == device)
3037d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3039d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3040d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3041d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3042d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkWaitForFences(
3043d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3044d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         fenceCount,
3045d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFence*                              pFences,
30465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkBool32                                    waitAll,
3047d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u64                                         timeout) {  /// timeout in nanoseconds
3048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3050d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    fences := pFences[0:fenceCount]
3051d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. fenceCount) {
3052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fence := fences[i]
3053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        fenceObject := GetFence(fence)
3054d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(fenceObject.device == device)
3055d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3056d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3057d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3058d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3059d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3060d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3061d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Queue semaphore functions
3062d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3063d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3064d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateSemaphore(
3065d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3066d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkSemaphoreCreateInfo*                pCreateInfo,
30673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3068d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSemaphore*                                pSemaphore) {
3069d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
3070d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3071d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3072d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    semaphore := ?
3073d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pSemaphore[0] = semaphore
3074d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
3075d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3076d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3077d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3078d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3079d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
30805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroySemaphore(
3081d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
308203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkSemaphore                                 semaphore,
30833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3084d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3085d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    semaphoreObject := GetSemaphore(semaphore)
3086d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(semaphoreObject.device == device)
3087d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3088d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Semaphores[semaphore] = null
3089d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3090d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3091d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3092d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Event functions
3093d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3094d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3095d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateEvent(
3096d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3097d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkEventCreateInfo*                    pCreateInfo,
30983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3099d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent*                                    pEvent) {
3100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
3101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3102d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3103d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    event := ?
3104d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pEvent[0] = event
3105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Events[event] = new!EventObject(device: device)
3106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3107d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3110d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
31115ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyEvent(
3112d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
311303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkEvent                                     event,
31143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3116d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3118d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3119d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Events[event] = null
3120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3122d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3123d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetEventStatus(
3124d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3125d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event) {
3126d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3127d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3129d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3130d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3131d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3132d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkSetEvent(
3135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event) {
3137d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3139d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3140d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3141d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3143d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3145d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetEvent(
3146d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event) {
3148d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3149d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
3150d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(eventObject.device == device)
3151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3153d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3155d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3156d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Query functions
3157d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateQueryPool(
3160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkQueryPoolCreateInfo*                pCreateInfo,
31623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool*                                pQueryPool) {
3164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
3165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPool := ?
3168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pQueryPool[0] = queryPool
3169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
3170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3172d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
31755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyQueryPool(
3176d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
317703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkQueryPool                                 queryPool,
31783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
3181d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queryPoolObject.device == device)
3182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.QueryPools[queryPool] = null
3184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3186d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetQueryPoolResults(
3188d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
3190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         startQuery,
3191d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queryCount,
3192a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        platform.size_t                             dataSize,
3193d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pData,
3194a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        VkDeviceSize                                stride,
3195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryResultFlags                          flags) {
3196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
3198d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queryPoolObject.device == device)
3199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    data := pData[0:dataSize]
3201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3204d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3205d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Buffer functions
3206d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateBuffer(
3209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3210d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferCreateInfo*                   pCreateInfo,
32113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer*                                   pBuffer) {
3213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
3214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    buffer := ?
3217d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pBuffer[0] = buffer
3218d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Buffers[buffer] = new!BufferObject(device: device)
3219d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3220d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3223d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
32245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyBuffer(
3225d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
322603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkBuffer                                    buffer,
32273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3228d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3229d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
3230d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
3231d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
32323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(bufferObject.memory == 0)
3233d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Buffers[buffer] = null
3234d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3235d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3236d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Buffer view functions
3238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3240d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateBufferView(
3241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3242d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferViewCreateInfo*               pCreateInfo,
32433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3244d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBufferView*                               pView) {
3245d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
3246d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(pCreateInfo.buffer)
3249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferObject.device == device)
3250d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    view := ?
3252d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pView[0] = view
3253d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
3254d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3255d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3256d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3257d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3258d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
32595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyBufferView(
3260d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
326103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkBufferView                                bufferView,
32623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3263d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3264d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferViewObject := GetBufferView(bufferView)
3265d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferViewObject.device == device)
3266d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3267d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.BufferViews[bufferView] = null
3268d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3270d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3271d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Image functions
3272d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3273d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3274d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateImage(
3275d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3276d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageCreateInfo*                    pCreateInfo,
32773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3278d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage*                                    pImage) {
3279d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
3280d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3281d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3282d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    image := ?
3283d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pImage[0] = image
3284d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Images[image] = new!ImageObject(device: device)
3285d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3286d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3287d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3288d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3289d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
32905ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyImage(
3291d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
329203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkImage                                     image,
32933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3294d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3295d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3296d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3297d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
32983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(imageObject.memory == 0)
3299d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Images[image] = null
3300d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3301d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3302606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetImageSubresourceLayout(
3303d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3304d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
3305d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageSubresource*                   pSubresource,
3306d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSubresourceLayout*                        pLayout) {
3307d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3308d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
3309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3311d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3312d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3313d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Image view functions
3314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3315d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3316d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateImageView(
3317d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3318d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageViewCreateInfo*                pCreateInfo,
33193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3320d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageView*                                pView) {
3321d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3322d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3323d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3324d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(pCreateInfo.image)
3325d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageObject.device == device)
3326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3327d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    view := ?
3328d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pView[0] = view
3329d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
3330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3331d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3332d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
33355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyImageView(
3336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
333703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkImageView                                 imageView,
33383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageViewObject := GetImageView(imageView)
3341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageViewObject.device == device)
3342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ImageViews[imageView] = null
3344d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3346d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Shader functions
3348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateShaderModule(
3350d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3351d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkShaderModuleCreateInfo*             pCreateInfo,
33523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3353d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkShaderModule*                             pShaderModule) {
3354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3355d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3356d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    shaderModule := ?
3358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pShaderModule[0] = shaderModule
3359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3362d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3363d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
33645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyShaderModule(
3365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
336603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkShaderModule                              shaderModule,
33673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3368d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    shaderModuleObject := GetShaderModule(shaderModule)
3370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(shaderModuleObject.device == device)
3371d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3372d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.ShaderModules[shaderModule] = null
3373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3374d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3375d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Pipeline functions
3377d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3378d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreatePipelineCache(
3379d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3380d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkPipelineCacheCreateInfo*            pCreateInfo,
33813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache*                            pPipelineCache) {
3383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3386d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineCache := ?
3387d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pPipelineCache[0] = pipelineCache
3388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3389d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
33935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyPipelineCache(
3394d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
339503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkPipelineCache                             pipelineCache,
33963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3397d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineCacheObject := GetPipelineCache(pipelineCache)
3399d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineCacheObject.device == device)
3400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3401d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineCaches[pipelineCache] = null
3402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3403d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3404d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkGetPipelineCacheData(
3405d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3406d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache                             pipelineCache,
3407a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        platform.size_t*                            pDataSize,
3408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        void*                                       pData) {
3409d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineCacheObject := GetPipelineCache(pipelineCache)
3411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineCacheObject.device == device)
3412d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3414d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkMergePipelineCaches(
3417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
34183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkPipelineCache                             dstCache,
3419d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         srcCacheCount,
3420d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkPipelineCache*                      pSrcCaches) {
3421d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
34223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstCacheObject := GetPipelineCache(dstCache)
34233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(dstCacheObject.device == device)
3424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcCaches := pSrcCaches[0:srcCacheCount]
3426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. srcCacheCount) {
3427d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        srcCache := srcCaches[i]
3428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        srcCacheObject := GetPipelineCache(srcCache)
3429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(srcCacheObject.device == device)
3430d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3431d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3432d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3434d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateGraphicsPipelines(
3436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3437d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache                             pipelineCache,
343803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         createInfoCount,
3439d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkGraphicsPipelineCreateInfo*         pCreateInfos,
34403fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3441d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipeline*                                 pPipelines) {
3442d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
34435ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if pipelineCache != NULL_HANDLE {
3444d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelineCacheObject := GetPipelineCache(pipelineCache)
3445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(pipelineCacheObject.device == device)
3446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
344803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    createInfos := pCreateInfos[0:createInfoCount]
344903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pipelines := pPipelines[0:createInfoCount]
345003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. createInfoCount) {
3451d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipeline := ?
3452d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelines[i] = pipeline
3453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.Pipelines[pipeline] = new!PipelineObject(device: device)
3454d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3455d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3456d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3457d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3458d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateComputePipelines(
3460d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3461d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineCache                             pipelineCache,
346203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         createInfoCount,
3463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkComputePipelineCreateInfo*          pCreateInfos,
34643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipeline*                                 pPipelines) {
3466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
34675ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall    if pipelineCache != NULL_HANDLE {
3468d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelineCacheObject := GetPipelineCache(pipelineCache)
3469d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(pipelineCacheObject.device == device)
3470d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
347203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    createInfos := pCreateInfos[0:createInfoCount]
347303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pipelines := pPipelines[0:createInfoCount]
347403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. createInfoCount) {
3475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipeline := ?
3476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        pipelines[i] = pipeline
3477d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.Pipelines[pipeline] = new!PipelineObject(device: device)
3478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3482d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
34845ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyPipeline(
3485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
348603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkPipeline                                  pipeline,
34873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3488d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineObjects := GetPipeline(pipeline)
3490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineObjects.device == device)
3491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3492d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Pipelines[pipeline] = null
3493d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3495d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3496d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Pipeline layout functions
3497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3498d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3499d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreatePipelineLayout(
3500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkPipelineLayoutCreateInfo*           pCreateInfo,
35023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3503d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineLayout*                           pPipelineLayout) {
3504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3507d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineLayout := ?
3508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pPipelineLayout[0] = pipelineLayout
3509d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3514d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
35155ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyPipelineLayout(
3516d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
351703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkPipelineLayout                            pipelineLayout,
35183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3519d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3520d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3521d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineLayoutObjects.device == device)
3522d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.PipelineLayouts[pipelineLayout] = null
3524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3525d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Sampler functions
3528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3529d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3530d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateSampler(
3531d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkSamplerCreateInfo*                  pCreateInfo,
35333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkSampler*                                  pSampler) {
3535d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3536d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3537d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    sampler := ?
3539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pSampler[0] = sampler
3540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Samplers[sampler] = new!SamplerObject(device: device)
3541d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3544d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3545d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
35465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroySampler(
3547d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
354803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkSampler                                   sampler,
35493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3551d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    samplerObject := GetSampler(sampler)
3552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(samplerObject.device == device)
3553d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3554d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Samplers[sampler] = null
3555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3556d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3557d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Descriptor set functions
3559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3560d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3561d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateDescriptorSetLayout(
3562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3563d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
35643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3565d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDescriptorSetLayout*                      pSetLayout) {
3566d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3567d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3568d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3569d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    setLayout := ?
3570d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pSetLayout[0] = setLayout
3571d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3572d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3573d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3574d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3575d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3576d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
35775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyDescriptorSetLayout(
3578d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
357903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDescriptorSetLayout                       descriptorSetLayout,
35803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3581d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3582d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3583d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorSetLayoutObject.device == device)
3584d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3585d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorSetLayouts[descriptorSetLayout] = null
3586d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3587d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3588d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3589d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateDescriptorPool(
3590d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
359103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        const VkDescriptorPoolCreateInfo*           pCreateInfo,
35923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3593d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDescriptorPool*                           pDescriptorPool) {
3594d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3595d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3596d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3597d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorPool := ?
3598d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pDescriptorPool[0] = descriptorPool
3599d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3600d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3601d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3602d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3603d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3604d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
36055ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyDescriptorPool(
3606d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
360703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDescriptorPool                            descriptorPool,
36083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3609d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3610d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorPoolObject := GetDescriptorPool(descriptorPool)
3611d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorPoolObject.device == device)
3612d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3613d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.DescriptorPools[descriptorPool] = null
3614d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3615d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3616d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3617d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetDescriptorPool(
3618d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3619fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall        VkDescriptorPool                            descriptorPool,
3620fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall        VkDescriptorPoolResetFlags                  flags) {
3621d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3622d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    descriptorPoolObject := GetDescriptorPool(descriptorPool)
3623d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorPoolObject.device == device)
3624d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3625d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3626d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3627d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3628d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
36293fbc856120217247c72fb5ed88500000f3881c45Jesse Hallcmd VkResult vkAllocateDescriptorSets(
3630d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
36313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkDescriptorSetAllocateInfo*          pAllocateInfo,
36325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDescriptorSet*                            pDescriptorSets) {
3633d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
36343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    allocInfo := pAllocateInfo[0]
3635fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
3636d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
363703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
363803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. allocInfo.setCount) {
3639d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        setLayout := setLayouts[i]
3640d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        setLayoutObject := GetDescriptorSetLayout(setLayout)
3641d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(setLayoutObject.device == device)
3642d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3643d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
364403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    descriptorSets := pDescriptorSets[0:allocInfo.setCount]
364503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. allocInfo.setCount) {
3646d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSet := ?
3647d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSets[i] = descriptorSet
3648d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3649d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3650d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3651d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3652d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3653d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3654f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hallcmd VkResult vkFreeDescriptorSets(
3655f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        VkDevice                                    device,
3656f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        VkDescriptorPool                            descriptorPool,
365703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         descriptorSetCount,
3658f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        const VkDescriptorSet*                      pDescriptorSets) {
3659f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    deviceObject := GetDevice(device)
3660f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    descriptorPoolObject := GetDescriptorPool(descriptorPool)
3661f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall
366203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    descriptorSets := pDescriptorSets[0:descriptorSetCount]
366303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. descriptorSetCount) {
3664f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        descriptorSet := descriptorSets[i]
3665f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        descriptorSetObject := GetDescriptorSet(descriptorSet)
3666f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        assert(descriptorSetObject.device == device)
3667f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall        State.DescriptorSets[descriptorSet] = null
3668f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    }
3669f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall
3670f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall    return ?
3671f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall}
3672f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall
36735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkUpdateDescriptorSets(
3674d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3675b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        u32                                         descriptorWriteCount,
3676d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkWriteDescriptorSet*                 pDescriptorWrites,
3677b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        u32                                         descriptorCopyCount,
3678d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkCopyDescriptorSet*                  pDescriptorCopies) {
3679d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3680d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3681b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
3682b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    for i in (0 .. descriptorWriteCount) {
3683d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorWrite := descriptorWrites[i]
36843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
3685d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(descriptorWriteObject.device == device)
3686d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3687d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3688b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
3689b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    for i in (0 .. descriptorCopyCount) {
3690d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorCopy := descriptorCopies[i]
36913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
3692d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        assert(descriptorCopyObject.device == device)
3693d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
3694d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3695d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3696d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3697d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Framebuffer functions
3698d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3699d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3700d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateFramebuffer(
3701d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3702d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkFramebufferCreateInfo*              pCreateInfo,
37033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3704d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkFramebuffer*                              pFramebuffer) {
3705d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3706d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3707d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3708d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    framebuffer := ?
3709d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pFramebuffer[0] = framebuffer
3710d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3711d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3712d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3713d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3714d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3715d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
37165ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyFramebuffer(
3717d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
371803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkFramebuffer                               framebuffer,
37193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3720d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3721d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    framebufferObject := GetFramebuffer(framebuffer)
3722d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(framebufferObject.device == device)
3723d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3724d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.Framebuffers[framebuffer] = null
3725d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3726d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3727d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3728d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Renderpass functions
3729d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3730d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3731d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateRenderPass(
3732d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3733d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkRenderPassCreateInfo*               pCreateInfo,
37343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
3735d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkRenderPass*                               pRenderPass) {
3736d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3737d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3738d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3739d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderpass := ?
3740d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pRenderPass[0] = renderpass
3741d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3742d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3743d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3744d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3745d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3746d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
37475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyRenderPass(
3748d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
374903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkRenderPass                                renderPass,
37503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3751d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3752d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderPassObject := GetRenderPass(renderPass)
3753d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(renderPassObject.device == device)
3754d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3755d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    State.RenderPasses[renderPass] = null
3756d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3757d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3758606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallcmd void vkGetRenderAreaGranularity(
3759d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
3760d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkRenderPass                                renderPass,
3761d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkExtent2D*                                 pGranularity) {
3762d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3763d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderPassObject := GetRenderPass(renderPass)
3764d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3765d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    granularity := ?
3766d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pGranularity[0] = granularity
3767d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3768d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3769d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Command pool functions
3770d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3771d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkCreateCommandPool(
3772d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
37733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandPoolCreateInfo*              pCreateInfo,
37743fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator,
37753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool*                              pCommandPool) {
37763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
3777d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3778d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
37793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandPool := ?
37803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    pCommandPool[0] = commandPool
37813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
3782d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3783d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3784d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3785d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
37865ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkDestroyCommandPool(
3787d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
37883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool                               commandPool,
37893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
3790d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
37913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandPoolObject := GetCommandPool(commandPool)
37923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandPoolObject.device == device)
3793d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
37943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    State.CommandPools[commandPool] = null
3795d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3796d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3797d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetCommandPool(
3798d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
37993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool                               commandPool,
38003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPoolResetFlags                     flags) {
3801d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
38023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandPoolObject := GetCommandPool(commandPool)
38033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandPoolObject.device == device)
3804d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3805d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3806d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3807d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3808d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Command buffer functions
3809d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38103fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
38113fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
38123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
3813d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
38153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.boundObjects[as!u64(obj)] = memory
3816d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3817d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38183fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
38193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject := GetDeviceMemory(memory)
38203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    memoryObject.boundCommandBuffers[commandBuffer] = null
3821d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
38233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.boundObjects[as!u64(obj)] = null
3824d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3825d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3826d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
38273fbc856120217247c72fb5ed88500000f3881c45Jesse Hallcmd VkResult vkAllocateCommandBuffers(
3828d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
38293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBufferAllocateInfo*          pAllocateInfo,
38303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer*                            pCommandBuffers) {
38313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
3832d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    count := pAllocateInfo[0].bufferCount
38343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBuffers := pCommandBuffers[0:count]
3835fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    for i in (0 .. count) {
38363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        commandBuffer := ?
38373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        commandBuffers[i] = commandBuffer
38383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
3839fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    }
3840d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3841d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3842d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3843d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3844d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("system")
3845fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hallcmd void vkFreeCommandBuffers(
3846d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkDevice                                    device,
38473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandPool                               commandPool,
384803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         commandBufferCount,
38493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBuffer*                      pCommandBuffers) {
3850d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    deviceObject := GetDevice(device)
3851d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
38523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBuffers := pCommandBuffers[0:commandBufferCount]
385303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. commandBufferCount) {
38543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        commandBufferObject := GetCommandBuffer(commandBuffers[i])
38553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == device)
3856fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall        // TODO: iterate over boundObjects and clear memory bindings
38573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        State.CommandBuffers[commandBuffers[i]] = null
3858fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall    }
3859d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3860d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3861d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3862d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkBeginCommandBuffer(
38633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
38643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBufferBeginInfo*             pBeginInfo) {
38653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
38663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
3867d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3868d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // TODO: iterate over boundObjects and clear memory bindings
3869d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3870d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3871d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3872d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3873d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3874d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkEndCommandBuffer(
38753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer) {
38763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
3877d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3878d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3879d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3880d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3881d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3882d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd VkResult vkResetCommandBuffer(
38833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
38843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBufferResetFlags                   flags) {
38853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
3886d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3887d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // TODO: iterate over boundObjects and clear memory bindings
3888d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3889d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return ?
3890d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3891d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3892d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3893d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Command buffer building functions
3894d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3895d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3896d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindPipeline(
38973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
3898d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineBindPoint                         pipelineBindPoint,
3899d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipeline                                  pipeline) {
39003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
3901d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    pipelineObject := GetPipeline(pipeline)
39023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == pipelineObject.device)
3903d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3904d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall    queue := switch (pipelineBindPoint) {
3905d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
3906d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3907d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
39083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
3909d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3910d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3911d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
39125ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetViewport(
39133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39145ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         viewportCount,
39155ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkViewport*                           pViewports) {
39163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
39185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
3919d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
39205ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
39215ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetScissor(
39223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39235ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         scissorCount,
39245ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkRect2D*                             pScissors) {
39253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39263fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
3927d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3928d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
39305ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetLineWidth(
39313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         lineWidth) {
39333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
39355ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
3936d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
39375ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
39385ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetDepthBias(
39393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
3940a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        f32                                         depthBiasConstantFactor,
39415ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         depthBiasClamp,
3942a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        f32                                         depthBiasSlopeFactor) {
39433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
3945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3946d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3947d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
39485ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetBlendConstants(
39493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39505ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        // TODO(jessehall): apic only supports 'const' on pointer types. Using
39515ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        // an annotation as a quick hack to pass this to the template without
39525ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        // having to modify the AST and semantic model.
3953b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        @readonly f32[4]                            blendConstants) {
39543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
39565ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
3957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
39585ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
39595ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetDepthBounds(
39603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39615ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         minDepthBounds,
39625ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        f32                                         maxDepthBounds) {
39633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
3965d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3966d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3967d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
39685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetStencilCompareMask(
39693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkStencilFaceFlags                          faceMask,
397165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         compareMask) {
39723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
39745ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
3975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
39765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
39775ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetStencilWriteMask(
39783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkStencilFaceFlags                          faceMask,
398065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         writeMask) {
39813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
39835ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall}
39845ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall
39855ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall@threadSafety("app")
39865ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hallcmd void vkCmdSetStencilReference(
39873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
39885ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkStencilFaceFlags                          faceMask,
398965ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         reference) {
39903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
39913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
3992d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
3993d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
3994d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
3995d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindDescriptorSets(
39963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
3997d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineBindPoint                         pipelineBindPoint,
3998d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineLayout                            layout,
3999d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         firstSet,
400003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         descriptorSetCount,
4001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkDescriptorSet*                      pDescriptorSets,
4002d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         dynamicOffsetCount,
4003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const u32*                                  pDynamicOffsets) {
40043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4005d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
400603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    descriptorSets := pDescriptorSets[0:descriptorSetCount]
400703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    for i in (0 .. descriptorSetCount) {
4008d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSet := descriptorSets[i]
4009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        descriptorSetObject := GetDescriptorSet(descriptorSet)
40103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == descriptorSetObject.device)
4011d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4012d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4013d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
4014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. dynamicOffsetCount) {
4015d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        dynamicOffset := dynamicOffsets[i]
4016d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4017d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4018d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall    queue := switch (pipelineBindPoint) {
4019d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
4020d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
4021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
40223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
4023d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4024d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4025d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4026d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindIndexBuffer(
40273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4028d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
40295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
4030d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkIndexType                                 indexType) {
40313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4032d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
40333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4036d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4039d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4040d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4041d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBindVertexBuffers(
40423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4043d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         startBinding,
4044d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         bindingCount,
4045d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBuffer*                             pBuffers,
40465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkDeviceSize*                         pOffsets) {
40473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // TODO: check if not [startBinding:startBinding+bindingCount]
4050d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    buffers := pBuffers[0:bindingCount]
4051d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    offsets := pOffsets[0:bindingCount]
4052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. bindingCount) {
4053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        buffer := buffers[i]
4054d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        offset := offsets[i]
4055d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        bufferObject := GetBuffer(buffer)
40563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == bufferObject.device)
4057d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4059d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4060d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4062d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4063d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4064d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4065d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDraw(
40663fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4067d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         vertexCount,
40685ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         instanceCount,
40695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstVertex,
40705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstInstance) {
40713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4072d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4074d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4075d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4076d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4077d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDrawIndexed(
40783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4079d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         indexCount,
40805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         instanceCount,
40815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstIndex,
4082d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        s32                                         vertexOffset,
40835ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        u32                                         firstInstance) {
40843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4085d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
40863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4087d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4088d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4089d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4090d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDrawIndirect(
40913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4092d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
40935ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
409403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         drawCount,
4095d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         stride) {
40963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4097d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
40983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4099d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4103d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4104d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDrawIndexedIndirect(
41073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
41095ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset,
411003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         drawCount,
4111d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         stride) {
41123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4113d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
41143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4117d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4119d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4122d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDispatch(
41233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4124d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         x,
4125d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         y,
4126d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         z) {
41273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
4130d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4131d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4132d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdDispatchIndirect(
41343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    buffer,
41365ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                offset) {
41373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bufferObject := GetBuffer(buffer)
41393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == bufferObject.device)
4140d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
4142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
4144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4145d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4146d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyBuffer(
41483fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4149d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    srcBuffer,
41503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
4151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferCopy*                         pRegions) {
41533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcBufferObject := GetBuffer(srcBuffer)
41553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
41563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcBufferObject.device)
41573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
41653fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
4166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
416765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyImage(
41723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
41753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
41763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4177d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageCopy*                          pRegions) {
41793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
41813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
41823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
41833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4186d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4188d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
41903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
41913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4192d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
419365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4194d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBlitImage(
41983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
42013fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
42023fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4204d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageBlit*                          pRegions,
420523ff73fe377acb99b5ea1824d5a11320bdaee745Jesse Hall        VkFilter                                    filter) {
42063fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
42083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
42093fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
42103fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4211d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
42183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4219d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4221d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4222d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4223d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4224d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyBufferToImage(
42253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4226d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkBuffer                                    srcBuffer,
42273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
42283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4229d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4230d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferImageCopy*                    pRegions) {
42313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4232d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcBufferObject := GetBuffer(srcBuffer)
42333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
42343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcBufferObject.device)
42353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4236d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4237d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4238d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4239d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4240d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4241d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
42433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4244d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
424565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4246d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4247d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4248d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4249d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyImageToBuffer(
42503fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4251d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4252d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
42533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
4254d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4255d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkBufferImageCopy*                    pRegions) {
42563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4257d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
42583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
42593fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
42603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4261d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4262d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4263d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4264d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4265d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4266d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
42683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
4269d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
427065ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4271d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4272d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4273d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4274d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdUpdateBuffer(
42753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42763fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
42773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                dstOffset,
42785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        VkDeviceSize                                dataSize,
4279d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const u32*                                  pData) {
42803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
42823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4283d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4284d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    data := pData[0:dataSize]
4285d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
42863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
4287d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
428865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4289d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4290d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4291d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4292d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdFillBuffer(
42933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
42943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
42953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                dstOffset,
4296b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkDeviceSize                                size,
4297d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         data) {
42983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
42993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
43003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4301d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
430265ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
4303d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4304d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4305d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4306d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdClearColorImage(
43073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4308d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
4309d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               imageLayout,
4310d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkClearColorValue*                    pColor,
4311d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         rangeCount,
4312d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageSubresourceRange*              pRanges) {
43133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4314d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
43153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == imageObject.device)
4316d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4317d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    ranges := pRanges[0:rangeCount]
4318d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. rangeCount) {
4319d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        range := ranges[i]
4320d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4321d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43223fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, image, imageObject.memory)
4323d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4325d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4326d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4327d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4328d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdClearDepthStencilImage(
43293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4330d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     image,
4331d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               imageLayout,
43325ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall        const VkClearDepthStencilValue*             pDepthStencil,
4333d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         rangeCount,
4334d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageSubresourceRange*              pRanges) {
43353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4336d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    imageObject := GetImage(image)
43373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == imageObject.device)
4338d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4339d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    ranges := pRanges[0:rangeCount]
4340d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. rangeCount) {
4341d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        range := ranges[i]
4342d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4343d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, image, imageObject.memory)
4345d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4347d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4348d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4349d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4350ae38f7355fd03b777313e13586585a74e0dee05bJesse Hallcmd void vkCmdClearAttachments(
43513fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4352ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall        u32                                         attachmentCount,
4353ae38f7355fd03b777313e13586585a74e0dee05bJesse Hall        const VkClearAttachment*                    pAttachments,
4354d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         rectCount,
4355a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall        const VkClearRect*                          pRects) {
43563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4357d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4358d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    rects := pRects[0:rectCount]
4359d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. rectCount) {
4360d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        rect := rects[i]
4361d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4362d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4364d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4365d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4366d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4367d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdResolveImage(
43683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4369d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImage                                     srcImage,
4370d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkImageLayout                               srcImageLayout,
43713fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImage                                     dstImage,
43723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkImageLayout                               dstImageLayout,
4373d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         regionCount,
4374d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkImageResolve*                       pRegions) {
43753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4376d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    srcImageObject := GetImage(srcImage)
43773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstImageObject := GetImage(dstImage)
43783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == srcImageObject.device)
43793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstImageObject.device)
4380d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4381d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    regions := pRegions[0:regionCount]
4382d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. regionCount) {
4383d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        region := regions[i]
4384d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4385d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
43873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
4388d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
43893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4390d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4391d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4392d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4393d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdSetEvent(
43943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4395d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event,
4396d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        stageMask) {
43973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4398d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
43993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == eventObject.device)
4400d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4401d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4402d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4403d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdResetEvent(
44043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4405d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkEvent                                     event,
4406d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        stageMask) {
44073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4408d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    eventObject := GetEvent(event)
44093fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == eventObject.device)
4410d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4411d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4412d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4413d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdWaitEvents(
44143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4415d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         eventCount,
4416d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkEvent*                              pEvents,
4417d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        srcStageMask,
44183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkPipelineStageFlags                        dstStageMask,
44193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryBarrierCount,
44203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const void* const*                          ppMemoryBarriers) {
44213fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4422d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4423d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    events := pEvents[0:eventCount]
4424d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    for i in (0 .. eventCount) {
4425d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        event := events[i]
4426d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        eventObject := GetEvent(event)
44273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == eventObject.device)
4428d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4429d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
44313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryBarrierCount) {
44323fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
4433d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
44343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
4435d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            }
4436d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
44373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
44383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                imageObject := GetImage(imageMemoryBarrier.image)
44393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                assert(imageObject.device == commandBufferObject.device)
4440d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            }
4441d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
44423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
44433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
44443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                assert(bufferObject.device == commandBufferObject.device)
4445d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            }
4446d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        }
4447d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4448d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4449d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4450d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4451d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdPipelineBarrier(
44523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4453d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineStageFlags                        srcStageMask,
44543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkPipelineStageFlags                        dstStageMask,
4455dc6d36cb7f1d35059ae8153168e379fc925cb468Jesse Hall        VkDependencyFlags                           dependencyFlags,
44563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         memoryBarrierCount,
44573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const void* const*                          ppMemoryBarriers) {
44583fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4459d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
44603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
44613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. memoryBarrierCount) {
44623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
4463d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
44643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
4465d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            }
4466d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
44673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
44683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                imageObject := GetImage(imageMemoryBarrier.image)
44693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                assert(imageObject.device == commandBufferObject.device)
4470d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            }
4471d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
44723fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
44733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
44743fbc856120217247c72fb5ed88500000f3881c45Jesse Hall                assert(bufferObject.device == commandBufferObject.device)
4475d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall            }
4476d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        }
4477d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4478d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4479d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4480d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4481d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBeginQuery(
44823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4483d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
448465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         entry,
4485d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryControlFlags                         flags) {
44863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4487d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
44883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4489d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4490d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4491d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4492d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdEndQuery(
44933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4494d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
449565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         entry) {
44963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4497d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
44983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4499d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4500d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4501d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4502d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdResetQueryPool(
45033fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4504d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
4505d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         startQuery,
4506d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queryCount) {
45073fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4508d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
45093fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4510d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4511d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4512d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4513d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdWriteTimestamp(
45143fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
45156f39a6d1c6202b5d1bb0aa0dc9b2e130e5b73666Jesse Hall        VkPipelineStageFlagBits                     pipelineStage,
4516a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall        VkQueryPool                                 queryPool,
451765ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        u32                                         entry) {
45183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4519a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall    queryPoolObject := GetQueryPool(queryPool)
45203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
4521d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4522d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4523d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4524d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdCopyQueryPoolResults(
45253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4526d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryPool                                 queryPool,
4527d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         startQuery,
4528d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        u32                                         queryCount,
45293fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkBuffer                                    dstBuffer,
45303fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkDeviceSize                                dstOffset,
4531a9bb62b44be381292b893055cd01cdc89ba55c97Jesse Hall        VkDeviceSize                                stride,
4532d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkQueryResultFlags                          flags) {
45333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4534d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    queryPoolObject := GetQueryPool(queryPool)
45353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    dstBufferObject := GetBuffer(dstBuffer)
45363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == queryPoolObject.device)
45373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == dstBufferObject.device)
4538d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4539d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4540d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdPushConstants(
45413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4542d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkPipelineLayout                            layout,
4543d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        VkShaderStageFlags                          stageFlags,
454403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         offset,
454503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32                                         size,
4546d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const void*                                 values) {
45473fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4548d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    layoutObject := GetPipelineLayout(layout)
45493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == layoutObject.device)
4550d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4551d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4552d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4553d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdBeginRenderPass(
45543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
4555d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall        const VkRenderPassBeginInfo*                pRenderPassBegin,
455665ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        VkSubpassContents                           contents) {
45573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4558d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4559d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
45603fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == renderPassObject.device)
45613fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBufferObject.device == framebufferObject.device)
4562d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4564d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4565d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4566d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdNextSubpass(
45673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
456865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        VkSubpassContents                           contents) {
45693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4570d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4571d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4572d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@threadSafety("app")
4573d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdEndRenderPass(
45743fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer) {
45753fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
4576d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45773fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
4578d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4579d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4580d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallcmd void vkCmdExecuteCommands(
45813fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        VkCommandBuffer                             commandBuffer,
45823fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        u32                                         commandBuffersCount,
45833fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        const VkCommandBuffer*                      pCommandBuffers) {
45843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBufferObject := GetCommandBuffer(commandBuffer)
45853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall
45863fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    commandBuffers := pCommandBuffers[0:commandBuffersCount]
45873fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    for i in (0 .. commandBuffersCount) {
45883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        secondaryCommandBuffer := commandBuffers[i]
45893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
45903fbc856120217247c72fb5ed88500000f3881c45Jesse Hall        assert(commandBufferObject.device == secondaryCommandBufferObject.device)
4591d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    }
4592d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4593d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
45943e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
45951356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd void vkDestroySurfaceKHR(
45961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                                  instance,
45970e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        VkSurfaceKHR                                surface,
45980e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*                pAllocator) {
45991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
46001356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    surfaceObject := GetSurface(surface)
46011356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    assert(surfaceObject.instance == instance)
460288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
46031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    State.Surfaces[surface] = null
46041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
46051356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
46063e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4607a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
46081356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                            physicalDevice,
46091356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        u32                                         queueFamilyIndex,
4610b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkSurfaceKHR                                surface,
4611b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkBool32*                                   pSupported) {
46122818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
46132818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall
4614b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    return ?
46152818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall}
46162818f93c5bc8b186d3455a1ea2fce900e7403465Jesse Hall
46173e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4618b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4619b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkPhysicalDevice                            physicalDevice,
46201356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR                                surface,
4621b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities) {
4622b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
462388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
4624b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    surfaceCapabilities := ?
4625b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    pSurfaceCapabilities[0] = surfaceCapabilities
462688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
462788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
462888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
462988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
46303e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4631b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
4632b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkPhysicalDevice                            physicalDevice,
46331356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR                                surface,
463403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pSurfaceFormatCount,
46351356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceFormatKHR*                         pSurfaceFormats) {
4636b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
463788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
463888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    count := as!u32(?)
463903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pSurfaceFormatCount[0] = count
464088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    surfaceFormats := pSurfaceFormats[0:count]
464188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
464288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    for i in (0 .. count) {
464388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        surfaceFormat := ?
464488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        surfaceFormats[i] = surfaceFormat
464588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    }
464688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
464788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
464888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
464988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
46503e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_surface")
4651b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hallcmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
4652b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall        VkPhysicalDevice                            physicalDevice,
46531356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR                                surface,
465403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                        pPresentModeCount,
46551356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPresentModeKHR*                           pPresentModes) {
4656b00daadc165d4c3fad13b7cc4aeaa1e85e6df9a0Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
465788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
465888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    count := as!u32(?)
465903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pPresentModeCount[0] = count
466088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    presentModes := pPresentModes[0:count]
466188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
466288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    for i in (0 .. count) {
466388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        presentMode := ?
466488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        presentModes[i] = presentMode
466588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    }
466688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
466788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
466888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
466988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
46703e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
467188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkCreateSwapchainKHR(
467288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
467388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        const VkSwapchainCreateInfoKHR*          pCreateInfo,
46740e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*             pAllocator,
467588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSwapchainKHR*                          pSwapchain) {
46761356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
467788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
467888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
467988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchain := ?
468088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    pSwapchain[0] = swapchain
468188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    State.Swapchains[swapchain] = new!SwapchainObject(device: device)
468288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
468388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
468488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
468588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
46863e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
46871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd void vkDestroySwapchainKHR(
468888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
46890e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        VkSwapchainKHR                           swapchain,
46900e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*             pAllocator) {
469188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
469288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchainObject := GetSwapchain(swapchain)
469388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    assert(swapchainObject.device == device)
469488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
469588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    State.Swapchains[swapchain] = null
469688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
469788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
46983e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
469988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkGetSwapchainImagesKHR(
470088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
470188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSwapchainKHR                           swapchain,
470203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                     pSwapchainImageCount,
470388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkImage*                                 pSwapchainImages) {
470488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
470588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
470688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    count := as!u32(?)
470703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall    pSwapchainImageCount[0] = count
470888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchainImages := pSwapchainImages[0:count]
470988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
471088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    for i in (0 .. count) {
471188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        swapchainImage := ?
471288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        swapchainImages[i] = swapchainImage
47131356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        State.Images[swapchainImage] = new!ImageObject(device: device)
471488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    }
471588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
471688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
471788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
471888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
47193e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
472088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkAcquireNextImageKHR(
472188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkDevice                                 device,
472288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSwapchainKHR                           swapchain,
472388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        u64                                      timeout,
472488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkSemaphore                              semaphore,
47251356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkFence                                  fence,
472688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        u32*                                     pImageIndex) {
472788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    deviceObject := GetDevice(device)
472888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    swapchainObject := GetSwapchain(swapchain)
472988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
473088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    imageIndex := ?
473188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    pImageIndex[0] = imageIndex
473288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
473388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
473488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
473588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
47363e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_swapchain")
473788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinecmd VkResult vkQueuePresentKHR(
473888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkQueue                                  queue,
473988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine        VkPresentInfoKHR*                        pPresentInfo) {
474088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    queueObject := GetQueue(queue)
474188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
474288594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    presentInfo := ?
474388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    pPresentInfo[0] = presentInfo
474488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
474588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return ?
474688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
474788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
47483e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
47491356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
47501356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
475103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                    pPropertyCount,
47521356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayPropertiesKHR*                 pProperties) {
47531356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
47541356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
47551356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
47561356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
47573e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
4758a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
4759a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4760a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32*                                    pPropertyCount,
4761a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkDisplayPlanePropertiesKHR*            pProperties) {
4762a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4763a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4764a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4765a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
47663e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
4767a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
4768a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4769a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32*                                    pPropertyCount,
4770a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkDisplayKHR*                           pProperties) {
4771a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4772a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4773a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4774a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
47753e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
47761356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkGetDisplayModePropertiesKHR(
47771356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
47781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayKHR                            display,
477903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        u32*                                    pPropertyCount,
478003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall        VkDisplayModePropertiesKHR*             pProperties) {
47811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
47821356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
47831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
47841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
47853e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
47861356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateDisplayModeKHR(
47871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
47881356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayKHR                            display,
47891356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        const VkDisplayModeCreateInfoKHR*       pCreateInfo,
47900e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
47911356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkDisplayModeKHR*                       pMode) {
47921356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
47931356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
47941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
47951356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
47963e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
4797a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
47981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkPhysicalDevice                        physicalDevice,
4799a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkDisplayModeCreateInfoKHR              mode,
48001356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        u32                                     planeIndex,
4801a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkDisplayPlaneCapabilitiesKHR*          pCapabilities) {
48021356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
48031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
48041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
48051356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
48063e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_display")
4807a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkCreateDisplayPlaneSurfaceKHR(
4808a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkInstance                              instance,
4809a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
48100e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
4811a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkSurfaceKHR*                           pSurface) {
4812a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4813a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4814a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
48153e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface")
4816a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkCreateXlibSurfaceKHR(
48171356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
48181356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.Display*                       dpy,
48191356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.Window                         window,
48200e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
48211356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
48221356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
48231356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
48241356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
48251356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
48263e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface")
4827a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
4828a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4829a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
4830a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.Display*                       dpy,
483165ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall        platform.VisualID                       visualID) {
4832a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4833a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4834a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4835a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
48363e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xcb_surface")
48371356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateXCBSurfaceKHR(
48381356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
48391356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.xcb_connection_t*              connection,
48401356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.xcb_window_t                   window,
48410e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
48421356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
48431356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
48441356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
48451356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
48461356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
48473e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_xlib_surface")
4848a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
4849a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4850a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
4851a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.xcb_connection_t*              connection,
4852a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.xcb_visualid_t                 visual_id) {
4853a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4854a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4855a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4856a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
48573e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface")
48581356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateWaylandSurfaceKHR(
48591356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
48601356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.wl_display*                    display,
48611356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.wl_surface*                    surface,
48620e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
48631356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
48641356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
48651356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
48661356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
48671356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
48683e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_wayland_surface")
4869a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
4870a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4871a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
4872a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.wl_display*                    display) {
4873a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4874a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4875a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4876a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
48773e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface")
48781356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateMirSurfaceKHR(
48791356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
48801356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.MirConnection*                 connection,
48811356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.MirSurface*                    mirSurface,
48820e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
48831356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
48841356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
48851356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
48861356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
48871356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
48883e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_mir_surface")
4889a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
4890a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4891a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex,
4892a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        platform.MirConnection*                 connection) {
4893a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4894a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4895a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4896a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
48973e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_android_surface")
48981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateAndroidSurfaceKHR(
48991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
49000e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        platform.ANativeWindow*                 window,
49010e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
49021356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
49031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
49041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
49051356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
49061356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
49073e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface")
49081356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallcmd VkResult vkCreateWin32SurfaceKHR(
49091356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkInstance                              instance,
49101356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.HINSTANCE                      hinstance,
49111356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        platform.HWND                           hwnd,
49120e74f00af03b7e705774d0dcf69c2ba8ce7a15a8Jesse Hall        const VkAllocationCallbacks*            pAllocator,
49131356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall        VkSurfaceKHR*                           pSurface) {
49141356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    instanceObject := GetInstance(instance)
49151356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return ?
49161356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
49171356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
49183e0dc8f0d9f4de86ac61c4d3c33c3958f35e0a25Jesse Hall@extension("VK_KHR_win32_surface")
4919a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hallcmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
4920a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        VkPhysicalDevice                        physicalDevice,
4921a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall        u32                                     queueFamilyIndex) {
4922a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    physicalDeviceObject := GetPhysicalDevice(physicalDevice)    
4923a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall    return ?
4924a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall}
4925a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall
4926d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4927d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
4928d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Validation //
4929d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall////////////////
4930d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4931d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallextern void validate(string layerName, bool condition, string message)
4932d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4933d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4934d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////////////////
4935d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall// Internal State Tracking //
4936d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall/////////////////////////////
4937d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4938d27f6aad91e6cdb7a867c432f66a852acc077897Jesse HallStateObject State
4939d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4940d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class StateObject {
4941d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Dispatchable objects.
4942d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkInstance,       ref!InstanceObject)       Instances
4943d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4944d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDevice,         ref!DeviceObject)         Devices
4945d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkQueue,          ref!QueueObject)          Queues
49463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(VkCommandBuffer,  ref!CommandBufferObject)  CommandBuffers
4947d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4948d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    // Non-dispatchable objects.
4949d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDeviceMemory,             ref!DeviceMemoryObject)             DeviceMemories
4950d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkBuffer,                   ref!BufferObject)                   Buffers
4951d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkBufferView,               ref!BufferViewObject)               BufferViews
4952d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkImage,                    ref!ImageObject)                    Images
4953d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkImageView,                ref!ImageViewObject)                ImageViews
4954d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkShaderModule,             ref!ShaderModuleObject)             ShaderModules
4955d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPipeline,                 ref!PipelineObject)                 Pipelines
4956d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPipelineLayout,           ref!PipelineLayoutObject)           PipelineLayouts
4957d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkSampler,                  ref!SamplerObject)                  Samplers
4958d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDescriptorSet,            ref!DescriptorSetObject)            DescriptorSets
4959d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDescriptorSetLayout,      ref!DescriptorSetLayoutObject)      DescriptorSetLayouts
4960d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkDescriptorPool,           ref!DescriptorPoolObject)           DescriptorPools
4961d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkFence,                    ref!FenceObject)                    Fences
4962d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkSemaphore,                ref!SemaphoreObject)                Semaphores
4963d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkEvent,                    ref!EventObject)                    Events
4964d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkQueryPool,                ref!QueryPoolObject)                QueryPools
4965d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkFramebuffer,              ref!FramebufferObject)              Framebuffers
4966d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkRenderPass,               ref!RenderPassObject)               RenderPasses
4967d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(VkPipelineCache,            ref!PipelineCacheObject)            PipelineCaches
49683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(VkCommandPool,              ref!CommandPoolObject)              CommandPools
49691356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    map!(VkSurfaceKHR,               ref!SurfaceObject)                  Surfaces
497088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    map!(VkSwapchainKHR,             ref!SwapchainObject)                Swapchains
4971d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4972d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4973d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class InstanceObject {
4974d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4975d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4976d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PhysicalDeviceObject {
4977d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkInstance instance
4978d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4979d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4980d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DeviceObject {
4981d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkPhysicalDevice physicalDevice
4982d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4983d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4984d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class QueueObject {
4985d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
4986d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueueFlags  flags
4987d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4988d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
49893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@internal class CommandBufferObject {
4990d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice                  device
4991d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    map!(u64, VkDeviceMemory) boundObjects
4992d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkQueueFlags              queueFlags
4993d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
4994d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
4995d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DeviceMemoryObject {
49963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDevice                                device
49973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize                            allocationSize
49983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(u64, VkDeviceSize)                 boundObjects
49993fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    map!(VkCommandBuffer, VkCommandBuffer)  boundCommandBuffers
5000d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5001d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5002d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class BufferObject {
5003d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice              device
50043fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory        memory
50053fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize          memoryOffset
5006d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5007d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5008d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class BufferViewObject {
5009d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5010d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkBuffer      buffer
5011d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5012d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5013d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ImageObject {
5014d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice              device
50153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceMemory        memory
50163fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    VkDeviceSize          memoryOffset
5017d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5018d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5019d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ImageViewObject {
5020d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5021d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkImage       image
5022d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5023d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5024d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ShaderObject {
5025d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5026d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5027d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5028d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class ShaderModuleObject {
5029d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5030d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5031d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5032d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PipelineObject {
5033d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5034d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5035d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5036d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PipelineLayoutObject {
5037d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5038d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5039d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5040d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class SamplerObject {
5041d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5042d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5043d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5044d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DescriptorSetObject {
5045d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5046d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5047d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5048d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DescriptorSetLayoutObject {
5049d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5050d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5051d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5052d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class DescriptorPoolObject {
5053d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5054d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5055d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5056d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class FenceObject {
5057d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5058d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    bool          signaled
5059d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5060d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5061d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class SemaphoreObject {
5062d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5063d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5064d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5065d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class EventObject {
5066d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5067d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5068d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5069d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class QueryPoolObject {
5070d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5071d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5072d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5073d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class FramebufferObject {
5074d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5075d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5076d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5077d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class RenderPassObject {
5078d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5079d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5080d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5081d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall@internal class PipelineCacheObject {
5082d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5083d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5084d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
50853fbc856120217247c72fb5ed88500000f3881c45Jesse Hall@internal class CommandPoolObject {
5086d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    VkDevice      device
5087d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5088d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
50891356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall@internal class SurfaceObject {
50901356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    VkInstance    instance
50911356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
50921356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
509388594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine@internal class SwapchainObject {
509488594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    VkDevice      device
509588594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
509688594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
5097d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!InstanceObject GetInstance(VkInstance instance) {
5098d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(instance in State.Instances)
5099d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Instances[instance]
5100d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5101d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5102d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
5103d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(physicalDevice in State.PhysicalDevices)
5104d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.PhysicalDevices[physicalDevice]
5105d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5106d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5107d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DeviceObject GetDevice(VkDevice device) {
5108d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(device in State.Devices)
5109d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Devices[device]
5110d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5111d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5112d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!QueueObject GetQueue(VkQueue queue) {
5113d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queue in State.Queues)
5114d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Queues[queue]
5115d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5116d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
51173fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
51183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandBuffer in State.CommandBuffers)
51193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    return State.CommandBuffers[commandBuffer]
5120d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5121d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
51223fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
51233fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(memory in State.DeviceMemories)
51243fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    return State.DeviceMemories[memory]
5125d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5126d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5127d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!BufferObject GetBuffer(VkBuffer buffer) {
5128d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(buffer in State.Buffers)
5129d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Buffers[buffer]
5130d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5131d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5132d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
5133d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(bufferView in State.BufferViews)
5134d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.BufferViews[bufferView]
5135d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5136d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5137d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!ImageObject GetImage(VkImage image) {
5138d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(image in State.Images)
5139d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Images[image]
5140d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5141d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5142d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!ImageViewObject GetImageView(VkImageView imageView) {
5143d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(imageView in State.ImageViews)
5144d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.ImageViews[imageView]
5145d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5146d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5147d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
5148d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(shaderModule in State.ShaderModules)
5149d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.ShaderModules[shaderModule]
5150d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5151d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5152d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
5153d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipeline in State.Pipelines)
5154d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Pipelines[pipeline]
5155d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5156d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5157d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
5158d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineLayout in State.PipelineLayouts)
5159d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.PipelineLayouts[pipelineLayout]
5160d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5161d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5162d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!SamplerObject GetSampler(VkSampler sampler) {
5163d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(sampler in State.Samplers)
5164d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Samplers[sampler]
5165d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5166d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5167d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
5168d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorSet in State.DescriptorSets)
5169d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.DescriptorSets[descriptorSet]
5170d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5171d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5172d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
5173d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorSetLayout in State.DescriptorSetLayouts)
5174d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.DescriptorSetLayouts[descriptorSetLayout]
5175d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5176d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5177d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
5178d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(descriptorPool in State.DescriptorPools)
5179d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.DescriptorPools[descriptorPool]
5180d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5181d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5182d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!FenceObject GetFence(VkFence fence) {
5183d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(fence in State.Fences)
5184d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Fences[fence]
5185d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5186d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5187d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
5188d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(semaphore in State.Semaphores)
5189d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Semaphores[semaphore]
5190d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5191d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5192d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!EventObject GetEvent(VkEvent event) {
5193d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(event in State.Events)
5194d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Events[event]
5195d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5196d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5197d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
5198d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(queryPool in State.QueryPools)
5199d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.QueryPools[queryPool]
5200d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5201d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5202d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
5203d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(framebuffer in State.Framebuffers)
5204d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.Framebuffers[framebuffer]
5205d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5206d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5207d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
5208d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(renderPass in State.RenderPasses)
5209d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.RenderPasses[renderPass]
5210d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5211d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
5212d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hallmacro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
5213d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    assert(pipelineCache in State.PipelineCaches)
5214d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall    return State.PipelineCaches[pipelineCache]
5215d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall}
5216d27f6aad91e6cdb7a867c432f66a852acc077897Jesse Hall
52173fbc856120217247c72fb5ed88500000f3881c45Jesse Hallmacro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
52183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    assert(commandPool in State.CommandPools)
52193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall    return State.CommandPools[commandPool]
5220f09c6b1fe893f0d378cfd3228b10df6a448e3a1cJesse Hall}
522188594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine
52221356b0d3179254a7a27e88abb2d2500385469f14Jesse Hallmacro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
52231356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    assert(surface in State.Surfaces)
52241356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall    return State.Surfaces[surface]
52251356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall}
52261356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall
522788594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentinemacro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
522888594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    assert(swapchain in State.Swapchains)
522988594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine    return State.Swapchains[swapchain]
523088594d744093a8429030cf4f4a9ec22f25dfd500Michael Lentine}
5231d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall
5232d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hallmacro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
5233d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall    return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
5234d8bade009decc9e5bcc21396993d7a2e572a38f9Jesse Hall}
5235