blob: 1c4bb8f6b0e3593558253fba33303fbbbe511149 [file] [log] [blame]
Jesse Halld27f6aa2015-08-15 17:58:48 -07001// Copyright (c) 2015 The Khronos Group Inc.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and/or associated documentation files (the
5// "Materials"), to deal in the Materials without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Materials, and to
8// permit persons to whom the Materials are furnished to do so, subject to
9// the following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Materials.
13//
14// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20// MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
21
22import platform "platform.api"
23
24///////////////
25// Constants //
26///////////////
27
28// API version (major.minor.patch)
29define VERSION_MAJOR 0
Jesse Hall0e74f002015-11-30 11:37:59 -080030define VERSION_MINOR 205
Jesse Hallae38f732015-11-19 21:32:50 -080031define VERSION_PATCH 0
Jesse Halld27f6aa2015-08-15 17:58:48 -070032
33// API limits
Jesse Hall65ab5522015-11-30 00:07:16 -080034define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
35define VK_UUID_SIZE 16
36define VK_MAX_EXTENSION_NAME_SIZE 256
37define VK_MAX_DESCRIPTION_SIZE 256
38define VK_MAX_MEMORY_TYPES 32
39define VK_MAX_MEMORY_HEAPS 16 /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
Jesse Halld27f6aa2015-08-15 17:58:48 -070040
41// API keywords
42define VK_TRUE 1
43define VK_FALSE 0
Jesse Hall5ae3abb2015-10-08 14:00:22 -070044
45// API keyword, but needs special handling by some templates
46define NULL_HANDLE 0
Jesse Halld27f6aa2015-08-15 17:58:48 -070047
Jesse Hall0e74f002015-11-30 11:37:59 -080048@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION 23
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080049@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER 1
50@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080051
Jesse Hall0e74f002015-11-30 11:37:59 -080052@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION 66
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080053@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
54@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
Jesse Hall1356b0d2015-11-23 17:24:58 -080055
Jesse Hall0e74f002015-11-30 11:37:59 -080056@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION 19
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080057@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER 3
58@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display"
Jesse Hall1356b0d2015-11-23 17:24:58 -080059
Jesse Hall0e74f002015-11-30 11:37:59 -080060@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 8
61@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
62@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
Jesse Hall1356b0d2015-11-23 17:24:58 -080063
Jesse Hall0e74f002015-11-30 11:37:59 -080064@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION 5
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080065@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NUMBER 5
66@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME "VK_KHR_xlib_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080067
Jesse Hall0e74f002015-11-30 11:37:59 -080068@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION 5
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080069@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NUMBER 6
70@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME "VK_KHR_xcb_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080071
Jesse Hall0e74f002015-11-30 11:37:59 -080072@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION 4
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080073@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NUMBER 7
74@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME "VK_KHR_wayland_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080075
Jesse Hall0e74f002015-11-30 11:37:59 -080076@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION 4
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080077@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NUMBER 8
78@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME "VK_KHR_mir_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080079
Jesse Hall0e74f002015-11-30 11:37:59 -080080@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION 3
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080081@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NUMBER 8
82@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME "VK_KHR_android_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080083
Jesse Hall0e74f002015-11-30 11:37:59 -080084@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION 4
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080085@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NUMBER 9
86@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME "VK_KHR_win32_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080087
Jesse Halld27f6aa2015-08-15 17:58:48 -070088
89/////////////
90// Types //
91/////////////
92
Jesse Hall5ae3abb2015-10-08 14:00:22 -070093type u32 VkBool32
94type u32 VkFlags
95type u64 VkDeviceSize
96type u32 VkSampleMask
97
Jesse Halld27f6aa2015-08-15 17:58:48 -070098/// Dispatchable handle types.
99@dispatchHandle type u64 VkInstance
100@dispatchHandle type u64 VkPhysicalDevice
101@dispatchHandle type u64 VkDevice
102@dispatchHandle type u64 VkQueue
Jesse Hall3fbc8562015-11-29 22:10:52 -0800103@dispatchHandle type u64 VkCommandBuffer
Jesse Halld27f6aa2015-08-15 17:58:48 -0700104
105/// Non dispatchable handle types.
106@nonDispatchHandle type u64 VkDeviceMemory
Jesse Hall3fbc8562015-11-29 22:10:52 -0800107@nonDispatchHandle type u64 VkCommandPool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700108@nonDispatchHandle type u64 VkBuffer
109@nonDispatchHandle type u64 VkBufferView
110@nonDispatchHandle type u64 VkImage
111@nonDispatchHandle type u64 VkImageView
Jesse Halld27f6aa2015-08-15 17:58:48 -0700112@nonDispatchHandle type u64 VkShaderModule
Jesse Halld27f6aa2015-08-15 17:58:48 -0700113@nonDispatchHandle type u64 VkPipeline
114@nonDispatchHandle type u64 VkPipelineLayout
115@nonDispatchHandle type u64 VkSampler
116@nonDispatchHandle type u64 VkDescriptorSet
117@nonDispatchHandle type u64 VkDescriptorSetLayout
118@nonDispatchHandle type u64 VkDescriptorPool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700119@nonDispatchHandle type u64 VkFence
120@nonDispatchHandle type u64 VkSemaphore
121@nonDispatchHandle type u64 VkEvent
122@nonDispatchHandle type u64 VkQueryPool
123@nonDispatchHandle type u64 VkFramebuffer
124@nonDispatchHandle type u64 VkRenderPass
125@nonDispatchHandle type u64 VkPipelineCache
Jesse Hall1356b0d2015-11-23 17:24:58 -0800126
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800127@extension("VK_KHR_surface") @nonDispatchHandle type u64 VkSurfaceKHR
Jesse Hall1356b0d2015-11-23 17:24:58 -0800128
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800129@extension("VK_KHR_swapchain") @nonDispatchHandle type u64 VkSwapchainKHR
Jesse Hall1356b0d2015-11-23 17:24:58 -0800130
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800131@extension("VK_KHR_display") @nonDispatchHandle type u64 VkDisplayKHR
132@extension("VK_KHR_display") @nonDispatchHandle type u64 VkDisplayModeKHR
Jesse Halld27f6aa2015-08-15 17:58:48 -0700133
134
135/////////////
136// Enums //
137/////////////
138
139enum VkImageLayout {
140 VK_IMAGE_LAYOUT_UNDEFINED = 0x00000000, /// Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
141 VK_IMAGE_LAYOUT_GENERAL = 0x00000001, /// General layout when image can be used for any kind of access
142 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 0x00000002, /// Optimal layout when image is only used for color attachment read/write
143 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 0x00000003, /// Optimal layout when image is only used for depth/stencil attachment read/write
144 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 0x00000004, /// Optimal layout when image is used for read only depth/stencil attachment and shader access
145 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 0x00000005, /// Optimal layout when image is used for read only shader access
Jesse Hall3fbc8562015-11-29 22:10:52 -0800146 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 0x00000006, /// Optimal layout when image is used only as source of transfer operations
147 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 0x00000007, /// Optimal layout when image is used only as destination of transfer operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700148 VK_IMAGE_LAYOUT_PREINITIALIZED = 0x00000008, /// Initial layout used when the data is populated by the CPU
Jesse Hall1356b0d2015-11-23 17:24:58 -0800149
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800150 //@extension("VK_KHR_swapchain")
Jesse Hall3fbc8562015-11-29 22:10:52 -0800151 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 0xc0000802,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700152}
153
154enum VkAttachmentLoadOp {
155 VK_ATTACHMENT_LOAD_OP_LOAD = 0x00000000,
156 VK_ATTACHMENT_LOAD_OP_CLEAR = 0x00000001,
157 VK_ATTACHMENT_LOAD_OP_DONT_CARE = 0x00000002,
158}
159
160enum VkAttachmentStoreOp {
161 VK_ATTACHMENT_STORE_OP_STORE = 0x00000000,
162 VK_ATTACHMENT_STORE_OP_DONT_CARE = 0x00000001,
163}
164
165enum VkImageType {
166 VK_IMAGE_TYPE_1D = 0x00000000,
167 VK_IMAGE_TYPE_2D = 0x00000001,
168 VK_IMAGE_TYPE_3D = 0x00000002,
169}
170
171enum VkImageTiling {
Jesse Hallc7467b72015-11-29 21:05:26 -0800172 VK_IMAGE_TILING_OPTIMAL = 0x00000000,
173 VK_IMAGE_TILING_LINEAR = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700174}
175
176enum VkImageViewType {
177 VK_IMAGE_VIEW_TYPE_1D = 0x00000000,
178 VK_IMAGE_VIEW_TYPE_2D = 0x00000001,
179 VK_IMAGE_VIEW_TYPE_3D = 0x00000002,
180 VK_IMAGE_VIEW_TYPE_CUBE = 0x00000003,
181 VK_IMAGE_VIEW_TYPE_1D_ARRAY = 0x00000004,
182 VK_IMAGE_VIEW_TYPE_2D_ARRAY = 0x00000005,
183 VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 0x00000006,
184}
185
Jesse Hall3fbc8562015-11-29 22:10:52 -0800186enum VkCommandBufferLevel {
187 VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0x00000000,
188 VK_COMMAND_BUFFER_LEVEL_SECONDARY = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700189}
190
Jesse Hall65ab5522015-11-30 00:07:16 -0800191enum VkComponentSwizzle {
192 VK_COMPONENT_SWIZZLE_IDENTITY = 0x00000000,
193 VK_COMPONENT_SWIZZLE_ZERO = 0x00000001,
194 VK_COMPONENT_SWIZZLE_ONE = 0x00000002,
195 VK_COMPONENT_SWIZZLE_R = 0x00000003,
196 VK_COMPONENT_SWIZZLE_G = 0x00000004,
197 VK_COMPONENT_SWIZZLE_B = 0x00000005,
198 VK_COMPONENT_SWIZZLE_A = 0x00000006,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700199}
200
201enum VkDescriptorType {
202 VK_DESCRIPTOR_TYPE_SAMPLER = 0x00000000,
203 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 0x00000001,
204 VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 0x00000002,
205 VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 0x00000003,
206 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 0x00000004,
207 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 0x00000005,
208 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 0x00000006,
209 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 0x00000007,
210 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 0x00000008,
211 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 0x00000009,
212 VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 0x0000000a,
213}
214
Jesse Halld27f6aa2015-08-15 17:58:48 -0700215enum VkQueryType {
216 VK_QUERY_TYPE_OCCLUSION = 0x00000000,
217 VK_QUERY_TYPE_PIPELINE_STATISTICS = 0x00000001, /// Optional
Jesse Halla3a7a1d2015-11-24 11:37:23 -0800218 VK_QUERY_TYPE_TIMESTAMP = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700219}
220
Jesse Halld27f6aa2015-08-15 17:58:48 -0700221enum VkBorderColor {
222 VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000,
223 VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 0x00000001,
224 VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 0x00000002,
225 VK_BORDER_COLOR_INT_OPAQUE_BLACK = 0x00000003,
226 VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 0x00000004,
227 VK_BORDER_COLOR_INT_OPAQUE_WHITE = 0x00000005,
228}
229
230enum VkPipelineBindPoint {
Jesse Hallc7467b72015-11-29 21:05:26 -0800231 VK_PIPELINE_BIND_POINT_GRAPHICS = 0x00000000,
232 VK_PIPELINE_BIND_POINT_COMPUTE = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700233}
234
235enum VkPrimitiveTopology {
236 VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0x00000000,
237 VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 0x00000001,
238 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 0x00000002,
239 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
240 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
241 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 0x00000005,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800242 VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 0x00000006,
243 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 0x00000007,
244 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 0x00000008,
245 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 0x00000009,
Jesse Hall091ed9e2015-11-30 00:55:29 -0800246 VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 0x0000000a,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700247}
248
249enum VkSharingMode {
250 VK_SHARING_MODE_EXCLUSIVE = 0x00000000,
251 VK_SHARING_MODE_CONCURRENT = 0x00000001,
252}
253
254enum VkIndexType {
255 VK_INDEX_TYPE_UINT16 = 0x00000000,
256 VK_INDEX_TYPE_UINT32 = 0x00000001,
257}
258
Jesse Hall23ff73f2015-11-29 14:36:39 -0800259enum VkFilter {
260 VK_FILTER_NEAREST = 0x00000000,
261 VK_FILTER_LINEAR = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700262}
263
Jesse Hall23ff73f2015-11-29 14:36:39 -0800264enum VkSamplerMipmapMode {
265 VK_SAMPLER_MIPMAP_MODE_BASE = 0x00000000, /// Always choose base level
266 VK_SAMPLER_MIPMAP_MODE_NEAREST = 0x00000001, /// Choose nearest mip level
267 VK_SAMPLER_MIPMAP_MODE_LINEAR = 0x00000002, /// Linear filter between mip levels
Jesse Halld27f6aa2015-08-15 17:58:48 -0700268}
269
Jesse Hall23ff73f2015-11-29 14:36:39 -0800270enum VkSamplerAddressMode {
Jesse Hallc7467b72015-11-29 21:05:26 -0800271 VK_SAMPLER_ADDRESS_MODE_REPEAT = 0x00000000,
272 VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 0x00000001,
273 VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 0x00000002,
274 VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 0x00000003,
275 VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700276}
277
278enum VkCompareOp {
279 VK_COMPARE_OP_NEVER = 0x00000000,
280 VK_COMPARE_OP_LESS = 0x00000001,
281 VK_COMPARE_OP_EQUAL = 0x00000002,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800282 VK_COMPARE_OP_LESS_OR_EQUAL = 0x00000003,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700283 VK_COMPARE_OP_GREATER = 0x00000004,
284 VK_COMPARE_OP_NOT_EQUAL = 0x00000005,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800285 VK_COMPARE_OP_GREATER_OR_EQUAL = 0x00000006,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700286 VK_COMPARE_OP_ALWAYS = 0x00000007,
287}
288
Jesse Hall65ab5522015-11-30 00:07:16 -0800289enum VkPolygonMode {
290 VK_POLYGON_MODE_FILL = 0x00000000,
291 VK_POLYGON_MODE_LINE = 0x00000001,
292 VK_POLYGON_MODE_POINT = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700293}
294
295enum VkFrontFace {
Jesse Hall3fbc8562015-11-29 22:10:52 -0800296 VK_FRONT_FACE_COUNTER_CLOCKWISE = 0x00000000,
297 VK_FRONT_FACE_CLOCKWISE = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700298}
299
Jesse Hall65ab5522015-11-30 00:07:16 -0800300enum VkBlendFactor {
301 VK_BLEND_FACTOR_ZERO = 0x00000000,
302 VK_BLEND_FACTOR_ONE = 0x00000001,
303 VK_BLEND_FACTOR_SRC_COLOR = 0x00000002,
304 VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 0x00000003,
305 VK_BLEND_FACTOR_DST_COLOR = 0x00000004,
306 VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 0x00000005,
307 VK_BLEND_FACTOR_SRC_ALPHA = 0x00000006,
308 VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 0x00000007,
309 VK_BLEND_FACTOR_DST_ALPHA = 0x00000008,
310 VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 0x00000009,
311 VK_BLEND_FACTOR_CONSTANT_COLOR = 0x0000000a,
312 VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
313 VK_BLEND_FACTOR_CONSTANT_ALPHA = 0x0000000c,
314 VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
315 VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 0x0000000e,
316 VK_BLEND_FACTOR_SRC1_COLOR = 0x0000000f,
317 VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 0x00000010,
318 VK_BLEND_FACTOR_SRC1_ALPHA = 0x00000011,
319 VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 0x00000012,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700320}
321
322enum VkBlendOp {
323 VK_BLEND_OP_ADD = 0x00000000,
324 VK_BLEND_OP_SUBTRACT = 0x00000001,
325 VK_BLEND_OP_REVERSE_SUBTRACT = 0x00000002,
326 VK_BLEND_OP_MIN = 0x00000003,
327 VK_BLEND_OP_MAX = 0x00000004,
328}
329
330enum VkStencilOp {
331 VK_STENCIL_OP_KEEP = 0x00000000,
332 VK_STENCIL_OP_ZERO = 0x00000001,
333 VK_STENCIL_OP_REPLACE = 0x00000002,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800334 VK_STENCIL_OP_INCREMENT_AND_CLAMP = 0x00000003,
335 VK_STENCIL_OP_DECREMENT_AND_CLAMP = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700336 VK_STENCIL_OP_INVERT = 0x00000005,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800337 VK_STENCIL_OP_INCREMENT_AND_WRAP = 0x00000006,
338 VK_STENCIL_OP_DECREMENT_AND_WRAP = 0x00000007,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700339}
340
341enum VkLogicOp {
342 VK_LOGIC_OP_CLEAR = 0x00000000,
343 VK_LOGIC_OP_AND = 0x00000001,
344 VK_LOGIC_OP_AND_REVERSE = 0x00000002,
345 VK_LOGIC_OP_COPY = 0x00000003,
346 VK_LOGIC_OP_AND_INVERTED = 0x00000004,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800347 VK_LOGIC_OP_NO_OP = 0x00000005,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700348 VK_LOGIC_OP_XOR = 0x00000006,
349 VK_LOGIC_OP_OR = 0x00000007,
350 VK_LOGIC_OP_NOR = 0x00000008,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800351 VK_LOGIC_OP_EQUIVALENT = 0x00000009,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700352 VK_LOGIC_OP_INVERT = 0x0000000a,
353 VK_LOGIC_OP_OR_REVERSE = 0x0000000b,
354 VK_LOGIC_OP_COPY_INVERTED = 0x0000000c,
355 VK_LOGIC_OP_OR_INVERTED = 0x0000000d,
356 VK_LOGIC_OP_NAND = 0x0000000e,
357 VK_LOGIC_OP_SET = 0x0000000f,
358}
359
Jesse Hall3fbc8562015-11-29 22:10:52 -0800360enum VkSystemAllocationScope {
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800361 VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0x00000000,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800362 VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 0x00000001,
363 VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 0x00000002,
364 VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 0x00000003,
365 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 0x00000004,
Jesse Hall03b6fe12015-11-24 12:44:21 -0800366}
367
Jesse Hall3fbc8562015-11-29 22:10:52 -0800368enum VkInternalAllocationType {
369 VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0x00000000,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700370}
371
372enum VkPhysicalDeviceType {
373 VK_PHYSICAL_DEVICE_TYPE_OTHER = 0x00000000,
374 VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 0x00000001,
375 VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 0x00000002,
376 VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 0x00000003,
377 VK_PHYSICAL_DEVICE_TYPE_CPU = 0x00000004,
378}
379
Jesse Hall65ab5522015-11-30 00:07:16 -0800380enum VkVertexInputRate {
381 VK_VERTEX_INPUT_RATE_VERTEX = 0x00000000,
382 VK_VERTEX_INPUT_RATE_INSTANCE = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700383}
384
385/// Vulkan format definitions
386enum VkFormat {
387 VK_FORMAT_UNDEFINED = 0x00000000,
388 VK_FORMAT_R4G4_UNORM = 0x00000001,
389 VK_FORMAT_R4G4_USCALED = 0x00000002,
390 VK_FORMAT_R4G4B4A4_UNORM = 0x00000003,
391 VK_FORMAT_R4G4B4A4_USCALED = 0x00000004,
392 VK_FORMAT_R5G6B5_UNORM = 0x00000005,
393 VK_FORMAT_R5G6B5_USCALED = 0x00000006,
394 VK_FORMAT_R5G5B5A1_UNORM = 0x00000007,
395 VK_FORMAT_R5G5B5A1_USCALED = 0x00000008,
396 VK_FORMAT_R8_UNORM = 0x00000009,
397 VK_FORMAT_R8_SNORM = 0x0000000A,
398 VK_FORMAT_R8_USCALED = 0x0000000B,
399 VK_FORMAT_R8_SSCALED = 0x0000000C,
400 VK_FORMAT_R8_UINT = 0x0000000D,
401 VK_FORMAT_R8_SINT = 0x0000000E,
402 VK_FORMAT_R8_SRGB = 0x0000000F,
403 VK_FORMAT_R8G8_UNORM = 0x00000010,
404 VK_FORMAT_R8G8_SNORM = 0x00000011,
405 VK_FORMAT_R8G8_USCALED = 0x00000012,
406 VK_FORMAT_R8G8_SSCALED = 0x00000013,
407 VK_FORMAT_R8G8_UINT = 0x00000014,
408 VK_FORMAT_R8G8_SINT = 0x00000015,
409 VK_FORMAT_R8G8_SRGB = 0x00000016,
410 VK_FORMAT_R8G8B8_UNORM = 0x00000017,
411 VK_FORMAT_R8G8B8_SNORM = 0x00000018,
412 VK_FORMAT_R8G8B8_USCALED = 0x00000019,
413 VK_FORMAT_R8G8B8_SSCALED = 0x0000001A,
414 VK_FORMAT_R8G8B8_UINT = 0x0000001B,
415 VK_FORMAT_R8G8B8_SINT = 0x0000001C,
416 VK_FORMAT_R8G8B8_SRGB = 0x0000001D,
417 VK_FORMAT_R8G8B8A8_UNORM = 0x0000001E,
418 VK_FORMAT_R8G8B8A8_SNORM = 0x0000001F,
419 VK_FORMAT_R8G8B8A8_USCALED = 0x00000020,
420 VK_FORMAT_R8G8B8A8_SSCALED = 0x00000021,
421 VK_FORMAT_R8G8B8A8_UINT = 0x00000022,
422 VK_FORMAT_R8G8B8A8_SINT = 0x00000023,
423 VK_FORMAT_R8G8B8A8_SRGB = 0x00000024,
424 VK_FORMAT_R10G10B10A2_UNORM = 0x00000025,
425 VK_FORMAT_R10G10B10A2_SNORM = 0x00000026,
426 VK_FORMAT_R10G10B10A2_USCALED = 0x00000027,
427 VK_FORMAT_R10G10B10A2_SSCALED = 0x00000028,
428 VK_FORMAT_R10G10B10A2_UINT = 0x00000029,
429 VK_FORMAT_R10G10B10A2_SINT = 0x0000002A,
430 VK_FORMAT_R16_UNORM = 0x0000002B,
431 VK_FORMAT_R16_SNORM = 0x0000002C,
432 VK_FORMAT_R16_USCALED = 0x0000002D,
433 VK_FORMAT_R16_SSCALED = 0x0000002E,
434 VK_FORMAT_R16_UINT = 0x0000002F,
435 VK_FORMAT_R16_SINT = 0x00000030,
436 VK_FORMAT_R16_SFLOAT = 0x00000031,
437 VK_FORMAT_R16G16_UNORM = 0x00000032,
438 VK_FORMAT_R16G16_SNORM = 0x00000033,
439 VK_FORMAT_R16G16_USCALED = 0x00000034,
440 VK_FORMAT_R16G16_SSCALED = 0x00000035,
441 VK_FORMAT_R16G16_UINT = 0x00000036,
442 VK_FORMAT_R16G16_SINT = 0x00000037,
443 VK_FORMAT_R16G16_SFLOAT = 0x00000038,
444 VK_FORMAT_R16G16B16_UNORM = 0x00000039,
445 VK_FORMAT_R16G16B16_SNORM = 0x0000003A,
446 VK_FORMAT_R16G16B16_USCALED = 0x0000003B,
447 VK_FORMAT_R16G16B16_SSCALED = 0x0000003C,
448 VK_FORMAT_R16G16B16_UINT = 0x0000003D,
449 VK_FORMAT_R16G16B16_SINT = 0x0000003E,
450 VK_FORMAT_R16G16B16_SFLOAT = 0x0000003F,
451 VK_FORMAT_R16G16B16A16_UNORM = 0x00000040,
452 VK_FORMAT_R16G16B16A16_SNORM = 0x00000041,
453 VK_FORMAT_R16G16B16A16_USCALED = 0x00000042,
454 VK_FORMAT_R16G16B16A16_SSCALED = 0x00000043,
455 VK_FORMAT_R16G16B16A16_UINT = 0x00000044,
456 VK_FORMAT_R16G16B16A16_SINT = 0x00000045,
457 VK_FORMAT_R16G16B16A16_SFLOAT = 0x00000046,
458 VK_FORMAT_R32_UINT = 0x00000047,
459 VK_FORMAT_R32_SINT = 0x00000048,
460 VK_FORMAT_R32_SFLOAT = 0x00000049,
461 VK_FORMAT_R32G32_UINT = 0x0000004A,
462 VK_FORMAT_R32G32_SINT = 0x0000004B,
463 VK_FORMAT_R32G32_SFLOAT = 0x0000004C,
464 VK_FORMAT_R32G32B32_UINT = 0x0000004D,
465 VK_FORMAT_R32G32B32_SINT = 0x0000004E,
466 VK_FORMAT_R32G32B32_SFLOAT = 0x0000004F,
467 VK_FORMAT_R32G32B32A32_UINT = 0x00000050,
468 VK_FORMAT_R32G32B32A32_SINT = 0x00000051,
469 VK_FORMAT_R32G32B32A32_SFLOAT = 0x00000052,
470 VK_FORMAT_R64_SFLOAT = 0x00000053,
471 VK_FORMAT_R64G64_SFLOAT = 0x00000054,
472 VK_FORMAT_R64G64B64_SFLOAT = 0x00000055,
473 VK_FORMAT_R64G64B64A64_SFLOAT = 0x00000056,
474 VK_FORMAT_R11G11B10_UFLOAT = 0x00000057,
475 VK_FORMAT_R9G9B9E5_UFLOAT = 0x00000058,
476 VK_FORMAT_D16_UNORM = 0x00000059,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700477 VK_FORMAT_D24_UNORM_X8 = 0x0000005A,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700478 VK_FORMAT_D32_SFLOAT = 0x0000005B,
479 VK_FORMAT_S8_UINT = 0x0000005C,
480 VK_FORMAT_D16_UNORM_S8_UINT = 0x0000005D,
481 VK_FORMAT_D24_UNORM_S8_UINT = 0x0000005E,
482 VK_FORMAT_D32_SFLOAT_S8_UINT = 0x0000005F,
483 VK_FORMAT_BC1_RGB_UNORM = 0x00000060,
484 VK_FORMAT_BC1_RGB_SRGB = 0x00000061,
485 VK_FORMAT_BC1_RGBA_UNORM = 0x00000062,
486 VK_FORMAT_BC1_RGBA_SRGB = 0x00000063,
487 VK_FORMAT_BC2_UNORM = 0x00000064,
488 VK_FORMAT_BC2_SRGB = 0x00000065,
489 VK_FORMAT_BC3_UNORM = 0x00000066,
490 VK_FORMAT_BC3_SRGB = 0x00000067,
491 VK_FORMAT_BC4_UNORM = 0x00000068,
492 VK_FORMAT_BC4_SNORM = 0x00000069,
493 VK_FORMAT_BC5_UNORM = 0x0000006A,
494 VK_FORMAT_BC5_SNORM = 0x0000006B,
495 VK_FORMAT_BC6H_UFLOAT = 0x0000006C,
496 VK_FORMAT_BC6H_SFLOAT = 0x0000006D,
497 VK_FORMAT_BC7_UNORM = 0x0000006E,
498 VK_FORMAT_BC7_SRGB = 0x0000006F,
499 VK_FORMAT_ETC2_R8G8B8_UNORM = 0x00000070,
500 VK_FORMAT_ETC2_R8G8B8_SRGB = 0x00000071,
501 VK_FORMAT_ETC2_R8G8B8A1_UNORM = 0x00000072,
502 VK_FORMAT_ETC2_R8G8B8A1_SRGB = 0x00000073,
503 VK_FORMAT_ETC2_R8G8B8A8_UNORM = 0x00000074,
504 VK_FORMAT_ETC2_R8G8B8A8_SRGB = 0x00000075,
505 VK_FORMAT_EAC_R11_UNORM = 0x00000076,
506 VK_FORMAT_EAC_R11_SNORM = 0x00000077,
507 VK_FORMAT_EAC_R11G11_UNORM = 0x00000078,
508 VK_FORMAT_EAC_R11G11_SNORM = 0x00000079,
509 VK_FORMAT_ASTC_4x4_UNORM = 0x0000007A,
510 VK_FORMAT_ASTC_4x4_SRGB = 0x0000007B,
511 VK_FORMAT_ASTC_5x4_UNORM = 0x0000007C,
512 VK_FORMAT_ASTC_5x4_SRGB = 0x0000007D,
513 VK_FORMAT_ASTC_5x5_UNORM = 0x0000007E,
514 VK_FORMAT_ASTC_5x5_SRGB = 0x0000007F,
515 VK_FORMAT_ASTC_6x5_UNORM = 0x00000080,
516 VK_FORMAT_ASTC_6x5_SRGB = 0x00000081,
517 VK_FORMAT_ASTC_6x6_UNORM = 0x00000082,
518 VK_FORMAT_ASTC_6x6_SRGB = 0x00000083,
519 VK_FORMAT_ASTC_8x5_UNORM = 0x00000084,
520 VK_FORMAT_ASTC_8x5_SRGB = 0x00000085,
521 VK_FORMAT_ASTC_8x6_UNORM = 0x00000086,
522 VK_FORMAT_ASTC_8x6_SRGB = 0x00000087,
523 VK_FORMAT_ASTC_8x8_UNORM = 0x00000088,
524 VK_FORMAT_ASTC_8x8_SRGB = 0x00000089,
525 VK_FORMAT_ASTC_10x5_UNORM = 0x0000008A,
526 VK_FORMAT_ASTC_10x5_SRGB = 0x0000008B,
527 VK_FORMAT_ASTC_10x6_UNORM = 0x0000008C,
528 VK_FORMAT_ASTC_10x6_SRGB = 0x0000008D,
529 VK_FORMAT_ASTC_10x8_UNORM = 0x0000008E,
530 VK_FORMAT_ASTC_10x8_SRGB = 0x0000008F,
531 VK_FORMAT_ASTC_10x10_UNORM = 0x00000090,
532 VK_FORMAT_ASTC_10x10_SRGB = 0x00000091,
533 VK_FORMAT_ASTC_12x10_UNORM = 0x00000092,
534 VK_FORMAT_ASTC_12x10_SRGB = 0x00000093,
535 VK_FORMAT_ASTC_12x12_UNORM = 0x00000094,
536 VK_FORMAT_ASTC_12x12_SRGB = 0x00000095,
537 VK_FORMAT_B4G4R4A4_UNORM = 0x00000096,
538 VK_FORMAT_B5G5R5A1_UNORM = 0x00000097,
539 VK_FORMAT_B5G6R5_UNORM = 0x00000098,
540 VK_FORMAT_B5G6R5_USCALED = 0x00000099,
541 VK_FORMAT_B8G8R8_UNORM = 0x0000009A,
542 VK_FORMAT_B8G8R8_SNORM = 0x0000009B,
543 VK_FORMAT_B8G8R8_USCALED = 0x0000009C,
544 VK_FORMAT_B8G8R8_SSCALED = 0x0000009D,
545 VK_FORMAT_B8G8R8_UINT = 0x0000009E,
546 VK_FORMAT_B8G8R8_SINT = 0x0000009F,
547 VK_FORMAT_B8G8R8_SRGB = 0x000000A0,
548 VK_FORMAT_B8G8R8A8_UNORM = 0x000000A1,
549 VK_FORMAT_B8G8R8A8_SNORM = 0x000000A2,
550 VK_FORMAT_B8G8R8A8_USCALED = 0x000000A3,
551 VK_FORMAT_B8G8R8A8_SSCALED = 0x000000A4,
552 VK_FORMAT_B8G8R8A8_UINT = 0x000000A5,
553 VK_FORMAT_B8G8R8A8_SINT = 0x000000A6,
554 VK_FORMAT_B8G8R8A8_SRGB = 0x000000A7,
555 VK_FORMAT_B10G10R10A2_UNORM = 0x000000A8,
556 VK_FORMAT_B10G10R10A2_SNORM = 0x000000A9,
557 VK_FORMAT_B10G10R10A2_USCALED = 0x000000AA,
558 VK_FORMAT_B10G10R10A2_SSCALED = 0x000000AB,
559 VK_FORMAT_B10G10R10A2_UINT = 0x000000AC,
560 VK_FORMAT_B10G10R10A2_SINT = 0x000000AD,
561}
562
Jesse Halld27f6aa2015-08-15 17:58:48 -0700563/// Structure type enumerant
564enum VkStructureType {
565 VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
Jesse Hallc7467b72015-11-29 21:05:26 -0800566 VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
567 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
568 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
569 VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
570 VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 5,
571 VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
572 VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
573 VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
574 VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700575 VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
Jesse Hallc7467b72015-11-29 21:05:26 -0800576 VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
577 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
578 VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
579 VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
580 VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
581 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800582 VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
583 VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
584 VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
585 VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
586 VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
587 VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
588 VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
589 VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
590 VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
591 VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
592 VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
593 VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
594 VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
595 VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
596 VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
597 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
598 VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
599 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 34,
600 VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
601 VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
602 VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
603 VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
604 VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
605 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO = 40,
606 VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 41,
607 VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 42,
608 VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 43,
609 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 44,
610 VK_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
611 VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 46,
612 VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 47,
Jesse Hall1356b0d2015-11-23 17:24:58 -0800613
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800614 //@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800615 VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0xc0000801,
616
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800617 //@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800618 VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xc0000c00,
Jesse Halla6429252015-11-29 18:59:42 -0800619 VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 0xc0000c01,
Jesse Hall1356b0d2015-11-23 17:24:58 -0800620
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800621 //@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800622 VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR = 0xc0001000,
623 VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR = 0xc0001001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700624}
625
Jesse Hall65ab5522015-11-30 00:07:16 -0800626enum VkSubpassContents {
627 VK_SUBPASS_CONTENTS_INLINE = 0x00000000,
628 VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700629}
630
Jesse Hall091ed9e2015-11-30 00:55:29 -0800631@lastUnused(-10)
Jesse Halld27f6aa2015-08-15 17:58:48 -0700632/// Error and return codes
633enum VkResult {
634 // Return codes for successful operation execution (positive values)
635 VK_SUCCESS = 0x00000000,
Jesse Halla15a4bf2015-11-19 22:48:02 -0800636 VK_NOT_READY = 0x00000001,
637 VK_TIMEOUT = 0x00000002,
638 VK_EVENT_SET = 0x00000003,
639 VK_EVENT_RESET = 0x00000004,
640 VK_INCOMPLETE = 0x00000005,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700641
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800642 //@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800643 VK_SUBOPTIMAL_KHR = 0x40000403,
644
Jesse Halld27f6aa2015-08-15 17:58:48 -0700645 // Error codes (negative values)
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700646 VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF,
647 VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700648 VK_ERROR_INITIALIZATION_FAILED = 0xFFFFFFFD,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700649 VK_ERROR_DEVICE_LOST = 0xFFFFFFFC,
650 VK_ERROR_MEMORY_MAP_FAILED = 0xFFFFFFFB,
651 VK_ERROR_LAYER_NOT_PRESENT = 0xFFFFFFFA,
652 VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9,
Jesse Hall606a54e2015-11-19 22:17:28 -0800653 VK_ERROR_FEATURE_NOT_PRESENT = 0xFFFFFFF8,
654 VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF7,
Jesse Hall091ed9e2015-11-30 00:55:29 -0800655 VK_ERROR_TOO_MANY_OBJECTS = 0xFFFFFFF6,
Jesse Halla9e57032015-11-30 01:03:10 -0800656 VK_ERROR_FORMAT_NOT_SUPPORTED = 0xFFFFFFF5,
Jesse Hall1356b0d2015-11-23 17:24:58 -0800657
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800658 //@extension("VK_KHR_surface")
Jesse Halla6429252015-11-29 18:59:42 -0800659 VK_ERROR_SURFACE_LOST_KHR = 0xC0000400,
660
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800661 //@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800662 VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
663
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800664 //@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800665 VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001002,
666
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800667 //@extension("VK_KHR_android_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800668 VK_ERROR_INVALID_ANDROID_WINDOW_KHR = 0xC002400,
669 VK_ERROR_ANDROID_WINDOW_IN_USE_KHR = 0xC002401,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700670}
671
672enum VkDynamicState {
673 VK_DYNAMIC_STATE_VIEWPORT = 0x00000000,
674 VK_DYNAMIC_STATE_SCISSOR = 0x00000001,
675 VK_DYNAMIC_STATE_LINE_WIDTH = 0x00000002,
676 VK_DYNAMIC_STATE_DEPTH_BIAS = 0x00000003,
677 VK_DYNAMIC_STATE_BLEND_CONSTANTS = 0x00000004,
678 VK_DYNAMIC_STATE_DEPTH_BOUNDS = 0x00000005,
679 VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 0x00000006,
680 VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 0x00000007,
681 VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700682}
683
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800684@extension("VK_KHR_surface")
Michael Lentine88594d72015-11-12 12:49:45 -0800685enum VkSurfaceTransformKHR {
686 VK_SURFACE_TRANSFORM_NONE_KHR = 0x00000000,
687 VK_SURFACE_TRANSFORM_ROT90_KHR = 0x00000001,
688 VK_SURFACE_TRANSFORM_ROT180_KHR = 0x00000002,
689 VK_SURFACE_TRANSFORM_ROT270_KHR = 0x00000003,
690 VK_SURFACE_TRANSFORM_HMIRROR_KHR = 0x00000004,
691 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 0x00000005,
692 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 0x00000006,
693 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 0x00000007,
694 VK_SURFACE_TRANSFORM_INHERIT_KHR = 0x00000008,
695}
696
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800697@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -0800698enum VkPresentModeKHR {
699 VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000,
700 VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001,
701 VK_PRESENT_MODE_FIFO_KHR = 0x00000002,
Jesse Hall03b6fe12015-11-24 12:44:21 -0800702 VK_PRESENT_MODE_FIFO_RELAXED_KHR = 0x00000003,
Michael Lentine88594d72015-11-12 12:49:45 -0800703}
704
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800705@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -0800706enum VkColorSpaceKHR {
707 VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
708}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700709
710/////////////////
711// Bitfields //
712/////////////////
713
Jesse Halld27f6aa2015-08-15 17:58:48 -0700714/// Queue capabilities
Jesse Halld8bade02015-11-24 10:24:18 -0800715type VkFlags VkQueueFlags
716bitfield VkQueueFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700717 VK_QUEUE_GRAPHICS_BIT = 0x00000001, /// Queue supports graphics operations
718 VK_QUEUE_COMPUTE_BIT = 0x00000002, /// Queue supports compute operations
Jesse Hall65ab5522015-11-30 00:07:16 -0800719 VK_QUEUE_TRANSFER_BIT = 0x00000004, /// Queue supports transfer operations
Jesse Hallb00daad2015-11-29 19:46:20 -0800720 VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, /// Queue supports sparse resource memory management operations
Jesse Halld27f6aa2015-08-15 17:58:48 -0700721}
722
723/// Memory properties passed into vkAllocMemory().
Jesse Halld8bade02015-11-24 10:24:18 -0800724type VkFlags VkMemoryPropertyFlags
725bitfield VkMemoryPropertyFlagBits {
Jesse Halld1af8122015-11-29 23:50:38 -0800726 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
727 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
728 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
729 VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
730 VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700731}
732
733/// Memory heap flags
Jesse Halld8bade02015-11-24 10:24:18 -0800734type VkFlags VkMemoryHeapFlags
735bitfield VkMemoryHeapFlagBits {
Jesse Halld1af8122015-11-29 23:50:38 -0800736 VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700737}
738
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800739/// Access flags
740type VkFlags VkAccessFlags
741bitfield VkAccessFlagBits {
742 VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
743 VK_ACCESS_INDEX_READ_BIT = 0x00000002,
744 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
745 VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
746 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
747 VK_ACCESS_SHADER_READ_BIT = 0x00000020,
748 VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
749 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
750 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
751 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
752 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
753 VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
754 VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
755 VK_ACCESS_HOST_READ_BIT = 0x00002000,
756 VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
757 VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
758 VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700759}
760
761/// Buffer usage flags
Jesse Halld8bade02015-11-24 10:24:18 -0800762type VkFlags VkBufferUsageFlags
763bitfield VkBufferUsageFlagBits {
Jesse Hall3fbc8562015-11-29 22:10:52 -0800764 VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001, /// Can be used as a source of transfer operations
765 VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002, /// Can be used as a destination of transfer operations
Jesse Halld27f6aa2015-08-15 17:58:48 -0700766 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, /// Can be used as TBO
767 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, /// Can be used as IBO
768 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, /// Can be used as UBO
769 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, /// Can be used as SSBO
770 VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, /// Can be used as source of fixed function index fetch (index buffer)
771 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, /// Can be used as source of fixed function vertex fetch (VBO)
772 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
773}
774
775/// Buffer creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800776type VkFlags VkBufferCreateFlags
777bitfield VkBufferCreateFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700778 VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Buffer should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700779 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Buffer should support sparse backing with partial residency
780 VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
781}
782
783/// Shader stage flags
Jesse Halld8bade02015-11-24 10:24:18 -0800784type VkFlags VkShaderStageFlags
785bitfield VkShaderStageFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700786 VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
Jesse Hallae38f732015-11-19 21:32:50 -0800787 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
788 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700789 VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
790 VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
791 VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
Jesse Hallc7467b72015-11-29 21:05:26 -0800792 VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700793
794 VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
795}
796
Jesse Hallfbf97b02015-11-20 14:17:03 -0800797/// Descriptor pool create flags
Jesse Halld8bade02015-11-24 10:24:18 -0800798type VkFlags VkDescriptorPoolCreateFlags
799bitfield VkDescriptorPoolCreateFlagBits {
Jesse Hallfbf97b02015-11-20 14:17:03 -0800800 VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
801}
802
803/// Descriptor pool reset flags
Jesse Halld8bade02015-11-24 10:24:18 -0800804type VkFlags VkDescriptorPoolResetFlags
Jesse Halla6429252015-11-29 18:59:42 -0800805//bitfield VkDescriptorPoolResetFlagBits {
806//}
Jesse Hallfbf97b02015-11-20 14:17:03 -0800807
Jesse Halld27f6aa2015-08-15 17:58:48 -0700808/// Image usage flags
Jesse Halld8bade02015-11-24 10:24:18 -0800809type VkFlags VkImageUsageFlags
810bitfield VkImageUsageFlagBits {
Jesse Hall3fbc8562015-11-29 22:10:52 -0800811 VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001, /// Can be used as a source of transfer operations
812 VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002, /// Can be used as a destination of transfer operations
Jesse Halld27f6aa2015-08-15 17:58:48 -0700813 VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
814 VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, /// Can be used as storage image (STORAGE_IMAGE descriptor type)
815 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, /// Can be used as framebuffer color attachment
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700816 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, /// Can be used as framebuffer depth/stencil attachment
Jesse Halld27f6aa2015-08-15 17:58:48 -0700817 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, /// Image data not needed outside of rendering
818 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, /// Can be used as framebuffer input attachment
819}
820
821/// Image creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800822type VkFlags VkImageCreateFlags
823bitfield VkImageCreateFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700824 VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Image should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700825 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Image should support sparse backing with partial residency
826 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700827 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, /// Allows image views to have different format than the base image
828 VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010, /// Allows creating image views with cube type from the created image
Jesse Halld27f6aa2015-08-15 17:58:48 -0700829}
830
Jesse Hallb00daad2015-11-29 19:46:20 -0800831/// Image view creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800832type VkFlags VkImageViewCreateFlags
Jesse Hallb00daad2015-11-29 19:46:20 -0800833//bitfield VkImageViewCreateFlagBits {
834//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700835
836/// Pipeline creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800837type VkFlags VkPipelineCreateFlags
838bitfield VkPipelineCreateFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700839 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
840 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
841 VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
842}
843
Jesse Hall65ab5522015-11-30 00:07:16 -0800844/// Color component flags
845type VkFlags VkColorComponentFlags
846bitfield VkColorComponentFlagBits {
847 VK_COLOR_COMPONENT_R_BIT = 0x00000001,
848 VK_COLOR_COMPONENT_G_BIT = 0x00000002,
849 VK_COLOR_COMPONENT_B_BIT = 0x00000004,
850 VK_COLOR_COMPONENT_A_BIT = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700851}
852
853/// Fence creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800854type VkFlags VkFenceCreateFlags
855bitfield VkFenceCreateFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700856 VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
857}
858
859/// Semaphore creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800860type VkFlags VkSemaphoreCreateFlags
Jesse Halla6429252015-11-29 18:59:42 -0800861//bitfield VkSemaphoreCreateFlagBits {
862//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700863
864/// Format capability flags
Jesse Halld8bade02015-11-24 10:24:18 -0800865type VkFlags VkFormatFeatureFlags
866bitfield VkFormatFeatureFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700867 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
868 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
869 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, /// Format supports atomic operations in case it's used for storage images
870 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, /// Format can be used for uniform texel buffers (TBOs)
871 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, /// Format can be used for storage texel buffers (IBOs)
872 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, /// Format supports atomic operations in case it's used for storage texel buffers
873 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, /// Format can be used for vertex buffers (VBOs)
874 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, /// Format can be used for color attachment images
875 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, /// Format supports blending in case it's used for color attachment images
876 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, /// Format can be used for depth/stencil attachment images
Jesse Hall3fbc8562015-11-29 22:10:52 -0800877 VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, /// Format can be used as the source image of blits with vkCommandBlitImage
878 VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, /// Format can be used as the destination image of blits with vkCommandBlitImage
Jesse Halld27f6aa2015-08-15 17:58:48 -0700879}
880
881/// Query control flags
Jesse Halld8bade02015-11-24 10:24:18 -0800882type VkFlags VkQueryControlFlags
883bitfield VkQueryControlFlagBits {
Jesse Hall65ab5522015-11-30 00:07:16 -0800884 VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700885}
886
887/// Query result flags
Jesse Halld8bade02015-11-24 10:24:18 -0800888type VkFlags VkQueryResultFlags
889bitfield VkQueryResultFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700890 VK_QUERY_RESULT_DEFAULT = 0x00000000, /// Results of the queries are immediately written to the destination buffer as 32-bit values
891 VK_QUERY_RESULT_64_BIT = 0x00000001, /// Results of the queries are written to the destination buffer as 64-bit values
892 VK_QUERY_RESULT_WAIT_BIT = 0x00000002, /// Results of the queries are waited on before proceeding with the result copy
893 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, /// Besides the results of the query, the availability of the results is also written
894 VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, /// Copy the partial results of the query even if the final results aren't available
895}
896
897/// Shader module creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800898type VkFlags VkShaderModuleCreateFlags
Jesse Halla6429252015-11-29 18:59:42 -0800899//bitfield VkShaderModuleCreateFlagBits {
900//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700901
Jesse Halld27f6aa2015-08-15 17:58:48 -0700902/// Event creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800903type VkFlags VkEventCreateFlags
Jesse Halla6429252015-11-29 18:59:42 -0800904//bitfield VkEventCreateFlagBits {
905//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700906
Jesse Halla15a4bf2015-11-19 22:48:02 -0800907/// Command buffer usage flags
Jesse Hall3fbc8562015-11-29 22:10:52 -0800908type VkFlags VkCommandBufferUsageFlags
909bitfield VkCommandBufferUsageFlagBits {
910 VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
911 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
912 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700913}
914
915/// Pipeline statistics flags
Jesse Halld8bade02015-11-24 10:24:18 -0800916type VkFlags VkQueryPipelineStatisticFlags
917bitfield VkQueryPipelineStatisticFlagBits {
Jesse Hallae38f732015-11-19 21:32:50 -0800918 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, /// Optional
919 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, /// Optional
920 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, /// Optional
921 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, /// Optional
922 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, /// Optional
923 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, /// Optional
924 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, /// Optional
925 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, /// Optional
926 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, /// Optional
927 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, /// Optional
928 VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, /// Optional
Jesse Halld27f6aa2015-08-15 17:58:48 -0700929}
930
931/// Memory mapping flags
Jesse Halld8bade02015-11-24 10:24:18 -0800932type VkFlags VkMemoryMapFlags
Jesse Halla6429252015-11-29 18:59:42 -0800933//bitfield VkMemoryMapFlagBits {
934//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700935
936/// Bitfield of image aspects
Jesse Halld8bade02015-11-24 10:24:18 -0800937type VkFlags VkImageAspectFlags
938bitfield VkImageAspectFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700939 VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
940 VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
941 VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
942 VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
943}
944
945/// Sparse memory bind flags
Jesse Halld8bade02015-11-24 10:24:18 -0800946type VkFlags VkSparseMemoryBindFlags
Jesse Hall091ed9e2015-11-30 00:55:29 -0800947bitfield VkSparseMemoryBindFlagBits {
948 VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
949}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700950
951/// Sparse image memory requirements flags
Jesse Halld8bade02015-11-24 10:24:18 -0800952type VkFlags VkSparseImageFormatFlags
953bitfield VkSparseImageFormatFlagBits {
Jesse Hallb00daad2015-11-29 19:46:20 -0800954 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001, /// Image uses a single miptail region for all array slices
955 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.
956 VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004, /// Image uses a non-standard sparse block size
Jesse Halld27f6aa2015-08-15 17:58:48 -0700957}
958
959/// Pipeline stages
Jesse Halld8bade02015-11-24 10:24:18 -0800960type VkFlags VkPipelineStageFlags
961bitfield VkPipelineStageFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700962 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, /// Before subsequent commands are processed
963 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, /// Draw/DispatchIndirect command fetch
964 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, /// Vertex/index fetch
965 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, /// Vertex shading
Jesse Hallae38f732015-11-19 21:32:50 -0800966 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, /// Tessellation control shading
967 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, /// Tessellation evaluation shading
Jesse Halld27f6aa2015-08-15 17:58:48 -0700968 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, /// Geometry shading
969 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, /// Fragment shading
970 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, /// Early fragment (depth/stencil) tests
971 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, /// Late fragment (depth/stencil) tests
972 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, /// Color attachment writes
973 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, /// Compute shading
974 VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, /// Transfer/copy operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700975 VK_PIPELINE_STAGE_HOST_BIT = 0x00002000, /// Indicates host (CPU) is a source/sink of the dependency
Jesse Halld27f6aa2015-08-15 17:58:48 -0700976
Jesse Hall091ed9e2015-11-30 00:55:29 -0800977 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00004000, /// All stages of the graphics pipeline
978 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00008000, /// All graphics, compute, copy, and transition commands
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700979}
980
981/// Render pass attachment description flags
Jesse Halld8bade02015-11-24 10:24:18 -0800982type VkFlags VkAttachmentDescriptionFlags
983bitfield VkAttachmentDescriptionFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700984 VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001, /// The attachment may alias physical memory of another attachment in the same renderpass
Jesse Halld27f6aa2015-08-15 17:58:48 -0700985}
986
987/// Subpass description flags
Jesse Halld8bade02015-11-24 10:24:18 -0800988type VkFlags VkSubpassDescriptionFlags
989bitfield VkSubpassDescriptionFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700990}
991
992/// Command pool creation flags
Jesse Hall3fbc8562015-11-29 22:10:52 -0800993type VkFlags VkCommandPoolCreateFlags
994bitfield VkCommandPoolCreateFlagBits {
995 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001, /// Command buffers have a short lifetime
996 VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, /// Command buffers may release their memory individually
Jesse Halld27f6aa2015-08-15 17:58:48 -0700997}
998
999/// Command pool reset flags
Jesse Hall3fbc8562015-11-29 22:10:52 -08001000type VkFlags VkCommandPoolResetFlags
1001bitfield VkCommandPoolResetFlagBits {
1002 VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the pool
Jesse Halld27f6aa2015-08-15 17:58:48 -07001003}
1004
Jesse Hall3fbc8562015-11-29 22:10:52 -08001005type VkFlags VkCommandBufferResetFlags
1006bitfield VkCommandBufferResetFlagBits {
1007 VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the buffer
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001008}
1009
Jesse Halld8bade02015-11-24 10:24:18 -08001010type VkFlags VkSampleCountFlags
1011bitfield VkSampleCountFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001012 VK_SAMPLE_COUNT_1_BIT = 0x00000001,
1013 VK_SAMPLE_COUNT_2_BIT = 0x00000002,
1014 VK_SAMPLE_COUNT_4_BIT = 0x00000004,
1015 VK_SAMPLE_COUNT_8_BIT = 0x00000008,
1016 VK_SAMPLE_COUNT_16_BIT = 0x00000010,
1017 VK_SAMPLE_COUNT_32_BIT = 0x00000020,
1018 VK_SAMPLE_COUNT_64_BIT = 0x00000040,
1019}
1020
Jesse Halld8bade02015-11-24 10:24:18 -08001021type VkFlags VkStencilFaceFlags
1022bitfield VkStencilFaceFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001023 VK_STENCIL_FACE_NONE = 0x00000000, /// No faces
1024 VK_STENCIL_FACE_FRONT_BIT = 0x00000001, /// Front face
1025 VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face
Jesse Hallc7467b72015-11-29 21:05:26 -08001026 VK_STENCIL_FRONT_AND_BACK = 0x00000003,
Jesse Halld27f6aa2015-08-15 17:58:48 -07001027}
1028
Jesse Halla6429252015-11-29 18:59:42 -08001029/// Instance creation flags
1030type VkFlags VkInstanceCreateFlags
1031//bitfield VkInstanceCreateFlagBits {
1032//}
1033
1034/// Device creation flags
1035type VkFlags VkDeviceCreateFlags
1036//bitfield VkDeviceCreateFlagBits {
1037//}
1038
1039/// Device queue creation flags
1040type VkFlags VkDeviceQueueCreateFlags
1041//bitfield VkDeviceQueueCreateFlagBits {
1042//}
1043
1044/// Query pool creation flags
1045type VkFlags VkQueryPoolCreateFlags
1046//bitfield VkQueryPoolCreateFlagBits {
1047//}
1048
1049/// Buffer view creation flags
1050type VkFlags VkBufferViewCreateFlags
1051//bitfield VkBufferViewCreateFlagBits {
1052//}
1053
1054/// Pipeline cache creation flags
1055type VkFlags VkPipelineCacheCreateFlags
1056//bitfield VkPipelineCacheCreateFlagBits {
1057//}
1058
1059/// Pipeline shader stage creation flags
1060type VkFlags VkPipelineShaderStageCreateFlags
1061//bitfield VkPipelineShaderStageCreateFlagBits {
1062//}
1063
1064/// Descriptor set layout creation flags
1065type VkFlags VkDescriptorSetLayoutCreateFlags
1066//bitfield VkDescriptorSetLayoutCreateFlagBits {
1067//}
1068
1069/// Pipeline vertex input state creation flags
1070type VkFlags VkPipelineVertexInputStateCreateFlags
1071//bitfield VkPipelineVertexInputStateCreateFlagBits {
1072//}
1073
1074/// Pipeline input assembly state creation flags
1075type VkFlags VkPipelineInputAssemblyStateCreateFlags
1076//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
1077//}
1078
1079/// Tessellation state creation flags
1080type VkFlags VkPipelineTessellationStateCreateFlags
1081//bitfield VkPipelineTessellationStateCreateFlagBits {
1082//}
1083
1084/// Viewport state creation flags
1085type VkFlags VkPipelineViewportStateCreateFlags
1086//bitfield VkPipelineViewportStateCreateFlagBits {
1087//}
1088
Jesse Hall3fbc8562015-11-29 22:10:52 -08001089/// Rasterization state creation flags
1090type VkFlags VkPipelineRasterizationStateCreateFlags
1091//bitfield VkPipelineRasterizationStateCreateFlagBits {
Jesse Halla6429252015-11-29 18:59:42 -08001092//}
1093
1094/// Multisample state creation flags
1095type VkFlags VkPipelineMultisampleStateCreateFlags
1096//bitfield VkPipelineMultisampleStateCreateFlagBits {
1097//}
1098
1099/// Color blend state creation flags
1100type VkFlags VkPipelineColorBlendStateCreateFlags
1101//bitfield VkPipelineColorBlendStateCreateFlagBits {
1102//}
1103
1104/// Depth/stencil state creation flags
1105type VkFlags VkPipelineDepthStencilStateCreateFlags
1106//bitfield VkPipelineDepthStencilStateCreateFlagBits {
1107//}
1108
1109/// Dynamic state creation flags
1110type VkFlags VkPipelineDynamicStateCreateFlags
1111//bitfield VkPipelineDynamicStateCreateFlagBits {
1112//}
1113
1114/// Pipeline layout creation flags
1115type VkFlags VkPipelineLayoutCreateFlags
1116//bitfield VkPipelineLayoutCreateFlagBits {
1117//}
1118
1119/// Sampler creation flags
1120type VkFlags VkSamplerCreateFlags
1121//bitfield VkSamplerCreateFlagBits {
1122//}
1123
1124/// Render pass creation flags
1125type VkFlags VkRenderPassCreateFlags
1126//bitfield VkRenderPassCreateFlagBits {
1127//}
1128
1129/// Framebuffer creation flags
1130type VkFlags VkFramebufferCreateFlags
1131//bitfield VkFramebufferCreateFlagBits {
1132//}
1133
Jesse Halldc6d36c2015-11-29 19:12:15 -08001134/// Dependency flags
1135type VkFlags VkDependencyFlags
1136bitfield VkDependencyFlagBits {
1137 VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
1138}
1139
Jesse Hallc7467b72015-11-29 21:05:26 -08001140/// Cull mode flags
1141type VkFlags VkCullModeFlags
1142bitfield VkCullModeFlagBits {
1143 VK_CULL_MODE_NONE = 0x00000000,
1144 VK_CULL_MODE_FRONT_BIT = 0x00000001,
1145 VK_CULL_MODE_BACK_BIT = 0x00000002,
1146 VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
1147}
1148
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001149@extension("VK_KHR_swapchain")
Jesse Halld8bade02015-11-24 10:24:18 -08001150type VkFlags VkSurfaceTransformFlagsKHR
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001151@extension("VK_KHR_swapchain")
Jesse Halld8bade02015-11-24 10:24:18 -08001152bitfield VkSurfaceTransformFlagBitsKHR {
Michael Lentine88594d72015-11-12 12:49:45 -08001153 VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
1154 VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
1155 VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
1156 VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
1157 VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
1158 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
1159 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
1160 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
1161 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
1162}
Jesse Halld27f6aa2015-08-15 17:58:48 -07001163
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001164@extension("VK_KHR_swapchain")
Jesse Halla6429252015-11-29 18:59:42 -08001165type VkFlags VkCompositeAlphaFlagsKHR
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001166@extension("VK_KHR_swapchain")
Jesse Halla6429252015-11-29 18:59:42 -08001167bitfield VkCompositeAlphaFlagBitsKHR {
1168 VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
1169 VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
1170 VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
1171 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
1172}
1173
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001174@extension("VK_KHR_display")
Jesse Halld8bade02015-11-24 10:24:18 -08001175type VkFlags VkDisplayPlaneAlphaFlagsKHR
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001176@extension("VK_KHR_display")
Jesse Halld8bade02015-11-24 10:24:18 -08001177bitfield VkDisplayPlaneAlphaFlagBitsKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08001178 VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000001,
1179 VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000002,
1180 VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000004,
1181}
1182
1183
Jesse Halld27f6aa2015-08-15 17:58:48 -07001184//////////////////
1185// Structures //
1186//////////////////
1187
1188class VkOffset2D {
1189 s32 x
1190 s32 y
1191}
1192
1193class VkOffset3D {
1194 s32 x
1195 s32 y
1196 s32 z
1197}
1198
1199class VkExtent2D {
1200 s32 width
1201 s32 height
1202}
1203
1204class VkExtent3D {
1205 s32 width
1206 s32 height
1207 s32 depth
1208}
1209
1210class VkViewport {
Jesse Hall65ab5522015-11-30 00:07:16 -08001211 f32 x
1212 f32 y
Jesse Halld27f6aa2015-08-15 17:58:48 -07001213 f32 width
1214 f32 height
1215 f32 minDepth
1216 f32 maxDepth
1217}
1218
1219class VkRect2D {
1220 VkOffset2D offset
1221 VkExtent2D extent
1222}
1223
Jesse Halla15a4bf2015-11-19 22:48:02 -08001224class VkClearRect {
1225 VkRect2D rect
1226 u32 baseArrayLayer
Jesse Hall3fbc8562015-11-29 22:10:52 -08001227 u32 layerCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001228}
1229
Jesse Hall65ab5522015-11-30 00:07:16 -08001230class VkComponentMapping {
1231 VkComponentSwizzle r
1232 VkComponentSwizzle g
1233 VkComponentSwizzle b
1234 VkComponentSwizzle a
Jesse Halld27f6aa2015-08-15 17:58:48 -07001235}
1236
1237class VkPhysicalDeviceProperties {
1238 u32 apiVersion
1239 u32 driverVersion
Jesse Hall65ab5522015-11-30 00:07:16 -08001240 u32 vendorID
1241 u32 deviceID
Jesse Halld27f6aa2015-08-15 17:58:48 -07001242 VkPhysicalDeviceType deviceType
Jesse Hall65ab5522015-11-30 00:07:16 -08001243 char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] deviceName
1244 u8[VK_UUID_SIZE] pipelineCacheUUID
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001245 VkPhysicalDeviceLimits limits
1246 VkPhysicalDeviceSparseProperties sparseProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07001247}
1248
1249class VkExtensionProperties {
Jesse Hall65ab5522015-11-30 00:07:16 -08001250 char[VK_MAX_EXTENSION_NAME_SIZE] extensionName /// extension name
Jesse Halld27f6aa2015-08-15 17:58:48 -07001251 u32 specVersion /// version of the extension specification implemented
1252}
1253
1254class VkLayerProperties {
Jesse Hall65ab5522015-11-30 00:07:16 -08001255 char[VK_MAX_EXTENSION_NAME_SIZE] layerName /// layer name
Jesse Hall3fbc8562015-11-29 22:10:52 -08001256 u32 specVersion /// version of the layer specification implemented
1257 u32 implementationVersion /// build or release version of the layer's library
Jesse Hall65ab5522015-11-30 00:07:16 -08001258 char[VK_MAX_DESCRIPTION_SIZE] description /// Free-form description of the layer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001259}
1260
Jesse Halla366a512015-11-19 22:30:07 -08001261class VkSubmitInfo {
Jesse Hall03b6fe12015-11-24 12:44:21 -08001262 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO
1263 const void* pNext /// Next structure in chain
1264 u32 waitSemaphoreCount
Jesse Halla366a512015-11-19 22:30:07 -08001265 const VkSemaphore* pWaitSemaphores
Jesse Hall03b6fe12015-11-24 12:44:21 -08001266 u32 commandBufferCount
Jesse Hall3fbc8562015-11-29 22:10:52 -08001267 const VkCommandBuffer* pCommandBuffers
Jesse Hall03b6fe12015-11-24 12:44:21 -08001268 u32 signalSemaphoreCount
Jesse Halla366a512015-11-19 22:30:07 -08001269 const VkSemaphore* pSignalSemaphores
1270}
1271
Jesse Halld27f6aa2015-08-15 17:58:48 -07001272class VkApplicationInfo {
1273 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1274 const void* pNext /// Next structure in chain
Jesse Hall3fbc8562015-11-29 22:10:52 -08001275 const char* pApplicationName
1276 u32 applicationVersion
Jesse Halld27f6aa2015-08-15 17:58:48 -07001277 const char* pEngineName
1278 u32 engineVersion
1279 u32 apiVersion
1280}
1281
Jesse Hall3fbc8562015-11-29 22:10:52 -08001282class VkAllocationCallbacks {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001283 void* pUserData
Jesse Hall3fbc8562015-11-29 22:10:52 -08001284 PFN_vkAllocationFunction pfnAllocation
1285 PFN_vkReallocationFunction pfnReallocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001286 PFN_vkFreeFunction pfnFree
Jesse Hall3fbc8562015-11-29 22:10:52 -08001287 PFN_vkInternalAllocationNotification pfnInternalAllocation
Jesse Hall03b6fe12015-11-24 12:44:21 -08001288 PFN_vkInternalFreeNotification pfnInternalFree
Jesse Halld27f6aa2015-08-15 17:58:48 -07001289}
1290
1291class VkDeviceQueueCreateInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001292 VkStructureType sStype /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
1293 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001294 VkDeviceQueueCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001295 u32 queueFamilyIndex
Jesse Hall03b6fe12015-11-24 12:44:21 -08001296 u32 queuePriorityCount
Jesse Hallfbf97b02015-11-20 14:17:03 -08001297 const f32* pQueuePriorities
Jesse Halld27f6aa2015-08-15 17:58:48 -07001298}
1299
1300class VkDeviceCreateInfo {
1301 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1302 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001303 VkDeviceCreateFlags flags
Jesse Hallae38f732015-11-19 21:32:50 -08001304 u32 requestedQueueRecordCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001305 const VkDeviceQueueCreateInfo* pRequestedQueues
Jesse Hall03b6fe12015-11-24 12:44:21 -08001306 u32 enabledLayerNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001307 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
Jesse Hall03b6fe12015-11-24 12:44:21 -08001308 u32 enabledExtensionNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001309 const char* const* ppEnabledExtensionNames
1310 const VkPhysicalDeviceFeatures* pEnabledFeatures
Jesse Halld27f6aa2015-08-15 17:58:48 -07001311}
1312
1313class VkInstanceCreateInfo {
1314 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1315 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001316 VkInstanceCreateFlags flags
Jesse Hall3fbc8562015-11-29 22:10:52 -08001317 const VkApplicationInfo* pApplicationInfo
Jesse Hall03b6fe12015-11-24 12:44:21 -08001318 u32 enabledLayerNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001319 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
Jesse Hall03b6fe12015-11-24 12:44:21 -08001320 u32 enabledExtensionNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001321 const char* const* ppEnabledExtensionNames /// Extension names to be enabled
1322}
1323
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001324class VkQueueFamilyProperties {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001325 VkQueueFlags queueFlags /// Queue flags
1326 u32 queueCount
Jesse Hallacfa5342015-11-19 21:51:33 -08001327 u32 timestampValidBits
Jesse Hall65ab5522015-11-30 00:07:16 -08001328 VkExtent3D minImageTransferGranularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07001329}
1330
1331class VkPhysicalDeviceMemoryProperties {
1332 u32 memoryTypeCount
1333 VkMemoryType[VK_MAX_MEMORY_TYPES] memoryTypes
1334 u32 memoryHeapCount
1335 VkMemoryHeap[VK_MAX_MEMORY_HEAPS] memoryHeaps
1336}
1337
Jesse Hall3fbc8562015-11-29 22:10:52 -08001338class VkMemoryAllocateInfo {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001339 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1340 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001341 VkDeviceSize allocationSize /// Size of memory allocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001342 u32 memoryTypeIndex /// Index of the of the memory type to allocate from
1343}
1344
1345class VkMemoryRequirements {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001346 VkDeviceSize size /// Specified in bytes
1347 VkDeviceSize alignment /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001348 u32 memoryTypeBits /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1349}
1350
1351class VkSparseImageFormatProperties {
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001352 VkImageAspectFlagBits aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001353 VkExtent3D imageGranularity
1354 VkSparseImageFormatFlags flags
1355}
1356
1357class VkSparseImageMemoryRequirements {
Jesse Hallb00daad2015-11-29 19:46:20 -08001358 VkSparseImageFormatProperties formatProperties
Jesse Hall65ab5522015-11-30 00:07:16 -08001359 u32 imageMipTailStartLod
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001360 VkDeviceSize imageMipTailSize /// Specified in bytes, must be a multiple of image block size / alignment
1361 VkDeviceSize imageMipTailOffset /// Specified in bytes, must be a multiple of image block size / alignment
1362 VkDeviceSize imageMipTailStride /// Specified in bytes, must be a multiple of image block size / alignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07001363}
1364
1365class VkMemoryType {
1366 VkMemoryPropertyFlags propertyFlags /// Memory properties of this memory type
1367 u32 heapIndex /// Index of the memory heap allocations of this memory type are taken from
1368}
1369
1370class VkMemoryHeap {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001371 VkDeviceSize size /// Available memory in the heap
Jesse Halld27f6aa2015-08-15 17:58:48 -07001372 VkMemoryHeapFlags flags /// Flags for the heap
1373}
1374
1375class VkMappedMemoryRange {
1376 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1377 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001378 VkDeviceMemory memory /// Mapped memory object
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001379 VkDeviceSize offset /// Offset within the mapped memory the range starts from
1380 VkDeviceSize size /// Size of the range within the mapped memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07001381}
1382
1383class VkFormatProperties {
1384 VkFormatFeatureFlags linearTilingFeatures /// Format features in case of linear tiling
1385 VkFormatFeatureFlags optimalTilingFeatures /// Format features in case of optimal tiling
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001386 VkFormatFeatureFlags bufferFeatures /// Format features supported by buffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001387}
1388
1389class VkImageFormatProperties {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001390 VkExtent3D maxExtent /// max image dimensions for this resource type
1391 u32 maxMipLevels /// max number of mipmap levels for this resource type
Jesse Halla15a4bf2015-11-19 22:48:02 -08001392 u32 maxArrayLayers /// max array layers for this resource type
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001393 VkSampleCountFlags sampleCounts /// supported sample counts for this resource type
1394 VkDeviceSize maxResourceSize /// max size (in bytes) of this resource type
1395}
1396
Jesse Halla15a4bf2015-11-19 22:48:02 -08001397class VkDescriptorImageInfo {
1398 VkSampler sampler
1399 VkImageView imageView
1400 VkImageLayout imageLayout
1401}
1402
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001403class VkDescriptorBufferInfo {
1404 VkBuffer buffer /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
1405 VkDeviceSize offset /// Base offset from buffer start in bytes to update in the descriptor set.
1406 VkDeviceSize range /// Size in bytes of the buffer resource for this descriptor update.
Jesse Halld27f6aa2015-08-15 17:58:48 -07001407}
1408
Jesse Halld27f6aa2015-08-15 17:58:48 -07001409class VkWriteDescriptorSet {
1410 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1411 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001412 VkDescriptorSet dstSet /// Destination descriptor set
1413 u32 dstBinding /// Binding within the destination descriptor set to write
1414 u32 dstArrayElement /// Array element within the destination binding to write
Jesse Hall03b6fe12015-11-24 12:44:21 -08001415 u32 descriptorCount /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001416 VkDescriptorType descriptorType /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
Jesse Hallfbf97b02015-11-20 14:17:03 -08001417 const VkDescriptorImageInfo* pImageInfo
1418 const VkDescriptorBufferInfo* pBufferInfo
1419 const VkBufferView* pTexelBufferView
Jesse Halld27f6aa2015-08-15 17:58:48 -07001420}
1421
1422class VkCopyDescriptorSet {
1423 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1424 const void* pNext /// Pointer to next structure
1425 VkDescriptorSet srcSet /// Source descriptor set
1426 u32 srcBinding /// Binding within the source descriptor set to copy from
1427 u32 srcArrayElement /// Array element within the source binding to copy from
Jesse Hall3fbc8562015-11-29 22:10:52 -08001428 VkDescriptorSet dstSet /// Destination descriptor set
1429 u32 dstBinding /// Binding within the destination descriptor set to copy to
1430 u32 dstArrayElement /// Array element within the destination binding to copy to
Jesse Hall03b6fe12015-11-24 12:44:21 -08001431 u32 descriptorCount /// Number of descriptors to copy
Jesse Halld27f6aa2015-08-15 17:58:48 -07001432}
1433
1434class VkBufferCreateInfo {
1435 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1436 const void* pNext /// Pointer to next structure.
Jesse Halla6429252015-11-29 18:59:42 -08001437 VkBufferCreateFlags flags /// Buffer creation flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001438 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001439 VkBufferUsageFlags usage /// Buffer usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001440 VkSharingMode sharingMode
Jesse Hall03b6fe12015-11-24 12:44:21 -08001441 u32 queueFamilyIndexCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001442 const u32* pQueueFamilyIndices
1443}
1444
1445class VkBufferViewCreateInfo {
1446 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1447 const void* pNext /// Pointer to next structure.
Jesse Halla6429252015-11-29 18:59:42 -08001448 VkBufferViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001449 VkBuffer buffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001450 VkFormat format /// Optionally specifies format of elements
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001451 VkDeviceSize offset /// Specified in bytes
1452 VkDeviceSize range /// View size specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001453}
1454
1455class VkImageSubresource {
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001456 VkImageAspectFlagBits aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001457 u32 mipLevel
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001458 u32 arrayLayer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001459}
1460
1461class VkImageSubresourceRange {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001462 VkImageAspectFlags aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001463 u32 baseMipLevel
Jesse Hall3fbc8562015-11-29 22:10:52 -08001464 u32 levelCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001465 u32 baseArrayLayer
Jesse Hall3fbc8562015-11-29 22:10:52 -08001466 u32 layerCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001467}
1468
1469class VkMemoryBarrier {
1470 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1471 const void* pNext /// Pointer to next structure.
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001472 VkAccessFlags srcAccessMask
1473 VkAccessFlags dstAccessMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001474}
1475
1476class VkBufferMemoryBarrier {
1477 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1478 const void* pNext /// Pointer to next structure.
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001479 VkAccessFlags srcAccessMask
1480 VkAccessFlags dstAccessMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001481 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
Jesse Hall3fbc8562015-11-29 22:10:52 -08001482 u32 dstQueueFamilyIndex /// Queue family to transition ownership to
Jesse Halld27f6aa2015-08-15 17:58:48 -07001483 VkBuffer buffer /// Buffer to sync
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001484 VkDeviceSize offset /// Offset within the buffer to sync
1485 VkDeviceSize size /// Amount of bytes to sync
Jesse Halld27f6aa2015-08-15 17:58:48 -07001486}
1487
1488class VkImageMemoryBarrier {
1489 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1490 const void* pNext /// Pointer to next structure.
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001491 VkAccessFlags srcAccessMask
1492 VkAccessFlags dstAccessMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001493 VkImageLayout oldLayout /// Current layout of the image
1494 VkImageLayout newLayout /// New layout to transition the image to
1495 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
Jesse Hall3fbc8562015-11-29 22:10:52 -08001496 u32 dstQueueFamilyIndex /// Queue family to transition ownership to
Jesse Halld27f6aa2015-08-15 17:58:48 -07001497 VkImage image /// Image to sync
1498 VkImageSubresourceRange subresourceRange /// Subresource range to sync
1499}
1500
1501class VkImageCreateInfo {
1502 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1503 const void* pNext /// Pointer to next structure.
Jesse Halla6429252015-11-29 18:59:42 -08001504 VkImageCreateFlags flags /// Image creation flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001505 VkImageType imageType
1506 VkFormat format
1507 VkExtent3D extent
1508 u32 mipLevels
Jesse Halla15a4bf2015-11-19 22:48:02 -08001509 u32 arrayLayers
Jesse Hall091ed9e2015-11-30 00:55:29 -08001510 VkSampleCountFlagBits samples
Jesse Halld27f6aa2015-08-15 17:58:48 -07001511 VkImageTiling tiling
1512 VkImageUsageFlags usage /// Image usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001513 VkSharingMode sharingMode /// Cross-queue-family sharing mode
Jesse Hall03b6fe12015-11-24 12:44:21 -08001514 u32 queueFamilyIndexCount /// Number of queue families to share across
Jesse Halld27f6aa2015-08-15 17:58:48 -07001515 const u32* pQueueFamilyIndices /// Array of queue family indices to share across
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001516 VkImageLayout initialLayout /// Initial image layout for all subresources
Jesse Halld27f6aa2015-08-15 17:58:48 -07001517}
1518
1519class VkSubresourceLayout {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001520 VkDeviceSize offset /// Specified in bytes
1521 VkDeviceSize size /// Specified in bytes
1522 VkDeviceSize rowPitch /// Specified in bytes
1523 VkDeviceSize depthPitch /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001524}
1525
1526class VkImageViewCreateInfo {
1527 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1528 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001529 VkImageViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001530 VkImage image
1531 VkImageViewType viewType
1532 VkFormat format
Jesse Hall65ab5522015-11-30 00:07:16 -08001533 VkComponentMapping components
Jesse Halld27f6aa2015-08-15 17:58:48 -07001534 VkImageSubresourceRange subresourceRange
Jesse Halld27f6aa2015-08-15 17:58:48 -07001535}
1536
1537class VkBufferCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001538 VkDeviceSize srcOffset /// Specified in bytes
Jesse Hall3fbc8562015-11-29 22:10:52 -08001539 VkDeviceSize dstOffset /// Specified in bytes
Jesse Hallb00daad2015-11-29 19:46:20 -08001540 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001541}
1542
Jesse Halla6429252015-11-29 18:59:42 -08001543class VkSparseMemoryBind {
Jesse Hallb00daad2015-11-29 19:46:20 -08001544 VkDeviceSize resourceOffset /// Specified in bytes
1545 VkDeviceSize size /// Specified in bytes
Jesse Hall3fbc8562015-11-29 22:10:52 -08001546 VkDeviceMemory memory
1547 VkDeviceSize memoryOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001548 VkSparseMemoryBindFlags flags
1549}
1550
Jesse Halla6429252015-11-29 18:59:42 -08001551class VkSparseImageMemoryBind {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001552 VkImageSubresource subresource
1553 VkOffset3D offset
1554 VkExtent3D extent
Jesse Hall3fbc8562015-11-29 22:10:52 -08001555 VkDeviceMemory memory
1556 VkDeviceSize memoryOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001557 VkSparseMemoryBindFlags flags
1558}
1559
Jesse Halla6429252015-11-29 18:59:42 -08001560class VkSparseBufferMemoryBindInfo {
1561 VkBuffer buffer
1562 u32 bindCount
1563 const VkSparseMemoryBind* pBinds
1564}
1565
1566class VkSparseImageOpaqueMemoryBindInfo {
1567 VkImage image
1568 u32 bindCount
1569 const VkSparseMemoryBind* pBinds
1570}
1571
1572class VkSparseImageMemoryBindInfo {
1573 VkImage image
1574 u32 bindCount
1575 const VkSparseMemoryBind* pBinds
1576}
1577
1578class VkBindSparseInfo {
1579 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
1580 const void* pNext
1581 u32 waitSemaphoreCount
1582 const VkSemaphore* pWaitSemaphores
1583 u32 numBufferBinds
1584 const VkSparseBufferMemoryBindInfo* pBufferBinds
1585 u32 numImageOpaqueBinds
1586 const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds
1587 u32 numImageBinds
1588 const VkSparseImageMemoryBindInfo* pImageBinds
1589 u32 signalSemaphoreCount
1590 const VkSemaphore* pSignalSemaphores
1591}
1592
Jesse Hall65ab5522015-11-30 00:07:16 -08001593class VkImageSubresourceLayers {
1594 VkImageAspectFlags aspectMask
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001595 u32 mipLevel
Jesse Halla15a4bf2015-11-19 22:48:02 -08001596 u32 baseArrayLayer
Jesse Hall3fbc8562015-11-29 22:10:52 -08001597 u32 layerCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001598}
1599
Jesse Halld27f6aa2015-08-15 17:58:48 -07001600class VkImageCopy {
Jesse Hall65ab5522015-11-30 00:07:16 -08001601 VkImageSubresourceLayers srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001602 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Hall65ab5522015-11-30 00:07:16 -08001603 VkImageSubresourceLayers dstSubresource
Jesse Hall3fbc8562015-11-29 22:10:52 -08001604 VkOffset3D dstOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Halld27f6aa2015-08-15 17:58:48 -07001605 VkExtent3D extent /// Specified in pixels for both compressed and uncompressed images
1606}
1607
1608class VkImageBlit {
Jesse Hall65ab5522015-11-30 00:07:16 -08001609 VkImageSubresourceLayers srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001610 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
1611 VkExtent3D srcExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Hall65ab5522015-11-30 00:07:16 -08001612 VkImageSubresourceLayers dstSubresource
Jesse Hall3fbc8562015-11-29 22:10:52 -08001613 VkOffset3D dstOffset /// Specified in pixels for both compressed and uncompressed images
1614 VkExtent3D dstExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Halld27f6aa2015-08-15 17:58:48 -07001615}
1616
1617class VkBufferImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001618 VkDeviceSize bufferOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001619 u32 bufferRowLength /// Specified in texels
1620 u32 bufferImageHeight
Jesse Hall65ab5522015-11-30 00:07:16 -08001621 VkImageSubresourceLayers imageSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001622 VkOffset3D imageOffset /// Specified in pixels for both compressed and uncompressed images
1623 VkExtent3D imageExtent /// Specified in pixels for both compressed and uncompressed images
1624}
1625
1626class VkImageResolve {
Jesse Hall65ab5522015-11-30 00:07:16 -08001627 VkImageSubresourceLayers srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001628 VkOffset3D srcOffset
Jesse Hall65ab5522015-11-30 00:07:16 -08001629 VkImageSubresourceLayers dstSubresource
Jesse Hall3fbc8562015-11-29 22:10:52 -08001630 VkOffset3D dstOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07001631 VkExtent3D extent
1632}
1633
1634class VkShaderModuleCreateInfo {
1635 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1636 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001637 VkShaderModuleCreateFlags flags /// Reserved
Jesse Halld27f6aa2015-08-15 17:58:48 -07001638 platform.size_t codeSize /// Specified in bytes
Jesse Halla9bb62b2015-11-21 19:31:56 -08001639 const u32* pCode /// Binary code of size codeSize
Jesse Halld27f6aa2015-08-15 17:58:48 -07001640}
1641
Jesse Halld27f6aa2015-08-15 17:58:48 -07001642class VkDescriptorSetLayoutBinding {
Jesse Hall091ed9e2015-11-30 00:55:29 -08001643 u32 binding
Jesse Halld27f6aa2015-08-15 17:58:48 -07001644 VkDescriptorType descriptorType /// Type of the descriptors in this binding
1645 u32 arraySize /// Number of descriptors in this binding
1646 VkShaderStageFlags stageFlags /// Shader stages this binding is visible to
1647 const VkSampler* pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
1648}
1649
1650class VkDescriptorSetLayoutCreateInfo {
1651 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1652 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001653 VkDescriptorSetLayoutCreateFlags flags
Jesse Hall03b6fe12015-11-24 12:44:21 -08001654 u32 bindingCount /// Number of bindings in the descriptor set layout
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001655 const VkDescriptorSetLayoutBinding* pBinding /// Array of descriptor set layout bindings
Jesse Halld27f6aa2015-08-15 17:58:48 -07001656}
1657
Jesse Hall65ab5522015-11-30 00:07:16 -08001658class VkDescriptorPoolSize {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001659 VkDescriptorType type
Jesse Hall03b6fe12015-11-24 12:44:21 -08001660 u32 descriptorCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001661}
1662
1663class VkDescriptorPoolCreateInfo {
1664 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1665 const void* pNext /// Pointer to next structure
Jesse Hallfbf97b02015-11-20 14:17:03 -08001666 VkDescriptorPoolCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001667 u32 maxSets
Jesse Hall65ab5522015-11-30 00:07:16 -08001668 u32 poolSizeCount
1669 const VkDescriptorPoolSize* pPoolSizes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001670}
1671
Jesse Hall3fbc8562015-11-29 22:10:52 -08001672class VkDescriptorSetAllocateInfo {
Jesse Hallfbf97b02015-11-20 14:17:03 -08001673 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
1674 const void* pNext /// Pointer to next structure
1675 VkDescriptorPool descriptorPool
Jesse Hall03b6fe12015-11-24 12:44:21 -08001676 u32 setCount
Jesse Hallfbf97b02015-11-20 14:17:03 -08001677 const VkDescriptorSetLayout* pSetLayouts
1678}
1679
Jesse Halld27f6aa2015-08-15 17:58:48 -07001680class VkSpecializationMapEntry {
Jesse Hall65ab5522015-11-30 00:07:16 -08001681 u32 constantID /// The SpecConstant ID specified in the BIL
Jesse Halld27f6aa2015-08-15 17:58:48 -07001682 u32 offset /// Offset of the value in the data block
Jesse Hallb00daad2015-11-29 19:46:20 -08001683 platform.size_t size /// Size in bytes of the SpecConstant
Jesse Halld27f6aa2015-08-15 17:58:48 -07001684}
1685
1686class VkSpecializationInfo {
1687 u32 mapEntryCount /// Number of entries in the map
Jesse Hallb00daad2015-11-29 19:46:20 -08001688 const VkSpecializationMapEntry* pMapEntries /// Array of map entries
Jesse Halld27f6aa2015-08-15 17:58:48 -07001689 platform.size_t dataSize /// Size in bytes of pData
1690 const void* pData /// Pointer to SpecConstant data
1691}
1692
1693class VkPipelineShaderStageCreateInfo {
1694 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1695 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001696 VkPipelineShaderStageCreateFlags flags
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001697 VkShaderStageFlagBits stage
1698 VkShaderModule module
1699 const char* pName
Jesse Halld27f6aa2015-08-15 17:58:48 -07001700 const VkSpecializationInfo* pSpecializationInfo
1701}
1702
1703class VkComputePipelineCreateInfo {
1704 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1705 const void* pNext /// Pointer to next structure
Jesse Halld27f6aa2015-08-15 17:58:48 -07001706 VkPipelineCreateFlags flags /// Pipeline creation flags
Jesse Halla6429252015-11-29 18:59:42 -08001707 VkPipelineShaderStageCreateInfo stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001708 VkPipelineLayout layout /// Interface layout of the pipeline
1709 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
1710 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
1711}
1712
1713class VkVertexInputBindingDescription {
Jesse Hallb00daad2015-11-29 19:46:20 -08001714 u32 binding /// Vertex buffer binding id
1715 u32 stride /// Distance between vertices in bytes (0 = no advancement)
Jesse Hall65ab5522015-11-30 00:07:16 -08001716 VkVertexInputRate inputRate /// Rate at which binding is incremented
Jesse Halld27f6aa2015-08-15 17:58:48 -07001717}
1718
1719class VkVertexInputAttributeDescription {
Jesse Hallb00daad2015-11-29 19:46:20 -08001720 u32 location /// location of the shader vertex attrib
1721 u32 binding /// Vertex buffer binding id
1722 VkFormat format /// format of source data
1723 u32 offset /// Offset of first element in bytes from base of vertex
Jesse Halld27f6aa2015-08-15 17:58:48 -07001724}
1725
1726class VkPipelineVertexInputStateCreateInfo {
Jesse Hall03b6fe12015-11-24 12:44:21 -08001727 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
1728 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001729 VkPipelineVertexInputStateCreateFlags flags
Jesse Hall03b6fe12015-11-24 12:44:21 -08001730 u32 vertexBindingDescriptionCount /// number of bindings
Jesse Halld27f6aa2015-08-15 17:58:48 -07001731 const VkVertexInputBindingDescription* pVertexBindingDescriptions
Jesse Hall03b6fe12015-11-24 12:44:21 -08001732 u32 vertexAttributeDescriptionCount /// number of attributes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001733 const VkVertexInputAttributeDescription* pVertexAttributeDescriptions
1734}
1735
1736class VkPipelineInputAssemblyStateCreateInfo {
1737 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
1738 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001739 VkPipelineInputAssemblyStateCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001740 VkPrimitiveTopology topology
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001741 VkBool32 primitiveRestartEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001742}
1743
1744class VkPipelineTessellationStateCreateInfo {
1745 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
1746 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001747 VkPipelineTessellationStateCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001748 u32 patchControlPoints
1749}
1750
1751class VkPipelineViewportStateCreateInfo {
1752 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
1753 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001754 VkPipelineViewportStateCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001755 u32 viewportCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001756 const VkViewport* pViewports
1757 u32 scissorCount
1758 const VkRect2D* pScissors
Jesse Halld27f6aa2015-08-15 17:58:48 -07001759}
1760
Jesse Hall3fbc8562015-11-29 22:10:52 -08001761class VkPipelineRasterizationStateCreateInfo {
Jesse Hall65ab5522015-11-30 00:07:16 -08001762 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001763 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001764 VkPipelineRasterizationStateCreateFlags flags
Jesse Hallae38f732015-11-19 21:32:50 -08001765 VkBool32 depthClampEnable
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001766 VkBool32 rasterizerDiscardEnable
Jesse Hall65ab5522015-11-30 00:07:16 -08001767 VkPolygonMode polygonMode /// optional (GL45)
Jesse Hallc7467b72015-11-29 21:05:26 -08001768 VkCullModeFlags cullMode
Jesse Halld27f6aa2015-08-15 17:58:48 -07001769 VkFrontFace frontFace
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001770 VkBool32 depthBiasEnable
Jesse Halla9bb62b2015-11-21 19:31:56 -08001771 f32 depthBiasConstantFactor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001772 f32 depthBiasClamp
Jesse Halla9bb62b2015-11-21 19:31:56 -08001773 f32 depthBiasSlopeFactor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001774 f32 lineWidth
Jesse Halld27f6aa2015-08-15 17:58:48 -07001775}
1776
1777class VkPipelineMultisampleStateCreateInfo {
1778 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
1779 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001780 VkPipelineMultisampleStateCreateFlags flags
Jesse Hall091ed9e2015-11-30 00:55:29 -08001781 VkSampleCountFlagBits rasterizationSamples /// Number of samples used for rasterization
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001782 VkBool32 sampleShadingEnable /// optional (GL45)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001783 f32 minSampleShading /// optional (GL45)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001784 const VkSampleMask* pSampleMask
Jesse Hallacfa5342015-11-19 21:51:33 -08001785 VkBool32 alphaToCoverageEnable
1786 VkBool32 alphaToOneEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001787}
1788
1789class VkPipelineColorBlendAttachmentState {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001790 VkBool32 blendEnable
Jesse Hall65ab5522015-11-30 00:07:16 -08001791 VkBlendFactor srcColorBlendFactor
1792 VkBlendFactor dstColorBlendFactor
1793 VkBlendOp colorBlendOp
1794 VkBlendFactor srcAlphaBlendFactor
1795 VkBlendFactor dstAlphaBlendFactor
1796 VkBlendOp alphaBlendOp
1797 VkColorComponentFlags colorWriteMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001798}
1799
1800class VkPipelineColorBlendStateCreateInfo {
1801 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
1802 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001803 VkPipelineColorBlendStateCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001804 VkBool32 logicOpEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001805 VkLogicOp logicOp
1806 u32 attachmentCount /// # of pAttachments
1807 const VkPipelineColorBlendAttachmentState* pAttachments
Jesse Hallb00daad2015-11-29 19:46:20 -08001808 f32[4] blendConstants
Jesse Halld27f6aa2015-08-15 17:58:48 -07001809}
1810
1811class VkStencilOpState {
Jesse Hall65ab5522015-11-30 00:07:16 -08001812 VkStencilOp failOp
1813 VkStencilOp passOp
1814 VkStencilOp depthFailOp
1815 VkCompareOp compareOp
1816 u32 compareMask
1817 u32 writeMask
1818 u32 reference
Jesse Halld27f6aa2015-08-15 17:58:48 -07001819}
1820
1821class VkPipelineDepthStencilStateCreateInfo {
1822 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
1823 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001824 VkPipelineDepthStencilStateCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001825 VkBool32 depthTestEnable
1826 VkBool32 depthWriteEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001827 VkCompareOp depthCompareOp
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001828 VkBool32 depthBoundsTestEnable /// optional (depth_bounds_test)
1829 VkBool32 stencilTestEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001830 VkStencilOpState front
1831 VkStencilOpState back
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001832 f32 minDepthBounds
1833 f32 maxDepthBounds
1834}
1835
1836class VkPipelineDynamicStateCreateInfo {
1837 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
1838 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001839 VkPipelineDynamicStateCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001840 u32 dynamicStateCount
1841 const VkDynamicState* pDynamicStates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001842}
1843
1844class VkGraphicsPipelineCreateInfo {
Jesse Halla6429252015-11-29 18:59:42 -08001845 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
1846 const void* pNext /// Pointer to next structure
1847 VkPipelineCreateFlags flags /// Pipeline creation flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001848 u32 stageCount
Jesse Halla6429252015-11-29 18:59:42 -08001849 const VkPipelineShaderStageCreateInfo* pStages /// One entry for each active shader stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001850 const VkPipelineVertexInputStateCreateInfo* pVertexInputState
1851 const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState
1852 const VkPipelineTessellationStateCreateInfo* pTessellationState
1853 const VkPipelineViewportStateCreateInfo* pViewportState
Jesse Hall3fbc8562015-11-29 22:10:52 -08001854 const VkPipelineRasterizationStateCreateInfo* pRasterizationState
Jesse Halld27f6aa2015-08-15 17:58:48 -07001855 const VkPipelineMultisampleStateCreateInfo* pMultisampleState
1856 const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState
1857 const VkPipelineColorBlendStateCreateInfo* pColorBlendState
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001858 const VkPipelineDynamicStateCreateInfo* pDynamicState
Jesse Halla6429252015-11-29 18:59:42 -08001859 VkPipelineLayout layout /// Interface layout of the pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07001860 VkRenderPass renderPass
1861 u32 subpass
Jesse Halla6429252015-11-29 18:59:42 -08001862 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
1863 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
Jesse Halld27f6aa2015-08-15 17:58:48 -07001864}
1865
1866class VkPipelineCacheCreateInfo {
Jesse Hallb00daad2015-11-29 19:46:20 -08001867 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
1868 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001869 VkPipelineCacheCreateFlags flags
Jesse Hallb00daad2015-11-29 19:46:20 -08001870 platform.size_t initialDataSize /// Size of initial data to populate cache, in bytes
1871 const void* pInitialData /// Initial data to populate cache
Jesse Halld27f6aa2015-08-15 17:58:48 -07001872}
1873
1874class VkPushConstantRange {
1875 VkShaderStageFlags stageFlags /// Which stages use the range
Jesse Hall03b6fe12015-11-24 12:44:21 -08001876 u32 offset /// Start of the range, in bytes
1877 u32 size /// Length of the range, in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001878}
1879
1880class VkPipelineLayoutCreateInfo {
1881 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
1882 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001883 VkPipelineLayoutCreateFlags flags
Jesse Hall03b6fe12015-11-24 12:44:21 -08001884 u32 setLayoutCount /// Number of descriptor sets interfaced by the pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07001885 const VkDescriptorSetLayout* pSetLayouts /// Array of <setCount> number of descriptor set layout objects defining the layout of the
1886 u32 pushConstantRangeCount /// Number of push-constant ranges used by the pipeline
1887 const VkPushConstantRange* pPushConstantRanges /// Array of pushConstantRangeCount number of ranges used by various shader stages
1888}
1889
1890class VkSamplerCreateInfo {
1891 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
1892 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001893 VkSamplerCreateFlags flags
Jesse Hall23ff73f2015-11-29 14:36:39 -08001894 VkFilter magFilter /// Filter mode for magnification
1895 VkFilter minFilter /// Filter mode for minifiation
1896 VkSamplerMipmapMode mipmapMode /// Mipmap selection mode
1897 VkSamplerAddressMode addressModeU
1898 VkSamplerAddressMode addressModeV
1899 VkSamplerAddressMode addressModeW
Jesse Halld27f6aa2015-08-15 17:58:48 -07001900 f32 mipLodBias
1901 f32 maxAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001902 VkBool32 compareEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001903 VkCompareOp compareOp
1904 f32 minLod
1905 f32 maxLod
1906 VkBorderColor borderColor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001907 VkBool32 unnormalizedCoordinates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001908}
1909
Jesse Hall3fbc8562015-11-29 22:10:52 -08001910class VkCommandPoolCreateInfo {
1911 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001912 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001913 VkCommandPoolCreateFlags flags /// Command pool creation flags
Jesse Halla6429252015-11-29 18:59:42 -08001914 u32 queueFamilyIndex
Jesse Halld27f6aa2015-08-15 17:58:48 -07001915}
1916
Jesse Hall3fbc8562015-11-29 22:10:52 -08001917class VkCommandBufferAllocateInfo {
1918 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001919 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001920 VkCommandPool commandPool
1921 VkCommandBufferLevel level
Jesse Hall03b6fe12015-11-24 12:44:21 -08001922 u32 bufferCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001923}
1924
Jesse Hall3fbc8562015-11-29 22:10:52 -08001925class VkCommandBufferBeginInfo {
1926 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001927 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001928 VkCommandBufferUsageFlags flags /// Command buffer usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001929 VkRenderPass renderPass /// Render pass for secondary command buffers
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001930 u32 subpass
Jesse Halld27f6aa2015-08-15 17:58:48 -07001931 VkFramebuffer framebuffer /// Framebuffer for secondary command buffers
1932}
1933
1934class VkRenderPassBeginInfo {
1935 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
1936 const void* pNext /// Pointer to next structure
1937 VkRenderPass renderPass
1938 VkFramebuffer framebuffer
1939 VkRect2D renderArea
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001940 u32 clearValueCount
1941 const VkClearValue* pClearValues
Jesse Halld27f6aa2015-08-15 17:58:48 -07001942}
1943
1944@union
1945/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
1946class VkClearColorValue {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001947 f32[4] float32
1948 s32[4] int32
1949 u32[4] uint32
Jesse Halld27f6aa2015-08-15 17:58:48 -07001950}
1951
1952class VkClearDepthStencilValue {
1953 f32 depth
1954 u32 stencil
1955}
1956
1957@union
1958/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
1959class VkClearValue {
1960 VkClearColorValue color
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001961 VkClearDepthStencilValue depthStencil
Jesse Halld27f6aa2015-08-15 17:58:48 -07001962}
1963
Jesse Hallae38f732015-11-19 21:32:50 -08001964class VkClearAttachment {
1965 VkImageAspectFlags aspectMask
1966 u32 colorAttachment
1967 VkClearValue clearValue
1968}
1969
Jesse Halld27f6aa2015-08-15 17:58:48 -07001970class VkAttachmentDescription {
Jesse Halla6429252015-11-29 18:59:42 -08001971 VkAttachmentDescriptionFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001972 VkFormat format
Jesse Hall091ed9e2015-11-30 00:55:29 -08001973 VkSampleCountFlagBits samples
Jesse Halld27f6aa2015-08-15 17:58:48 -07001974 VkAttachmentLoadOp loadOp /// Load op for color or depth data
1975 VkAttachmentStoreOp storeOp /// Store op for color or depth data
1976 VkAttachmentLoadOp stencilLoadOp /// Load op for stencil data
1977 VkAttachmentStoreOp stencilStoreOp /// Store op for stencil data
1978 VkImageLayout initialLayout
1979 VkImageLayout finalLayout
1980}
1981
1982class VkAttachmentReference {
1983 u32 attachment
1984 VkImageLayout layout
1985}
1986
1987class VkSubpassDescription {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001988 VkSubpassDescriptionFlags flags
Jesse Halla6429252015-11-29 18:59:42 -08001989 VkPipelineBindPoint pipelineBindPoint /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
Jesse Hall03b6fe12015-11-24 12:44:21 -08001990 u32 inputAttachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001991 const VkAttachmentReference* pInputAttachments
Jesse Hall03b6fe12015-11-24 12:44:21 -08001992 u32 colorAttachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001993 const VkAttachmentReference* pColorAttachments
1994 const VkAttachmentReference* pResolveAttachments
Jesse Hallc7467b72015-11-29 21:05:26 -08001995 const VkAttachmentReference* pDepthStencilAttachment
Jesse Hall03b6fe12015-11-24 12:44:21 -08001996 u32 preserveAttachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001997 const VkAttachmentReference* pPreserveAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001998}
1999
2000class VkSubpassDependency {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002001 u32 srcSubpass
Jesse Hall3fbc8562015-11-29 22:10:52 -08002002 u32 dstSubpass
Jesse Halld27f6aa2015-08-15 17:58:48 -07002003 VkPipelineStageFlags srcStageMask
Jesse Hall3fbc8562015-11-29 22:10:52 -08002004 VkPipelineStageFlags dstStageMask
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002005 VkAccessFlags srcAccessMask
2006 VkAccessFlags dstAccessMask
Jesse Halldc6d36c2015-11-29 19:12:15 -08002007 VkDependencyFlags dependencyFlags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002008}
2009
2010class VkRenderPassCreateInfo {
2011 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
2012 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002013 VkRenderPassCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002014 u32 attachmentCount
2015 const VkAttachmentDescription* pAttachments
2016 u32 subpassCount
2017 const VkSubpassDescription* pSubpasses
2018 u32 dependencyCount
2019 const VkSubpassDependency* pDependencies
2020}
2021
2022class VkEventCreateInfo {
2023 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
2024 const void* pNext /// Pointer to next structure
2025 VkEventCreateFlags flags /// Event creation flags
2026}
2027
2028class VkFenceCreateInfo {
2029 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
2030 const void* pNext /// Pointer to next structure
2031 VkFenceCreateFlags flags /// Fence creation flags
2032}
2033
2034class VkPhysicalDeviceFeatures {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002035 VkBool32 robustBufferAccess /// out of bounds buffer accesses are well defined
2036 VkBool32 fullDrawIndexUint32 /// full 32-bit range of indices for indexed draw calls
2037 VkBool32 imageCubeArray /// image views which are arrays of cube maps
2038 VkBool32 independentBlend /// blending operations are controlled per-attachment
2039 VkBool32 geometryShader /// geometry stage
2040 VkBool32 tessellationShader /// tessellation control and evaluation stage
2041 VkBool32 sampleRateShading /// per-sample shading and interpolation
Jesse Hall3fbc8562015-11-29 22:10:52 -08002042 VkBool32 dualSrcBlend /// blend operations which take two sources
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002043 VkBool32 logicOp /// logic operations
2044 VkBool32 multiDrawIndirect /// multi draw indirect
Jesse Hallae38f732015-11-19 21:32:50 -08002045 VkBool32 depthClamp /// depth clamping
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002046 VkBool32 depthBiasClamp /// depth bias clamping
2047 VkBool32 fillModeNonSolid /// point and wireframe fill modes
2048 VkBool32 depthBounds /// depth bounds test
2049 VkBool32 wideLines /// lines with width greater than 1
2050 VkBool32 largePoints /// points with size greater than 1
Jesse Hallfbf97b02015-11-20 14:17:03 -08002051 VkBool32 alphaToOne /// The fragment alpha channel can be forced to maximum representable alpha value
2052 VkBool32 multiViewport
2053 VkBool32 samplerAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002054 VkBool32 textureCompressionETC2 /// ETC texture compression formats
2055 VkBool32 textureCompressionASTC_LDR /// ASTC LDR texture compression formats
2056 VkBool32 textureCompressionBC /// BC1-7 texture compressed formats
Jesse Hall65ab5522015-11-30 00:07:16 -08002057 VkBool32 occlusionQueryPrecise
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002058 VkBool32 pipelineStatisticsQuery /// pipeline statistics query
Jesse Halldc6d36c2015-11-29 19:12:15 -08002059 VkBool32 vertexPipelineStoresAndAtomics
2060 VkBool32 fragmentStoresAndAtomics
2061 VkBool32 shaderTessellationAndGeometryPointSize
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002062 VkBool32 shaderImageGatherExtended /// texture gather with run-time values and independent offsets
2063 VkBool32 shaderStorageImageExtendedFormats /// the extended set of formats can be used for storage images
2064 VkBool32 shaderStorageImageMultisample /// multisample images can be used for storage images
Jesse Halld1af8122015-11-29 23:50:38 -08002065 VkBool32 shaderStorageImageReadWithoutFormat
2066 VkBool32 shaderStorageImageWriteWithoutFormat
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002067 VkBool32 shaderUniformBufferArrayDynamicIndexing /// arrays of uniform buffers can be accessed with dynamically uniform indices
2068 VkBool32 shaderSampledImageArrayDynamicIndexing /// arrays of sampled images can be accessed with dynamically uniform indices
2069 VkBool32 shaderStorageBufferArrayDynamicIndexing /// arrays of storage buffers can be accessed with dynamically uniform indices
2070 VkBool32 shaderStorageImageArrayDynamicIndexing /// arrays of storage images can be accessed with dynamically uniform indices
2071 VkBool32 shaderClipDistance /// clip distance in shaders
2072 VkBool32 shaderCullDistance /// cull distance in shaders
2073 VkBool32 shaderFloat64 /// 64-bit floats (doubles) in shaders
2074 VkBool32 shaderInt64 /// 64-bit integers in shaders
2075 VkBool32 shaderInt16 /// 16-bit integers in shaders
2076 VkBool32 shaderResourceResidency /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
Jesse Hall65ab5522015-11-30 00:07:16 -08002077 VkBool32 shaderResourceMinLod /// shader can use texture operations that specify minimum resource LOD
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002078 VkBool32 sparseBinding /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
2079 VkBool32 sparseResidencyBuffer /// Sparse resources support: GPU can access partially resident buffers
2080 VkBool32 sparseResidencyImage2D /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
2081 VkBool32 sparseResidencyImage3D /// Sparse resources support: GPU can access partially resident 3D images
2082 VkBool32 sparseResidency2Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
2083 VkBool32 sparseResidency4Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
2084 VkBool32 sparseResidency8Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
2085 VkBool32 sparseResidency16Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
2086 VkBool32 sparseResidencyAliased /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
Jesse Halld1af8122015-11-29 23:50:38 -08002087 VkBool32 variableMultisampleRate
Jesse Halld27f6aa2015-08-15 17:58:48 -07002088}
2089
2090class VkPhysicalDeviceLimits {
2091 /// resource maximum sizes
2092 u32 maxImageDimension1D /// max 1D image dimension
2093 u32 maxImageDimension2D /// max 2D image dimension
2094 u32 maxImageDimension3D /// max 3D image dimension
2095 u32 maxImageDimensionCube /// max cubemap image dimension
2096 u32 maxImageArrayLayers /// max layers for image arrays
Jesse Hallb00daad2015-11-29 19:46:20 -08002097 u32 maxTexelBufferElements
Jesse Hallfbf97b02015-11-20 14:17:03 -08002098 u32 maxUniformBufferRange /// max uniform buffer size (bytes)
2099 u32 maxStorageBufferRange /// max storage buffer size (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002100 u32 maxPushConstantsSize /// max size of the push constants pool (bytes)
2101 /// memory limits
2102 u32 maxMemoryAllocationCount /// max number of device memory allocations supported
Jesse Hall091ed9e2015-11-30 00:55:29 -08002103 u32 maxSamplerAllocationCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002104 VkDeviceSize bufferImageGranularity /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
2105 VkDeviceSize sparseAddressSpaceSize /// Total address space available for sparse allocations (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002106 /// descriptor set limits
2107 u32 maxBoundDescriptorSets /// max number of descriptors sets that can be bound to a pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07002108 u32 maxPerStageDescriptorSamplers /// max num of samplers allowed per-stage in a descriptor set
2109 u32 maxPerStageDescriptorUniformBuffers /// max num of uniform buffers allowed per-stage in a descriptor set
2110 u32 maxPerStageDescriptorStorageBuffers /// max num of storage buffers allowed per-stage in a descriptor set
2111 u32 maxPerStageDescriptorSampledImages /// max num of sampled images allowed per-stage in a descriptor set
2112 u32 maxPerStageDescriptorStorageImages /// max num of storage images allowed per-stage in a descriptor set
Jesse Halle1b12782015-11-30 11:27:32 -08002113 u32 maxPerStageDescriptorInputAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07002114 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set
2115 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002116 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07002117 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002118 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07002119 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set
2120 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set
Jesse Halle1b12782015-11-30 11:27:32 -08002121 u32 maxDescriptorSetInputAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07002122 /// vertex stage limits
2123 u32 maxVertexInputAttributes /// max num of vertex input attribute slots
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002124 u32 maxVertexInputBindings /// max num of vertex input binding slots
Jesse Halld27f6aa2015-08-15 17:58:48 -07002125 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset
2126 u32 maxVertexInputBindingStride /// max vertex input binding stride
2127 u32 maxVertexOutputComponents /// max num of output components written by vertex shader
2128 /// tessellation control stage limits
Jesse Hall3fbc8562015-11-29 22:10:52 -08002129 u32 maxTessellationGenerationLevel /// max level supported by tess primitive generator
Jesse Hallae38f732015-11-19 21:32:50 -08002130 u32 maxTessellationPatchSize /// max patch size (vertices)
2131 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS
2132 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
2133 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS
2134 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS
2135 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES
2136 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES
Jesse Halld27f6aa2015-08-15 17:58:48 -07002137 /// geometry stage limits
2138 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader
2139 u32 maxGeometryInputComponents /// max num of input components read in geometry stage
2140 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage
2141 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage
2142 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage
2143 /// fragment stage limits
2144 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage
Jesse Hallfbf97b02015-11-20 14:17:03 -08002145 u32 maxFragmentOutputAttachments /// max num of output attachments written in fragment stage
Jesse Hall3fbc8562015-11-29 22:10:52 -08002146 u32 maxFragmentDualSrcAttachments /// max num of output attachments written when using dual source blending
Jesse Halld27f6aa2015-08-15 17:58:48 -07002147 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers
2148 /// compute stage limits
2149 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes)
2150 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z)
2151 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group
2152 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z)
2153
2154 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y
2155 u32 subTexelPrecisionBits /// num bits of subtexel precision
2156 u32 mipmapPrecisionBits /// num bits of mipmap precision
2157
2158 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices)
2159 u32 maxDrawIndirectInstanceCount /// max instance count for indirect draw calls
Jesse Halld27f6aa2015-08-15 17:58:48 -07002160
2161 f32 maxSamplerLodBias /// max absolute sampler level of detail bias
2162 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy
2163
2164 u32 maxViewports /// max number of active viewports
Jesse Halld27f6aa2015-08-15 17:58:48 -07002165 u32[2] maxViewportDimensions /// max viewport dimensions (x,y)
2166 f32[2] viewportBoundsRange /// viewport bounds range (min,max)
2167 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport
2168
Jesse Halldc6d36c2015-11-29 19:12:15 -08002169 platform.size_t minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes)
2170 VkDeviceSize minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes)
2171 VkDeviceSize minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes)
2172 VkDeviceSize minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002173
Jesse Hallfbf97b02015-11-20 14:17:03 -08002174 s32 minTexelOffset /// min texel offset for OpTextureSampleOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002175 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset
Jesse Hallfbf97b02015-11-20 14:17:03 -08002176 s32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002177 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset
2178 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset
2179 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset
2180 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset
2181
2182 u32 maxFramebufferWidth /// max width for a framebuffer
2183 u32 maxFramebufferHeight /// max height for a framebuffer
2184 u32 maxFramebufferLayers /// max layer count for a layered framebuffer
Jesse Hall091ed9e2015-11-30 00:55:29 -08002185 VkSampleCountFlags framebufferColorSampleCounts
2186 VkSampleCountFlags framebufferDepthSampleCounts
2187 VkSampleCountFlags framebufferStencilSampleCounts
2188 VkSampleCountFlags framebufferNoAttachmentSampleCounts
Jesse Halld27f6aa2015-08-15 17:58:48 -07002189 u32 maxColorAttachments /// max num of framebuffer color attachments
2190
Jesse Hall091ed9e2015-11-30 00:55:29 -08002191 VkSampleCountFlags sampledImageColorSampleCounts
2192 VkSampleCountFlags sampledImageIntegerSampleCounts
2193 VkSampleCountFlags sampledImageDepthSampleCounts
2194 VkSampleCountFlags sampledImageStencilSampleCounts
2195 VkSampleCountFlags storageImageSampleCounts
Jesse Halld27f6aa2015-08-15 17:58:48 -07002196 u32 maxSampleMaskWords /// max num of sample mask words
2197
Jesse Halla9bb62b2015-11-21 19:31:56 -08002198 f32 timestampPeriod
Jesse Halld27f6aa2015-08-15 17:58:48 -07002199
2200 u32 maxClipDistances /// max number of clip distances
2201 u32 maxCullDistances /// max number of cull distances
2202 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping
2203
Jesse Hallfbf97b02015-11-20 14:17:03 -08002204 u32 discreteQueuePriorities
2205
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002206 f32[2] pointSizeRange /// range (min,max) of supported point sizes
2207 f32[2] lineWidthRange /// range (min,max) of supported line widths
Jesse Halld27f6aa2015-08-15 17:58:48 -07002208 f32 pointSizeGranularity /// granularity of supported point sizes
2209 f32 lineWidthGranularity /// granularity of supported line widths
Jesse Hall03b6fe12015-11-24 12:44:21 -08002210 VkBool32 strictLines
Jesse Hall091ed9e2015-11-30 00:55:29 -08002211 VkBool32 standardSampleLocations
Jesse Halla9bb62b2015-11-21 19:31:56 -08002212
Jesse Hall65ab5522015-11-30 00:07:16 -08002213 VkDeviceSize optimalBufferCopyOffsetAlignment
2214 VkDeviceSize optimalBufferCopyRowPitchAlignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07002215}
2216
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002217class VkPhysicalDeviceSparseProperties {
2218 VkBool32 residencyStandard2DBlockShape /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
Jesse Hallb00daad2015-11-29 19:46:20 -08002219 VkBool32 residencyStandard2DMultisampleBlockShape /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002220 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
2221 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
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002222 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
2223}
2224
Jesse Halld27f6aa2015-08-15 17:58:48 -07002225class VkSemaphoreCreateInfo {
2226 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
2227 const void* pNext /// Pointer to next structure
2228 VkSemaphoreCreateFlags flags /// Semaphore creation flags
2229}
2230
2231class VkQueryPoolCreateInfo {
2232 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
2233 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002234 VkQueryPoolCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002235 VkQueryType queryType
Jesse Hall65ab5522015-11-30 00:07:16 -08002236 u32 entryCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07002237 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional
2238}
2239
2240class VkFramebufferCreateInfo {
2241 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
2242 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002243 VkFramebufferCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002244 VkRenderPass renderPass
2245 u32 attachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002246 const VkImageView* pAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07002247 u32 width
2248 u32 height
2249 u32 layers
2250}
2251
Jesse Hall3fbc8562015-11-29 22:10:52 -08002252class VkDrawIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002253 u32 vertexCount
2254 u32 instanceCount
2255 u32 firstVertex
2256 u32 firstInstance
2257}
2258
Jesse Hall3fbc8562015-11-29 22:10:52 -08002259class VkDrawIndexedIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002260 u32 indexCount
2261 u32 instanceCount
2262 u32 firstIndex
2263 s32 vertexOffset
2264 u32 firstInstance
2265}
2266
Jesse Hall3fbc8562015-11-29 22:10:52 -08002267class VkDispatchIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002268 u32 x
2269 u32 y
2270 u32 z
2271}
2272
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002273@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08002274class VkSurfaceCapabilitiesKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002275 u32 minImageCount
2276 u32 maxImageCount
2277 VkExtent2D currentExtent
2278 VkExtent2D minImageExtent
2279 VkExtent2D maxImageExtent
2280 VkSurfaceTransformFlagsKHR supportedTransforms
2281 VkSurfaceTransformKHR currentTransform
Jesse Halla6429252015-11-29 18:59:42 -08002282 VkCompositeAlphaFlagsKHR supportedCompositeAlpha
Jesse Hall1356b0d2015-11-23 17:24:58 -08002283 u32 maxImageArraySize
2284 VkImageUsageFlags supportedUsageFlags
Michael Lentine88594d72015-11-12 12:49:45 -08002285}
2286
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002287@extension("VK_KHR_surface")
Michael Lentine88594d72015-11-12 12:49:45 -08002288class VkSurfaceFormatKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002289 VkFormat format
2290 VkColorSpaceKHR colorSpace
Michael Lentine88594d72015-11-12 12:49:45 -08002291}
2292
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002293@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08002294class VkSwapchainCreateInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002295 VkStructureType sType
2296 const void* pNext
2297 VkSurfaceKHR surface
2298 u32 minImageCount
2299 VkFormat imageFormat
2300 VkColorSpaceKHR imageColorSpace
2301 VkExtent2D imageExtent
2302 VkImageUsageFlags imageUsageFlags
2303 VkSurfaceTransformKHR preTransform
Jesse Halla6429252015-11-29 18:59:42 -08002304 VkCompositeAlphaFlagBitsKHR compositeAlpha
Jesse Hall1356b0d2015-11-23 17:24:58 -08002305 u32 imageArraySize
2306 VkSharingMode sharingMode
Jesse Hall03b6fe12015-11-24 12:44:21 -08002307 u32 queueFamilyIndexCount
Jesse Hall1356b0d2015-11-23 17:24:58 -08002308 const u32* pQueueFamilyIndices
2309 VkPresentModeKHR presentMode
2310 VkSwapchainKHR oldSwapchain
2311 VkBool32 clipped
Michael Lentine88594d72015-11-12 12:49:45 -08002312}
2313
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002314@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08002315class VkPresentInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002316 VkStructureType sType
2317 const void* pNext
Jesse Hallb00daad2015-11-29 19:46:20 -08002318 u32 waitSemaphoreCount
2319 const VkSemaphore* pWaitSemaphores
Jesse Hall1356b0d2015-11-23 17:24:58 -08002320 u32 swapchainCount
Jesse Hall03b6fe12015-11-24 12:44:21 -08002321 const VkSwapchainKHR* pSwapchains
Jesse Hall1356b0d2015-11-23 17:24:58 -08002322 const u32* imageIndices
Jesse Halle1b12782015-11-30 11:27:32 -08002323 VkResult* pResults
Michael Lentine88594d72015-11-12 12:49:45 -08002324}
2325
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002326@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002327class VkDisplayPropertiesKHR {
2328 VkDisplayKHR display
2329 const char* displayName
2330 VkExtent2D physicalDimensions
2331 VkExtent2D physicalResolution
2332 VkSurfaceTransformFlagsKHR supportedTransforms
Jesse Hall1356b0d2015-11-23 17:24:58 -08002333 VkBool32 planeReorderPossible
Jesse Halla6429252015-11-29 18:59:42 -08002334 VkBool32 persistentContent
Michael Lentine88594d72015-11-12 12:49:45 -08002335}
2336
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002337@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002338class VkDisplayModeParametersKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002339 VkExtent2D visibleRegion
Jesse Halla6429252015-11-29 18:59:42 -08002340 u32 refreshRate
Michael Lentine88594d72015-11-12 12:49:45 -08002341}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002342
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002343@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002344class VkDisplayModePropertiesKHR {
2345 VkDisplayModeKHR displayMode
Jesse Halla6429252015-11-29 18:59:42 -08002346 VkDisplayModeParametersKHR parameters
Jesse Hall1356b0d2015-11-23 17:24:58 -08002347}
2348
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002349@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002350class VkDisplayModeCreateInfoKHR {
2351 VkStructureType sType
2352 const void* pNext
Jesse Halla6429252015-11-29 18:59:42 -08002353 VkDisplayModeParametersKHR parameters
Jesse Hall1356b0d2015-11-23 17:24:58 -08002354}
2355
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002356@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002357class VkDisplayPlanePropertiesKHR {
Jesse Halla6429252015-11-29 18:59:42 -08002358 VkDisplayKHR currentDisplay
2359 u32 currentStackIndex
2360}
2361
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002362@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002363class VkDisplayPlaneCapabilitiesKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002364 VkDisplayPlaneAlphaFlagsKHR supportedAlpha
2365 VkOffset2D minSrcPosition
2366 VkOffset2D maxSrcPosition
2367 VkExtent2D minSrcExtent
2368 VkExtent2D maxSrcExtent
2369 VkOffset2D minDstPosition
2370 VkOffset2D maxDstPosition
2371 VkExtent2D minDstExtent
2372 VkExtent2D maxDstExtent
2373}
2374
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002375@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002376class VkDisplaySurfaceCreateInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002377 VkStructureType sType
2378 const void* pNext
2379 VkDisplayModeKHR displayMode
2380 u32 planeIndex
2381 u32 planeStackIndex
2382 VkSurfaceTransformKHR transform
2383 f32 globalAlpha
2384 VkDisplayPlaneAlphaFlagsKHR alphaMode
2385 VkExtent2D imageSize
2386}
2387
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002388@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002389class VkDisplaySwapchainCreateInfoKHR {
2390 VkStructureType sType
2391 const void* pNext
2392 const VkSwapchainCreateInfoKHR* pNextSwapchainCreateInfo
2393}
2394
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002395@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002396class VkDisplayPresentInfoKHR {
2397 VkStructureType sType
2398 const void* pNext
2399 VkRect2D srcRect
2400 VkRect2D dstRect
Jesse Halla6429252015-11-29 18:59:42 -08002401 VkBool32 persistent
Jesse Hall1356b0d2015-11-23 17:24:58 -08002402}
2403
2404
Jesse Halld27f6aa2015-08-15 17:58:48 -07002405////////////////
2406// Commands //
2407////////////////
2408
2409// Function pointers. TODO: add support for function pointers.
2410
2411@external type void* PFN_vkVoidFunction
2412@pfn cmd void vkVoidFunction() {
2413}
2414
Jesse Hall3fbc8562015-11-29 22:10:52 -08002415@external type void* PFN_vkAllocationFunction
2416@pfn cmd void* vkAllocationFunction(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002417 void* pUserData,
2418 platform.size_t size,
2419 platform.size_t alignment,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002420 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002421 return ?
2422}
2423
Jesse Hall3fbc8562015-11-29 22:10:52 -08002424@external type void* PFN_vkReallocationFunction
2425@pfn cmd void* vkReallocationFunction(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002426 void* pUserData,
2427 void* pOriginal,
2428 platform.size_t size,
2429 platform.size_t alignment,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002430 VkSystemAllocationScope allocationScope) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002431 return ?
2432}
2433
2434@external type void* PFN_vkFreeFunction
2435@pfn cmd void vkFreeFunction(
2436 void* pUserData,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002437 void* pMemory) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002438}
2439
Jesse Hall3fbc8562015-11-29 22:10:52 -08002440@external type void* PFN_vkInternalAllocationNotification
2441@pfn cmd void vkInternalAllocationNotification(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002442 void* pUserData,
2443 platform.size_t size,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002444 VkInternalAllocationType allocationType,
2445 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002446}
2447
2448@external type void* PFN_vkInternalFreeNotification
2449@pfn cmd void vkInternalFreeNotification(
2450 void* pUserData,
2451 platform.size_t size,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002452 VkInternalAllocationType allocationType,
2453 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002454}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002455
2456// Global functions
2457
2458@threadSafety("system")
2459cmd VkResult vkCreateInstance(
2460 const VkInstanceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002461 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002462 VkInstance* pInstance) {
2463 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2464
2465 instance := ?
2466 pInstance[0] = instance
2467 State.Instances[instance] = new!InstanceObject()
2468
Jesse Hall03b6fe12015-11-24 12:44:21 -08002469 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerNameCount]
2470 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionNameCount]
Jesse Halld27f6aa2015-08-15 17:58:48 -07002471
2472 return ?
2473}
2474
2475@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002476cmd void vkDestroyInstance(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002477 VkInstance instance,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002478 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002479 instanceObject := GetInstance(instance)
2480
2481 State.Instances[instance] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002482}
2483
2484@threadSafety("system")
2485cmd VkResult vkEnumeratePhysicalDevices(
2486 VkInstance instance,
2487 u32* pPhysicalDeviceCount,
2488 VkPhysicalDevice* pPhysicalDevices) {
2489 instanceObject := GetInstance(instance)
2490
2491 physicalDeviceCount := as!u32(?)
2492 pPhysicalDeviceCount[0] = physicalDeviceCount
2493 physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2494
2495 for i in (0 .. physicalDeviceCount) {
2496 physicalDevice := ?
2497 physicalDevices[i] = physicalDevice
2498 if !(physicalDevice in State.PhysicalDevices) {
2499 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2500 }
2501 }
2502
2503 return ?
2504}
2505
2506cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2507 VkDevice device,
2508 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002509 if device != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002510 device := GetDevice(device)
2511 }
2512
2513 return ?
2514}
2515
2516cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2517 VkInstance instance,
2518 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002519 if instance != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002520 instanceObject := GetInstance(instance)
2521 }
2522
2523 return ?
2524}
2525
Jesse Hall606a54e2015-11-19 22:17:28 -08002526cmd void vkGetPhysicalDeviceProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002527 VkPhysicalDevice physicalDevice,
2528 VkPhysicalDeviceProperties* pProperties) {
2529 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2530
2531 properties := ?
2532 pProperties[0] = properties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002533}
2534
Jesse Hall606a54e2015-11-19 22:17:28 -08002535cmd void vkGetPhysicalDeviceQueueFamilyProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002536 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002537 u32* pQueueFamilyPropertyCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002538 VkQueueFamilyProperties* pQueueFamilyProperties) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002539 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002540 // TODO: Figure out how to express fetch-count-or-properties
2541 // This version fails 'apic validate' with 'fence not allowed in
2542 // *semantic.Branch'. Other attempts have failed with the same or other
2543 // errors.
2544 // if pQueueFamilyProperties != null {
2545 // queuesProperties := pQueueFamilyProperties[0:pCount[0]]
2546 // for i in (0 .. pCount[0]) {
2547 // queueProperties := as!VkQueueFamilyProperties(?)
2548 // queuesProperties[i] = queueProperties
2549 // }
2550 // } else {
2551 // count := ?
2552 // pCount[0] = count
2553 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002554}
2555
Jesse Hall606a54e2015-11-19 22:17:28 -08002556cmd void vkGetPhysicalDeviceMemoryProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002557 VkPhysicalDevice physicalDevice,
2558 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
2559 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2560
2561 memoryProperties := ?
2562 pMemoryProperties[0] = memoryProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002563}
2564
Jesse Hall606a54e2015-11-19 22:17:28 -08002565cmd void vkGetPhysicalDeviceFeatures(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002566 VkPhysicalDevice physicalDevice,
2567 VkPhysicalDeviceFeatures* pFeatures) {
2568 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2569
2570 features := ?
2571 pFeatures[0] = features
Jesse Halld27f6aa2015-08-15 17:58:48 -07002572}
2573
Jesse Hall606a54e2015-11-19 22:17:28 -08002574cmd void vkGetPhysicalDeviceFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002575 VkPhysicalDevice physicalDevice,
2576 VkFormat format,
2577 VkFormatProperties* pFormatProperties) {
2578 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2579
2580 formatProperties := ?
2581 pFormatProperties[0] = formatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002582}
2583
Jesse Halla9e57032015-11-30 01:03:10 -08002584cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002585 VkPhysicalDevice physicalDevice,
2586 VkFormat format,
2587 VkImageType type,
2588 VkImageTiling tiling,
2589 VkImageUsageFlags usage,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002590 VkImageCreateFlags flags,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002591 VkImageFormatProperties* pImageFormatProperties) {
2592 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2593
2594 imageFormatProperties := ?
2595 pImageFormatProperties[0] = imageFormatProperties
Jesse Halla9e57032015-11-30 01:03:10 -08002596
2597 return ?
Jesse Halld27f6aa2015-08-15 17:58:48 -07002598}
2599
Jesse Halld27f6aa2015-08-15 17:58:48 -07002600
2601// Device functions
2602
2603@threadSafety("system")
2604cmd VkResult vkCreateDevice(
2605 VkPhysicalDevice physicalDevice,
2606 const VkDeviceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002607 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002608 VkDevice* pDevice) {
2609 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2610 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2611
2612 device := ?
2613 pDevice[0] = device
2614 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2615
2616 return ?
2617}
2618
2619@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002620cmd void vkDestroyDevice(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002621 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002622 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002623 deviceObject := GetDevice(device)
2624
2625 State.Devices[device] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002626}
2627
2628
2629// Extension discovery functions
2630
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002631cmd VkResult vkEnumerateInstanceLayerProperties(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002632 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002633 VkLayerProperties* pProperties) {
2634 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002635 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002636
2637 properties := pProperties[0:count]
2638 for i in (0 .. count) {
2639 property := ?
2640 properties[i] = property
2641 }
2642
2643 return ?
2644}
2645
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002646cmd VkResult vkEnumerateInstanceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002647 const char* pLayerName,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002648 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002649 VkExtensionProperties* pProperties) {
2650 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002651 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002652
2653 properties := pProperties[0:count]
2654 for i in (0 .. count) {
2655 property := ?
2656 properties[i] = property
2657 }
2658
2659 return ?
2660}
2661
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002662cmd VkResult vkEnumerateDeviceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002663 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002664 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002665 VkLayerProperties* pProperties) {
2666 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2667 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002668 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002669
2670 properties := pProperties[0:count]
2671 for i in (0 .. count) {
2672 property := ?
2673 properties[i] = property
2674 }
2675
2676 return ?
2677}
2678
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002679cmd VkResult vkEnumerateDeviceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002680 VkPhysicalDevice physicalDevice,
2681 const char* pLayerName,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002682 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002683 VkExtensionProperties* pProperties) {
2684 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2685
2686 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002687 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002688
2689 properties := pProperties[0:count]
2690 for i in (0 .. count) {
2691 property := ?
2692 properties[i] = property
2693 }
2694
2695 return ?
2696}
2697
2698
2699// Queue functions
2700
2701@threadSafety("system")
Jesse Hall606a54e2015-11-19 22:17:28 -08002702cmd void vkGetDeviceQueue(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002703 VkDevice device,
2704 u32 queueFamilyIndex,
2705 u32 queueIndex,
2706 VkQueue* pQueue) {
2707 deviceObject := GetDevice(device)
2708
2709 queue := ?
2710 pQueue[0] = queue
2711
2712 if !(queue in State.Queues) {
2713 State.Queues[queue] = new!QueueObject(device: device)
2714 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002715}
2716
2717@threadSafety("app")
2718cmd VkResult vkQueueSubmit(
2719 VkQueue queue,
Jesse Halla366a512015-11-19 22:30:07 -08002720 u32 submitCount,
Jesse Hallb00daad2015-11-29 19:46:20 -08002721 const VkSubmitInfo* pSubmits,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002722 VkFence fence) {
2723 queueObject := GetQueue(queue)
2724
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002725 if fence != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002726 fenceObject := GetFence(fence)
2727 assert(fenceObject.device == queueObject.device)
2728 }
2729
Jesse Hall3fbc8562015-11-29 22:10:52 -08002730 // commandBuffers := pcommandBuffers[0:commandBufferCount]
2731 // for i in (0 .. commandBufferCount) {
2732 // commandBuffer := commandBuffers[i]
2733 // commandBufferObject := GetCommandBuffer(commandBuffer)
2734 // assert(commandBufferObject.device == queueObject.device)
Jesse Halla366a512015-11-19 22:30:07 -08002735 //
Jesse Hall3fbc8562015-11-29 22:10:52 -08002736 // validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
2737 // "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
Jesse Halla366a512015-11-19 22:30:07 -08002738 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002739
2740 return ?
2741}
2742
2743@threadSafety("system")
2744cmd VkResult vkQueueWaitIdle(
2745 VkQueue queue) {
2746 queueObject := GetQueue(queue)
2747
2748 return ?
2749}
2750
2751@threadSafety("system")
2752cmd VkResult vkDeviceWaitIdle(
2753 VkDevice device) {
2754 deviceObject := GetDevice(device)
2755
2756 return ?
2757}
2758
2759
2760// Memory functions
2761
2762@threadSafety("system")
Jesse Hall3fbc8562015-11-29 22:10:52 -08002763cmd VkResult vkAllocateMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002764 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002765 const VkMemoryAllocateInfo* pAllocateInfo,
2766 const VkAllocationCallbacks* pAllocator,
2767 VkDeviceMemory* pMemory) {
2768 assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002769 deviceObject := GetDevice(device)
2770
Jesse Hall3fbc8562015-11-29 22:10:52 -08002771 memory := ?
2772 pMemory[0] = memory
2773 State.DeviceMemories[memory] = new!DeviceMemoryObject(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002774 device: device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002775 allocationSize: pAllocateInfo[0].allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002776
2777 return ?
2778}
2779
2780@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002781cmd void vkFreeMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002782 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002783 VkDeviceMemory memory,
2784 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002785 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002786 memoryObject := GetDeviceMemory(memory)
2787 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002788
2789 // Check that no objects are still bound before freeing.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002790 validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002791 "vkFreeMemory: objects still bound")
Jesse Hall3fbc8562015-11-29 22:10:52 -08002792 validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
2793 "vkFreeMemory: commandBuffers still bound")
2794 State.DeviceMemories[memory] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002795}
2796
2797@threadSafety("app")
2798cmd VkResult vkMapMemory(
2799 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002800 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002801 VkDeviceSize offset,
2802 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002803 VkMemoryMapFlags flags,
2804 void** ppData) {
2805 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002806 memoryObject := GetDeviceMemory(memory)
2807 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002808
2809 assert(flags == as!VkMemoryMapFlags(0))
Jesse Hall3fbc8562015-11-29 22:10:52 -08002810 assert((offset + size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002811
2812 return ?
2813}
2814
2815@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002816cmd void vkUnmapMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002817 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002818 VkDeviceMemory memory) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002819 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002820 memoryObject := GetDeviceMemory(memory)
2821 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002822}
2823
2824cmd VkResult vkFlushMappedMemoryRanges(
2825 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002826 u32 memoryRangeCount
2827 const VkMappedMemoryRange* pMemoryRanges) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002828 deviceObject := GetDevice(device)
2829
Jesse Hall3fbc8562015-11-29 22:10:52 -08002830 memoryRanges := pMemoryRanges[0:memoryRangeCount]
2831 for i in (0 .. memoryRangeCount) {
2832 memoryRange := memoryRanges[i]
2833 memoryObject := GetDeviceMemory(memoryRange.memory)
2834 assert(memoryObject.device == device)
2835 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002836 }
2837
2838 return ?
2839}
2840
2841cmd VkResult vkInvalidateMappedMemoryRanges(
2842 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002843 u32 memoryRangeCount,
2844 const VkMappedMemoryRange* pMemoryRanges) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002845 deviceObject := GetDevice(device)
2846
Jesse Hall3fbc8562015-11-29 22:10:52 -08002847 memoryRanges := pMemoryRanges[0:memoryRangeCount]
2848 for i in (0 .. memoryRangeCount) {
2849 memoryRange := memoryRanges[i]
2850 memoryObject := GetDeviceMemory(memoryRange.memory)
2851 assert(memoryObject.device == device)
2852 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002853 }
2854
2855 return ?
2856}
2857
2858
2859// Memory management API functions
2860
Jesse Hall606a54e2015-11-19 22:17:28 -08002861cmd void vkGetDeviceMemoryCommitment(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002862 VkDevice device,
2863 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002864 VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002865 deviceObject := GetDevice(device)
2866
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002867 if memory != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002868 memoryObject := GetDeviceMemory(memory)
2869 assert(memoryObject.device == device)
2870 }
2871
2872 committedMemoryInBytes := ?
2873 pCommittedMemoryInBytes[0] = committedMemoryInBytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07002874}
2875
Jesse Hall606a54e2015-11-19 22:17:28 -08002876cmd void vkGetBufferMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002877 VkDevice device,
2878 VkBuffer buffer,
2879 VkMemoryRequirements* pMemoryRequirements) {
2880 deviceObject := GetDevice(device)
2881 bufferObject := GetBuffer(buffer)
2882 assert(bufferObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002883}
2884
2885cmd VkResult vkBindBufferMemory(
2886 VkDevice device,
2887 VkBuffer buffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002888 VkDeviceMemory memory,
2889 VkDeviceSize memoryOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002890 deviceObject := GetDevice(device)
2891 bufferObject := GetBuffer(buffer)
2892 assert(bufferObject.device == device)
2893
2894 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002895 if bufferObject.memory != NULL_HANDLE {
2896 memoryObject := GetDeviceMemory(bufferObject.memory)
2897 memoryObject.boundObjects[as!u64(buffer)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002898 }
2899
2900 // Bind buffer to given memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002901 if memory != NULL_HANDLE {
2902 memoryObject := GetDeviceMemory(memory)
2903 assert(memoryObject.device == device)
2904 memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002905 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08002906 bufferObject.memory = memory
2907 bufferObject.memoryOffset = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002908
2909 return ?
2910}
2911
Jesse Hall606a54e2015-11-19 22:17:28 -08002912cmd void vkGetImageMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002913 VkDevice device,
2914 VkImage image,
2915 VkMemoryRequirements* pMemoryRequirements) {
2916 deviceObject := GetDevice(device)
2917 imageObject := GetImage(image)
2918 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002919}
2920
2921cmd VkResult vkBindImageMemory(
2922 VkDevice device,
2923 VkImage image,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002924 VkDeviceMemory memory,
2925 VkDeviceSize memoryOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002926 deviceObject := GetDevice(device)
2927 imageObject := GetImage(image)
2928 assert(imageObject.device == device)
2929
2930 // Unbind image from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002931 if imageObject.memory != NULL_HANDLE {
2932 memoryObject := GetDeviceMemory(imageObject.memory)
2933 memoryObject.boundObjects[as!u64(image)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002934 }
2935
2936 // Bind image to given memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002937 if memory != NULL_HANDLE {
2938 memoryObject := GetDeviceMemory(memory)
2939 assert(memoryObject.device == device)
2940 memoryObject.boundObjects[as!u64(image)] = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002941 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08002942 imageObject.memory = memory
2943 imageObject.memoryOffset = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002944
2945 return ?
2946}
2947
Jesse Hall606a54e2015-11-19 22:17:28 -08002948cmd void vkGetImageSparseMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002949 VkDevice device,
2950 VkImage image,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002951 u32* pSparseMemoryRequirementCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002952 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
2953 deviceObject := GetDevice(device)
2954 imageObject := GetImage(image)
2955 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002956}
2957
Jesse Hall606a54e2015-11-19 22:17:28 -08002958cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002959 VkPhysicalDevice physicalDevice,
2960 VkFormat format,
2961 VkImageType type,
Jesse Hall091ed9e2015-11-30 00:55:29 -08002962 VkSampleCountFlagBits samples,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002963 VkImageUsageFlags usage,
2964 VkImageTiling tiling,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002965 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002966 VkSparseImageFormatProperties* pProperties) {
2967 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002968}
2969
Jesse Halla6429252015-11-29 18:59:42 -08002970cmd VkResult vkQueueBindSparse(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002971 VkQueue queue,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002972 u32 bindInfoCount,
Jesse Halla6429252015-11-29 18:59:42 -08002973 const VkBindSparseInfo* pBindInfo,
2974 VkFence fence) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002975 queueObject := GetQueue(queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002976
2977 return ?
2978}
2979
2980
2981// Fence functions
2982
2983@threadSafety("system")
2984cmd VkResult vkCreateFence(
2985 VkDevice device,
2986 const VkFenceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002987 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002988 VkFence* pFence) {
2989 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2990 deviceObject := GetDevice(device)
2991
2992 fence := ?
2993 pFence[0] = fence
2994 State.Fences[fence] = new!FenceObject(
Jesse Halld8bade02015-11-24 10:24:18 -08002995 device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
Jesse Halld27f6aa2015-08-15 17:58:48 -07002996
2997 return ?
2998}
2999
3000@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003001cmd void vkDestroyFence(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003002 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003003 VkFence fence,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003004 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003005 deviceObject := GetDevice(device)
3006 fenceObject := GetFence(fence)
3007 assert(fenceObject.device == device)
3008
3009 State.Fences[fence] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003010}
3011
3012@threadSafety("system")
3013cmd VkResult vkResetFences(
3014 VkDevice device,
3015 u32 fenceCount,
3016 const VkFence* pFences) {
3017 deviceObject := GetDevice(device)
3018
3019 fences := pFences[0:fenceCount]
3020 for i in (0 .. fenceCount) {
3021 fence := fences[i]
3022 fenceObject := GetFence(fence)
3023 assert(fenceObject.device == device)
3024 fenceObject.signaled = false
3025 }
3026
3027 return ?
3028}
3029
3030@threadSafety("system")
3031cmd VkResult vkGetFenceStatus(
3032 VkDevice device,
3033 VkFence fence) {
3034 deviceObject := GetDevice(device)
3035 fenceObject := GetFence(fence)
3036 assert(fenceObject.device == device)
3037
3038 return ?
3039}
3040
3041@threadSafety("system")
3042cmd VkResult vkWaitForFences(
3043 VkDevice device,
3044 u32 fenceCount,
3045 const VkFence* pFences,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003046 VkBool32 waitAll,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003047 u64 timeout) { /// timeout in nanoseconds
3048 deviceObject := GetDevice(device)
3049
3050 fences := pFences[0:fenceCount]
3051 for i in (0 .. fenceCount) {
3052 fence := fences[i]
3053 fenceObject := GetFence(fence)
3054 assert(fenceObject.device == device)
3055 }
3056
3057 return ?
3058}
3059
3060
3061// Queue semaphore functions
3062
3063@threadSafety("system")
3064cmd VkResult vkCreateSemaphore(
3065 VkDevice device,
3066 const VkSemaphoreCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003067 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003068 VkSemaphore* pSemaphore) {
3069 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
3070 deviceObject := GetDevice(device)
3071
3072 semaphore := ?
3073 pSemaphore[0] = semaphore
3074 State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
3075
3076 return ?
3077}
3078
3079@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003080cmd void vkDestroySemaphore(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003081 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003082 VkSemaphore semaphore,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003083 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003084 deviceObject := GetDevice(device)
3085 semaphoreObject := GetSemaphore(semaphore)
3086 assert(semaphoreObject.device == device)
3087
3088 State.Semaphores[semaphore] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003089}
3090
Jesse Halld27f6aa2015-08-15 17:58:48 -07003091
3092// Event functions
3093
3094@threadSafety("system")
3095cmd VkResult vkCreateEvent(
3096 VkDevice device,
3097 const VkEventCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003098 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003099 VkEvent* pEvent) {
3100 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
3101 deviceObject := GetDevice(device)
3102
3103 event := ?
3104 pEvent[0] = event
3105 State.Events[event] = new!EventObject(device: device)
3106
3107 return ?
3108}
3109
3110@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003111cmd void vkDestroyEvent(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003112 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003113 VkEvent event,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003114 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003115 deviceObject := GetDevice(device)
3116 eventObject := GetEvent(event)
3117 assert(eventObject.device == device)
3118
3119 State.Events[event] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003120}
3121
3122@threadSafety("system")
3123cmd VkResult vkGetEventStatus(
3124 VkDevice device,
3125 VkEvent event) {
3126 deviceObject := GetDevice(device)
3127 eventObject := GetEvent(event)
3128 assert(eventObject.device == device)
3129
3130 return ?
3131}
3132
3133@threadSafety("system")
3134cmd VkResult vkSetEvent(
3135 VkDevice device,
3136 VkEvent event) {
3137 deviceObject := GetDevice(device)
3138 eventObject := GetEvent(event)
3139 assert(eventObject.device == device)
3140
3141 return ?
3142}
3143
3144@threadSafety("system")
3145cmd VkResult vkResetEvent(
3146 VkDevice device,
3147 VkEvent event) {
3148 deviceObject := GetDevice(device)
3149 eventObject := GetEvent(event)
3150 assert(eventObject.device == device)
3151
3152 return ?
3153}
3154
3155
3156// Query functions
3157
3158@threadSafety("system")
3159cmd VkResult vkCreateQueryPool(
3160 VkDevice device,
3161 const VkQueryPoolCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003162 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003163 VkQueryPool* pQueryPool) {
3164 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
3165 deviceObject := GetDevice(device)
3166
3167 queryPool := ?
3168 pQueryPool[0] = queryPool
3169 State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
3170
3171 return ?
3172}
3173
3174@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003175cmd void vkDestroyQueryPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003176 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003177 VkQueryPool queryPool,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003178 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003179 deviceObject := GetDevice(device)
3180 queryPoolObject := GetQueryPool(queryPool)
3181 assert(queryPoolObject.device == device)
3182
3183 State.QueryPools[queryPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003184}
3185
3186@threadSafety("system")
3187cmd VkResult vkGetQueryPoolResults(
3188 VkDevice device,
3189 VkQueryPool queryPool,
3190 u32 startQuery,
3191 u32 queryCount,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003192 platform.size_t dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003193 void* pData,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003194 VkDeviceSize stride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003195 VkQueryResultFlags flags) {
3196 deviceObject := GetDevice(device)
3197 queryPoolObject := GetQueryPool(queryPool)
3198 assert(queryPoolObject.device == device)
3199
Jesse Halld27f6aa2015-08-15 17:58:48 -07003200 data := pData[0:dataSize]
3201
3202 return ?
3203}
3204
3205// Buffer functions
3206
3207@threadSafety("system")
3208cmd VkResult vkCreateBuffer(
3209 VkDevice device,
3210 const VkBufferCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003211 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003212 VkBuffer* pBuffer) {
3213 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
3214 deviceObject := GetDevice(device)
3215
3216 buffer := ?
3217 pBuffer[0] = buffer
3218 State.Buffers[buffer] = new!BufferObject(device: device)
3219
3220 return ?
3221}
3222
3223@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003224cmd void vkDestroyBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003225 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003226 VkBuffer buffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003227 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003228 deviceObject := GetDevice(device)
3229 bufferObject := GetBuffer(buffer)
3230 assert(bufferObject.device == device)
3231
Jesse Hall3fbc8562015-11-29 22:10:52 -08003232 assert(bufferObject.memory == 0)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003233 State.Buffers[buffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003234}
3235
3236
3237// Buffer view functions
3238
3239@threadSafety("system")
3240cmd VkResult vkCreateBufferView(
3241 VkDevice device,
3242 const VkBufferViewCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003243 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003244 VkBufferView* pView) {
3245 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
3246 deviceObject := GetDevice(device)
3247
3248 bufferObject := GetBuffer(pCreateInfo.buffer)
3249 assert(bufferObject.device == device)
3250
3251 view := ?
3252 pView[0] = view
3253 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
3254
3255 return ?
3256}
3257
3258@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003259cmd void vkDestroyBufferView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003260 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003261 VkBufferView bufferView,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003262 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003263 deviceObject := GetDevice(device)
3264 bufferViewObject := GetBufferView(bufferView)
3265 assert(bufferViewObject.device == device)
3266
3267 State.BufferViews[bufferView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003268}
3269
3270
3271// Image functions
3272
3273@threadSafety("system")
3274cmd VkResult vkCreateImage(
3275 VkDevice device,
3276 const VkImageCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003277 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003278 VkImage* pImage) {
3279 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
3280 deviceObject := GetDevice(device)
3281
3282 image := ?
3283 pImage[0] = image
3284 State.Images[image] = new!ImageObject(device: device)
3285
3286 return ?
3287}
3288
3289@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003290cmd void vkDestroyImage(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003291 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003292 VkImage image,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003293 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003294 deviceObject := GetDevice(device)
3295 imageObject := GetImage(image)
3296 assert(imageObject.device == device)
3297
Jesse Hall3fbc8562015-11-29 22:10:52 -08003298 assert(imageObject.memory == 0)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003299 State.Images[image] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003300}
3301
Jesse Hall606a54e2015-11-19 22:17:28 -08003302cmd void vkGetImageSubresourceLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003303 VkDevice device,
3304 VkImage image,
3305 const VkImageSubresource* pSubresource,
3306 VkSubresourceLayout* pLayout) {
3307 deviceObject := GetDevice(device)
3308 imageObject := GetImage(image)
3309 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003310}
3311
3312
3313// Image view functions
3314
3315@threadSafety("system")
3316cmd VkResult vkCreateImageView(
3317 VkDevice device,
3318 const VkImageViewCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003319 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003320 VkImageView* pView) {
3321 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3322 deviceObject := GetDevice(device)
3323
3324 imageObject := GetImage(pCreateInfo.image)
3325 assert(imageObject.device == device)
3326
3327 view := ?
3328 pView[0] = view
3329 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
3330
3331 return ?
3332}
3333
3334@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003335cmd void vkDestroyImageView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003336 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003337 VkImageView imageView,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003338 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003339 deviceObject := GetDevice(device)
3340 imageViewObject := GetImageView(imageView)
3341 assert(imageViewObject.device == device)
3342
3343 State.ImageViews[imageView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003344}
3345
3346
3347// Shader functions
3348
3349cmd VkResult vkCreateShaderModule(
3350 VkDevice device,
3351 const VkShaderModuleCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003352 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003353 VkShaderModule* pShaderModule) {
3354 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3355 deviceObject := GetDevice(device)
3356
3357 shaderModule := ?
3358 pShaderModule[0] = shaderModule
3359 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3360
3361 return ?
3362}
3363
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003364cmd void vkDestroyShaderModule(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003365 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003366 VkShaderModule shaderModule,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003367 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003368 deviceObject := GetDevice(device)
3369 shaderModuleObject := GetShaderModule(shaderModule)
3370 assert(shaderModuleObject.device == device)
3371
3372 State.ShaderModules[shaderModule] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003373}
3374
Jesse Halld27f6aa2015-08-15 17:58:48 -07003375
3376// Pipeline functions
3377
3378cmd VkResult vkCreatePipelineCache(
3379 VkDevice device,
3380 const VkPipelineCacheCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003381 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003382 VkPipelineCache* pPipelineCache) {
3383 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3384 deviceObject := GetDevice(device)
3385
3386 pipelineCache := ?
3387 pPipelineCache[0] = pipelineCache
3388 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3389
3390 return ?
3391}
3392
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003393cmd void vkDestroyPipelineCache(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003394 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003395 VkPipelineCache pipelineCache,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003396 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003397 deviceObject := GetDevice(device)
3398 pipelineCacheObject := GetPipelineCache(pipelineCache)
3399 assert(pipelineCacheObject.device == device)
3400
3401 State.PipelineCaches[pipelineCache] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003402}
3403
Jesse Halld27f6aa2015-08-15 17:58:48 -07003404cmd VkResult vkGetPipelineCacheData(
3405 VkDevice device,
3406 VkPipelineCache pipelineCache,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003407 platform.size_t* pDataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003408 void* pData) {
3409 deviceObject := GetDevice(device)
3410 pipelineCacheObject := GetPipelineCache(pipelineCache)
3411 assert(pipelineCacheObject.device == device)
3412
3413 return ?
3414}
3415
3416cmd VkResult vkMergePipelineCaches(
3417 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003418 VkPipelineCache dstCache,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003419 u32 srcCacheCount,
3420 const VkPipelineCache* pSrcCaches) {
3421 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003422 dstCacheObject := GetPipelineCache(dstCache)
3423 assert(dstCacheObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003424
3425 srcCaches := pSrcCaches[0:srcCacheCount]
3426 for i in (0 .. srcCacheCount) {
3427 srcCache := srcCaches[i]
3428 srcCacheObject := GetPipelineCache(srcCache)
3429 assert(srcCacheObject.device == device)
3430 }
3431
3432 return ?
3433}
3434
3435cmd VkResult vkCreateGraphicsPipelines(
3436 VkDevice device,
3437 VkPipelineCache pipelineCache,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003438 u32 createInfoCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003439 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003440 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003441 VkPipeline* pPipelines) {
3442 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003443 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003444 pipelineCacheObject := GetPipelineCache(pipelineCache)
3445 assert(pipelineCacheObject.device == device)
3446 }
3447
Jesse Hall03b6fe12015-11-24 12:44:21 -08003448 createInfos := pCreateInfos[0:createInfoCount]
3449 pipelines := pPipelines[0:createInfoCount]
3450 for i in (0 .. createInfoCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003451 pipeline := ?
3452 pipelines[i] = pipeline
3453 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3454 }
3455
3456 return ?
3457}
3458
3459cmd VkResult vkCreateComputePipelines(
3460 VkDevice device,
3461 VkPipelineCache pipelineCache,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003462 u32 createInfoCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003463 const VkComputePipelineCreateInfo* pCreateInfos,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003464 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003465 VkPipeline* pPipelines) {
3466 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003467 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003468 pipelineCacheObject := GetPipelineCache(pipelineCache)
3469 assert(pipelineCacheObject.device == device)
3470 }
3471
Jesse Hall03b6fe12015-11-24 12:44:21 -08003472 createInfos := pCreateInfos[0:createInfoCount]
3473 pipelines := pPipelines[0:createInfoCount]
3474 for i in (0 .. createInfoCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003475 pipeline := ?
3476 pipelines[i] = pipeline
3477 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3478 }
3479
3480 return ?
3481}
3482
3483@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003484cmd void vkDestroyPipeline(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003485 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003486 VkPipeline pipeline,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003487 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003488 deviceObject := GetDevice(device)
3489 pipelineObjects := GetPipeline(pipeline)
3490 assert(pipelineObjects.device == device)
3491
3492 State.Pipelines[pipeline] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003493}
3494
3495
3496// Pipeline layout functions
3497
3498@threadSafety("system")
3499cmd VkResult vkCreatePipelineLayout(
3500 VkDevice device,
3501 const VkPipelineLayoutCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003502 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003503 VkPipelineLayout* pPipelineLayout) {
3504 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3505 deviceObject := GetDevice(device)
3506
3507 pipelineLayout := ?
3508 pPipelineLayout[0] = pipelineLayout
3509 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3510
3511 return ?
3512}
3513
3514@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003515cmd void vkDestroyPipelineLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003516 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003517 VkPipelineLayout pipelineLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003518 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003519 deviceObject := GetDevice(device)
3520 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3521 assert(pipelineLayoutObjects.device == device)
3522
3523 State.PipelineLayouts[pipelineLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003524}
3525
3526
3527// Sampler functions
3528
3529@threadSafety("system")
3530cmd VkResult vkCreateSampler(
3531 VkDevice device,
3532 const VkSamplerCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003533 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003534 VkSampler* pSampler) {
3535 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3536 deviceObject := GetDevice(device)
3537
3538 sampler := ?
3539 pSampler[0] = sampler
3540 State.Samplers[sampler] = new!SamplerObject(device: device)
3541
3542 return ?
3543}
3544
3545@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003546cmd void vkDestroySampler(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003547 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003548 VkSampler sampler,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003549 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003550 deviceObject := GetDevice(device)
3551 samplerObject := GetSampler(sampler)
3552 assert(samplerObject.device == device)
3553
3554 State.Samplers[sampler] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003555}
3556
3557
3558// Descriptor set functions
3559
3560@threadSafety("system")
3561cmd VkResult vkCreateDescriptorSetLayout(
3562 VkDevice device,
3563 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003564 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003565 VkDescriptorSetLayout* pSetLayout) {
3566 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3567 deviceObject := GetDevice(device)
3568
3569 setLayout := ?
3570 pSetLayout[0] = setLayout
3571 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3572
3573 return ?
3574}
3575
3576@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003577cmd void vkDestroyDescriptorSetLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003578 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003579 VkDescriptorSetLayout descriptorSetLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003580 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003581 deviceObject := GetDevice(device)
3582 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3583 assert(descriptorSetLayoutObject.device == device)
3584
3585 State.DescriptorSetLayouts[descriptorSetLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003586}
3587
3588@threadSafety("system")
3589cmd VkResult vkCreateDescriptorPool(
3590 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003591 const VkDescriptorPoolCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003592 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003593 VkDescriptorPool* pDescriptorPool) {
3594 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3595 deviceObject := GetDevice(device)
3596
3597 descriptorPool := ?
3598 pDescriptorPool[0] = descriptorPool
3599 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3600
3601 return ?
3602}
3603
3604@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003605cmd void vkDestroyDescriptorPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003606 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003607 VkDescriptorPool descriptorPool,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003608 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003609 deviceObject := GetDevice(device)
3610 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3611 assert(descriptorPoolObject.device == device)
3612
3613 State.DescriptorPools[descriptorPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003614}
3615
3616@threadSafety("app")
3617cmd VkResult vkResetDescriptorPool(
3618 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003619 VkDescriptorPool descriptorPool,
3620 VkDescriptorPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003621 deviceObject := GetDevice(device)
3622 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3623 assert(descriptorPoolObject.device == device)
3624
3625 return ?
3626}
3627
3628@threadSafety("app")
Jesse Hall3fbc8562015-11-29 22:10:52 -08003629cmd VkResult vkAllocateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003630 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003631 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003632 VkDescriptorSet* pDescriptorSets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003633 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003634 allocInfo := pAllocateInfo[0]
Jesse Hallfbf97b02015-11-20 14:17:03 -08003635 descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003636
Jesse Hall03b6fe12015-11-24 12:44:21 -08003637 setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
3638 for i in (0 .. allocInfo.setCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003639 setLayout := setLayouts[i]
3640 setLayoutObject := GetDescriptorSetLayout(setLayout)
3641 assert(setLayoutObject.device == device)
3642 }
3643
Jesse Hall03b6fe12015-11-24 12:44:21 -08003644 descriptorSets := pDescriptorSets[0:allocInfo.setCount]
3645 for i in (0 .. allocInfo.setCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003646 descriptorSet := ?
3647 descriptorSets[i] = descriptorSet
3648 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3649 }
3650
3651 return ?
3652}
3653
Jesse Hallf09c6b12015-08-15 19:54:28 -07003654cmd VkResult vkFreeDescriptorSets(
3655 VkDevice device,
3656 VkDescriptorPool descriptorPool,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003657 u32 descriptorSetCount,
Jesse Hallf09c6b12015-08-15 19:54:28 -07003658 const VkDescriptorSet* pDescriptorSets) {
3659 deviceObject := GetDevice(device)
3660 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3661
Jesse Hall03b6fe12015-11-24 12:44:21 -08003662 descriptorSets := pDescriptorSets[0:descriptorSetCount]
3663 for i in (0 .. descriptorSetCount) {
Jesse Hallf09c6b12015-08-15 19:54:28 -07003664 descriptorSet := descriptorSets[i]
3665 descriptorSetObject := GetDescriptorSet(descriptorSet)
3666 assert(descriptorSetObject.device == device)
3667 State.DescriptorSets[descriptorSet] = null
3668 }
3669
3670 return ?
3671}
3672
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003673cmd void vkUpdateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003674 VkDevice device,
Jesse Hallb00daad2015-11-29 19:46:20 -08003675 u32 descriptorWriteCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003676 const VkWriteDescriptorSet* pDescriptorWrites,
Jesse Hallb00daad2015-11-29 19:46:20 -08003677 u32 descriptorCopyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003678 const VkCopyDescriptorSet* pDescriptorCopies) {
3679 deviceObject := GetDevice(device)
3680
Jesse Hallb00daad2015-11-29 19:46:20 -08003681 descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
3682 for i in (0 .. descriptorWriteCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003683 descriptorWrite := descriptorWrites[i]
Jesse Hall3fbc8562015-11-29 22:10:52 -08003684 descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003685 assert(descriptorWriteObject.device == device)
3686 }
3687
Jesse Hallb00daad2015-11-29 19:46:20 -08003688 descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
3689 for i in (0 .. descriptorCopyCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003690 descriptorCopy := descriptorCopies[i]
Jesse Hall3fbc8562015-11-29 22:10:52 -08003691 descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003692 assert(descriptorCopyObject.device == device)
3693 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003694}
3695
3696
3697// Framebuffer functions
3698
3699@threadSafety("system")
3700cmd VkResult vkCreateFramebuffer(
3701 VkDevice device,
3702 const VkFramebufferCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003703 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003704 VkFramebuffer* pFramebuffer) {
3705 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3706 deviceObject := GetDevice(device)
3707
3708 framebuffer := ?
3709 pFramebuffer[0] = framebuffer
3710 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3711
3712 return ?
3713}
3714
3715@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003716cmd void vkDestroyFramebuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003717 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003718 VkFramebuffer framebuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003719 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003720 deviceObject := GetDevice(device)
3721 framebufferObject := GetFramebuffer(framebuffer)
3722 assert(framebufferObject.device == device)
3723
3724 State.Framebuffers[framebuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003725}
3726
3727
3728// Renderpass functions
3729
3730@threadSafety("system")
3731cmd VkResult vkCreateRenderPass(
3732 VkDevice device,
3733 const VkRenderPassCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003734 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003735 VkRenderPass* pRenderPass) {
3736 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3737 deviceObject := GetDevice(device)
3738
3739 renderpass := ?
3740 pRenderPass[0] = renderpass
3741 State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3742
3743 return ?
3744}
3745
3746@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003747cmd void vkDestroyRenderPass(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003748 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003749 VkRenderPass renderPass,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003750 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003751 deviceObject := GetDevice(device)
3752 renderPassObject := GetRenderPass(renderPass)
3753 assert(renderPassObject.device == device)
3754
3755 State.RenderPasses[renderPass] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003756}
3757
Jesse Hall606a54e2015-11-19 22:17:28 -08003758cmd void vkGetRenderAreaGranularity(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003759 VkDevice device,
3760 VkRenderPass renderPass,
3761 VkExtent2D* pGranularity) {
3762 deviceObject := GetDevice(device)
3763 renderPassObject := GetRenderPass(renderPass)
3764
3765 granularity := ?
3766 pGranularity[0] = granularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07003767}
3768
3769// Command pool functions
3770
3771cmd VkResult vkCreateCommandPool(
3772 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003773 const VkCommandPoolCreateInfo* pCreateInfo,
3774 const VkAllocationCallbacks* pAllocator,
3775 VkCommandPool* pCommandPool) {
3776 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003777 deviceObject := GetDevice(device)
3778
Jesse Hall3fbc8562015-11-29 22:10:52 -08003779 commandPool := ?
3780 pCommandPool[0] = commandPool
3781 State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003782
3783 return ?
3784}
3785
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003786cmd void vkDestroyCommandPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003787 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003788 VkCommandPool commandPool,
3789 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003790 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003791 commandPoolObject := GetCommandPool(commandPool)
3792 assert(commandPoolObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003793
Jesse Hall3fbc8562015-11-29 22:10:52 -08003794 State.CommandPools[commandPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003795}
3796
3797cmd VkResult vkResetCommandPool(
3798 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003799 VkCommandPool commandPool,
3800 VkCommandPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003801 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003802 commandPoolObject := GetCommandPool(commandPool)
3803 assert(commandPoolObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003804
3805 return ?
3806}
3807
3808// Command buffer functions
3809
Jesse Hall3fbc8562015-11-29 22:10:52 -08003810macro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
3811 memoryObject := GetDeviceMemory(memory)
3812 memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07003813
Jesse Hall3fbc8562015-11-29 22:10:52 -08003814 commandBufferObject := GetCommandBuffer(commandBuffer)
3815 commandBufferObject.boundObjects[as!u64(obj)] = memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07003816}
3817
Jesse Hall3fbc8562015-11-29 22:10:52 -08003818macro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
3819 memoryObject := GetDeviceMemory(memory)
3820 memoryObject.boundCommandBuffers[commandBuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003821
Jesse Hall3fbc8562015-11-29 22:10:52 -08003822 commandBufferObject := GetCommandBuffer(commandBuffer)
3823 commandBufferObject.boundObjects[as!u64(obj)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003824}
3825
3826@threadSafety("system")
Jesse Hall3fbc8562015-11-29 22:10:52 -08003827cmd VkResult vkAllocateCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003828 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003829 const VkCommandBufferAllocateInfo* pAllocateInfo,
3830 VkCommandBuffer* pCommandBuffers) {
3831 assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003832
Jesse Hall3fbc8562015-11-29 22:10:52 -08003833 count := pAllocateInfo[0].bufferCount
3834 commandBuffers := pCommandBuffers[0:count]
Jesse Hallfbf97b02015-11-20 14:17:03 -08003835 for i in (0 .. count) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003836 commandBuffer := ?
3837 commandBuffers[i] = commandBuffer
3838 State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003839 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003840
3841 return ?
3842}
3843
3844@threadSafety("system")
Jesse Hallfbf97b02015-11-20 14:17:03 -08003845cmd void vkFreeCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003846 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003847 VkCommandPool commandPool,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003848 u32 commandBufferCount,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003849 const VkCommandBuffer* pCommandBuffers) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003850 deviceObject := GetDevice(device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003851
Jesse Hall3fbc8562015-11-29 22:10:52 -08003852 commandBuffers := pCommandBuffers[0:commandBufferCount]
Jesse Hall03b6fe12015-11-24 12:44:21 -08003853 for i in (0 .. commandBufferCount) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003854 commandBufferObject := GetCommandBuffer(commandBuffers[i])
3855 assert(commandBufferObject.device == device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003856 // TODO: iterate over boundObjects and clear memory bindings
Jesse Hall3fbc8562015-11-29 22:10:52 -08003857 State.CommandBuffers[commandBuffers[i]] = null
Jesse Hallfbf97b02015-11-20 14:17:03 -08003858 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003859}
3860
3861@threadSafety("app")
3862cmd VkResult vkBeginCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003863 VkCommandBuffer commandBuffer,
3864 const VkCommandBufferBeginInfo* pBeginInfo) {
3865 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
3866 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003867
3868 // TODO: iterate over boundObjects and clear memory bindings
3869
3870 return ?
3871}
3872
3873@threadSafety("app")
3874cmd VkResult vkEndCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003875 VkCommandBuffer commandBuffer) {
3876 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003877
3878 return ?
3879}
3880
3881@threadSafety("app")
3882cmd VkResult vkResetCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003883 VkCommandBuffer commandBuffer,
3884 VkCommandBufferResetFlags flags) {
3885 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003886
3887 // TODO: iterate over boundObjects and clear memory bindings
3888
3889 return ?
3890}
3891
3892
3893// Command buffer building functions
3894
3895@threadSafety("app")
3896cmd void vkCmdBindPipeline(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003897 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003898 VkPipelineBindPoint pipelineBindPoint,
3899 VkPipeline pipeline) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003900 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003901 pipelineObject := GetPipeline(pipeline)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003902 assert(commandBufferObject.device == pipelineObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003903
Jesse Halld8bade02015-11-24 10:24:18 -08003904 queue := switch (pipelineBindPoint) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003905 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3906 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3907 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08003908 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003909}
3910
3911@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003912cmd void vkCmdSetViewport(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003913 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003914 u32 viewportCount,
3915 const VkViewport* pViewports) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003916 commandBufferObject := GetCommandBuffer(commandBuffer)
3917 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003918}
3919
3920@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003921cmd void vkCmdSetScissor(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003922 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003923 u32 scissorCount,
3924 const VkRect2D* pScissors) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003925 commandBufferObject := GetCommandBuffer(commandBuffer)
3926 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003927}
3928
3929@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003930cmd void vkCmdSetLineWidth(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003931 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003932 f32 lineWidth) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003933 commandBufferObject := GetCommandBuffer(commandBuffer)
3934 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003935}
3936
3937@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003938cmd void vkCmdSetDepthBias(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003939 VkCommandBuffer commandBuffer,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003940 f32 depthBiasConstantFactor,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003941 f32 depthBiasClamp,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003942 f32 depthBiasSlopeFactor) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003943 commandBufferObject := GetCommandBuffer(commandBuffer)
3944 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003945}
Jesse Halld27f6aa2015-08-15 17:58:48 -07003946
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003947@threadSafety("app")
3948cmd void vkCmdSetBlendConstants(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003949 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003950 // TODO(jessehall): apic only supports 'const' on pointer types. Using
3951 // an annotation as a quick hack to pass this to the template without
3952 // having to modify the AST and semantic model.
Jesse Hallb00daad2015-11-29 19:46:20 -08003953 @readonly f32[4] blendConstants) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003954 commandBufferObject := GetCommandBuffer(commandBuffer)
3955 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003956}
3957
3958@threadSafety("app")
3959cmd void vkCmdSetDepthBounds(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003960 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003961 f32 minDepthBounds,
3962 f32 maxDepthBounds) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003963 commandBufferObject := GetCommandBuffer(commandBuffer)
3964 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003965}
3966
3967@threadSafety("app")
3968cmd void vkCmdSetStencilCompareMask(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003969 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003970 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003971 u32 compareMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003972 commandBufferObject := GetCommandBuffer(commandBuffer)
3973 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003974}
3975
3976@threadSafety("app")
3977cmd void vkCmdSetStencilWriteMask(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003978 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003979 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003980 u32 writeMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003981 commandBufferObject := GetCommandBuffer(commandBuffer)
3982 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003983}
3984
3985@threadSafety("app")
3986cmd void vkCmdSetStencilReference(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003987 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003988 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003989 u32 reference) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003990 commandBufferObject := GetCommandBuffer(commandBuffer)
3991 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003992}
3993
3994@threadSafety("app")
3995cmd void vkCmdBindDescriptorSets(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003996 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003997 VkPipelineBindPoint pipelineBindPoint,
3998 VkPipelineLayout layout,
3999 u32 firstSet,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004000 u32 descriptorSetCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004001 const VkDescriptorSet* pDescriptorSets,
4002 u32 dynamicOffsetCount,
4003 const u32* pDynamicOffsets) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004004 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004005
Jesse Hall03b6fe12015-11-24 12:44:21 -08004006 descriptorSets := pDescriptorSets[0:descriptorSetCount]
4007 for i in (0 .. descriptorSetCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004008 descriptorSet := descriptorSets[i]
4009 descriptorSetObject := GetDescriptorSet(descriptorSet)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004010 assert(commandBufferObject.device == descriptorSetObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004011 }
4012
4013 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
4014 for i in (0 .. dynamicOffsetCount) {
4015 dynamicOffset := dynamicOffsets[i]
4016 }
4017
Jesse Halld8bade02015-11-24 10:24:18 -08004018 queue := switch (pipelineBindPoint) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004019 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
4020 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
4021 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08004022 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004023}
4024
4025@threadSafety("app")
4026cmd void vkCmdBindIndexBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004027 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004028 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004029 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004030 VkIndexType indexType) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004031 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004032 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004033 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004034
Jesse Hall3fbc8562015-11-29 22:10:52 -08004035 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004036
Jesse Hall3fbc8562015-11-29 22:10:52 -08004037 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004038}
4039
4040@threadSafety("app")
4041cmd void vkCmdBindVertexBuffers(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004042 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004043 u32 startBinding,
4044 u32 bindingCount,
4045 const VkBuffer* pBuffers,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004046 const VkDeviceSize* pOffsets) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004047 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004048
4049 // TODO: check if not [startBinding:startBinding+bindingCount]
4050 buffers := pBuffers[0:bindingCount]
4051 offsets := pOffsets[0:bindingCount]
4052 for i in (0 .. bindingCount) {
4053 buffer := buffers[i]
4054 offset := offsets[i]
4055 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004056 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004057
Jesse Hall3fbc8562015-11-29 22:10:52 -08004058 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004059 }
4060
Jesse Hall3fbc8562015-11-29 22:10:52 -08004061 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004062}
4063
4064@threadSafety("app")
4065cmd void vkCmdDraw(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004066 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004067 u32 vertexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004068 u32 instanceCount,
4069 u32 firstVertex,
4070 u32 firstInstance) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004071 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004072
Jesse Hall3fbc8562015-11-29 22:10:52 -08004073 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004074}
4075
4076@threadSafety("app")
4077cmd void vkCmdDrawIndexed(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004078 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004079 u32 indexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004080 u32 instanceCount,
4081 u32 firstIndex,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004082 s32 vertexOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004083 u32 firstInstance) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004084 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004085
Jesse Hall3fbc8562015-11-29 22:10:52 -08004086 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004087}
4088
4089@threadSafety("app")
4090cmd void vkCmdDrawIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004091 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004092 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004093 VkDeviceSize offset,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004094 u32 drawCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004095 u32 stride) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004096 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004097 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004098 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004099
Jesse Hall3fbc8562015-11-29 22:10:52 -08004100 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004101
Jesse Hall3fbc8562015-11-29 22:10:52 -08004102 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004103}
4104
4105@threadSafety("app")
4106cmd void vkCmdDrawIndexedIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004107 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004108 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004109 VkDeviceSize offset,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004110 u32 drawCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004111 u32 stride) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004112 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004113 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004114 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004115
Jesse Hall3fbc8562015-11-29 22:10:52 -08004116 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004117
Jesse Hall3fbc8562015-11-29 22:10:52 -08004118 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004119}
4120
4121@threadSafety("app")
4122cmd void vkCmdDispatch(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004123 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004124 u32 x,
4125 u32 y,
4126 u32 z) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004127 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004128
Jesse Hall3fbc8562015-11-29 22:10:52 -08004129 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004130}
4131
4132@threadSafety("app")
4133cmd void vkCmdDispatchIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004134 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004135 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004136 VkDeviceSize offset) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004137 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004138 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004139 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004140
Jesse Hall3fbc8562015-11-29 22:10:52 -08004141 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004142
Jesse Hall3fbc8562015-11-29 22:10:52 -08004143 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004144}
4145
4146@threadSafety("app")
4147cmd void vkCmdCopyBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004148 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004149 VkBuffer srcBuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004150 VkBuffer dstBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004151 u32 regionCount,
4152 const VkBufferCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004153 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004154 srcBufferObject := GetBuffer(srcBuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004155 dstBufferObject := GetBuffer(dstBuffer)
4156 assert(commandBufferObject.device == srcBufferObject.device)
4157 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004158
4159 regions := pRegions[0:regionCount]
4160 for i in (0 .. regionCount) {
4161 region := regions[i]
4162 }
4163
Jesse Hall3fbc8562015-11-29 22:10:52 -08004164 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
4165 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004166
Jesse Hall65ab5522015-11-30 00:07:16 -08004167 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004168}
4169
4170@threadSafety("app")
4171cmd void vkCmdCopyImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004172 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004173 VkImage srcImage,
4174 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004175 VkImage dstImage,
4176 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004177 u32 regionCount,
4178 const VkImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004179 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004180 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004181 dstImageObject := GetImage(dstImage)
4182 assert(commandBufferObject.device == srcImageObject.device)
4183 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004184
4185 regions := pRegions[0:regionCount]
4186 for i in (0 .. regionCount) {
4187 region := regions[i]
4188 }
4189
Jesse Hall3fbc8562015-11-29 22:10:52 -08004190 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4191 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004192
Jesse Hall65ab5522015-11-30 00:07:16 -08004193 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004194}
4195
4196@threadSafety("app")
4197cmd void vkCmdBlitImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004198 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004199 VkImage srcImage,
4200 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004201 VkImage dstImage,
4202 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004203 u32 regionCount,
4204 const VkImageBlit* pRegions,
Jesse Hall23ff73f2015-11-29 14:36:39 -08004205 VkFilter filter) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004206 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004207 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004208 dstImageObject := GetImage(dstImage)
4209 assert(commandBufferObject.device == srcImageObject.device)
4210 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004211
4212 regions := pRegions[0:regionCount]
4213 for i in (0 .. regionCount) {
4214 region := regions[i]
4215 }
4216
Jesse Hall3fbc8562015-11-29 22:10:52 -08004217 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4218 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004219
Jesse Hall3fbc8562015-11-29 22:10:52 -08004220 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004221}
4222
4223@threadSafety("app")
4224cmd void vkCmdCopyBufferToImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004225 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004226 VkBuffer srcBuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004227 VkImage dstImage,
4228 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004229 u32 regionCount,
4230 const VkBufferImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004231 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004232 srcBufferObject := GetBuffer(srcBuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004233 dstImageObject := GetImage(dstImage)
4234 assert(commandBufferObject.device == srcBufferObject.device)
4235 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004236
4237 regions := pRegions[0:regionCount]
4238 for i in (0 .. regionCount) {
4239 region := regions[i]
4240 }
4241
Jesse Hall3fbc8562015-11-29 22:10:52 -08004242 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
4243 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004244
Jesse Hall65ab5522015-11-30 00:07:16 -08004245 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004246}
4247
4248@threadSafety("app")
4249cmd void vkCmdCopyImageToBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004250 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004251 VkImage srcImage,
4252 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004253 VkBuffer dstBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004254 u32 regionCount,
4255 const VkBufferImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004256 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004257 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004258 dstBufferObject := GetBuffer(dstBuffer)
4259 assert(commandBufferObject.device == srcImageObject.device)
4260 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004261
4262 regions := pRegions[0:regionCount]
4263 for i in (0 .. regionCount) {
4264 region := regions[i]
4265 }
4266
Jesse Hall3fbc8562015-11-29 22:10:52 -08004267 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4268 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004269
Jesse Hall65ab5522015-11-30 00:07:16 -08004270 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004271}
4272
4273@threadSafety("app")
4274cmd void vkCmdUpdateBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004275 VkCommandBuffer commandBuffer,
4276 VkBuffer dstBuffer,
4277 VkDeviceSize dstOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004278 VkDeviceSize dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004279 const u32* pData) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004280 commandBufferObject := GetCommandBuffer(commandBuffer)
4281 dstBufferObject := GetBuffer(dstBuffer)
4282 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004283
4284 data := pData[0:dataSize]
4285
Jesse Hall3fbc8562015-11-29 22:10:52 -08004286 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004287
Jesse Hall65ab5522015-11-30 00:07:16 -08004288 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004289}
4290
4291@threadSafety("app")
4292cmd void vkCmdFillBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004293 VkCommandBuffer commandBuffer,
4294 VkBuffer dstBuffer,
4295 VkDeviceSize dstOffset,
Jesse Hallb00daad2015-11-29 19:46:20 -08004296 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004297 u32 data) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004298 commandBufferObject := GetCommandBuffer(commandBuffer)
4299 dstBufferObject := GetBuffer(dstBuffer)
4300 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004301
Jesse Hall65ab5522015-11-30 00:07:16 -08004302 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004303}
4304
4305@threadSafety("app")
4306cmd void vkCmdClearColorImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004307 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004308 VkImage image,
4309 VkImageLayout imageLayout,
4310 const VkClearColorValue* pColor,
4311 u32 rangeCount,
4312 const VkImageSubresourceRange* pRanges) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004313 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004314 imageObject := GetImage(image)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004315 assert(commandBufferObject.device == imageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004316
4317 ranges := pRanges[0:rangeCount]
4318 for i in (0 .. rangeCount) {
4319 range := ranges[i]
4320 }
4321
Jesse Hall3fbc8562015-11-29 22:10:52 -08004322 bindCommandBuffer(commandBuffer, image, imageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004323
Jesse Hall3fbc8562015-11-29 22:10:52 -08004324 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004325}
4326
4327@threadSafety("app")
4328cmd void vkCmdClearDepthStencilImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004329 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004330 VkImage image,
4331 VkImageLayout imageLayout,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004332 const VkClearDepthStencilValue* pDepthStencil,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004333 u32 rangeCount,
4334 const VkImageSubresourceRange* pRanges) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004335 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004336 imageObject := GetImage(image)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004337 assert(commandBufferObject.device == imageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004338
4339 ranges := pRanges[0:rangeCount]
4340 for i in (0 .. rangeCount) {
4341 range := ranges[i]
4342 }
4343
Jesse Hall3fbc8562015-11-29 22:10:52 -08004344 bindCommandBuffer(commandBuffer, image, imageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004345
Jesse Hall3fbc8562015-11-29 22:10:52 -08004346 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004347}
4348
4349@threadSafety("app")
Jesse Hallae38f732015-11-19 21:32:50 -08004350cmd void vkCmdClearAttachments(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004351 VkCommandBuffer commandBuffer,
Jesse Hallae38f732015-11-19 21:32:50 -08004352 u32 attachmentCount,
4353 const VkClearAttachment* pAttachments,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004354 u32 rectCount,
Jesse Halla15a4bf2015-11-19 22:48:02 -08004355 const VkClearRect* pRects) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004356 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004357
4358 rects := pRects[0:rectCount]
4359 for i in (0 .. rectCount) {
4360 rect := rects[i]
4361 }
4362
Jesse Hall3fbc8562015-11-29 22:10:52 -08004363 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004364}
4365
4366@threadSafety("app")
4367cmd void vkCmdResolveImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004368 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004369 VkImage srcImage,
4370 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004371 VkImage dstImage,
4372 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004373 u32 regionCount,
4374 const VkImageResolve* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004375 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004376 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004377 dstImageObject := GetImage(dstImage)
4378 assert(commandBufferObject.device == srcImageObject.device)
4379 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004380
4381 regions := pRegions[0:regionCount]
4382 for i in (0 .. regionCount) {
4383 region := regions[i]
4384 }
4385
Jesse Hall3fbc8562015-11-29 22:10:52 -08004386 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4387 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004388
Jesse Hall3fbc8562015-11-29 22:10:52 -08004389 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004390}
4391
4392@threadSafety("app")
4393cmd void vkCmdSetEvent(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004394 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004395 VkEvent event,
4396 VkPipelineStageFlags stageMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004397 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004398 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004399 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004400}
4401
4402@threadSafety("app")
4403cmd void vkCmdResetEvent(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004404 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004405 VkEvent event,
4406 VkPipelineStageFlags stageMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004407 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004408 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004409 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004410}
4411
4412@threadSafety("app")
4413cmd void vkCmdWaitEvents(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004414 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004415 u32 eventCount,
4416 const VkEvent* pEvents,
4417 VkPipelineStageFlags srcStageMask,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004418 VkPipelineStageFlags dstStageMask,
4419 u32 memoryBarrierCount,
4420 const void* const* ppMemoryBarriers) {
4421 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004422
4423 events := pEvents[0:eventCount]
4424 for i in (0 .. eventCount) {
4425 event := events[i]
4426 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004427 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004428 }
4429
Jesse Hall3fbc8562015-11-29 22:10:52 -08004430 pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
4431 for i in (0 .. memoryBarrierCount) {
4432 switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004433 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004434 memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
Jesse Halld27f6aa2015-08-15 17:58:48 -07004435 }
4436 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004437 imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
4438 imageObject := GetImage(imageMemoryBarrier.image)
4439 assert(imageObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004440 }
4441 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004442 bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
4443 bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
4444 assert(bufferObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004445 }
4446 }
4447 }
4448}
4449
4450@threadSafety("app")
4451cmd void vkCmdPipelineBarrier(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004452 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004453 VkPipelineStageFlags srcStageMask,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004454 VkPipelineStageFlags dstStageMask,
Jesse Halldc6d36c2015-11-29 19:12:15 -08004455 VkDependencyFlags dependencyFlags,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004456 u32 memoryBarrierCount,
4457 const void* const* ppMemoryBarriers) {
4458 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004459
Jesse Hall3fbc8562015-11-29 22:10:52 -08004460 pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
4461 for i in (0 .. memoryBarrierCount) {
4462 switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004463 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004464 memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
Jesse Halld27f6aa2015-08-15 17:58:48 -07004465 }
4466 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004467 imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
4468 imageObject := GetImage(imageMemoryBarrier.image)
4469 assert(imageObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004470 }
4471 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004472 bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
4473 bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
4474 assert(bufferObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004475 }
4476 }
4477 }
4478}
4479
4480@threadSafety("app")
4481cmd void vkCmdBeginQuery(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004482 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004483 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004484 u32 entry,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004485 VkQueryControlFlags flags) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004486 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004487 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004488 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004489}
4490
4491@threadSafety("app")
4492cmd void vkCmdEndQuery(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004493 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004494 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004495 u32 entry) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004496 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004497 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004498 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004499}
4500
4501@threadSafety("app")
4502cmd void vkCmdResetQueryPool(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004503 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004504 VkQueryPool queryPool,
4505 u32 startQuery,
4506 u32 queryCount) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004507 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004508 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004509 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004510}
4511
4512@threadSafety("app")
4513cmd void vkCmdWriteTimestamp(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004514 VkCommandBuffer commandBuffer,
Jesse Hall6f39a6d2015-11-24 11:08:36 -08004515 VkPipelineStageFlagBits pipelineStage,
Jesse Halla3a7a1d2015-11-24 11:37:23 -08004516 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004517 u32 entry) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004518 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halla3a7a1d2015-11-24 11:37:23 -08004519 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004520 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004521}
4522
4523@threadSafety("app")
4524cmd void vkCmdCopyQueryPoolResults(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004525 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004526 VkQueryPool queryPool,
4527 u32 startQuery,
4528 u32 queryCount,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004529 VkBuffer dstBuffer,
4530 VkDeviceSize dstOffset,
Jesse Halla9bb62b2015-11-21 19:31:56 -08004531 VkDeviceSize stride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004532 VkQueryResultFlags flags) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004533 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004534 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004535 dstBufferObject := GetBuffer(dstBuffer)
4536 assert(commandBufferObject.device == queryPoolObject.device)
4537 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004538}
4539
4540cmd void vkCmdPushConstants(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004541 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004542 VkPipelineLayout layout,
4543 VkShaderStageFlags stageFlags,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004544 u32 offset,
4545 u32 size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004546 const void* values) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004547 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004548 layoutObject := GetPipelineLayout(layout)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004549 assert(commandBufferObject.device == layoutObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004550}
4551
4552@threadSafety("app")
4553cmd void vkCmdBeginRenderPass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004554 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004555 const VkRenderPassBeginInfo* pRenderPassBegin,
Jesse Hall65ab5522015-11-30 00:07:16 -08004556 VkSubpassContents contents) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004557 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004558 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4559 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004560 assert(commandBufferObject.device == renderPassObject.device)
4561 assert(commandBufferObject.device == framebufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004562
Jesse Hall3fbc8562015-11-29 22:10:52 -08004563 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004564}
4565
4566cmd void vkCmdNextSubpass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004567 VkCommandBuffer commandBuffer,
Jesse Hall65ab5522015-11-30 00:07:16 -08004568 VkSubpassContents contents) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004569 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004570}
4571
4572@threadSafety("app")
4573cmd void vkCmdEndRenderPass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004574 VkCommandBuffer commandBuffer) {
4575 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004576
Jesse Hall3fbc8562015-11-29 22:10:52 -08004577 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004578}
4579
4580cmd void vkCmdExecuteCommands(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004581 VkCommandBuffer commandBuffer,
4582 u32 commandBuffersCount,
4583 const VkCommandBuffer* pCommandBuffers) {
4584 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004585
Jesse Hall3fbc8562015-11-29 22:10:52 -08004586 commandBuffers := pCommandBuffers[0:commandBuffersCount]
4587 for i in (0 .. commandBuffersCount) {
4588 secondaryCommandBuffer := commandBuffers[i]
4589 secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
4590 assert(commandBufferObject.device == secondaryCommandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004591 }
4592}
4593
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004594@extension("VK_KHR_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004595cmd void vkDestroySurfaceKHR(
4596 VkInstance instance,
Jesse Hall0e74f002015-11-30 11:37:59 -08004597 VkSurfaceKHR surface,
4598 const VkAllocationCallbacks* pAllocator) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004599 instanceObject := GetInstance(instance)
4600 surfaceObject := GetSurface(surface)
4601 assert(surfaceObject.instance == instance)
Michael Lentine88594d72015-11-12 12:49:45 -08004602
Jesse Hall1356b0d2015-11-23 17:24:58 -08004603 State.Surfaces[surface] = null
Jesse Hall2818f932015-11-19 21:19:17 -08004604}
4605
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004606@extension("VK_KHR_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004607cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004608 VkPhysicalDevice physicalDevice,
4609 u32 queueFamilyIndex,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004610 VkSurfaceKHR surface,
Jesse Hallb00daad2015-11-29 19:46:20 -08004611 VkBool32* pSupported) {
4612 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004613
4614 return ?
4615}
4616
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004617@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004618cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4619 VkPhysicalDevice physicalDevice,
4620 VkSurfaceKHR surface,
4621 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
4622 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4623
4624 surfaceCapabilities := ?
4625 pSurfaceCapabilities[0] = surfaceCapabilities
4626
4627 return ?
4628}
4629
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004630@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004631cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
4632 VkPhysicalDevice physicalDevice,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004633 VkSurfaceKHR surface,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004634 u32* pSurfaceFormatCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004635 VkSurfaceFormatKHR* pSurfaceFormats) {
Jesse Hallb00daad2015-11-29 19:46:20 -08004636 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004637
4638 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004639 pSurfaceFormatCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004640 surfaceFormats := pSurfaceFormats[0:count]
4641
4642 for i in (0 .. count) {
4643 surfaceFormat := ?
4644 surfaceFormats[i] = surfaceFormat
4645 }
4646
4647 return ?
4648}
4649
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004650@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004651cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
4652 VkPhysicalDevice physicalDevice,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004653 VkSurfaceKHR surface,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004654 u32* pPresentModeCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004655 VkPresentModeKHR* pPresentModes) {
Jesse Hallb00daad2015-11-29 19:46:20 -08004656 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004657
4658 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004659 pPresentModeCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004660 presentModes := pPresentModes[0:count]
4661
4662 for i in (0 .. count) {
4663 presentMode := ?
4664 presentModes[i] = presentMode
4665 }
4666
4667 return ?
4668}
4669
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004670@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004671cmd VkResult vkCreateSwapchainKHR(
4672 VkDevice device,
4673 const VkSwapchainCreateInfoKHR* pCreateInfo,
Jesse Hall0e74f002015-11-30 11:37:59 -08004674 const VkAllocationCallbacks* pAllocator,
Michael Lentine88594d72015-11-12 12:49:45 -08004675 VkSwapchainKHR* pSwapchain) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004676 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
Michael Lentine88594d72015-11-12 12:49:45 -08004677 deviceObject := GetDevice(device)
4678
4679 swapchain := ?
4680 pSwapchain[0] = swapchain
4681 State.Swapchains[swapchain] = new!SwapchainObject(device: device)
4682
4683 return ?
4684}
4685
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004686@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004687cmd void vkDestroySwapchainKHR(
Michael Lentine88594d72015-11-12 12:49:45 -08004688 VkDevice device,
Jesse Hall0e74f002015-11-30 11:37:59 -08004689 VkSwapchainKHR swapchain,
4690 const VkAllocationCallbacks* pAllocator) {
Michael Lentine88594d72015-11-12 12:49:45 -08004691 deviceObject := GetDevice(device)
4692 swapchainObject := GetSwapchain(swapchain)
4693 assert(swapchainObject.device == device)
4694
4695 State.Swapchains[swapchain] = null
Michael Lentine88594d72015-11-12 12:49:45 -08004696}
4697
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004698@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004699cmd VkResult vkGetSwapchainImagesKHR(
4700 VkDevice device,
4701 VkSwapchainKHR swapchain,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004702 u32* pSwapchainImageCount,
Michael Lentine88594d72015-11-12 12:49:45 -08004703 VkImage* pSwapchainImages) {
4704 deviceObject := GetDevice(device)
4705
4706 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004707 pSwapchainImageCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004708 swapchainImages := pSwapchainImages[0:count]
4709
4710 for i in (0 .. count) {
4711 swapchainImage := ?
4712 swapchainImages[i] = swapchainImage
Jesse Hall1356b0d2015-11-23 17:24:58 -08004713 State.Images[swapchainImage] = new!ImageObject(device: device)
Michael Lentine88594d72015-11-12 12:49:45 -08004714 }
4715
4716 return ?
4717}
4718
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004719@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004720cmd VkResult vkAcquireNextImageKHR(
4721 VkDevice device,
4722 VkSwapchainKHR swapchain,
4723 u64 timeout,
4724 VkSemaphore semaphore,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004725 VkFence fence,
Michael Lentine88594d72015-11-12 12:49:45 -08004726 u32* pImageIndex) {
4727 deviceObject := GetDevice(device)
4728 swapchainObject := GetSwapchain(swapchain)
4729
4730 imageIndex := ?
4731 pImageIndex[0] = imageIndex
4732
4733 return ?
4734}
4735
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004736@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004737cmd VkResult vkQueuePresentKHR(
4738 VkQueue queue,
4739 VkPresentInfoKHR* pPresentInfo) {
4740 queueObject := GetQueue(queue)
4741
4742 presentInfo := ?
4743 pPresentInfo[0] = presentInfo
4744
4745 return ?
4746}
4747
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004748@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004749cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
4750 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004751 u32* pPropertyCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004752 VkDisplayPropertiesKHR* pProperties) {
4753 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4754 return ?
4755}
4756
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004757@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004758cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
4759 VkPhysicalDevice physicalDevice,
4760 u32* pPropertyCount,
4761 VkDisplayPlanePropertiesKHR* pProperties) {
4762 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4763 return ?
4764}
4765
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004766@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004767cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
4768 VkPhysicalDevice physicalDevice,
4769 u32* pPropertyCount,
4770 VkDisplayKHR* pProperties) {
4771 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4772 return ?
4773}
4774
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004775@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004776cmd VkResult vkGetDisplayModePropertiesKHR(
4777 VkPhysicalDevice physicalDevice,
4778 VkDisplayKHR display,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004779 u32* pPropertyCount,
4780 VkDisplayModePropertiesKHR* pProperties) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004781 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4782 return ?
4783}
4784
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004785@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004786cmd VkResult vkCreateDisplayModeKHR(
4787 VkPhysicalDevice physicalDevice,
4788 VkDisplayKHR display,
4789 const VkDisplayModeCreateInfoKHR* pCreateInfo,
Jesse Hall0e74f002015-11-30 11:37:59 -08004790 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004791 VkDisplayModeKHR* pMode) {
4792 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4793 return ?
4794}
4795
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004796@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004797cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004798 VkPhysicalDevice physicalDevice,
Jesse Halla6429252015-11-29 18:59:42 -08004799 VkDisplayModeCreateInfoKHR mode,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004800 u32 planeIndex,
Jesse Halla6429252015-11-29 18:59:42 -08004801 VkDisplayPlaneCapabilitiesKHR* pCapabilities) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004802 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4803 return ?
4804}
4805
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004806@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004807cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
4808 VkInstance instance,
4809 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
Jesse Hall0e74f002015-11-30 11:37:59 -08004810 const VkAllocationCallbacks* pAllocator,
Jesse Halla6429252015-11-29 18:59:42 -08004811 VkSurfaceKHR* pSurface) {
4812 return ?
4813}
4814
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004815@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004816cmd VkResult vkCreateXlibSurfaceKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004817 VkInstance instance,
4818 platform.Display* dpy,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004819 platform.Window window,
Jesse Hall0e74f002015-11-30 11:37:59 -08004820 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004821 VkSurfaceKHR* pSurface) {
4822 instanceObject := GetInstance(instance)
4823 return ?
4824}
4825
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004826@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004827cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
4828 VkPhysicalDevice physicalDevice,
4829 u32 queueFamilyIndex,
4830 platform.Display* dpy,
Jesse Hall65ab5522015-11-30 00:07:16 -08004831 platform.VisualID visualID) {
Jesse Halla6429252015-11-29 18:59:42 -08004832 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4833 return ?
4834}
4835
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004836@extension("VK_KHR_xcb_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004837cmd VkResult vkCreateXCBSurfaceKHR(
4838 VkInstance instance,
4839 platform.xcb_connection_t* connection,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004840 platform.xcb_window_t window,
Jesse Hall0e74f002015-11-30 11:37:59 -08004841 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004842 VkSurfaceKHR* pSurface) {
4843 instanceObject := GetInstance(instance)
4844 return ?
4845}
4846
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004847@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004848cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
4849 VkPhysicalDevice physicalDevice,
4850 u32 queueFamilyIndex,
4851 platform.xcb_connection_t* connection,
4852 platform.xcb_visualid_t visual_id) {
4853 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4854 return ?
4855}
4856
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004857@extension("VK_KHR_wayland_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004858cmd VkResult vkCreateWaylandSurfaceKHR(
4859 VkInstance instance,
4860 platform.wl_display* display,
4861 platform.wl_surface* surface,
Jesse Hall0e74f002015-11-30 11:37:59 -08004862 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004863 VkSurfaceKHR* pSurface) {
4864 instanceObject := GetInstance(instance)
4865 return ?
4866}
4867
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004868@extension("VK_KHR_wayland_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004869cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
4870 VkPhysicalDevice physicalDevice,
4871 u32 queueFamilyIndex,
4872 platform.wl_display* display) {
4873 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4874 return ?
4875}
4876
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004877@extension("VK_KHR_mir_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004878cmd VkResult vkCreateMirSurfaceKHR(
4879 VkInstance instance,
4880 platform.MirConnection* connection,
4881 platform.MirSurface* mirSurface,
Jesse Hall0e74f002015-11-30 11:37:59 -08004882 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004883 VkSurfaceKHR* pSurface) {
4884 instanceObject := GetInstance(instance)
4885 return ?
4886}
4887
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004888@extension("VK_KHR_mir_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004889cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
4890 VkPhysicalDevice physicalDevice,
4891 u32 queueFamilyIndex,
4892 platform.MirConnection* connection) {
4893 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4894 return ?
4895}
4896
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004897@extension("VK_KHR_android_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004898cmd VkResult vkCreateAndroidSurfaceKHR(
4899 VkInstance instance,
Jesse Hall0e74f002015-11-30 11:37:59 -08004900 platform.ANativeWindow* window,
4901 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004902 VkSurfaceKHR* pSurface) {
4903 instanceObject := GetInstance(instance)
4904 return ?
4905}
4906
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004907@extension("VK_KHR_win32_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004908cmd VkResult vkCreateWin32SurfaceKHR(
4909 VkInstance instance,
4910 platform.HINSTANCE hinstance,
4911 platform.HWND hwnd,
Jesse Hall0e74f002015-11-30 11:37:59 -08004912 const VkAllocationCallbacks* pAllocator,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004913 VkSurfaceKHR* pSurface) {
4914 instanceObject := GetInstance(instance)
4915 return ?
4916}
4917
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004918@extension("VK_KHR_win32_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004919cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
4920 VkPhysicalDevice physicalDevice,
4921 u32 queueFamilyIndex) {
4922 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4923 return ?
4924}
4925
Jesse Halld27f6aa2015-08-15 17:58:48 -07004926
4927////////////////
4928// Validation //
4929////////////////
4930
4931extern void validate(string layerName, bool condition, string message)
4932
4933
4934/////////////////////////////
4935// Internal State Tracking //
4936/////////////////////////////
4937
4938StateObject State
4939
4940@internal class StateObject {
4941 // Dispatchable objects.
4942 map!(VkInstance, ref!InstanceObject) Instances
4943 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4944 map!(VkDevice, ref!DeviceObject) Devices
4945 map!(VkQueue, ref!QueueObject) Queues
Jesse Hall3fbc8562015-11-29 22:10:52 -08004946 map!(VkCommandBuffer, ref!CommandBufferObject) CommandBuffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07004947
4948 // Non-dispatchable objects.
4949 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories
4950 map!(VkBuffer, ref!BufferObject) Buffers
4951 map!(VkBufferView, ref!BufferViewObject) BufferViews
4952 map!(VkImage, ref!ImageObject) Images
4953 map!(VkImageView, ref!ImageViewObject) ImageViews
Jesse Halld27f6aa2015-08-15 17:58:48 -07004954 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules
Jesse Halld27f6aa2015-08-15 17:58:48 -07004955 map!(VkPipeline, ref!PipelineObject) Pipelines
4956 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts
4957 map!(VkSampler, ref!SamplerObject) Samplers
4958 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets
4959 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts
4960 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools
Jesse Halld27f6aa2015-08-15 17:58:48 -07004961 map!(VkFence, ref!FenceObject) Fences
4962 map!(VkSemaphore, ref!SemaphoreObject) Semaphores
4963 map!(VkEvent, ref!EventObject) Events
4964 map!(VkQueryPool, ref!QueryPoolObject) QueryPools
4965 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers
4966 map!(VkRenderPass, ref!RenderPassObject) RenderPasses
4967 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
Jesse Hall3fbc8562015-11-29 22:10:52 -08004968 map!(VkCommandPool, ref!CommandPoolObject) CommandPools
Jesse Hall1356b0d2015-11-23 17:24:58 -08004969 map!(VkSurfaceKHR, ref!SurfaceObject) Surfaces
Michael Lentine88594d72015-11-12 12:49:45 -08004970 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
Jesse Halld27f6aa2015-08-15 17:58:48 -07004971}
4972
4973@internal class InstanceObject {
4974}
4975
4976@internal class PhysicalDeviceObject {
4977 VkInstance instance
4978}
4979
4980@internal class DeviceObject {
4981 VkPhysicalDevice physicalDevice
4982}
4983
4984@internal class QueueObject {
4985 VkDevice device
4986 VkQueueFlags flags
4987}
4988
Jesse Hall3fbc8562015-11-29 22:10:52 -08004989@internal class CommandBufferObject {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004990 VkDevice device
4991 map!(u64, VkDeviceMemory) boundObjects
4992 VkQueueFlags queueFlags
4993}
4994
4995@internal class DeviceMemoryObject {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004996 VkDevice device
4997 VkDeviceSize allocationSize
4998 map!(u64, VkDeviceSize) boundObjects
4999 map!(VkCommandBuffer, VkCommandBuffer) boundCommandBuffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07005000}
5001
5002@internal class BufferObject {
5003 VkDevice device
Jesse Hall3fbc8562015-11-29 22:10:52 -08005004 VkDeviceMemory memory
5005 VkDeviceSize memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07005006}
5007
5008@internal class BufferViewObject {
5009 VkDevice device
5010 VkBuffer buffer
5011}
5012
5013@internal class ImageObject {
5014 VkDevice device
Jesse Hall3fbc8562015-11-29 22:10:52 -08005015 VkDeviceMemory memory
5016 VkDeviceSize memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07005017}
5018
5019@internal class ImageViewObject {
5020 VkDevice device
5021 VkImage image
5022}
5023
Jesse Halld27f6aa2015-08-15 17:58:48 -07005024@internal class ShaderObject {
5025 VkDevice device
5026}
5027
5028@internal class ShaderModuleObject {
5029 VkDevice device
5030}
5031
5032@internal class PipelineObject {
5033 VkDevice device
5034}
5035
5036@internal class PipelineLayoutObject {
5037 VkDevice device
5038}
5039
5040@internal class SamplerObject {
5041 VkDevice device
5042}
5043
5044@internal class DescriptorSetObject {
5045 VkDevice device
5046}
5047
5048@internal class DescriptorSetLayoutObject {
5049 VkDevice device
5050}
5051
5052@internal class DescriptorPoolObject {
5053 VkDevice device
5054}
5055
Jesse Halld27f6aa2015-08-15 17:58:48 -07005056@internal class FenceObject {
5057 VkDevice device
5058 bool signaled
5059}
5060
5061@internal class SemaphoreObject {
5062 VkDevice device
5063}
5064
5065@internal class EventObject {
5066 VkDevice device
5067}
5068
5069@internal class QueryPoolObject {
5070 VkDevice device
5071}
5072
5073@internal class FramebufferObject {
5074 VkDevice device
5075}
5076
5077@internal class RenderPassObject {
5078 VkDevice device
5079}
5080
5081@internal class PipelineCacheObject {
5082 VkDevice device
5083}
5084
Jesse Hall3fbc8562015-11-29 22:10:52 -08005085@internal class CommandPoolObject {
Jesse Halld27f6aa2015-08-15 17:58:48 -07005086 VkDevice device
5087}
5088
Jesse Hall1356b0d2015-11-23 17:24:58 -08005089@internal class SurfaceObject {
5090 VkInstance instance
5091}
5092
Michael Lentine88594d72015-11-12 12:49:45 -08005093@internal class SwapchainObject {
5094 VkDevice device
5095}
5096
Jesse Halld27f6aa2015-08-15 17:58:48 -07005097macro ref!InstanceObject GetInstance(VkInstance instance) {
5098 assert(instance in State.Instances)
5099 return State.Instances[instance]
5100}
5101
5102macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
5103 assert(physicalDevice in State.PhysicalDevices)
5104 return State.PhysicalDevices[physicalDevice]
5105}
5106
5107macro ref!DeviceObject GetDevice(VkDevice device) {
5108 assert(device in State.Devices)
5109 return State.Devices[device]
5110}
5111
5112macro ref!QueueObject GetQueue(VkQueue queue) {
5113 assert(queue in State.Queues)
5114 return State.Queues[queue]
5115}
5116
Jesse Hall3fbc8562015-11-29 22:10:52 -08005117macro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
5118 assert(commandBuffer in State.CommandBuffers)
5119 return State.CommandBuffers[commandBuffer]
Jesse Halld27f6aa2015-08-15 17:58:48 -07005120}
5121
Jesse Hall3fbc8562015-11-29 22:10:52 -08005122macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
5123 assert(memory in State.DeviceMemories)
5124 return State.DeviceMemories[memory]
Jesse Halld27f6aa2015-08-15 17:58:48 -07005125}
5126
5127macro ref!BufferObject GetBuffer(VkBuffer buffer) {
5128 assert(buffer in State.Buffers)
5129 return State.Buffers[buffer]
5130}
5131
5132macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
5133 assert(bufferView in State.BufferViews)
5134 return State.BufferViews[bufferView]
5135}
5136
5137macro ref!ImageObject GetImage(VkImage image) {
5138 assert(image in State.Images)
5139 return State.Images[image]
5140}
5141
5142macro ref!ImageViewObject GetImageView(VkImageView imageView) {
5143 assert(imageView in State.ImageViews)
5144 return State.ImageViews[imageView]
5145}
5146
Jesse Halld27f6aa2015-08-15 17:58:48 -07005147macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
5148 assert(shaderModule in State.ShaderModules)
5149 return State.ShaderModules[shaderModule]
5150}
5151
5152macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
5153 assert(pipeline in State.Pipelines)
5154 return State.Pipelines[pipeline]
5155}
5156
5157macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
5158 assert(pipelineLayout in State.PipelineLayouts)
5159 return State.PipelineLayouts[pipelineLayout]
5160}
5161
5162macro ref!SamplerObject GetSampler(VkSampler sampler) {
5163 assert(sampler in State.Samplers)
5164 return State.Samplers[sampler]
5165}
5166
5167macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
5168 assert(descriptorSet in State.DescriptorSets)
5169 return State.DescriptorSets[descriptorSet]
5170}
5171
5172macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
5173 assert(descriptorSetLayout in State.DescriptorSetLayouts)
5174 return State.DescriptorSetLayouts[descriptorSetLayout]
5175}
5176
5177macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
5178 assert(descriptorPool in State.DescriptorPools)
5179 return State.DescriptorPools[descriptorPool]
5180}
5181
Jesse Halld27f6aa2015-08-15 17:58:48 -07005182macro ref!FenceObject GetFence(VkFence fence) {
5183 assert(fence in State.Fences)
5184 return State.Fences[fence]
5185}
5186
5187macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
5188 assert(semaphore in State.Semaphores)
5189 return State.Semaphores[semaphore]
5190}
5191
5192macro ref!EventObject GetEvent(VkEvent event) {
5193 assert(event in State.Events)
5194 return State.Events[event]
5195}
5196
5197macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
5198 assert(queryPool in State.QueryPools)
5199 return State.QueryPools[queryPool]
5200}
5201
5202macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
5203 assert(framebuffer in State.Framebuffers)
5204 return State.Framebuffers[framebuffer]
5205}
5206
5207macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
5208 assert(renderPass in State.RenderPasses)
5209 return State.RenderPasses[renderPass]
5210}
5211
5212macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
5213 assert(pipelineCache in State.PipelineCaches)
5214 return State.PipelineCaches[pipelineCache]
5215}
5216
Jesse Hall3fbc8562015-11-29 22:10:52 -08005217macro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
5218 assert(commandPool in State.CommandPools)
5219 return State.CommandPools[commandPool]
Jesse Hallf09c6b12015-08-15 19:54:28 -07005220}
Michael Lentine88594d72015-11-12 12:49:45 -08005221
Jesse Hall1356b0d2015-11-23 17:24:58 -08005222macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
5223 assert(surface in State.Surfaces)
5224 return State.Surfaces[surface]
5225}
5226
Michael Lentine88594d72015-11-12 12:49:45 -08005227macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
5228 assert(swapchain in State.Swapchains)
5229 return State.Swapchains[swapchain]
5230}
Jesse Halld8bade02015-11-24 10:24:18 -08005231
5232macro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
5233 return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
5234}