blob: 3966f87a539127a25e09b86ad7ac046551eee3ae [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 Halla9e57032015-11-30 01:03:10 -080030define VERSION_MINOR 203
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 Hall3e0dc8f2015-11-30 00:42:57 -080048@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION 22
49@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 Halla9e57032015-11-30 01:03:10 -080052@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION 65
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 Hall3e0dc8f2015-11-30 00:42:57 -080056@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION 18
57@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 Hall3e0dc8f2015-11-30 00:42:57 -080060@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_REVISION 7
61@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NUMBER 4
62@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display_swapchain"
Jesse Hall1356b0d2015-11-23 17:24:58 -080063
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080064@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION 4
65@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 Hall3e0dc8f2015-11-30 00:42:57 -080068@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION 4
69@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 Hall3e0dc8f2015-11-30 00:42:57 -080072@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION 3
73@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 Hall3e0dc8f2015-11-30 00:42:57 -080076@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION 3
77@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 Hall3e0dc8f2015-11-30 00:42:57 -080080@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION 2
81@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 Hall3e0dc8f2015-11-30 00:42:57 -080084@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION 3
85@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
2113 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set
2114 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002115 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07002116 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002117 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07002118 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set
2119 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set
2120 /// vertex stage limits
2121 u32 maxVertexInputAttributes /// max num of vertex input attribute slots
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002122 u32 maxVertexInputBindings /// max num of vertex input binding slots
Jesse Halld27f6aa2015-08-15 17:58:48 -07002123 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset
2124 u32 maxVertexInputBindingStride /// max vertex input binding stride
2125 u32 maxVertexOutputComponents /// max num of output components written by vertex shader
2126 /// tessellation control stage limits
Jesse Hall3fbc8562015-11-29 22:10:52 -08002127 u32 maxTessellationGenerationLevel /// max level supported by tess primitive generator
Jesse Hallae38f732015-11-19 21:32:50 -08002128 u32 maxTessellationPatchSize /// max patch size (vertices)
2129 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS
2130 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
2131 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS
2132 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS
2133 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES
2134 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES
Jesse Halld27f6aa2015-08-15 17:58:48 -07002135 /// geometry stage limits
2136 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader
2137 u32 maxGeometryInputComponents /// max num of input components read in geometry stage
2138 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage
2139 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage
2140 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage
2141 /// fragment stage limits
2142 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage
Jesse Hallfbf97b02015-11-20 14:17:03 -08002143 u32 maxFragmentOutputAttachments /// max num of output attachments written in fragment stage
Jesse Hall3fbc8562015-11-29 22:10:52 -08002144 u32 maxFragmentDualSrcAttachments /// max num of output attachments written when using dual source blending
Jesse Halld27f6aa2015-08-15 17:58:48 -07002145 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers
2146 /// compute stage limits
2147 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes)
2148 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z)
2149 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group
2150 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z)
2151
2152 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y
2153 u32 subTexelPrecisionBits /// num bits of subtexel precision
2154 u32 mipmapPrecisionBits /// num bits of mipmap precision
2155
2156 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices)
2157 u32 maxDrawIndirectInstanceCount /// max instance count for indirect draw calls
Jesse Halld27f6aa2015-08-15 17:58:48 -07002158
2159 f32 maxSamplerLodBias /// max absolute sampler level of detail bias
2160 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy
2161
2162 u32 maxViewports /// max number of active viewports
Jesse Halld27f6aa2015-08-15 17:58:48 -07002163 u32[2] maxViewportDimensions /// max viewport dimensions (x,y)
2164 f32[2] viewportBoundsRange /// viewport bounds range (min,max)
2165 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport
2166
Jesse Halldc6d36c2015-11-29 19:12:15 -08002167 platform.size_t minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes)
2168 VkDeviceSize minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes)
2169 VkDeviceSize minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes)
2170 VkDeviceSize minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002171
Jesse Hallfbf97b02015-11-20 14:17:03 -08002172 s32 minTexelOffset /// min texel offset for OpTextureSampleOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002173 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset
Jesse Hallfbf97b02015-11-20 14:17:03 -08002174 s32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002175 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset
2176 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset
2177 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset
2178 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset
2179
2180 u32 maxFramebufferWidth /// max width for a framebuffer
2181 u32 maxFramebufferHeight /// max height for a framebuffer
2182 u32 maxFramebufferLayers /// max layer count for a layered framebuffer
Jesse Hall091ed9e2015-11-30 00:55:29 -08002183 VkSampleCountFlags framebufferColorSampleCounts
2184 VkSampleCountFlags framebufferDepthSampleCounts
2185 VkSampleCountFlags framebufferStencilSampleCounts
2186 VkSampleCountFlags framebufferNoAttachmentSampleCounts
Jesse Halld27f6aa2015-08-15 17:58:48 -07002187 u32 maxColorAttachments /// max num of framebuffer color attachments
2188
Jesse Hall091ed9e2015-11-30 00:55:29 -08002189 VkSampleCountFlags sampledImageColorSampleCounts
2190 VkSampleCountFlags sampledImageIntegerSampleCounts
2191 VkSampleCountFlags sampledImageDepthSampleCounts
2192 VkSampleCountFlags sampledImageStencilSampleCounts
2193 VkSampleCountFlags storageImageSampleCounts
Jesse Halld27f6aa2015-08-15 17:58:48 -07002194 u32 maxSampleMaskWords /// max num of sample mask words
2195
Jesse Halla9bb62b2015-11-21 19:31:56 -08002196 f32 timestampPeriod
Jesse Halld27f6aa2015-08-15 17:58:48 -07002197
2198 u32 maxClipDistances /// max number of clip distances
2199 u32 maxCullDistances /// max number of cull distances
2200 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping
2201
Jesse Hallfbf97b02015-11-20 14:17:03 -08002202 u32 discreteQueuePriorities
2203
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002204 f32[2] pointSizeRange /// range (min,max) of supported point sizes
2205 f32[2] lineWidthRange /// range (min,max) of supported line widths
Jesse Halld27f6aa2015-08-15 17:58:48 -07002206 f32 pointSizeGranularity /// granularity of supported point sizes
2207 f32 lineWidthGranularity /// granularity of supported line widths
Jesse Hall03b6fe12015-11-24 12:44:21 -08002208 VkBool32 strictLines
Jesse Hall091ed9e2015-11-30 00:55:29 -08002209 VkBool32 standardSampleLocations
Jesse Halla9bb62b2015-11-21 19:31:56 -08002210
Jesse Hall65ab5522015-11-30 00:07:16 -08002211 VkDeviceSize optimalBufferCopyOffsetAlignment
2212 VkDeviceSize optimalBufferCopyRowPitchAlignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07002213}
2214
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002215class VkPhysicalDeviceSparseProperties {
2216 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 -08002217 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 -07002218 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
2219 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 -07002220 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
2221}
2222
Jesse Halld27f6aa2015-08-15 17:58:48 -07002223class VkSemaphoreCreateInfo {
2224 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
2225 const void* pNext /// Pointer to next structure
2226 VkSemaphoreCreateFlags flags /// Semaphore creation flags
2227}
2228
2229class VkQueryPoolCreateInfo {
2230 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
2231 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002232 VkQueryPoolCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002233 VkQueryType queryType
Jesse Hall65ab5522015-11-30 00:07:16 -08002234 u32 entryCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07002235 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional
2236}
2237
2238class VkFramebufferCreateInfo {
2239 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
2240 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002241 VkFramebufferCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002242 VkRenderPass renderPass
2243 u32 attachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002244 const VkImageView* pAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07002245 u32 width
2246 u32 height
2247 u32 layers
2248}
2249
Jesse Hall3fbc8562015-11-29 22:10:52 -08002250class VkDrawIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002251 u32 vertexCount
2252 u32 instanceCount
2253 u32 firstVertex
2254 u32 firstInstance
2255}
2256
Jesse Hall3fbc8562015-11-29 22:10:52 -08002257class VkDrawIndexedIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002258 u32 indexCount
2259 u32 instanceCount
2260 u32 firstIndex
2261 s32 vertexOffset
2262 u32 firstInstance
2263}
2264
Jesse Hall3fbc8562015-11-29 22:10:52 -08002265class VkDispatchIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002266 u32 x
2267 u32 y
2268 u32 z
2269}
2270
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002271@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08002272class VkSurfaceCapabilitiesKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002273 u32 minImageCount
2274 u32 maxImageCount
2275 VkExtent2D currentExtent
2276 VkExtent2D minImageExtent
2277 VkExtent2D maxImageExtent
2278 VkSurfaceTransformFlagsKHR supportedTransforms
2279 VkSurfaceTransformKHR currentTransform
Jesse Halla6429252015-11-29 18:59:42 -08002280 VkCompositeAlphaFlagsKHR supportedCompositeAlpha
Jesse Hall1356b0d2015-11-23 17:24:58 -08002281 u32 maxImageArraySize
2282 VkImageUsageFlags supportedUsageFlags
Michael Lentine88594d72015-11-12 12:49:45 -08002283}
2284
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002285@extension("VK_KHR_surface")
Michael Lentine88594d72015-11-12 12:49:45 -08002286class VkSurfaceFormatKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002287 VkFormat format
2288 VkColorSpaceKHR colorSpace
Michael Lentine88594d72015-11-12 12:49:45 -08002289}
2290
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002291@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08002292class VkSwapchainCreateInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002293 VkStructureType sType
2294 const void* pNext
2295 VkSurfaceKHR surface
2296 u32 minImageCount
2297 VkFormat imageFormat
2298 VkColorSpaceKHR imageColorSpace
2299 VkExtent2D imageExtent
2300 VkImageUsageFlags imageUsageFlags
2301 VkSurfaceTransformKHR preTransform
Jesse Halla6429252015-11-29 18:59:42 -08002302 VkCompositeAlphaFlagBitsKHR compositeAlpha
Jesse Hall1356b0d2015-11-23 17:24:58 -08002303 u32 imageArraySize
2304 VkSharingMode sharingMode
Jesse Hall03b6fe12015-11-24 12:44:21 -08002305 u32 queueFamilyIndexCount
Jesse Hall1356b0d2015-11-23 17:24:58 -08002306 const u32* pQueueFamilyIndices
2307 VkPresentModeKHR presentMode
2308 VkSwapchainKHR oldSwapchain
2309 VkBool32 clipped
Michael Lentine88594d72015-11-12 12:49:45 -08002310}
2311
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002312@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08002313class VkPresentInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002314 VkStructureType sType
2315 const void* pNext
Jesse Hallb00daad2015-11-29 19:46:20 -08002316 u32 waitSemaphoreCount
2317 const VkSemaphore* pWaitSemaphores
Jesse Hall1356b0d2015-11-23 17:24:58 -08002318 u32 swapchainCount
Jesse Hall03b6fe12015-11-24 12:44:21 -08002319 const VkSwapchainKHR* pSwapchains
Jesse Hall1356b0d2015-11-23 17:24:58 -08002320 const u32* imageIndices
Jesse Halla9e57032015-11-30 01:03:10 -08002321 const VkResult* pResults
Michael Lentine88594d72015-11-12 12:49:45 -08002322}
2323
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002324@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002325class VkDisplayPropertiesKHR {
2326 VkDisplayKHR display
2327 const char* displayName
2328 VkExtent2D physicalDimensions
2329 VkExtent2D physicalResolution
2330 VkSurfaceTransformFlagsKHR supportedTransforms
Jesse Hall1356b0d2015-11-23 17:24:58 -08002331 VkBool32 planeReorderPossible
Jesse Halla6429252015-11-29 18:59:42 -08002332 VkBool32 persistentContent
Michael Lentine88594d72015-11-12 12:49:45 -08002333}
2334
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002335@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002336class VkDisplayModeParametersKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002337 VkExtent2D visibleRegion
Jesse Halla6429252015-11-29 18:59:42 -08002338 u32 refreshRate
Michael Lentine88594d72015-11-12 12:49:45 -08002339}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002340
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002341@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002342class VkDisplayModePropertiesKHR {
2343 VkDisplayModeKHR displayMode
Jesse Halla6429252015-11-29 18:59:42 -08002344 VkDisplayModeParametersKHR parameters
Jesse Hall1356b0d2015-11-23 17:24:58 -08002345}
2346
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002347@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002348class VkDisplayModeCreateInfoKHR {
2349 VkStructureType sType
2350 const void* pNext
Jesse Halla6429252015-11-29 18:59:42 -08002351 VkDisplayModeParametersKHR parameters
Jesse Hall1356b0d2015-11-23 17:24:58 -08002352}
2353
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002354@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002355class VkDisplayPlanePropertiesKHR {
Jesse Halla6429252015-11-29 18:59:42 -08002356 VkDisplayKHR currentDisplay
2357 u32 currentStackIndex
2358}
2359
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002360@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002361class VkDisplayPlaneCapabilitiesKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002362 VkDisplayPlaneAlphaFlagsKHR supportedAlpha
2363 VkOffset2D minSrcPosition
2364 VkOffset2D maxSrcPosition
2365 VkExtent2D minSrcExtent
2366 VkExtent2D maxSrcExtent
2367 VkOffset2D minDstPosition
2368 VkOffset2D maxDstPosition
2369 VkExtent2D minDstExtent
2370 VkExtent2D maxDstExtent
2371}
2372
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002373@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002374class VkDisplaySurfaceCreateInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002375 VkStructureType sType
2376 const void* pNext
2377 VkDisplayModeKHR displayMode
2378 u32 planeIndex
2379 u32 planeStackIndex
2380 VkSurfaceTransformKHR transform
2381 f32 globalAlpha
2382 VkDisplayPlaneAlphaFlagsKHR alphaMode
2383 VkExtent2D imageSize
2384}
2385
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002386@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002387class VkDisplaySwapchainCreateInfoKHR {
2388 VkStructureType sType
2389 const void* pNext
2390 const VkSwapchainCreateInfoKHR* pNextSwapchainCreateInfo
2391}
2392
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002393@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002394class VkDisplayPresentInfoKHR {
2395 VkStructureType sType
2396 const void* pNext
2397 VkRect2D srcRect
2398 VkRect2D dstRect
Jesse Halla6429252015-11-29 18:59:42 -08002399 VkBool32 persistent
Jesse Hall1356b0d2015-11-23 17:24:58 -08002400}
2401
2402
Jesse Halld27f6aa2015-08-15 17:58:48 -07002403////////////////
2404// Commands //
2405////////////////
2406
2407// Function pointers. TODO: add support for function pointers.
2408
2409@external type void* PFN_vkVoidFunction
2410@pfn cmd void vkVoidFunction() {
2411}
2412
Jesse Hall3fbc8562015-11-29 22:10:52 -08002413@external type void* PFN_vkAllocationFunction
2414@pfn cmd void* vkAllocationFunction(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002415 void* pUserData,
2416 platform.size_t size,
2417 platform.size_t alignment,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002418 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002419 return ?
2420}
2421
Jesse Hall3fbc8562015-11-29 22:10:52 -08002422@external type void* PFN_vkReallocationFunction
2423@pfn cmd void* vkReallocationFunction(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002424 void* pUserData,
2425 void* pOriginal,
2426 platform.size_t size,
2427 platform.size_t alignment,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002428 VkSystemAllocationScope allocationScope) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002429 return ?
2430}
2431
2432@external type void* PFN_vkFreeFunction
2433@pfn cmd void vkFreeFunction(
2434 void* pUserData,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002435 void* pMemory) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002436}
2437
Jesse Hall3fbc8562015-11-29 22:10:52 -08002438@external type void* PFN_vkInternalAllocationNotification
2439@pfn cmd void vkInternalAllocationNotification(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002440 void* pUserData,
2441 platform.size_t size,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002442 VkInternalAllocationType allocationType,
2443 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002444}
2445
2446@external type void* PFN_vkInternalFreeNotification
2447@pfn cmd void vkInternalFreeNotification(
2448 void* pUserData,
2449 platform.size_t size,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002450 VkInternalAllocationType allocationType,
2451 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002452}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002453
2454// Global functions
2455
2456@threadSafety("system")
2457cmd VkResult vkCreateInstance(
2458 const VkInstanceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002459 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002460 VkInstance* pInstance) {
2461 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2462
2463 instance := ?
2464 pInstance[0] = instance
2465 State.Instances[instance] = new!InstanceObject()
2466
Jesse Hall03b6fe12015-11-24 12:44:21 -08002467 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerNameCount]
2468 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionNameCount]
Jesse Halld27f6aa2015-08-15 17:58:48 -07002469
2470 return ?
2471}
2472
2473@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002474cmd void vkDestroyInstance(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002475 VkInstance instance,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002476 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002477 instanceObject := GetInstance(instance)
2478
2479 State.Instances[instance] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002480}
2481
2482@threadSafety("system")
2483cmd VkResult vkEnumeratePhysicalDevices(
2484 VkInstance instance,
2485 u32* pPhysicalDeviceCount,
2486 VkPhysicalDevice* pPhysicalDevices) {
2487 instanceObject := GetInstance(instance)
2488
2489 physicalDeviceCount := as!u32(?)
2490 pPhysicalDeviceCount[0] = physicalDeviceCount
2491 physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2492
2493 for i in (0 .. physicalDeviceCount) {
2494 physicalDevice := ?
2495 physicalDevices[i] = physicalDevice
2496 if !(physicalDevice in State.PhysicalDevices) {
2497 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2498 }
2499 }
2500
2501 return ?
2502}
2503
2504cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2505 VkDevice device,
2506 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002507 if device != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002508 device := GetDevice(device)
2509 }
2510
2511 return ?
2512}
2513
2514cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2515 VkInstance instance,
2516 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002517 if instance != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002518 instanceObject := GetInstance(instance)
2519 }
2520
2521 return ?
2522}
2523
Jesse Hall606a54e2015-11-19 22:17:28 -08002524cmd void vkGetPhysicalDeviceProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002525 VkPhysicalDevice physicalDevice,
2526 VkPhysicalDeviceProperties* pProperties) {
2527 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2528
2529 properties := ?
2530 pProperties[0] = properties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002531}
2532
Jesse Hall606a54e2015-11-19 22:17:28 -08002533cmd void vkGetPhysicalDeviceQueueFamilyProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002534 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002535 u32* pQueueFamilyPropertyCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002536 VkQueueFamilyProperties* pQueueFamilyProperties) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002537 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002538 // TODO: Figure out how to express fetch-count-or-properties
2539 // This version fails 'apic validate' with 'fence not allowed in
2540 // *semantic.Branch'. Other attempts have failed with the same or other
2541 // errors.
2542 // if pQueueFamilyProperties != null {
2543 // queuesProperties := pQueueFamilyProperties[0:pCount[0]]
2544 // for i in (0 .. pCount[0]) {
2545 // queueProperties := as!VkQueueFamilyProperties(?)
2546 // queuesProperties[i] = queueProperties
2547 // }
2548 // } else {
2549 // count := ?
2550 // pCount[0] = count
2551 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002552}
2553
Jesse Hall606a54e2015-11-19 22:17:28 -08002554cmd void vkGetPhysicalDeviceMemoryProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002555 VkPhysicalDevice physicalDevice,
2556 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
2557 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2558
2559 memoryProperties := ?
2560 pMemoryProperties[0] = memoryProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002561}
2562
Jesse Hall606a54e2015-11-19 22:17:28 -08002563cmd void vkGetPhysicalDeviceFeatures(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002564 VkPhysicalDevice physicalDevice,
2565 VkPhysicalDeviceFeatures* pFeatures) {
2566 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2567
2568 features := ?
2569 pFeatures[0] = features
Jesse Halld27f6aa2015-08-15 17:58:48 -07002570}
2571
Jesse Hall606a54e2015-11-19 22:17:28 -08002572cmd void vkGetPhysicalDeviceFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002573 VkPhysicalDevice physicalDevice,
2574 VkFormat format,
2575 VkFormatProperties* pFormatProperties) {
2576 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2577
2578 formatProperties := ?
2579 pFormatProperties[0] = formatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002580}
2581
Jesse Halla9e57032015-11-30 01:03:10 -08002582cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002583 VkPhysicalDevice physicalDevice,
2584 VkFormat format,
2585 VkImageType type,
2586 VkImageTiling tiling,
2587 VkImageUsageFlags usage,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002588 VkImageCreateFlags flags,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002589 VkImageFormatProperties* pImageFormatProperties) {
2590 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2591
2592 imageFormatProperties := ?
2593 pImageFormatProperties[0] = imageFormatProperties
Jesse Halla9e57032015-11-30 01:03:10 -08002594
2595 return ?
Jesse Halld27f6aa2015-08-15 17:58:48 -07002596}
2597
Jesse Halld27f6aa2015-08-15 17:58:48 -07002598
2599// Device functions
2600
2601@threadSafety("system")
2602cmd VkResult vkCreateDevice(
2603 VkPhysicalDevice physicalDevice,
2604 const VkDeviceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002605 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002606 VkDevice* pDevice) {
2607 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2608 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2609
2610 device := ?
2611 pDevice[0] = device
2612 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2613
2614 return ?
2615}
2616
2617@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002618cmd void vkDestroyDevice(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002619 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002620 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002621 deviceObject := GetDevice(device)
2622
2623 State.Devices[device] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002624}
2625
2626
2627// Extension discovery functions
2628
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002629cmd VkResult vkEnumerateInstanceLayerProperties(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002630 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002631 VkLayerProperties* pProperties) {
2632 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002633 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002634
2635 properties := pProperties[0:count]
2636 for i in (0 .. count) {
2637 property := ?
2638 properties[i] = property
2639 }
2640
2641 return ?
2642}
2643
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002644cmd VkResult vkEnumerateInstanceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002645 const char* pLayerName,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002646 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002647 VkExtensionProperties* pProperties) {
2648 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002649 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002650
2651 properties := pProperties[0:count]
2652 for i in (0 .. count) {
2653 property := ?
2654 properties[i] = property
2655 }
2656
2657 return ?
2658}
2659
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002660cmd VkResult vkEnumerateDeviceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002661 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002662 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002663 VkLayerProperties* pProperties) {
2664 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2665 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002666 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002667
2668 properties := pProperties[0:count]
2669 for i in (0 .. count) {
2670 property := ?
2671 properties[i] = property
2672 }
2673
2674 return ?
2675}
2676
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002677cmd VkResult vkEnumerateDeviceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002678 VkPhysicalDevice physicalDevice,
2679 const char* pLayerName,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002680 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002681 VkExtensionProperties* pProperties) {
2682 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2683
2684 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002685 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002686
2687 properties := pProperties[0:count]
2688 for i in (0 .. count) {
2689 property := ?
2690 properties[i] = property
2691 }
2692
2693 return ?
2694}
2695
2696
2697// Queue functions
2698
2699@threadSafety("system")
Jesse Hall606a54e2015-11-19 22:17:28 -08002700cmd void vkGetDeviceQueue(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002701 VkDevice device,
2702 u32 queueFamilyIndex,
2703 u32 queueIndex,
2704 VkQueue* pQueue) {
2705 deviceObject := GetDevice(device)
2706
2707 queue := ?
2708 pQueue[0] = queue
2709
2710 if !(queue in State.Queues) {
2711 State.Queues[queue] = new!QueueObject(device: device)
2712 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002713}
2714
2715@threadSafety("app")
2716cmd VkResult vkQueueSubmit(
2717 VkQueue queue,
Jesse Halla366a512015-11-19 22:30:07 -08002718 u32 submitCount,
Jesse Hallb00daad2015-11-29 19:46:20 -08002719 const VkSubmitInfo* pSubmits,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002720 VkFence fence) {
2721 queueObject := GetQueue(queue)
2722
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002723 if fence != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002724 fenceObject := GetFence(fence)
2725 assert(fenceObject.device == queueObject.device)
2726 }
2727
Jesse Hall3fbc8562015-11-29 22:10:52 -08002728 // commandBuffers := pcommandBuffers[0:commandBufferCount]
2729 // for i in (0 .. commandBufferCount) {
2730 // commandBuffer := commandBuffers[i]
2731 // commandBufferObject := GetCommandBuffer(commandBuffer)
2732 // assert(commandBufferObject.device == queueObject.device)
Jesse Halla366a512015-11-19 22:30:07 -08002733 //
Jesse Hall3fbc8562015-11-29 22:10:52 -08002734 // validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
2735 // "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
Jesse Halla366a512015-11-19 22:30:07 -08002736 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002737
2738 return ?
2739}
2740
2741@threadSafety("system")
2742cmd VkResult vkQueueWaitIdle(
2743 VkQueue queue) {
2744 queueObject := GetQueue(queue)
2745
2746 return ?
2747}
2748
2749@threadSafety("system")
2750cmd VkResult vkDeviceWaitIdle(
2751 VkDevice device) {
2752 deviceObject := GetDevice(device)
2753
2754 return ?
2755}
2756
2757
2758// Memory functions
2759
2760@threadSafety("system")
Jesse Hall3fbc8562015-11-29 22:10:52 -08002761cmd VkResult vkAllocateMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002762 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002763 const VkMemoryAllocateInfo* pAllocateInfo,
2764 const VkAllocationCallbacks* pAllocator,
2765 VkDeviceMemory* pMemory) {
2766 assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002767 deviceObject := GetDevice(device)
2768
Jesse Hall3fbc8562015-11-29 22:10:52 -08002769 memory := ?
2770 pMemory[0] = memory
2771 State.DeviceMemories[memory] = new!DeviceMemoryObject(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002772 device: device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002773 allocationSize: pAllocateInfo[0].allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002774
2775 return ?
2776}
2777
2778@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002779cmd void vkFreeMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002780 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002781 VkDeviceMemory memory,
2782 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002783 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002784 memoryObject := GetDeviceMemory(memory)
2785 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002786
2787 // Check that no objects are still bound before freeing.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002788 validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002789 "vkFreeMemory: objects still bound")
Jesse Hall3fbc8562015-11-29 22:10:52 -08002790 validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
2791 "vkFreeMemory: commandBuffers still bound")
2792 State.DeviceMemories[memory] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002793}
2794
2795@threadSafety("app")
2796cmd VkResult vkMapMemory(
2797 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002798 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002799 VkDeviceSize offset,
2800 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002801 VkMemoryMapFlags flags,
2802 void** ppData) {
2803 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002804 memoryObject := GetDeviceMemory(memory)
2805 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002806
2807 assert(flags == as!VkMemoryMapFlags(0))
Jesse Hall3fbc8562015-11-29 22:10:52 -08002808 assert((offset + size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002809
2810 return ?
2811}
2812
2813@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002814cmd void vkUnmapMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002815 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002816 VkDeviceMemory memory) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002817 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002818 memoryObject := GetDeviceMemory(memory)
2819 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002820}
2821
2822cmd VkResult vkFlushMappedMemoryRanges(
2823 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002824 u32 memoryRangeCount
2825 const VkMappedMemoryRange* pMemoryRanges) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002826 deviceObject := GetDevice(device)
2827
Jesse Hall3fbc8562015-11-29 22:10:52 -08002828 memoryRanges := pMemoryRanges[0:memoryRangeCount]
2829 for i in (0 .. memoryRangeCount) {
2830 memoryRange := memoryRanges[i]
2831 memoryObject := GetDeviceMemory(memoryRange.memory)
2832 assert(memoryObject.device == device)
2833 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002834 }
2835
2836 return ?
2837}
2838
2839cmd VkResult vkInvalidateMappedMemoryRanges(
2840 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002841 u32 memoryRangeCount,
2842 const VkMappedMemoryRange* pMemoryRanges) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002843 deviceObject := GetDevice(device)
2844
Jesse Hall3fbc8562015-11-29 22:10:52 -08002845 memoryRanges := pMemoryRanges[0:memoryRangeCount]
2846 for i in (0 .. memoryRangeCount) {
2847 memoryRange := memoryRanges[i]
2848 memoryObject := GetDeviceMemory(memoryRange.memory)
2849 assert(memoryObject.device == device)
2850 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002851 }
2852
2853 return ?
2854}
2855
2856
2857// Memory management API functions
2858
Jesse Hall606a54e2015-11-19 22:17:28 -08002859cmd void vkGetDeviceMemoryCommitment(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002860 VkDevice device,
2861 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002862 VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002863 deviceObject := GetDevice(device)
2864
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002865 if memory != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002866 memoryObject := GetDeviceMemory(memory)
2867 assert(memoryObject.device == device)
2868 }
2869
2870 committedMemoryInBytes := ?
2871 pCommittedMemoryInBytes[0] = committedMemoryInBytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07002872}
2873
Jesse Hall606a54e2015-11-19 22:17:28 -08002874cmd void vkGetBufferMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002875 VkDevice device,
2876 VkBuffer buffer,
2877 VkMemoryRequirements* pMemoryRequirements) {
2878 deviceObject := GetDevice(device)
2879 bufferObject := GetBuffer(buffer)
2880 assert(bufferObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002881}
2882
2883cmd VkResult vkBindBufferMemory(
2884 VkDevice device,
2885 VkBuffer buffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002886 VkDeviceMemory memory,
2887 VkDeviceSize memoryOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002888 deviceObject := GetDevice(device)
2889 bufferObject := GetBuffer(buffer)
2890 assert(bufferObject.device == device)
2891
2892 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002893 if bufferObject.memory != NULL_HANDLE {
2894 memoryObject := GetDeviceMemory(bufferObject.memory)
2895 memoryObject.boundObjects[as!u64(buffer)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002896 }
2897
2898 // Bind buffer to given memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002899 if memory != NULL_HANDLE {
2900 memoryObject := GetDeviceMemory(memory)
2901 assert(memoryObject.device == device)
2902 memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002903 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08002904 bufferObject.memory = memory
2905 bufferObject.memoryOffset = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002906
2907 return ?
2908}
2909
Jesse Hall606a54e2015-11-19 22:17:28 -08002910cmd void vkGetImageMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002911 VkDevice device,
2912 VkImage image,
2913 VkMemoryRequirements* pMemoryRequirements) {
2914 deviceObject := GetDevice(device)
2915 imageObject := GetImage(image)
2916 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002917}
2918
2919cmd VkResult vkBindImageMemory(
2920 VkDevice device,
2921 VkImage image,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002922 VkDeviceMemory memory,
2923 VkDeviceSize memoryOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002924 deviceObject := GetDevice(device)
2925 imageObject := GetImage(image)
2926 assert(imageObject.device == device)
2927
2928 // Unbind image from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002929 if imageObject.memory != NULL_HANDLE {
2930 memoryObject := GetDeviceMemory(imageObject.memory)
2931 memoryObject.boundObjects[as!u64(image)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002932 }
2933
2934 // Bind image to given memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002935 if memory != NULL_HANDLE {
2936 memoryObject := GetDeviceMemory(memory)
2937 assert(memoryObject.device == device)
2938 memoryObject.boundObjects[as!u64(image)] = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002939 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08002940 imageObject.memory = memory
2941 imageObject.memoryOffset = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002942
2943 return ?
2944}
2945
Jesse Hall606a54e2015-11-19 22:17:28 -08002946cmd void vkGetImageSparseMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002947 VkDevice device,
2948 VkImage image,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002949 u32* pSparseMemoryRequirementCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002950 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
2951 deviceObject := GetDevice(device)
2952 imageObject := GetImage(image)
2953 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002954}
2955
Jesse Hall606a54e2015-11-19 22:17:28 -08002956cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002957 VkPhysicalDevice physicalDevice,
2958 VkFormat format,
2959 VkImageType type,
Jesse Hall091ed9e2015-11-30 00:55:29 -08002960 VkSampleCountFlagBits samples,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002961 VkImageUsageFlags usage,
2962 VkImageTiling tiling,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002963 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002964 VkSparseImageFormatProperties* pProperties) {
2965 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002966}
2967
Jesse Halla6429252015-11-29 18:59:42 -08002968cmd VkResult vkQueueBindSparse(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002969 VkQueue queue,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002970 u32 bindInfoCount,
Jesse Halla6429252015-11-29 18:59:42 -08002971 const VkBindSparseInfo* pBindInfo,
2972 VkFence fence) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002973 queueObject := GetQueue(queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002974
2975 return ?
2976}
2977
2978
2979// Fence functions
2980
2981@threadSafety("system")
2982cmd VkResult vkCreateFence(
2983 VkDevice device,
2984 const VkFenceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002985 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002986 VkFence* pFence) {
2987 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2988 deviceObject := GetDevice(device)
2989
2990 fence := ?
2991 pFence[0] = fence
2992 State.Fences[fence] = new!FenceObject(
Jesse Halld8bade02015-11-24 10:24:18 -08002993 device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
Jesse Halld27f6aa2015-08-15 17:58:48 -07002994
2995 return ?
2996}
2997
2998@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002999cmd void vkDestroyFence(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003000 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003001 VkFence fence,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003002 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003003 deviceObject := GetDevice(device)
3004 fenceObject := GetFence(fence)
3005 assert(fenceObject.device == device)
3006
3007 State.Fences[fence] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003008}
3009
3010@threadSafety("system")
3011cmd VkResult vkResetFences(
3012 VkDevice device,
3013 u32 fenceCount,
3014 const VkFence* pFences) {
3015 deviceObject := GetDevice(device)
3016
3017 fences := pFences[0:fenceCount]
3018 for i in (0 .. fenceCount) {
3019 fence := fences[i]
3020 fenceObject := GetFence(fence)
3021 assert(fenceObject.device == device)
3022 fenceObject.signaled = false
3023 }
3024
3025 return ?
3026}
3027
3028@threadSafety("system")
3029cmd VkResult vkGetFenceStatus(
3030 VkDevice device,
3031 VkFence fence) {
3032 deviceObject := GetDevice(device)
3033 fenceObject := GetFence(fence)
3034 assert(fenceObject.device == device)
3035
3036 return ?
3037}
3038
3039@threadSafety("system")
3040cmd VkResult vkWaitForFences(
3041 VkDevice device,
3042 u32 fenceCount,
3043 const VkFence* pFences,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003044 VkBool32 waitAll,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003045 u64 timeout) { /// timeout in nanoseconds
3046 deviceObject := GetDevice(device)
3047
3048 fences := pFences[0:fenceCount]
3049 for i in (0 .. fenceCount) {
3050 fence := fences[i]
3051 fenceObject := GetFence(fence)
3052 assert(fenceObject.device == device)
3053 }
3054
3055 return ?
3056}
3057
3058
3059// Queue semaphore functions
3060
3061@threadSafety("system")
3062cmd VkResult vkCreateSemaphore(
3063 VkDevice device,
3064 const VkSemaphoreCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003065 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003066 VkSemaphore* pSemaphore) {
3067 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
3068 deviceObject := GetDevice(device)
3069
3070 semaphore := ?
3071 pSemaphore[0] = semaphore
3072 State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
3073
3074 return ?
3075}
3076
3077@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003078cmd void vkDestroySemaphore(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003079 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003080 VkSemaphore semaphore,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003081 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003082 deviceObject := GetDevice(device)
3083 semaphoreObject := GetSemaphore(semaphore)
3084 assert(semaphoreObject.device == device)
3085
3086 State.Semaphores[semaphore] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003087}
3088
Jesse Halld27f6aa2015-08-15 17:58:48 -07003089
3090// Event functions
3091
3092@threadSafety("system")
3093cmd VkResult vkCreateEvent(
3094 VkDevice device,
3095 const VkEventCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003096 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003097 VkEvent* pEvent) {
3098 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
3099 deviceObject := GetDevice(device)
3100
3101 event := ?
3102 pEvent[0] = event
3103 State.Events[event] = new!EventObject(device: device)
3104
3105 return ?
3106}
3107
3108@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003109cmd void vkDestroyEvent(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003110 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003111 VkEvent event,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003112 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003113 deviceObject := GetDevice(device)
3114 eventObject := GetEvent(event)
3115 assert(eventObject.device == device)
3116
3117 State.Events[event] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003118}
3119
3120@threadSafety("system")
3121cmd VkResult vkGetEventStatus(
3122 VkDevice device,
3123 VkEvent event) {
3124 deviceObject := GetDevice(device)
3125 eventObject := GetEvent(event)
3126 assert(eventObject.device == device)
3127
3128 return ?
3129}
3130
3131@threadSafety("system")
3132cmd VkResult vkSetEvent(
3133 VkDevice device,
3134 VkEvent event) {
3135 deviceObject := GetDevice(device)
3136 eventObject := GetEvent(event)
3137 assert(eventObject.device == device)
3138
3139 return ?
3140}
3141
3142@threadSafety("system")
3143cmd VkResult vkResetEvent(
3144 VkDevice device,
3145 VkEvent event) {
3146 deviceObject := GetDevice(device)
3147 eventObject := GetEvent(event)
3148 assert(eventObject.device == device)
3149
3150 return ?
3151}
3152
3153
3154// Query functions
3155
3156@threadSafety("system")
3157cmd VkResult vkCreateQueryPool(
3158 VkDevice device,
3159 const VkQueryPoolCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003160 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003161 VkQueryPool* pQueryPool) {
3162 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
3163 deviceObject := GetDevice(device)
3164
3165 queryPool := ?
3166 pQueryPool[0] = queryPool
3167 State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
3168
3169 return ?
3170}
3171
3172@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003173cmd void vkDestroyQueryPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003174 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003175 VkQueryPool queryPool,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003176 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003177 deviceObject := GetDevice(device)
3178 queryPoolObject := GetQueryPool(queryPool)
3179 assert(queryPoolObject.device == device)
3180
3181 State.QueryPools[queryPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003182}
3183
3184@threadSafety("system")
3185cmd VkResult vkGetQueryPoolResults(
3186 VkDevice device,
3187 VkQueryPool queryPool,
3188 u32 startQuery,
3189 u32 queryCount,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003190 platform.size_t dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003191 void* pData,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003192 VkDeviceSize stride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003193 VkQueryResultFlags flags) {
3194 deviceObject := GetDevice(device)
3195 queryPoolObject := GetQueryPool(queryPool)
3196 assert(queryPoolObject.device == device)
3197
Jesse Halld27f6aa2015-08-15 17:58:48 -07003198 data := pData[0:dataSize]
3199
3200 return ?
3201}
3202
3203// Buffer functions
3204
3205@threadSafety("system")
3206cmd VkResult vkCreateBuffer(
3207 VkDevice device,
3208 const VkBufferCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003209 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003210 VkBuffer* pBuffer) {
3211 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
3212 deviceObject := GetDevice(device)
3213
3214 buffer := ?
3215 pBuffer[0] = buffer
3216 State.Buffers[buffer] = new!BufferObject(device: device)
3217
3218 return ?
3219}
3220
3221@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003222cmd void vkDestroyBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003223 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003224 VkBuffer buffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003225 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003226 deviceObject := GetDevice(device)
3227 bufferObject := GetBuffer(buffer)
3228 assert(bufferObject.device == device)
3229
Jesse Hall3fbc8562015-11-29 22:10:52 -08003230 assert(bufferObject.memory == 0)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003231 State.Buffers[buffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003232}
3233
3234
3235// Buffer view functions
3236
3237@threadSafety("system")
3238cmd VkResult vkCreateBufferView(
3239 VkDevice device,
3240 const VkBufferViewCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003241 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003242 VkBufferView* pView) {
3243 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
3244 deviceObject := GetDevice(device)
3245
3246 bufferObject := GetBuffer(pCreateInfo.buffer)
3247 assert(bufferObject.device == device)
3248
3249 view := ?
3250 pView[0] = view
3251 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
3252
3253 return ?
3254}
3255
3256@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003257cmd void vkDestroyBufferView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003258 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003259 VkBufferView bufferView,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003260 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003261 deviceObject := GetDevice(device)
3262 bufferViewObject := GetBufferView(bufferView)
3263 assert(bufferViewObject.device == device)
3264
3265 State.BufferViews[bufferView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003266}
3267
3268
3269// Image functions
3270
3271@threadSafety("system")
3272cmd VkResult vkCreateImage(
3273 VkDevice device,
3274 const VkImageCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003275 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003276 VkImage* pImage) {
3277 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
3278 deviceObject := GetDevice(device)
3279
3280 image := ?
3281 pImage[0] = image
3282 State.Images[image] = new!ImageObject(device: device)
3283
3284 return ?
3285}
3286
3287@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003288cmd void vkDestroyImage(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003289 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003290 VkImage image,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003291 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003292 deviceObject := GetDevice(device)
3293 imageObject := GetImage(image)
3294 assert(imageObject.device == device)
3295
Jesse Hall3fbc8562015-11-29 22:10:52 -08003296 assert(imageObject.memory == 0)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003297 State.Images[image] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003298}
3299
Jesse Hall606a54e2015-11-19 22:17:28 -08003300cmd void vkGetImageSubresourceLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003301 VkDevice device,
3302 VkImage image,
3303 const VkImageSubresource* pSubresource,
3304 VkSubresourceLayout* pLayout) {
3305 deviceObject := GetDevice(device)
3306 imageObject := GetImage(image)
3307 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003308}
3309
3310
3311// Image view functions
3312
3313@threadSafety("system")
3314cmd VkResult vkCreateImageView(
3315 VkDevice device,
3316 const VkImageViewCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003317 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003318 VkImageView* pView) {
3319 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3320 deviceObject := GetDevice(device)
3321
3322 imageObject := GetImage(pCreateInfo.image)
3323 assert(imageObject.device == device)
3324
3325 view := ?
3326 pView[0] = view
3327 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
3328
3329 return ?
3330}
3331
3332@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003333cmd void vkDestroyImageView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003334 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003335 VkImageView imageView,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003336 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003337 deviceObject := GetDevice(device)
3338 imageViewObject := GetImageView(imageView)
3339 assert(imageViewObject.device == device)
3340
3341 State.ImageViews[imageView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003342}
3343
3344
3345// Shader functions
3346
3347cmd VkResult vkCreateShaderModule(
3348 VkDevice device,
3349 const VkShaderModuleCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003350 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003351 VkShaderModule* pShaderModule) {
3352 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3353 deviceObject := GetDevice(device)
3354
3355 shaderModule := ?
3356 pShaderModule[0] = shaderModule
3357 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3358
3359 return ?
3360}
3361
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003362cmd void vkDestroyShaderModule(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003363 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003364 VkShaderModule shaderModule,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003365 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003366 deviceObject := GetDevice(device)
3367 shaderModuleObject := GetShaderModule(shaderModule)
3368 assert(shaderModuleObject.device == device)
3369
3370 State.ShaderModules[shaderModule] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003371}
3372
Jesse Halld27f6aa2015-08-15 17:58:48 -07003373
3374// Pipeline functions
3375
3376cmd VkResult vkCreatePipelineCache(
3377 VkDevice device,
3378 const VkPipelineCacheCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003379 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003380 VkPipelineCache* pPipelineCache) {
3381 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3382 deviceObject := GetDevice(device)
3383
3384 pipelineCache := ?
3385 pPipelineCache[0] = pipelineCache
3386 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3387
3388 return ?
3389}
3390
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003391cmd void vkDestroyPipelineCache(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003392 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003393 VkPipelineCache pipelineCache,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003394 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003395 deviceObject := GetDevice(device)
3396 pipelineCacheObject := GetPipelineCache(pipelineCache)
3397 assert(pipelineCacheObject.device == device)
3398
3399 State.PipelineCaches[pipelineCache] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003400}
3401
Jesse Halld27f6aa2015-08-15 17:58:48 -07003402cmd VkResult vkGetPipelineCacheData(
3403 VkDevice device,
3404 VkPipelineCache pipelineCache,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003405 platform.size_t* pDataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003406 void* pData) {
3407 deviceObject := GetDevice(device)
3408 pipelineCacheObject := GetPipelineCache(pipelineCache)
3409 assert(pipelineCacheObject.device == device)
3410
3411 return ?
3412}
3413
3414cmd VkResult vkMergePipelineCaches(
3415 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003416 VkPipelineCache dstCache,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003417 u32 srcCacheCount,
3418 const VkPipelineCache* pSrcCaches) {
3419 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003420 dstCacheObject := GetPipelineCache(dstCache)
3421 assert(dstCacheObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003422
3423 srcCaches := pSrcCaches[0:srcCacheCount]
3424 for i in (0 .. srcCacheCount) {
3425 srcCache := srcCaches[i]
3426 srcCacheObject := GetPipelineCache(srcCache)
3427 assert(srcCacheObject.device == device)
3428 }
3429
3430 return ?
3431}
3432
3433cmd VkResult vkCreateGraphicsPipelines(
3434 VkDevice device,
3435 VkPipelineCache pipelineCache,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003436 u32 createInfoCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003437 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003438 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003439 VkPipeline* pPipelines) {
3440 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003441 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003442 pipelineCacheObject := GetPipelineCache(pipelineCache)
3443 assert(pipelineCacheObject.device == device)
3444 }
3445
Jesse Hall03b6fe12015-11-24 12:44:21 -08003446 createInfos := pCreateInfos[0:createInfoCount]
3447 pipelines := pPipelines[0:createInfoCount]
3448 for i in (0 .. createInfoCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003449 pipeline := ?
3450 pipelines[i] = pipeline
3451 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3452 }
3453
3454 return ?
3455}
3456
3457cmd VkResult vkCreateComputePipelines(
3458 VkDevice device,
3459 VkPipelineCache pipelineCache,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003460 u32 createInfoCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003461 const VkComputePipelineCreateInfo* pCreateInfos,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003462 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003463 VkPipeline* pPipelines) {
3464 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003465 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003466 pipelineCacheObject := GetPipelineCache(pipelineCache)
3467 assert(pipelineCacheObject.device == device)
3468 }
3469
Jesse Hall03b6fe12015-11-24 12:44:21 -08003470 createInfos := pCreateInfos[0:createInfoCount]
3471 pipelines := pPipelines[0:createInfoCount]
3472 for i in (0 .. createInfoCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003473 pipeline := ?
3474 pipelines[i] = pipeline
3475 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3476 }
3477
3478 return ?
3479}
3480
3481@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003482cmd void vkDestroyPipeline(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003483 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003484 VkPipeline pipeline,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003485 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003486 deviceObject := GetDevice(device)
3487 pipelineObjects := GetPipeline(pipeline)
3488 assert(pipelineObjects.device == device)
3489
3490 State.Pipelines[pipeline] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003491}
3492
3493
3494// Pipeline layout functions
3495
3496@threadSafety("system")
3497cmd VkResult vkCreatePipelineLayout(
3498 VkDevice device,
3499 const VkPipelineLayoutCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003500 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003501 VkPipelineLayout* pPipelineLayout) {
3502 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3503 deviceObject := GetDevice(device)
3504
3505 pipelineLayout := ?
3506 pPipelineLayout[0] = pipelineLayout
3507 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3508
3509 return ?
3510}
3511
3512@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003513cmd void vkDestroyPipelineLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003514 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003515 VkPipelineLayout pipelineLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003516 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003517 deviceObject := GetDevice(device)
3518 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3519 assert(pipelineLayoutObjects.device == device)
3520
3521 State.PipelineLayouts[pipelineLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003522}
3523
3524
3525// Sampler functions
3526
3527@threadSafety("system")
3528cmd VkResult vkCreateSampler(
3529 VkDevice device,
3530 const VkSamplerCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003531 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003532 VkSampler* pSampler) {
3533 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3534 deviceObject := GetDevice(device)
3535
3536 sampler := ?
3537 pSampler[0] = sampler
3538 State.Samplers[sampler] = new!SamplerObject(device: device)
3539
3540 return ?
3541}
3542
3543@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003544cmd void vkDestroySampler(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003545 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003546 VkSampler sampler,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003547 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003548 deviceObject := GetDevice(device)
3549 samplerObject := GetSampler(sampler)
3550 assert(samplerObject.device == device)
3551
3552 State.Samplers[sampler] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003553}
3554
3555
3556// Descriptor set functions
3557
3558@threadSafety("system")
3559cmd VkResult vkCreateDescriptorSetLayout(
3560 VkDevice device,
3561 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003562 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003563 VkDescriptorSetLayout* pSetLayout) {
3564 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3565 deviceObject := GetDevice(device)
3566
3567 setLayout := ?
3568 pSetLayout[0] = setLayout
3569 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3570
3571 return ?
3572}
3573
3574@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003575cmd void vkDestroyDescriptorSetLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003576 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003577 VkDescriptorSetLayout descriptorSetLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003578 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003579 deviceObject := GetDevice(device)
3580 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3581 assert(descriptorSetLayoutObject.device == device)
3582
3583 State.DescriptorSetLayouts[descriptorSetLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003584}
3585
3586@threadSafety("system")
3587cmd VkResult vkCreateDescriptorPool(
3588 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003589 const VkDescriptorPoolCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003590 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003591 VkDescriptorPool* pDescriptorPool) {
3592 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3593 deviceObject := GetDevice(device)
3594
3595 descriptorPool := ?
3596 pDescriptorPool[0] = descriptorPool
3597 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3598
3599 return ?
3600}
3601
3602@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003603cmd void vkDestroyDescriptorPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003604 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003605 VkDescriptorPool descriptorPool,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003606 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003607 deviceObject := GetDevice(device)
3608 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3609 assert(descriptorPoolObject.device == device)
3610
3611 State.DescriptorPools[descriptorPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003612}
3613
3614@threadSafety("app")
3615cmd VkResult vkResetDescriptorPool(
3616 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003617 VkDescriptorPool descriptorPool,
3618 VkDescriptorPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003619 deviceObject := GetDevice(device)
3620 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3621 assert(descriptorPoolObject.device == device)
3622
3623 return ?
3624}
3625
3626@threadSafety("app")
Jesse Hall3fbc8562015-11-29 22:10:52 -08003627cmd VkResult vkAllocateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003628 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003629 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003630 VkDescriptorSet* pDescriptorSets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003631 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003632 allocInfo := pAllocateInfo[0]
Jesse Hallfbf97b02015-11-20 14:17:03 -08003633 descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003634
Jesse Hall03b6fe12015-11-24 12:44:21 -08003635 setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
3636 for i in (0 .. allocInfo.setCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003637 setLayout := setLayouts[i]
3638 setLayoutObject := GetDescriptorSetLayout(setLayout)
3639 assert(setLayoutObject.device == device)
3640 }
3641
Jesse Hall03b6fe12015-11-24 12:44:21 -08003642 descriptorSets := pDescriptorSets[0:allocInfo.setCount]
3643 for i in (0 .. allocInfo.setCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003644 descriptorSet := ?
3645 descriptorSets[i] = descriptorSet
3646 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3647 }
3648
3649 return ?
3650}
3651
Jesse Hallf09c6b12015-08-15 19:54:28 -07003652cmd VkResult vkFreeDescriptorSets(
3653 VkDevice device,
3654 VkDescriptorPool descriptorPool,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003655 u32 descriptorSetCount,
Jesse Hallf09c6b12015-08-15 19:54:28 -07003656 const VkDescriptorSet* pDescriptorSets) {
3657 deviceObject := GetDevice(device)
3658 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3659
Jesse Hall03b6fe12015-11-24 12:44:21 -08003660 descriptorSets := pDescriptorSets[0:descriptorSetCount]
3661 for i in (0 .. descriptorSetCount) {
Jesse Hallf09c6b12015-08-15 19:54:28 -07003662 descriptorSet := descriptorSets[i]
3663 descriptorSetObject := GetDescriptorSet(descriptorSet)
3664 assert(descriptorSetObject.device == device)
3665 State.DescriptorSets[descriptorSet] = null
3666 }
3667
3668 return ?
3669}
3670
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003671cmd void vkUpdateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003672 VkDevice device,
Jesse Hallb00daad2015-11-29 19:46:20 -08003673 u32 descriptorWriteCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003674 const VkWriteDescriptorSet* pDescriptorWrites,
Jesse Hallb00daad2015-11-29 19:46:20 -08003675 u32 descriptorCopyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003676 const VkCopyDescriptorSet* pDescriptorCopies) {
3677 deviceObject := GetDevice(device)
3678
Jesse Hallb00daad2015-11-29 19:46:20 -08003679 descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
3680 for i in (0 .. descriptorWriteCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003681 descriptorWrite := descriptorWrites[i]
Jesse Hall3fbc8562015-11-29 22:10:52 -08003682 descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003683 assert(descriptorWriteObject.device == device)
3684 }
3685
Jesse Hallb00daad2015-11-29 19:46:20 -08003686 descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
3687 for i in (0 .. descriptorCopyCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003688 descriptorCopy := descriptorCopies[i]
Jesse Hall3fbc8562015-11-29 22:10:52 -08003689 descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003690 assert(descriptorCopyObject.device == device)
3691 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003692}
3693
3694
3695// Framebuffer functions
3696
3697@threadSafety("system")
3698cmd VkResult vkCreateFramebuffer(
3699 VkDevice device,
3700 const VkFramebufferCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003701 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003702 VkFramebuffer* pFramebuffer) {
3703 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3704 deviceObject := GetDevice(device)
3705
3706 framebuffer := ?
3707 pFramebuffer[0] = framebuffer
3708 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3709
3710 return ?
3711}
3712
3713@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003714cmd void vkDestroyFramebuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003715 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003716 VkFramebuffer framebuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003717 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003718 deviceObject := GetDevice(device)
3719 framebufferObject := GetFramebuffer(framebuffer)
3720 assert(framebufferObject.device == device)
3721
3722 State.Framebuffers[framebuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003723}
3724
3725
3726// Renderpass functions
3727
3728@threadSafety("system")
3729cmd VkResult vkCreateRenderPass(
3730 VkDevice device,
3731 const VkRenderPassCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003732 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003733 VkRenderPass* pRenderPass) {
3734 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3735 deviceObject := GetDevice(device)
3736
3737 renderpass := ?
3738 pRenderPass[0] = renderpass
3739 State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3740
3741 return ?
3742}
3743
3744@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003745cmd void vkDestroyRenderPass(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003746 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003747 VkRenderPass renderPass,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003748 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003749 deviceObject := GetDevice(device)
3750 renderPassObject := GetRenderPass(renderPass)
3751 assert(renderPassObject.device == device)
3752
3753 State.RenderPasses[renderPass] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003754}
3755
Jesse Hall606a54e2015-11-19 22:17:28 -08003756cmd void vkGetRenderAreaGranularity(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003757 VkDevice device,
3758 VkRenderPass renderPass,
3759 VkExtent2D* pGranularity) {
3760 deviceObject := GetDevice(device)
3761 renderPassObject := GetRenderPass(renderPass)
3762
3763 granularity := ?
3764 pGranularity[0] = granularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07003765}
3766
3767// Command pool functions
3768
3769cmd VkResult vkCreateCommandPool(
3770 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003771 const VkCommandPoolCreateInfo* pCreateInfo,
3772 const VkAllocationCallbacks* pAllocator,
3773 VkCommandPool* pCommandPool) {
3774 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003775 deviceObject := GetDevice(device)
3776
Jesse Hall3fbc8562015-11-29 22:10:52 -08003777 commandPool := ?
3778 pCommandPool[0] = commandPool
3779 State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003780
3781 return ?
3782}
3783
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003784cmd void vkDestroyCommandPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003785 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003786 VkCommandPool commandPool,
3787 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003788 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003789 commandPoolObject := GetCommandPool(commandPool)
3790 assert(commandPoolObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003791
Jesse Hall3fbc8562015-11-29 22:10:52 -08003792 State.CommandPools[commandPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003793}
3794
3795cmd VkResult vkResetCommandPool(
3796 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003797 VkCommandPool commandPool,
3798 VkCommandPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003799 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003800 commandPoolObject := GetCommandPool(commandPool)
3801 assert(commandPoolObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003802
3803 return ?
3804}
3805
3806// Command buffer functions
3807
Jesse Hall3fbc8562015-11-29 22:10:52 -08003808macro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
3809 memoryObject := GetDeviceMemory(memory)
3810 memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07003811
Jesse Hall3fbc8562015-11-29 22:10:52 -08003812 commandBufferObject := GetCommandBuffer(commandBuffer)
3813 commandBufferObject.boundObjects[as!u64(obj)] = memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07003814}
3815
Jesse Hall3fbc8562015-11-29 22:10:52 -08003816macro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
3817 memoryObject := GetDeviceMemory(memory)
3818 memoryObject.boundCommandBuffers[commandBuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003819
Jesse Hall3fbc8562015-11-29 22:10:52 -08003820 commandBufferObject := GetCommandBuffer(commandBuffer)
3821 commandBufferObject.boundObjects[as!u64(obj)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003822}
3823
3824@threadSafety("system")
Jesse Hall3fbc8562015-11-29 22:10:52 -08003825cmd VkResult vkAllocateCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003826 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003827 const VkCommandBufferAllocateInfo* pAllocateInfo,
3828 VkCommandBuffer* pCommandBuffers) {
3829 assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003830
Jesse Hall3fbc8562015-11-29 22:10:52 -08003831 count := pAllocateInfo[0].bufferCount
3832 commandBuffers := pCommandBuffers[0:count]
Jesse Hallfbf97b02015-11-20 14:17:03 -08003833 for i in (0 .. count) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003834 commandBuffer := ?
3835 commandBuffers[i] = commandBuffer
3836 State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003837 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003838
3839 return ?
3840}
3841
3842@threadSafety("system")
Jesse Hallfbf97b02015-11-20 14:17:03 -08003843cmd void vkFreeCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003844 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003845 VkCommandPool commandPool,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003846 u32 commandBufferCount,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003847 const VkCommandBuffer* pCommandBuffers) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003848 deviceObject := GetDevice(device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003849
Jesse Hall3fbc8562015-11-29 22:10:52 -08003850 commandBuffers := pCommandBuffers[0:commandBufferCount]
Jesse Hall03b6fe12015-11-24 12:44:21 -08003851 for i in (0 .. commandBufferCount) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003852 commandBufferObject := GetCommandBuffer(commandBuffers[i])
3853 assert(commandBufferObject.device == device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003854 // TODO: iterate over boundObjects and clear memory bindings
Jesse Hall3fbc8562015-11-29 22:10:52 -08003855 State.CommandBuffers[commandBuffers[i]] = null
Jesse Hallfbf97b02015-11-20 14:17:03 -08003856 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003857}
3858
3859@threadSafety("app")
3860cmd VkResult vkBeginCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003861 VkCommandBuffer commandBuffer,
3862 const VkCommandBufferBeginInfo* pBeginInfo) {
3863 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
3864 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003865
3866 // TODO: iterate over boundObjects and clear memory bindings
3867
3868 return ?
3869}
3870
3871@threadSafety("app")
3872cmd VkResult vkEndCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003873 VkCommandBuffer commandBuffer) {
3874 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003875
3876 return ?
3877}
3878
3879@threadSafety("app")
3880cmd VkResult vkResetCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003881 VkCommandBuffer commandBuffer,
3882 VkCommandBufferResetFlags flags) {
3883 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003884
3885 // TODO: iterate over boundObjects and clear memory bindings
3886
3887 return ?
3888}
3889
3890
3891// Command buffer building functions
3892
3893@threadSafety("app")
3894cmd void vkCmdBindPipeline(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003895 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003896 VkPipelineBindPoint pipelineBindPoint,
3897 VkPipeline pipeline) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003898 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003899 pipelineObject := GetPipeline(pipeline)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003900 assert(commandBufferObject.device == pipelineObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003901
Jesse Halld8bade02015-11-24 10:24:18 -08003902 queue := switch (pipelineBindPoint) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003903 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3904 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3905 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08003906 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003907}
3908
3909@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003910cmd void vkCmdSetViewport(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003911 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003912 u32 viewportCount,
3913 const VkViewport* pViewports) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003914 commandBufferObject := GetCommandBuffer(commandBuffer)
3915 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003916}
3917
3918@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003919cmd void vkCmdSetScissor(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003920 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003921 u32 scissorCount,
3922 const VkRect2D* pScissors) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003923 commandBufferObject := GetCommandBuffer(commandBuffer)
3924 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003925}
3926
3927@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003928cmd void vkCmdSetLineWidth(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003929 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003930 f32 lineWidth) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003931 commandBufferObject := GetCommandBuffer(commandBuffer)
3932 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003933}
3934
3935@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003936cmd void vkCmdSetDepthBias(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003937 VkCommandBuffer commandBuffer,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003938 f32 depthBiasConstantFactor,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003939 f32 depthBiasClamp,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003940 f32 depthBiasSlopeFactor) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003941 commandBufferObject := GetCommandBuffer(commandBuffer)
3942 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003943}
Jesse Halld27f6aa2015-08-15 17:58:48 -07003944
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003945@threadSafety("app")
3946cmd void vkCmdSetBlendConstants(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003947 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003948 // TODO(jessehall): apic only supports 'const' on pointer types. Using
3949 // an annotation as a quick hack to pass this to the template without
3950 // having to modify the AST and semantic model.
Jesse Hallb00daad2015-11-29 19:46:20 -08003951 @readonly f32[4] blendConstants) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003952 commandBufferObject := GetCommandBuffer(commandBuffer)
3953 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003954}
3955
3956@threadSafety("app")
3957cmd void vkCmdSetDepthBounds(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003958 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003959 f32 minDepthBounds,
3960 f32 maxDepthBounds) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003961 commandBufferObject := GetCommandBuffer(commandBuffer)
3962 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003963}
3964
3965@threadSafety("app")
3966cmd void vkCmdSetStencilCompareMask(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003967 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003968 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003969 u32 compareMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003970 commandBufferObject := GetCommandBuffer(commandBuffer)
3971 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003972}
3973
3974@threadSafety("app")
3975cmd void vkCmdSetStencilWriteMask(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003976 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003977 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003978 u32 writeMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003979 commandBufferObject := GetCommandBuffer(commandBuffer)
3980 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003981}
3982
3983@threadSafety("app")
3984cmd void vkCmdSetStencilReference(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003985 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003986 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003987 u32 reference) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003988 commandBufferObject := GetCommandBuffer(commandBuffer)
3989 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003990}
3991
3992@threadSafety("app")
3993cmd void vkCmdBindDescriptorSets(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003994 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003995 VkPipelineBindPoint pipelineBindPoint,
3996 VkPipelineLayout layout,
3997 u32 firstSet,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003998 u32 descriptorSetCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003999 const VkDescriptorSet* pDescriptorSets,
4000 u32 dynamicOffsetCount,
4001 const u32* pDynamicOffsets) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004002 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004003
Jesse Hall03b6fe12015-11-24 12:44:21 -08004004 descriptorSets := pDescriptorSets[0:descriptorSetCount]
4005 for i in (0 .. descriptorSetCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004006 descriptorSet := descriptorSets[i]
4007 descriptorSetObject := GetDescriptorSet(descriptorSet)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004008 assert(commandBufferObject.device == descriptorSetObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004009 }
4010
4011 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
4012 for i in (0 .. dynamicOffsetCount) {
4013 dynamicOffset := dynamicOffsets[i]
4014 }
4015
Jesse Halld8bade02015-11-24 10:24:18 -08004016 queue := switch (pipelineBindPoint) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004017 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
4018 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
4019 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08004020 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004021}
4022
4023@threadSafety("app")
4024cmd void vkCmdBindIndexBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004025 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004026 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004027 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004028 VkIndexType indexType) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004029 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004030 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004031 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004032
Jesse Hall3fbc8562015-11-29 22:10:52 -08004033 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004034
Jesse Hall3fbc8562015-11-29 22:10:52 -08004035 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004036}
4037
4038@threadSafety("app")
4039cmd void vkCmdBindVertexBuffers(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004040 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004041 u32 startBinding,
4042 u32 bindingCount,
4043 const VkBuffer* pBuffers,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004044 const VkDeviceSize* pOffsets) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004045 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004046
4047 // TODO: check if not [startBinding:startBinding+bindingCount]
4048 buffers := pBuffers[0:bindingCount]
4049 offsets := pOffsets[0:bindingCount]
4050 for i in (0 .. bindingCount) {
4051 buffer := buffers[i]
4052 offset := offsets[i]
4053 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004054 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004055
Jesse Hall3fbc8562015-11-29 22:10:52 -08004056 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004057 }
4058
Jesse Hall3fbc8562015-11-29 22:10:52 -08004059 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004060}
4061
4062@threadSafety("app")
4063cmd void vkCmdDraw(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004064 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004065 u32 vertexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004066 u32 instanceCount,
4067 u32 firstVertex,
4068 u32 firstInstance) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004069 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004070
Jesse Hall3fbc8562015-11-29 22:10:52 -08004071 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004072}
4073
4074@threadSafety("app")
4075cmd void vkCmdDrawIndexed(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004076 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004077 u32 indexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004078 u32 instanceCount,
4079 u32 firstIndex,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004080 s32 vertexOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004081 u32 firstInstance) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004082 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004083
Jesse Hall3fbc8562015-11-29 22:10:52 -08004084 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004085}
4086
4087@threadSafety("app")
4088cmd void vkCmdDrawIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004089 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004090 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004091 VkDeviceSize offset,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004092 u32 drawCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004093 u32 stride) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004094 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004095 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004096 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004097
Jesse Hall3fbc8562015-11-29 22:10:52 -08004098 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004099
Jesse Hall3fbc8562015-11-29 22:10:52 -08004100 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004101}
4102
4103@threadSafety("app")
4104cmd void vkCmdDrawIndexedIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004105 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004106 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004107 VkDeviceSize offset,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004108 u32 drawCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004109 u32 stride) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004110 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004111 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004112 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004113
Jesse Hall3fbc8562015-11-29 22:10:52 -08004114 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004115
Jesse Hall3fbc8562015-11-29 22:10:52 -08004116 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004117}
4118
4119@threadSafety("app")
4120cmd void vkCmdDispatch(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004121 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004122 u32 x,
4123 u32 y,
4124 u32 z) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004125 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004126
Jesse Hall3fbc8562015-11-29 22:10:52 -08004127 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004128}
4129
4130@threadSafety("app")
4131cmd void vkCmdDispatchIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004132 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004133 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004134 VkDeviceSize offset) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004135 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004136 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004137 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004138
Jesse Hall3fbc8562015-11-29 22:10:52 -08004139 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004140
Jesse Hall3fbc8562015-11-29 22:10:52 -08004141 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004142}
4143
4144@threadSafety("app")
4145cmd void vkCmdCopyBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004146 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004147 VkBuffer srcBuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004148 VkBuffer dstBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004149 u32 regionCount,
4150 const VkBufferCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004151 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004152 srcBufferObject := GetBuffer(srcBuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004153 dstBufferObject := GetBuffer(dstBuffer)
4154 assert(commandBufferObject.device == srcBufferObject.device)
4155 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004156
4157 regions := pRegions[0:regionCount]
4158 for i in (0 .. regionCount) {
4159 region := regions[i]
4160 }
4161
Jesse Hall3fbc8562015-11-29 22:10:52 -08004162 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
4163 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004164
Jesse Hall65ab5522015-11-30 00:07:16 -08004165 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004166}
4167
4168@threadSafety("app")
4169cmd void vkCmdCopyImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004170 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004171 VkImage srcImage,
4172 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004173 VkImage dstImage,
4174 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004175 u32 regionCount,
4176 const VkImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004177 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004178 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004179 dstImageObject := GetImage(dstImage)
4180 assert(commandBufferObject.device == srcImageObject.device)
4181 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004182
4183 regions := pRegions[0:regionCount]
4184 for i in (0 .. regionCount) {
4185 region := regions[i]
4186 }
4187
Jesse Hall3fbc8562015-11-29 22:10:52 -08004188 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4189 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004190
Jesse Hall65ab5522015-11-30 00:07:16 -08004191 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004192}
4193
4194@threadSafety("app")
4195cmd void vkCmdBlitImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004196 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004197 VkImage srcImage,
4198 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004199 VkImage dstImage,
4200 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004201 u32 regionCount,
4202 const VkImageBlit* pRegions,
Jesse Hall23ff73f2015-11-29 14:36:39 -08004203 VkFilter filter) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004204 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004205 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004206 dstImageObject := GetImage(dstImage)
4207 assert(commandBufferObject.device == srcImageObject.device)
4208 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004209
4210 regions := pRegions[0:regionCount]
4211 for i in (0 .. regionCount) {
4212 region := regions[i]
4213 }
4214
Jesse Hall3fbc8562015-11-29 22:10:52 -08004215 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4216 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004217
Jesse Hall3fbc8562015-11-29 22:10:52 -08004218 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004219}
4220
4221@threadSafety("app")
4222cmd void vkCmdCopyBufferToImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004223 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004224 VkBuffer srcBuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004225 VkImage dstImage,
4226 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004227 u32 regionCount,
4228 const VkBufferImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004229 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004230 srcBufferObject := GetBuffer(srcBuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004231 dstImageObject := GetImage(dstImage)
4232 assert(commandBufferObject.device == srcBufferObject.device)
4233 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004234
4235 regions := pRegions[0:regionCount]
4236 for i in (0 .. regionCount) {
4237 region := regions[i]
4238 }
4239
Jesse Hall3fbc8562015-11-29 22:10:52 -08004240 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
4241 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004242
Jesse Hall65ab5522015-11-30 00:07:16 -08004243 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004244}
4245
4246@threadSafety("app")
4247cmd void vkCmdCopyImageToBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004248 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004249 VkImage srcImage,
4250 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004251 VkBuffer dstBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004252 u32 regionCount,
4253 const VkBufferImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004254 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004255 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004256 dstBufferObject := GetBuffer(dstBuffer)
4257 assert(commandBufferObject.device == srcImageObject.device)
4258 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004259
4260 regions := pRegions[0:regionCount]
4261 for i in (0 .. regionCount) {
4262 region := regions[i]
4263 }
4264
Jesse Hall3fbc8562015-11-29 22:10:52 -08004265 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4266 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004267
Jesse Hall65ab5522015-11-30 00:07:16 -08004268 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004269}
4270
4271@threadSafety("app")
4272cmd void vkCmdUpdateBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004273 VkCommandBuffer commandBuffer,
4274 VkBuffer dstBuffer,
4275 VkDeviceSize dstOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004276 VkDeviceSize dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004277 const u32* pData) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004278 commandBufferObject := GetCommandBuffer(commandBuffer)
4279 dstBufferObject := GetBuffer(dstBuffer)
4280 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004281
4282 data := pData[0:dataSize]
4283
Jesse Hall3fbc8562015-11-29 22:10:52 -08004284 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004285
Jesse Hall65ab5522015-11-30 00:07:16 -08004286 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004287}
4288
4289@threadSafety("app")
4290cmd void vkCmdFillBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004291 VkCommandBuffer commandBuffer,
4292 VkBuffer dstBuffer,
4293 VkDeviceSize dstOffset,
Jesse Hallb00daad2015-11-29 19:46:20 -08004294 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004295 u32 data) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004296 commandBufferObject := GetCommandBuffer(commandBuffer)
4297 dstBufferObject := GetBuffer(dstBuffer)
4298 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004299
Jesse Hall65ab5522015-11-30 00:07:16 -08004300 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004301}
4302
4303@threadSafety("app")
4304cmd void vkCmdClearColorImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004305 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004306 VkImage image,
4307 VkImageLayout imageLayout,
4308 const VkClearColorValue* pColor,
4309 u32 rangeCount,
4310 const VkImageSubresourceRange* pRanges) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004311 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004312 imageObject := GetImage(image)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004313 assert(commandBufferObject.device == imageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004314
4315 ranges := pRanges[0:rangeCount]
4316 for i in (0 .. rangeCount) {
4317 range := ranges[i]
4318 }
4319
Jesse Hall3fbc8562015-11-29 22:10:52 -08004320 bindCommandBuffer(commandBuffer, image, imageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004321
Jesse Hall3fbc8562015-11-29 22:10:52 -08004322 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004323}
4324
4325@threadSafety("app")
4326cmd void vkCmdClearDepthStencilImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004327 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004328 VkImage image,
4329 VkImageLayout imageLayout,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004330 const VkClearDepthStencilValue* pDepthStencil,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004331 u32 rangeCount,
4332 const VkImageSubresourceRange* pRanges) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004333 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004334 imageObject := GetImage(image)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004335 assert(commandBufferObject.device == imageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004336
4337 ranges := pRanges[0:rangeCount]
4338 for i in (0 .. rangeCount) {
4339 range := ranges[i]
4340 }
4341
Jesse Hall3fbc8562015-11-29 22:10:52 -08004342 bindCommandBuffer(commandBuffer, image, imageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004343
Jesse Hall3fbc8562015-11-29 22:10:52 -08004344 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004345}
4346
4347@threadSafety("app")
Jesse Hallae38f732015-11-19 21:32:50 -08004348cmd void vkCmdClearAttachments(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004349 VkCommandBuffer commandBuffer,
Jesse Hallae38f732015-11-19 21:32:50 -08004350 u32 attachmentCount,
4351 const VkClearAttachment* pAttachments,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004352 u32 rectCount,
Jesse Halla15a4bf2015-11-19 22:48:02 -08004353 const VkClearRect* pRects) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004354 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004355
4356 rects := pRects[0:rectCount]
4357 for i in (0 .. rectCount) {
4358 rect := rects[i]
4359 }
4360
Jesse Hall3fbc8562015-11-29 22:10:52 -08004361 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004362}
4363
4364@threadSafety("app")
4365cmd void vkCmdResolveImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004366 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004367 VkImage srcImage,
4368 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004369 VkImage dstImage,
4370 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004371 u32 regionCount,
4372 const VkImageResolve* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004373 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004374 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004375 dstImageObject := GetImage(dstImage)
4376 assert(commandBufferObject.device == srcImageObject.device)
4377 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004378
4379 regions := pRegions[0:regionCount]
4380 for i in (0 .. regionCount) {
4381 region := regions[i]
4382 }
4383
Jesse Hall3fbc8562015-11-29 22:10:52 -08004384 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4385 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004386
Jesse Hall3fbc8562015-11-29 22:10:52 -08004387 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004388}
4389
4390@threadSafety("app")
4391cmd void vkCmdSetEvent(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004392 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004393 VkEvent event,
4394 VkPipelineStageFlags stageMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004395 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004396 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004397 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004398}
4399
4400@threadSafety("app")
4401cmd void vkCmdResetEvent(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004402 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004403 VkEvent event,
4404 VkPipelineStageFlags stageMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004405 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004406 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004407 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004408}
4409
4410@threadSafety("app")
4411cmd void vkCmdWaitEvents(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004412 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004413 u32 eventCount,
4414 const VkEvent* pEvents,
4415 VkPipelineStageFlags srcStageMask,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004416 VkPipelineStageFlags dstStageMask,
4417 u32 memoryBarrierCount,
4418 const void* const* ppMemoryBarriers) {
4419 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004420
4421 events := pEvents[0:eventCount]
4422 for i in (0 .. eventCount) {
4423 event := events[i]
4424 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004425 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004426 }
4427
Jesse Hall3fbc8562015-11-29 22:10:52 -08004428 pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
4429 for i in (0 .. memoryBarrierCount) {
4430 switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004431 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004432 memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
Jesse Halld27f6aa2015-08-15 17:58:48 -07004433 }
4434 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004435 imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
4436 imageObject := GetImage(imageMemoryBarrier.image)
4437 assert(imageObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004438 }
4439 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004440 bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
4441 bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
4442 assert(bufferObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004443 }
4444 }
4445 }
4446}
4447
4448@threadSafety("app")
4449cmd void vkCmdPipelineBarrier(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004450 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004451 VkPipelineStageFlags srcStageMask,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004452 VkPipelineStageFlags dstStageMask,
Jesse Halldc6d36c2015-11-29 19:12:15 -08004453 VkDependencyFlags dependencyFlags,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004454 u32 memoryBarrierCount,
4455 const void* const* ppMemoryBarriers) {
4456 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004457
Jesse Hall3fbc8562015-11-29 22:10:52 -08004458 pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
4459 for i in (0 .. memoryBarrierCount) {
4460 switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004461 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004462 memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
Jesse Halld27f6aa2015-08-15 17:58:48 -07004463 }
4464 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004465 imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
4466 imageObject := GetImage(imageMemoryBarrier.image)
4467 assert(imageObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004468 }
4469 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004470 bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
4471 bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
4472 assert(bufferObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004473 }
4474 }
4475 }
4476}
4477
4478@threadSafety("app")
4479cmd void vkCmdBeginQuery(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004480 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004481 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004482 u32 entry,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004483 VkQueryControlFlags flags) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004484 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004485 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004486 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004487}
4488
4489@threadSafety("app")
4490cmd void vkCmdEndQuery(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004491 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004492 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004493 u32 entry) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004494 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004495 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004496 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004497}
4498
4499@threadSafety("app")
4500cmd void vkCmdResetQueryPool(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004501 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004502 VkQueryPool queryPool,
4503 u32 startQuery,
4504 u32 queryCount) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004505 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004506 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004507 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004508}
4509
4510@threadSafety("app")
4511cmd void vkCmdWriteTimestamp(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004512 VkCommandBuffer commandBuffer,
Jesse Hall6f39a6d2015-11-24 11:08:36 -08004513 VkPipelineStageFlagBits pipelineStage,
Jesse Halla3a7a1d2015-11-24 11:37:23 -08004514 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004515 u32 entry) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004516 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halla3a7a1d2015-11-24 11:37:23 -08004517 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004518 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004519}
4520
4521@threadSafety("app")
4522cmd void vkCmdCopyQueryPoolResults(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004523 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004524 VkQueryPool queryPool,
4525 u32 startQuery,
4526 u32 queryCount,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004527 VkBuffer dstBuffer,
4528 VkDeviceSize dstOffset,
Jesse Halla9bb62b2015-11-21 19:31:56 -08004529 VkDeviceSize stride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004530 VkQueryResultFlags flags) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004531 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004532 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004533 dstBufferObject := GetBuffer(dstBuffer)
4534 assert(commandBufferObject.device == queryPoolObject.device)
4535 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004536}
4537
4538cmd void vkCmdPushConstants(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004539 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004540 VkPipelineLayout layout,
4541 VkShaderStageFlags stageFlags,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004542 u32 offset,
4543 u32 size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004544 const void* values) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004545 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004546 layoutObject := GetPipelineLayout(layout)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004547 assert(commandBufferObject.device == layoutObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004548}
4549
4550@threadSafety("app")
4551cmd void vkCmdBeginRenderPass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004552 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004553 const VkRenderPassBeginInfo* pRenderPassBegin,
Jesse Hall65ab5522015-11-30 00:07:16 -08004554 VkSubpassContents contents) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004555 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004556 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4557 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004558 assert(commandBufferObject.device == renderPassObject.device)
4559 assert(commandBufferObject.device == framebufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004560
Jesse Hall3fbc8562015-11-29 22:10:52 -08004561 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004562}
4563
4564cmd void vkCmdNextSubpass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004565 VkCommandBuffer commandBuffer,
Jesse Hall65ab5522015-11-30 00:07:16 -08004566 VkSubpassContents contents) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004567 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004568}
4569
4570@threadSafety("app")
4571cmd void vkCmdEndRenderPass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004572 VkCommandBuffer commandBuffer) {
4573 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004574
Jesse Hall3fbc8562015-11-29 22:10:52 -08004575 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004576}
4577
4578cmd void vkCmdExecuteCommands(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004579 VkCommandBuffer commandBuffer,
4580 u32 commandBuffersCount,
4581 const VkCommandBuffer* pCommandBuffers) {
4582 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004583
Jesse Hall3fbc8562015-11-29 22:10:52 -08004584 commandBuffers := pCommandBuffers[0:commandBuffersCount]
4585 for i in (0 .. commandBuffersCount) {
4586 secondaryCommandBuffer := commandBuffers[i]
4587 secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
4588 assert(commandBufferObject.device == secondaryCommandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004589 }
4590}
4591
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004592@extension("VK_KHR_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004593cmd void vkDestroySurfaceKHR(
4594 VkInstance instance,
4595 VkSurfaceKHR surface) {
4596 instanceObject := GetInstance(instance)
4597 surfaceObject := GetSurface(surface)
4598 assert(surfaceObject.instance == instance)
Michael Lentine88594d72015-11-12 12:49:45 -08004599
Jesse Hall1356b0d2015-11-23 17:24:58 -08004600 State.Surfaces[surface] = null
Jesse Hall2818f932015-11-19 21:19:17 -08004601}
4602
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004603@extension("VK_KHR_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004604cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004605 VkPhysicalDevice physicalDevice,
4606 u32 queueFamilyIndex,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004607 VkSurfaceKHR surface,
Jesse Hallb00daad2015-11-29 19:46:20 -08004608 VkBool32* pSupported) {
4609 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004610
4611 return ?
4612}
4613
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004614@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004615cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4616 VkPhysicalDevice physicalDevice,
4617 VkSurfaceKHR surface,
4618 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
4619 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4620
4621 surfaceCapabilities := ?
4622 pSurfaceCapabilities[0] = surfaceCapabilities
4623
4624 return ?
4625}
4626
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004627@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004628cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
4629 VkPhysicalDevice physicalDevice,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004630 VkSurfaceKHR surface,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004631 u32* pSurfaceFormatCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004632 VkSurfaceFormatKHR* pSurfaceFormats) {
Jesse Hallb00daad2015-11-29 19:46:20 -08004633 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004634
4635 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004636 pSurfaceFormatCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004637 surfaceFormats := pSurfaceFormats[0:count]
4638
4639 for i in (0 .. count) {
4640 surfaceFormat := ?
4641 surfaceFormats[i] = surfaceFormat
4642 }
4643
4644 return ?
4645}
4646
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004647@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004648cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
4649 VkPhysicalDevice physicalDevice,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004650 VkSurfaceKHR surface,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004651 u32* pPresentModeCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004652 VkPresentModeKHR* pPresentModes) {
Jesse Hallb00daad2015-11-29 19:46:20 -08004653 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004654
4655 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004656 pPresentModeCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004657 presentModes := pPresentModes[0:count]
4658
4659 for i in (0 .. count) {
4660 presentMode := ?
4661 presentModes[i] = presentMode
4662 }
4663
4664 return ?
4665}
4666
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004667@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004668cmd VkResult vkCreateSwapchainKHR(
4669 VkDevice device,
4670 const VkSwapchainCreateInfoKHR* pCreateInfo,
4671 VkSwapchainKHR* pSwapchain) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004672 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
Michael Lentine88594d72015-11-12 12:49:45 -08004673 deviceObject := GetDevice(device)
4674
4675 swapchain := ?
4676 pSwapchain[0] = swapchain
4677 State.Swapchains[swapchain] = new!SwapchainObject(device: device)
4678
4679 return ?
4680}
4681
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004682@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004683cmd void vkDestroySwapchainKHR(
Michael Lentine88594d72015-11-12 12:49:45 -08004684 VkDevice device,
4685 VkSwapchainKHR swapchain) {
4686 deviceObject := GetDevice(device)
4687 swapchainObject := GetSwapchain(swapchain)
4688 assert(swapchainObject.device == device)
4689
4690 State.Swapchains[swapchain] = null
Michael Lentine88594d72015-11-12 12:49:45 -08004691}
4692
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004693@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004694cmd VkResult vkGetSwapchainImagesKHR(
4695 VkDevice device,
4696 VkSwapchainKHR swapchain,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004697 u32* pSwapchainImageCount,
Michael Lentine88594d72015-11-12 12:49:45 -08004698 VkImage* pSwapchainImages) {
4699 deviceObject := GetDevice(device)
4700
4701 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004702 pSwapchainImageCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004703 swapchainImages := pSwapchainImages[0:count]
4704
4705 for i in (0 .. count) {
4706 swapchainImage := ?
4707 swapchainImages[i] = swapchainImage
Jesse Hall1356b0d2015-11-23 17:24:58 -08004708 State.Images[swapchainImage] = new!ImageObject(device: device)
Michael Lentine88594d72015-11-12 12:49:45 -08004709 }
4710
4711 return ?
4712}
4713
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004714@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004715cmd VkResult vkAcquireNextImageKHR(
4716 VkDevice device,
4717 VkSwapchainKHR swapchain,
4718 u64 timeout,
4719 VkSemaphore semaphore,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004720 VkFence fence,
Michael Lentine88594d72015-11-12 12:49:45 -08004721 u32* pImageIndex) {
4722 deviceObject := GetDevice(device)
4723 swapchainObject := GetSwapchain(swapchain)
4724
4725 imageIndex := ?
4726 pImageIndex[0] = imageIndex
4727
4728 return ?
4729}
4730
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004731@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004732cmd VkResult vkQueuePresentKHR(
4733 VkQueue queue,
4734 VkPresentInfoKHR* pPresentInfo) {
4735 queueObject := GetQueue(queue)
4736
4737 presentInfo := ?
4738 pPresentInfo[0] = presentInfo
4739
4740 return ?
4741}
4742
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004743@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004744cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
4745 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004746 u32* pPropertyCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004747 VkDisplayPropertiesKHR* pProperties) {
4748 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4749 return ?
4750}
4751
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004752@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004753cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
4754 VkPhysicalDevice physicalDevice,
4755 u32* pPropertyCount,
4756 VkDisplayPlanePropertiesKHR* pProperties) {
4757 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4758 return ?
4759}
4760
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004761@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004762cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
4763 VkPhysicalDevice physicalDevice,
4764 u32* pPropertyCount,
4765 VkDisplayKHR* pProperties) {
4766 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4767 return ?
4768}
4769
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004770@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004771cmd VkResult vkGetDisplayModePropertiesKHR(
4772 VkPhysicalDevice physicalDevice,
4773 VkDisplayKHR display,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004774 u32* pPropertyCount,
4775 VkDisplayModePropertiesKHR* pProperties) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004776 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4777 return ?
4778}
4779
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004780@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004781cmd VkResult vkCreateDisplayModeKHR(
4782 VkPhysicalDevice physicalDevice,
4783 VkDisplayKHR display,
4784 const VkDisplayModeCreateInfoKHR* pCreateInfo,
4785 VkDisplayModeKHR* pMode) {
4786 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4787 return ?
4788}
4789
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004790@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004791cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004792 VkPhysicalDevice physicalDevice,
Jesse Halla6429252015-11-29 18:59:42 -08004793 VkDisplayModeCreateInfoKHR mode,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004794 u32 planeIndex,
Jesse Halla6429252015-11-29 18:59:42 -08004795 VkDisplayPlaneCapabilitiesKHR* pCapabilities) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004796 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4797 return ?
4798}
4799
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004800@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004801cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
4802 VkInstance instance,
4803 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
4804 VkSurfaceKHR* pSurface) {
4805 return ?
4806}
4807
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004808@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004809cmd VkResult vkCreateXlibSurfaceKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004810 VkInstance instance,
4811 platform.Display* dpy,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004812 platform.Window window,
4813 VkSurfaceKHR* pSurface) {
4814 instanceObject := GetInstance(instance)
4815 return ?
4816}
4817
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004818@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004819cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
4820 VkPhysicalDevice physicalDevice,
4821 u32 queueFamilyIndex,
4822 platform.Display* dpy,
Jesse Hall65ab5522015-11-30 00:07:16 -08004823 platform.VisualID visualID) {
Jesse Halla6429252015-11-29 18:59:42 -08004824 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4825 return ?
4826}
4827
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004828@extension("VK_KHR_xcb_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004829cmd VkResult vkCreateXCBSurfaceKHR(
4830 VkInstance instance,
4831 platform.xcb_connection_t* connection,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004832 platform.xcb_window_t window,
4833 VkSurfaceKHR* pSurface) {
4834 instanceObject := GetInstance(instance)
4835 return ?
4836}
4837
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004838@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004839cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
4840 VkPhysicalDevice physicalDevice,
4841 u32 queueFamilyIndex,
4842 platform.xcb_connection_t* connection,
4843 platform.xcb_visualid_t visual_id) {
4844 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4845 return ?
4846}
4847
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004848@extension("VK_KHR_wayland_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004849cmd VkResult vkCreateWaylandSurfaceKHR(
4850 VkInstance instance,
4851 platform.wl_display* display,
4852 platform.wl_surface* surface,
4853 VkSurfaceKHR* pSurface) {
4854 instanceObject := GetInstance(instance)
4855 return ?
4856}
4857
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004858@extension("VK_KHR_wayland_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004859cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
4860 VkPhysicalDevice physicalDevice,
4861 u32 queueFamilyIndex,
4862 platform.wl_display* display) {
4863 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4864 return ?
4865}
4866
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004867@extension("VK_KHR_mir_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004868cmd VkResult vkCreateMirSurfaceKHR(
4869 VkInstance instance,
4870 platform.MirConnection* connection,
4871 platform.MirSurface* mirSurface,
4872 VkSurfaceKHR* pSurface) {
4873 instanceObject := GetInstance(instance)
4874 return ?
4875}
4876
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004877@extension("VK_KHR_mir_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004878cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
4879 VkPhysicalDevice physicalDevice,
4880 u32 queueFamilyIndex,
4881 platform.MirConnection* connection) {
4882 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4883 return ?
4884}
4885
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004886@extension("VK_KHR_android_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004887cmd VkResult vkCreateAndroidSurfaceKHR(
4888 VkInstance instance,
4889 platform.ANativeWindow* window
4890 VkSurfaceKHR* pSurface) {
4891 instanceObject := GetInstance(instance)
4892 return ?
4893}
4894
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004895@extension("VK_KHR_win32_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004896cmd VkResult vkCreateWin32SurfaceKHR(
4897 VkInstance instance,
4898 platform.HINSTANCE hinstance,
4899 platform.HWND hwnd,
4900 VkSurfaceKHR* pSurface) {
4901 instanceObject := GetInstance(instance)
4902 return ?
4903}
4904
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004905@extension("VK_KHR_win32_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004906cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
4907 VkPhysicalDevice physicalDevice,
4908 u32 queueFamilyIndex) {
4909 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4910 return ?
4911}
4912
Jesse Halld27f6aa2015-08-15 17:58:48 -07004913
4914////////////////
4915// Validation //
4916////////////////
4917
4918extern void validate(string layerName, bool condition, string message)
4919
4920
4921/////////////////////////////
4922// Internal State Tracking //
4923/////////////////////////////
4924
4925StateObject State
4926
4927@internal class StateObject {
4928 // Dispatchable objects.
4929 map!(VkInstance, ref!InstanceObject) Instances
4930 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4931 map!(VkDevice, ref!DeviceObject) Devices
4932 map!(VkQueue, ref!QueueObject) Queues
Jesse Hall3fbc8562015-11-29 22:10:52 -08004933 map!(VkCommandBuffer, ref!CommandBufferObject) CommandBuffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07004934
4935 // Non-dispatchable objects.
4936 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories
4937 map!(VkBuffer, ref!BufferObject) Buffers
4938 map!(VkBufferView, ref!BufferViewObject) BufferViews
4939 map!(VkImage, ref!ImageObject) Images
4940 map!(VkImageView, ref!ImageViewObject) ImageViews
Jesse Halld27f6aa2015-08-15 17:58:48 -07004941 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules
Jesse Halld27f6aa2015-08-15 17:58:48 -07004942 map!(VkPipeline, ref!PipelineObject) Pipelines
4943 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts
4944 map!(VkSampler, ref!SamplerObject) Samplers
4945 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets
4946 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts
4947 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools
Jesse Halld27f6aa2015-08-15 17:58:48 -07004948 map!(VkFence, ref!FenceObject) Fences
4949 map!(VkSemaphore, ref!SemaphoreObject) Semaphores
4950 map!(VkEvent, ref!EventObject) Events
4951 map!(VkQueryPool, ref!QueryPoolObject) QueryPools
4952 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers
4953 map!(VkRenderPass, ref!RenderPassObject) RenderPasses
4954 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
Jesse Hall3fbc8562015-11-29 22:10:52 -08004955 map!(VkCommandPool, ref!CommandPoolObject) CommandPools
Jesse Hall1356b0d2015-11-23 17:24:58 -08004956 map!(VkSurfaceKHR, ref!SurfaceObject) Surfaces
Michael Lentine88594d72015-11-12 12:49:45 -08004957 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
Jesse Halld27f6aa2015-08-15 17:58:48 -07004958}
4959
4960@internal class InstanceObject {
4961}
4962
4963@internal class PhysicalDeviceObject {
4964 VkInstance instance
4965}
4966
4967@internal class DeviceObject {
4968 VkPhysicalDevice physicalDevice
4969}
4970
4971@internal class QueueObject {
4972 VkDevice device
4973 VkQueueFlags flags
4974}
4975
Jesse Hall3fbc8562015-11-29 22:10:52 -08004976@internal class CommandBufferObject {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004977 VkDevice device
4978 map!(u64, VkDeviceMemory) boundObjects
4979 VkQueueFlags queueFlags
4980}
4981
4982@internal class DeviceMemoryObject {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004983 VkDevice device
4984 VkDeviceSize allocationSize
4985 map!(u64, VkDeviceSize) boundObjects
4986 map!(VkCommandBuffer, VkCommandBuffer) boundCommandBuffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07004987}
4988
4989@internal class BufferObject {
4990 VkDevice device
Jesse Hall3fbc8562015-11-29 22:10:52 -08004991 VkDeviceMemory memory
4992 VkDeviceSize memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004993}
4994
4995@internal class BufferViewObject {
4996 VkDevice device
4997 VkBuffer buffer
4998}
4999
5000@internal class ImageObject {
5001 VkDevice device
Jesse Hall3fbc8562015-11-29 22:10:52 -08005002 VkDeviceMemory memory
5003 VkDeviceSize memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07005004}
5005
5006@internal class ImageViewObject {
5007 VkDevice device
5008 VkImage image
5009}
5010
Jesse Halld27f6aa2015-08-15 17:58:48 -07005011@internal class ShaderObject {
5012 VkDevice device
5013}
5014
5015@internal class ShaderModuleObject {
5016 VkDevice device
5017}
5018
5019@internal class PipelineObject {
5020 VkDevice device
5021}
5022
5023@internal class PipelineLayoutObject {
5024 VkDevice device
5025}
5026
5027@internal class SamplerObject {
5028 VkDevice device
5029}
5030
5031@internal class DescriptorSetObject {
5032 VkDevice device
5033}
5034
5035@internal class DescriptorSetLayoutObject {
5036 VkDevice device
5037}
5038
5039@internal class DescriptorPoolObject {
5040 VkDevice device
5041}
5042
Jesse Halld27f6aa2015-08-15 17:58:48 -07005043@internal class FenceObject {
5044 VkDevice device
5045 bool signaled
5046}
5047
5048@internal class SemaphoreObject {
5049 VkDevice device
5050}
5051
5052@internal class EventObject {
5053 VkDevice device
5054}
5055
5056@internal class QueryPoolObject {
5057 VkDevice device
5058}
5059
5060@internal class FramebufferObject {
5061 VkDevice device
5062}
5063
5064@internal class RenderPassObject {
5065 VkDevice device
5066}
5067
5068@internal class PipelineCacheObject {
5069 VkDevice device
5070}
5071
Jesse Hall3fbc8562015-11-29 22:10:52 -08005072@internal class CommandPoolObject {
Jesse Halld27f6aa2015-08-15 17:58:48 -07005073 VkDevice device
5074}
5075
Jesse Hall1356b0d2015-11-23 17:24:58 -08005076@internal class SurfaceObject {
5077 VkInstance instance
5078}
5079
Michael Lentine88594d72015-11-12 12:49:45 -08005080@internal class SwapchainObject {
5081 VkDevice device
5082}
5083
Jesse Halld27f6aa2015-08-15 17:58:48 -07005084macro ref!InstanceObject GetInstance(VkInstance instance) {
5085 assert(instance in State.Instances)
5086 return State.Instances[instance]
5087}
5088
5089macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
5090 assert(physicalDevice in State.PhysicalDevices)
5091 return State.PhysicalDevices[physicalDevice]
5092}
5093
5094macro ref!DeviceObject GetDevice(VkDevice device) {
5095 assert(device in State.Devices)
5096 return State.Devices[device]
5097}
5098
5099macro ref!QueueObject GetQueue(VkQueue queue) {
5100 assert(queue in State.Queues)
5101 return State.Queues[queue]
5102}
5103
Jesse Hall3fbc8562015-11-29 22:10:52 -08005104macro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
5105 assert(commandBuffer in State.CommandBuffers)
5106 return State.CommandBuffers[commandBuffer]
Jesse Halld27f6aa2015-08-15 17:58:48 -07005107}
5108
Jesse Hall3fbc8562015-11-29 22:10:52 -08005109macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
5110 assert(memory in State.DeviceMemories)
5111 return State.DeviceMemories[memory]
Jesse Halld27f6aa2015-08-15 17:58:48 -07005112}
5113
5114macro ref!BufferObject GetBuffer(VkBuffer buffer) {
5115 assert(buffer in State.Buffers)
5116 return State.Buffers[buffer]
5117}
5118
5119macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
5120 assert(bufferView in State.BufferViews)
5121 return State.BufferViews[bufferView]
5122}
5123
5124macro ref!ImageObject GetImage(VkImage image) {
5125 assert(image in State.Images)
5126 return State.Images[image]
5127}
5128
5129macro ref!ImageViewObject GetImageView(VkImageView imageView) {
5130 assert(imageView in State.ImageViews)
5131 return State.ImageViews[imageView]
5132}
5133
Jesse Halld27f6aa2015-08-15 17:58:48 -07005134macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
5135 assert(shaderModule in State.ShaderModules)
5136 return State.ShaderModules[shaderModule]
5137}
5138
5139macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
5140 assert(pipeline in State.Pipelines)
5141 return State.Pipelines[pipeline]
5142}
5143
5144macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
5145 assert(pipelineLayout in State.PipelineLayouts)
5146 return State.PipelineLayouts[pipelineLayout]
5147}
5148
5149macro ref!SamplerObject GetSampler(VkSampler sampler) {
5150 assert(sampler in State.Samplers)
5151 return State.Samplers[sampler]
5152}
5153
5154macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
5155 assert(descriptorSet in State.DescriptorSets)
5156 return State.DescriptorSets[descriptorSet]
5157}
5158
5159macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
5160 assert(descriptorSetLayout in State.DescriptorSetLayouts)
5161 return State.DescriptorSetLayouts[descriptorSetLayout]
5162}
5163
5164macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
5165 assert(descriptorPool in State.DescriptorPools)
5166 return State.DescriptorPools[descriptorPool]
5167}
5168
Jesse Halld27f6aa2015-08-15 17:58:48 -07005169macro ref!FenceObject GetFence(VkFence fence) {
5170 assert(fence in State.Fences)
5171 return State.Fences[fence]
5172}
5173
5174macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
5175 assert(semaphore in State.Semaphores)
5176 return State.Semaphores[semaphore]
5177}
5178
5179macro ref!EventObject GetEvent(VkEvent event) {
5180 assert(event in State.Events)
5181 return State.Events[event]
5182}
5183
5184macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
5185 assert(queryPool in State.QueryPools)
5186 return State.QueryPools[queryPool]
5187}
5188
5189macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
5190 assert(framebuffer in State.Framebuffers)
5191 return State.Framebuffers[framebuffer]
5192}
5193
5194macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
5195 assert(renderPass in State.RenderPasses)
5196 return State.RenderPasses[renderPass]
5197}
5198
5199macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
5200 assert(pipelineCache in State.PipelineCaches)
5201 return State.PipelineCaches[pipelineCache]
5202}
5203
Jesse Hall3fbc8562015-11-29 22:10:52 -08005204macro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
5205 assert(commandPool in State.CommandPools)
5206 return State.CommandPools[commandPool]
Jesse Hallf09c6b12015-08-15 19:54:28 -07005207}
Michael Lentine88594d72015-11-12 12:49:45 -08005208
Jesse Hall1356b0d2015-11-23 17:24:58 -08005209macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
5210 assert(surface in State.Surfaces)
5211 return State.Surfaces[surface]
5212}
5213
Michael Lentine88594d72015-11-12 12:49:45 -08005214macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
5215 assert(swapchain in State.Swapchains)
5216 return State.Swapchains[swapchain]
5217}
Jesse Halld8bade02015-11-24 10:24:18 -08005218
5219macro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
5220 return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
5221}