blob: 7ab0e86d6133cf616a160102ca2dae4208577dc8 [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 Hallae38f732015-11-19 21:32:50 -080030define VERSION_MINOR 174
31define VERSION_PATCH 0
Jesse Halld27f6aa2015-08-15 17:58:48 -070032
33// API limits
34define VK_MAX_PHYSICAL_DEVICE_NAME 256
35define VK_UUID_LENGTH 16
36define VK_MAX_EXTENSION_NAME 256
37define VK_MAX_DESCRIPTION 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.
40
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
48
49/////////////
50// Types //
51/////////////
52
Jesse Hall5ae3abb2015-10-08 14:00:22 -070053type u32 VkBool32
54type u32 VkFlags
55type u64 VkDeviceSize
56type u32 VkSampleMask
57
Jesse Halld27f6aa2015-08-15 17:58:48 -070058/// Dispatchable handle types.
59@dispatchHandle type u64 VkInstance
60@dispatchHandle type u64 VkPhysicalDevice
61@dispatchHandle type u64 VkDevice
62@dispatchHandle type u64 VkQueue
63@dispatchHandle type u64 VkCmdBuffer
64
65/// Non dispatchable handle types.
66@nonDispatchHandle type u64 VkDeviceMemory
67@nonDispatchHandle type u64 VkCmdPool
68@nonDispatchHandle type u64 VkBuffer
69@nonDispatchHandle type u64 VkBufferView
70@nonDispatchHandle type u64 VkImage
71@nonDispatchHandle type u64 VkImageView
Jesse Halld27f6aa2015-08-15 17:58:48 -070072@nonDispatchHandle type u64 VkShaderModule
73@nonDispatchHandle type u64 VkShader
74@nonDispatchHandle type u64 VkPipeline
75@nonDispatchHandle type u64 VkPipelineLayout
76@nonDispatchHandle type u64 VkSampler
77@nonDispatchHandle type u64 VkDescriptorSet
78@nonDispatchHandle type u64 VkDescriptorSetLayout
79@nonDispatchHandle type u64 VkDescriptorPool
Jesse Halld27f6aa2015-08-15 17:58:48 -070080@nonDispatchHandle type u64 VkFence
81@nonDispatchHandle type u64 VkSemaphore
82@nonDispatchHandle type u64 VkEvent
83@nonDispatchHandle type u64 VkQueryPool
84@nonDispatchHandle type u64 VkFramebuffer
85@nonDispatchHandle type u64 VkRenderPass
86@nonDispatchHandle type u64 VkPipelineCache
Michael Lentine88594d72015-11-12 12:49:45 -080087@nonDispatchHandle type u64 VkSwapchainKHR
Jesse Halld27f6aa2015-08-15 17:58:48 -070088
89
90/////////////
91// Enums //
92/////////////
93
94enum VkImageLayout {
95 VK_IMAGE_LAYOUT_UNDEFINED = 0x00000000, /// Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
96 VK_IMAGE_LAYOUT_GENERAL = 0x00000001, /// General layout when image can be used for any kind of access
97 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 0x00000002, /// Optimal layout when image is only used for color attachment read/write
98 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 0x00000003, /// Optimal layout when image is only used for depth/stencil attachment read/write
99 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 0x00000004, /// Optimal layout when image is used for read only depth/stencil attachment and shader access
100 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 0x00000005, /// Optimal layout when image is used for read only shader access
101 VK_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL = 0x00000006, /// Optimal layout when image is used only as source of transfer operations
102 VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL = 0x00000007, /// Optimal layout when image is used only as destination of transfer operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700103 VK_IMAGE_LAYOUT_PREINITIALIZED = 0x00000008, /// Initial layout used when the data is populated by the CPU
Jesse Halld27f6aa2015-08-15 17:58:48 -0700104}
105
106enum VkAttachmentLoadOp {
107 VK_ATTACHMENT_LOAD_OP_LOAD = 0x00000000,
108 VK_ATTACHMENT_LOAD_OP_CLEAR = 0x00000001,
109 VK_ATTACHMENT_LOAD_OP_DONT_CARE = 0x00000002,
110}
111
112enum VkAttachmentStoreOp {
113 VK_ATTACHMENT_STORE_OP_STORE = 0x00000000,
114 VK_ATTACHMENT_STORE_OP_DONT_CARE = 0x00000001,
115}
116
117enum VkImageType {
118 VK_IMAGE_TYPE_1D = 0x00000000,
119 VK_IMAGE_TYPE_2D = 0x00000001,
120 VK_IMAGE_TYPE_3D = 0x00000002,
121}
122
123enum VkImageTiling {
124 VK_IMAGE_TILING_LINEAR = 0x00000000,
125 VK_IMAGE_TILING_OPTIMAL = 0x00000001,
126}
127
128enum VkImageViewType {
129 VK_IMAGE_VIEW_TYPE_1D = 0x00000000,
130 VK_IMAGE_VIEW_TYPE_2D = 0x00000001,
131 VK_IMAGE_VIEW_TYPE_3D = 0x00000002,
132 VK_IMAGE_VIEW_TYPE_CUBE = 0x00000003,
133 VK_IMAGE_VIEW_TYPE_1D_ARRAY = 0x00000004,
134 VK_IMAGE_VIEW_TYPE_2D_ARRAY = 0x00000005,
135 VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 0x00000006,
136}
137
138enum VkImageAspect {
139 VK_IMAGE_ASPECT_COLOR = 0x00000000,
140 VK_IMAGE_ASPECT_DEPTH = 0x00000001,
141 VK_IMAGE_ASPECT_STENCIL = 0x00000002,
142 VK_IMAGE_ASPECT_METADATA = 0x00000003,
143}
144
Jesse Halld27f6aa2015-08-15 17:58:48 -0700145enum VkCmdBufferLevel {
146 VK_CMD_BUFFER_LEVEL_PRIMARY = 0x00000000,
147 VK_CMD_BUFFER_LEVEL_SECONDARY = 0x00000001,
148}
149
150enum VkChannelSwizzle {
151 VK_CHANNEL_SWIZZLE_ZERO = 0x00000000,
152 VK_CHANNEL_SWIZZLE_ONE = 0x00000001,
153 VK_CHANNEL_SWIZZLE_R = 0x00000002,
154 VK_CHANNEL_SWIZZLE_G = 0x00000003,
155 VK_CHANNEL_SWIZZLE_B = 0x00000004,
156 VK_CHANNEL_SWIZZLE_A = 0x00000005,
157}
158
159enum VkDescriptorType {
160 VK_DESCRIPTOR_TYPE_SAMPLER = 0x00000000,
161 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 0x00000001,
162 VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 0x00000002,
163 VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 0x00000003,
164 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 0x00000004,
165 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 0x00000005,
166 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 0x00000006,
167 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 0x00000007,
168 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 0x00000008,
169 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 0x00000009,
170 VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 0x0000000a,
171}
172
173enum VkDescriptorPoolUsage {
174 VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT = 0x00000000,
175 VK_DESCRIPTOR_POOL_USAGE_DYNAMIC = 0x00000001,
176}
177
178enum VkDescriptorSetUsage {
179 VK_DESCRIPTOR_SET_USAGE_ONE_SHOT = 0x00000000,
180 VK_DESCRIPTOR_SET_USAGE_STATIC = 0x00000001,
181}
182
183enum VkQueryType {
184 VK_QUERY_TYPE_OCCLUSION = 0x00000000,
185 VK_QUERY_TYPE_PIPELINE_STATISTICS = 0x00000001, /// Optional
186}
187
188enum VkTimestampType {
189 VK_TIMESTAMP_TYPE_TOP = 0x00000000,
190 VK_TIMESTAMP_TYPE_BOTTOM = 0x00000001,
191}
192
193enum VkBorderColor {
194 VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000,
195 VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 0x00000001,
196 VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 0x00000002,
197 VK_BORDER_COLOR_INT_OPAQUE_BLACK = 0x00000003,
198 VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 0x00000004,
199 VK_BORDER_COLOR_INT_OPAQUE_WHITE = 0x00000005,
200}
201
202enum VkPipelineBindPoint {
203 VK_PIPELINE_BIND_POINT_COMPUTE = 0x00000000,
204 VK_PIPELINE_BIND_POINT_GRAPHICS = 0x00000001,
205}
206
207enum VkPrimitiveTopology {
208 VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0x00000000,
209 VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 0x00000001,
210 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 0x00000002,
211 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
212 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
213 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 0x00000005,
214 VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ = 0x00000006,
215 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ = 0x00000007,
216 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ = 0x00000008,
217 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ = 0x00000009,
218 VK_PRIMITIVE_TOPOLOGY_PATCH = 0x0000000a,
219}
220
221enum VkSharingMode {
222 VK_SHARING_MODE_EXCLUSIVE = 0x00000000,
223 VK_SHARING_MODE_CONCURRENT = 0x00000001,
224}
225
226enum VkIndexType {
227 VK_INDEX_TYPE_UINT16 = 0x00000000,
228 VK_INDEX_TYPE_UINT32 = 0x00000001,
229}
230
231enum VkTexFilter {
232 VK_TEX_FILTER_NEAREST = 0x00000000,
233 VK_TEX_FILTER_LINEAR = 0x00000001,
234}
235
236enum VkTexMipmapMode {
237 VK_TEX_MIPMAP_MODE_BASE = 0x00000000, /// Always choose base level
238 VK_TEX_MIPMAP_MODE_NEAREST = 0x00000001, /// Choose nearest mip level
239 VK_TEX_MIPMAP_MODE_LINEAR = 0x00000002, /// Linear filter between mip levels
240}
241
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700242enum VkTexAddressMode {
243 VK_TEX_ADDRESS_MODE_WRAP = 0x00000000,
244 VK_TEX_ADDRESS_MODE_MIRROR = 0x00000001,
245 VK_TEX_ADDRESS_MODE_CLAMP = 0x00000002,
246 VK_TEX_ADDRESS_MODE_MIRROR_ONCE = 0x00000003,
247 VK_TEX_ADDRESS_MODE_CLAMP_BORDER = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700248}
249
250enum VkCompareOp {
251 VK_COMPARE_OP_NEVER = 0x00000000,
252 VK_COMPARE_OP_LESS = 0x00000001,
253 VK_COMPARE_OP_EQUAL = 0x00000002,
254 VK_COMPARE_OP_LESS_EQUAL = 0x00000003,
255 VK_COMPARE_OP_GREATER = 0x00000004,
256 VK_COMPARE_OP_NOT_EQUAL = 0x00000005,
257 VK_COMPARE_OP_GREATER_EQUAL = 0x00000006,
258 VK_COMPARE_OP_ALWAYS = 0x00000007,
259}
260
261enum VkFillMode {
262 VK_FILL_MODE_POINTS = 0x00000000,
263 VK_FILL_MODE_WIREFRAME = 0x00000001,
264 VK_FILL_MODE_SOLID = 0x00000002,
265}
266
267enum VkCullMode {
268 VK_CULL_MODE_NONE = 0x00000000,
269 VK_CULL_MODE_FRONT = 0x00000001,
270 VK_CULL_MODE_BACK = 0x00000002,
271 VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
272}
273
274enum VkFrontFace {
275 VK_FRONT_FACE_CCW = 0x00000000,
276 VK_FRONT_FACE_CW = 0x00000001,
277}
278
279enum VkBlend {
280 VK_BLEND_ZERO = 0x00000000,
281 VK_BLEND_ONE = 0x00000001,
282 VK_BLEND_SRC_COLOR = 0x00000002,
283 VK_BLEND_ONE_MINUS_SRC_COLOR = 0x00000003,
284 VK_BLEND_DEST_COLOR = 0x00000004,
285 VK_BLEND_ONE_MINUS_DEST_COLOR = 0x00000005,
286 VK_BLEND_SRC_ALPHA = 0x00000006,
287 VK_BLEND_ONE_MINUS_SRC_ALPHA = 0x00000007,
288 VK_BLEND_DEST_ALPHA = 0x00000008,
289 VK_BLEND_ONE_MINUS_DEST_ALPHA = 0x00000009,
290 VK_BLEND_CONSTANT_COLOR = 0x0000000a,
291 VK_BLEND_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
292 VK_BLEND_CONSTANT_ALPHA = 0x0000000c,
293 VK_BLEND_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
294 VK_BLEND_SRC_ALPHA_SATURATE = 0x0000000e,
295 VK_BLEND_SRC1_COLOR = 0x0000000f,
296 VK_BLEND_ONE_MINUS_SRC1_COLOR = 0x00000010,
297 VK_BLEND_SRC1_ALPHA = 0x00000011,
298 VK_BLEND_ONE_MINUS_SRC1_ALPHA = 0x00000012,
299}
300
301enum VkBlendOp {
302 VK_BLEND_OP_ADD = 0x00000000,
303 VK_BLEND_OP_SUBTRACT = 0x00000001,
304 VK_BLEND_OP_REVERSE_SUBTRACT = 0x00000002,
305 VK_BLEND_OP_MIN = 0x00000003,
306 VK_BLEND_OP_MAX = 0x00000004,
307}
308
309enum VkStencilOp {
310 VK_STENCIL_OP_KEEP = 0x00000000,
311 VK_STENCIL_OP_ZERO = 0x00000001,
312 VK_STENCIL_OP_REPLACE = 0x00000002,
313 VK_STENCIL_OP_INC_CLAMP = 0x00000003,
314 VK_STENCIL_OP_DEC_CLAMP = 0x00000004,
315 VK_STENCIL_OP_INVERT = 0x00000005,
316 VK_STENCIL_OP_INC_WRAP = 0x00000006,
317 VK_STENCIL_OP_DEC_WRAP = 0x00000007,
318}
319
320enum VkLogicOp {
321 VK_LOGIC_OP_CLEAR = 0x00000000,
322 VK_LOGIC_OP_AND = 0x00000001,
323 VK_LOGIC_OP_AND_REVERSE = 0x00000002,
324 VK_LOGIC_OP_COPY = 0x00000003,
325 VK_LOGIC_OP_AND_INVERTED = 0x00000004,
326 VK_LOGIC_OP_NOOP = 0x00000005,
327 VK_LOGIC_OP_XOR = 0x00000006,
328 VK_LOGIC_OP_OR = 0x00000007,
329 VK_LOGIC_OP_NOR = 0x00000008,
330 VK_LOGIC_OP_EQUIV = 0x00000009,
331 VK_LOGIC_OP_INVERT = 0x0000000a,
332 VK_LOGIC_OP_OR_REVERSE = 0x0000000b,
333 VK_LOGIC_OP_COPY_INVERTED = 0x0000000c,
334 VK_LOGIC_OP_OR_INVERTED = 0x0000000d,
335 VK_LOGIC_OP_NAND = 0x0000000e,
336 VK_LOGIC_OP_SET = 0x0000000f,
337}
338
339enum VkSystemAllocType {
340 VK_SYSTEM_ALLOC_TYPE_API_OBJECT = 0x00000000,
341 VK_SYSTEM_ALLOC_TYPE_INTERNAL = 0x00000001,
342 VK_SYSTEM_ALLOC_TYPE_INTERNAL_TEMP = 0x00000002,
343 VK_SYSTEM_ALLOC_TYPE_INTERNAL_SHADER = 0x00000003,
344 VK_SYSTEM_ALLOC_TYPE_DEBUG = 0x00000004,
345}
346
347enum VkPhysicalDeviceType {
348 VK_PHYSICAL_DEVICE_TYPE_OTHER = 0x00000000,
349 VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 0x00000001,
350 VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 0x00000002,
351 VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 0x00000003,
352 VK_PHYSICAL_DEVICE_TYPE_CPU = 0x00000004,
353}
354
355enum VkVertexInputStepRate {
356 VK_VERTEX_INPUT_STEP_RATE_VERTEX = 0x00000000,
357 VK_VERTEX_INPUT_STEP_RATE_INSTANCE = 0x00000001,
358}
359
360/// Vulkan format definitions
361enum VkFormat {
362 VK_FORMAT_UNDEFINED = 0x00000000,
363 VK_FORMAT_R4G4_UNORM = 0x00000001,
364 VK_FORMAT_R4G4_USCALED = 0x00000002,
365 VK_FORMAT_R4G4B4A4_UNORM = 0x00000003,
366 VK_FORMAT_R4G4B4A4_USCALED = 0x00000004,
367 VK_FORMAT_R5G6B5_UNORM = 0x00000005,
368 VK_FORMAT_R5G6B5_USCALED = 0x00000006,
369 VK_FORMAT_R5G5B5A1_UNORM = 0x00000007,
370 VK_FORMAT_R5G5B5A1_USCALED = 0x00000008,
371 VK_FORMAT_R8_UNORM = 0x00000009,
372 VK_FORMAT_R8_SNORM = 0x0000000A,
373 VK_FORMAT_R8_USCALED = 0x0000000B,
374 VK_FORMAT_R8_SSCALED = 0x0000000C,
375 VK_FORMAT_R8_UINT = 0x0000000D,
376 VK_FORMAT_R8_SINT = 0x0000000E,
377 VK_FORMAT_R8_SRGB = 0x0000000F,
378 VK_FORMAT_R8G8_UNORM = 0x00000010,
379 VK_FORMAT_R8G8_SNORM = 0x00000011,
380 VK_FORMAT_R8G8_USCALED = 0x00000012,
381 VK_FORMAT_R8G8_SSCALED = 0x00000013,
382 VK_FORMAT_R8G8_UINT = 0x00000014,
383 VK_FORMAT_R8G8_SINT = 0x00000015,
384 VK_FORMAT_R8G8_SRGB = 0x00000016,
385 VK_FORMAT_R8G8B8_UNORM = 0x00000017,
386 VK_FORMAT_R8G8B8_SNORM = 0x00000018,
387 VK_FORMAT_R8G8B8_USCALED = 0x00000019,
388 VK_FORMAT_R8G8B8_SSCALED = 0x0000001A,
389 VK_FORMAT_R8G8B8_UINT = 0x0000001B,
390 VK_FORMAT_R8G8B8_SINT = 0x0000001C,
391 VK_FORMAT_R8G8B8_SRGB = 0x0000001D,
392 VK_FORMAT_R8G8B8A8_UNORM = 0x0000001E,
393 VK_FORMAT_R8G8B8A8_SNORM = 0x0000001F,
394 VK_FORMAT_R8G8B8A8_USCALED = 0x00000020,
395 VK_FORMAT_R8G8B8A8_SSCALED = 0x00000021,
396 VK_FORMAT_R8G8B8A8_UINT = 0x00000022,
397 VK_FORMAT_R8G8B8A8_SINT = 0x00000023,
398 VK_FORMAT_R8G8B8A8_SRGB = 0x00000024,
399 VK_FORMAT_R10G10B10A2_UNORM = 0x00000025,
400 VK_FORMAT_R10G10B10A2_SNORM = 0x00000026,
401 VK_FORMAT_R10G10B10A2_USCALED = 0x00000027,
402 VK_FORMAT_R10G10B10A2_SSCALED = 0x00000028,
403 VK_FORMAT_R10G10B10A2_UINT = 0x00000029,
404 VK_FORMAT_R10G10B10A2_SINT = 0x0000002A,
405 VK_FORMAT_R16_UNORM = 0x0000002B,
406 VK_FORMAT_R16_SNORM = 0x0000002C,
407 VK_FORMAT_R16_USCALED = 0x0000002D,
408 VK_FORMAT_R16_SSCALED = 0x0000002E,
409 VK_FORMAT_R16_UINT = 0x0000002F,
410 VK_FORMAT_R16_SINT = 0x00000030,
411 VK_FORMAT_R16_SFLOAT = 0x00000031,
412 VK_FORMAT_R16G16_UNORM = 0x00000032,
413 VK_FORMAT_R16G16_SNORM = 0x00000033,
414 VK_FORMAT_R16G16_USCALED = 0x00000034,
415 VK_FORMAT_R16G16_SSCALED = 0x00000035,
416 VK_FORMAT_R16G16_UINT = 0x00000036,
417 VK_FORMAT_R16G16_SINT = 0x00000037,
418 VK_FORMAT_R16G16_SFLOAT = 0x00000038,
419 VK_FORMAT_R16G16B16_UNORM = 0x00000039,
420 VK_FORMAT_R16G16B16_SNORM = 0x0000003A,
421 VK_FORMAT_R16G16B16_USCALED = 0x0000003B,
422 VK_FORMAT_R16G16B16_SSCALED = 0x0000003C,
423 VK_FORMAT_R16G16B16_UINT = 0x0000003D,
424 VK_FORMAT_R16G16B16_SINT = 0x0000003E,
425 VK_FORMAT_R16G16B16_SFLOAT = 0x0000003F,
426 VK_FORMAT_R16G16B16A16_UNORM = 0x00000040,
427 VK_FORMAT_R16G16B16A16_SNORM = 0x00000041,
428 VK_FORMAT_R16G16B16A16_USCALED = 0x00000042,
429 VK_FORMAT_R16G16B16A16_SSCALED = 0x00000043,
430 VK_FORMAT_R16G16B16A16_UINT = 0x00000044,
431 VK_FORMAT_R16G16B16A16_SINT = 0x00000045,
432 VK_FORMAT_R16G16B16A16_SFLOAT = 0x00000046,
433 VK_FORMAT_R32_UINT = 0x00000047,
434 VK_FORMAT_R32_SINT = 0x00000048,
435 VK_FORMAT_R32_SFLOAT = 0x00000049,
436 VK_FORMAT_R32G32_UINT = 0x0000004A,
437 VK_FORMAT_R32G32_SINT = 0x0000004B,
438 VK_FORMAT_R32G32_SFLOAT = 0x0000004C,
439 VK_FORMAT_R32G32B32_UINT = 0x0000004D,
440 VK_FORMAT_R32G32B32_SINT = 0x0000004E,
441 VK_FORMAT_R32G32B32_SFLOAT = 0x0000004F,
442 VK_FORMAT_R32G32B32A32_UINT = 0x00000050,
443 VK_FORMAT_R32G32B32A32_SINT = 0x00000051,
444 VK_FORMAT_R32G32B32A32_SFLOAT = 0x00000052,
445 VK_FORMAT_R64_SFLOAT = 0x00000053,
446 VK_FORMAT_R64G64_SFLOAT = 0x00000054,
447 VK_FORMAT_R64G64B64_SFLOAT = 0x00000055,
448 VK_FORMAT_R64G64B64A64_SFLOAT = 0x00000056,
449 VK_FORMAT_R11G11B10_UFLOAT = 0x00000057,
450 VK_FORMAT_R9G9B9E5_UFLOAT = 0x00000058,
451 VK_FORMAT_D16_UNORM = 0x00000059,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700452 VK_FORMAT_D24_UNORM_X8 = 0x0000005A,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700453 VK_FORMAT_D32_SFLOAT = 0x0000005B,
454 VK_FORMAT_S8_UINT = 0x0000005C,
455 VK_FORMAT_D16_UNORM_S8_UINT = 0x0000005D,
456 VK_FORMAT_D24_UNORM_S8_UINT = 0x0000005E,
457 VK_FORMAT_D32_SFLOAT_S8_UINT = 0x0000005F,
458 VK_FORMAT_BC1_RGB_UNORM = 0x00000060,
459 VK_FORMAT_BC1_RGB_SRGB = 0x00000061,
460 VK_FORMAT_BC1_RGBA_UNORM = 0x00000062,
461 VK_FORMAT_BC1_RGBA_SRGB = 0x00000063,
462 VK_FORMAT_BC2_UNORM = 0x00000064,
463 VK_FORMAT_BC2_SRGB = 0x00000065,
464 VK_FORMAT_BC3_UNORM = 0x00000066,
465 VK_FORMAT_BC3_SRGB = 0x00000067,
466 VK_FORMAT_BC4_UNORM = 0x00000068,
467 VK_FORMAT_BC4_SNORM = 0x00000069,
468 VK_FORMAT_BC5_UNORM = 0x0000006A,
469 VK_FORMAT_BC5_SNORM = 0x0000006B,
470 VK_FORMAT_BC6H_UFLOAT = 0x0000006C,
471 VK_FORMAT_BC6H_SFLOAT = 0x0000006D,
472 VK_FORMAT_BC7_UNORM = 0x0000006E,
473 VK_FORMAT_BC7_SRGB = 0x0000006F,
474 VK_FORMAT_ETC2_R8G8B8_UNORM = 0x00000070,
475 VK_FORMAT_ETC2_R8G8B8_SRGB = 0x00000071,
476 VK_FORMAT_ETC2_R8G8B8A1_UNORM = 0x00000072,
477 VK_FORMAT_ETC2_R8G8B8A1_SRGB = 0x00000073,
478 VK_FORMAT_ETC2_R8G8B8A8_UNORM = 0x00000074,
479 VK_FORMAT_ETC2_R8G8B8A8_SRGB = 0x00000075,
480 VK_FORMAT_EAC_R11_UNORM = 0x00000076,
481 VK_FORMAT_EAC_R11_SNORM = 0x00000077,
482 VK_FORMAT_EAC_R11G11_UNORM = 0x00000078,
483 VK_FORMAT_EAC_R11G11_SNORM = 0x00000079,
484 VK_FORMAT_ASTC_4x4_UNORM = 0x0000007A,
485 VK_FORMAT_ASTC_4x4_SRGB = 0x0000007B,
486 VK_FORMAT_ASTC_5x4_UNORM = 0x0000007C,
487 VK_FORMAT_ASTC_5x4_SRGB = 0x0000007D,
488 VK_FORMAT_ASTC_5x5_UNORM = 0x0000007E,
489 VK_FORMAT_ASTC_5x5_SRGB = 0x0000007F,
490 VK_FORMAT_ASTC_6x5_UNORM = 0x00000080,
491 VK_FORMAT_ASTC_6x5_SRGB = 0x00000081,
492 VK_FORMAT_ASTC_6x6_UNORM = 0x00000082,
493 VK_FORMAT_ASTC_6x6_SRGB = 0x00000083,
494 VK_FORMAT_ASTC_8x5_UNORM = 0x00000084,
495 VK_FORMAT_ASTC_8x5_SRGB = 0x00000085,
496 VK_FORMAT_ASTC_8x6_UNORM = 0x00000086,
497 VK_FORMAT_ASTC_8x6_SRGB = 0x00000087,
498 VK_FORMAT_ASTC_8x8_UNORM = 0x00000088,
499 VK_FORMAT_ASTC_8x8_SRGB = 0x00000089,
500 VK_FORMAT_ASTC_10x5_UNORM = 0x0000008A,
501 VK_FORMAT_ASTC_10x5_SRGB = 0x0000008B,
502 VK_FORMAT_ASTC_10x6_UNORM = 0x0000008C,
503 VK_FORMAT_ASTC_10x6_SRGB = 0x0000008D,
504 VK_FORMAT_ASTC_10x8_UNORM = 0x0000008E,
505 VK_FORMAT_ASTC_10x8_SRGB = 0x0000008F,
506 VK_FORMAT_ASTC_10x10_UNORM = 0x00000090,
507 VK_FORMAT_ASTC_10x10_SRGB = 0x00000091,
508 VK_FORMAT_ASTC_12x10_UNORM = 0x00000092,
509 VK_FORMAT_ASTC_12x10_SRGB = 0x00000093,
510 VK_FORMAT_ASTC_12x12_UNORM = 0x00000094,
511 VK_FORMAT_ASTC_12x12_SRGB = 0x00000095,
512 VK_FORMAT_B4G4R4A4_UNORM = 0x00000096,
513 VK_FORMAT_B5G5R5A1_UNORM = 0x00000097,
514 VK_FORMAT_B5G6R5_UNORM = 0x00000098,
515 VK_FORMAT_B5G6R5_USCALED = 0x00000099,
516 VK_FORMAT_B8G8R8_UNORM = 0x0000009A,
517 VK_FORMAT_B8G8R8_SNORM = 0x0000009B,
518 VK_FORMAT_B8G8R8_USCALED = 0x0000009C,
519 VK_FORMAT_B8G8R8_SSCALED = 0x0000009D,
520 VK_FORMAT_B8G8R8_UINT = 0x0000009E,
521 VK_FORMAT_B8G8R8_SINT = 0x0000009F,
522 VK_FORMAT_B8G8R8_SRGB = 0x000000A0,
523 VK_FORMAT_B8G8R8A8_UNORM = 0x000000A1,
524 VK_FORMAT_B8G8R8A8_SNORM = 0x000000A2,
525 VK_FORMAT_B8G8R8A8_USCALED = 0x000000A3,
526 VK_FORMAT_B8G8R8A8_SSCALED = 0x000000A4,
527 VK_FORMAT_B8G8R8A8_UINT = 0x000000A5,
528 VK_FORMAT_B8G8R8A8_SINT = 0x000000A6,
529 VK_FORMAT_B8G8R8A8_SRGB = 0x000000A7,
530 VK_FORMAT_B10G10R10A2_UNORM = 0x000000A8,
531 VK_FORMAT_B10G10R10A2_SNORM = 0x000000A9,
532 VK_FORMAT_B10G10R10A2_USCALED = 0x000000AA,
533 VK_FORMAT_B10G10R10A2_SSCALED = 0x000000AB,
534 VK_FORMAT_B10G10R10A2_UINT = 0x000000AC,
535 VK_FORMAT_B10G10R10A2_SINT = 0x000000AD,
536}
537
538/// Shader stage enumerant
539enum VkShaderStage {
540 VK_SHADER_STAGE_VERTEX = 0x00000000,
Jesse Hallae38f732015-11-19 21:32:50 -0800541 VK_SHADER_STAGE_TESSELLATION_CONTROL = 0x00000001,
542 VK_SHADER_STAGE_TESSELLATION_EVALUATION = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700543 VK_SHADER_STAGE_GEOMETRY = 0x00000003,
544 VK_SHADER_STAGE_FRAGMENT = 0x00000004,
545 VK_SHADER_STAGE_COMPUTE = 0x00000005,
546}
547
548/// Structure type enumerant
549enum VkStructureType {
550 VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
551 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1,
552 VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2,
553 VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 3,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700554 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 4,
555 VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 5,
556 VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6,
557 VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7,
558 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8,
559 VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 9,
560 VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
561 VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11,
562 VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12,
563 VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 13,
564 VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 14,
565 VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 15,
566 VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 16,
567 VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17,
568 VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 18,
569 VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 19,
570 VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 20,
571 VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 21,
572 VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 22,
573 VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 23,
574 VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 24,
575 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 25,
576 VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 26,
577 VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 27,
578 VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 28,
579 VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 29,
580 VK_STRUCTURE_TYPE_MEMORY_BARRIER = 30,
581 VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 31,
582 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 32,
583 VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
584 VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 34,
585 VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 35,
586 VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 36,
587 VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 37,
588 VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 38,
589 VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 39,
590 VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 40,
591 VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 41,
592 VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 42,
593 VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
594 VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44,
595 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
596 VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700597}
598
599enum VkRenderPassContents {
600 VK_RENDER_PASS_CONTENTS_INLINE = 0x00000000,
601 VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS = 0x00000001,
602}
603
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700604@lastUnused(-8)
Jesse Halld27f6aa2015-08-15 17:58:48 -0700605/// Error and return codes
606enum VkResult {
607 // Return codes for successful operation execution (positive values)
608 VK_SUCCESS = 0x00000000,
609 VK_UNSUPPORTED = 0x00000001,
610 VK_NOT_READY = 0x00000002,
611 VK_TIMEOUT = 0x00000003,
612 VK_EVENT_SET = 0x00000004,
613 VK_EVENT_RESET = 0x00000005,
614 VK_INCOMPLETE = 0x00000006,
615
616 // Error codes (negative values)
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700617 VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF,
618 VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700619 VK_ERROR_INITIALIZATION_FAILED = 0xFFFFFFFD,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700620 VK_ERROR_DEVICE_LOST = 0xFFFFFFFC,
621 VK_ERROR_MEMORY_MAP_FAILED = 0xFFFFFFFB,
622 VK_ERROR_LAYER_NOT_PRESENT = 0xFFFFFFFA,
623 VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9,
624 VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF8,
625}
626
627enum VkDynamicState {
628 VK_DYNAMIC_STATE_VIEWPORT = 0x00000000,
629 VK_DYNAMIC_STATE_SCISSOR = 0x00000001,
630 VK_DYNAMIC_STATE_LINE_WIDTH = 0x00000002,
631 VK_DYNAMIC_STATE_DEPTH_BIAS = 0x00000003,
632 VK_DYNAMIC_STATE_BLEND_CONSTANTS = 0x00000004,
633 VK_DYNAMIC_STATE_DEPTH_BOUNDS = 0x00000005,
634 VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 0x00000006,
635 VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 0x00000007,
636 VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700637}
638
Michael Lentine88594d72015-11-12 12:49:45 -0800639//////////////////
640// Extensions //
641//////////////////
642
643@extension("VK_EXT_KHR_swapchain")
644enum VkSurfaceTransformKHR {
645 VK_SURFACE_TRANSFORM_NONE_KHR = 0x00000000,
646 VK_SURFACE_TRANSFORM_ROT90_KHR = 0x00000001,
647 VK_SURFACE_TRANSFORM_ROT180_KHR = 0x00000002,
648 VK_SURFACE_TRANSFORM_ROT270_KHR = 0x00000003,
649 VK_SURFACE_TRANSFORM_HMIRROR_KHR = 0x00000004,
650 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 0x00000005,
651 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 0x00000006,
652 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 0x00000007,
653 VK_SURFACE_TRANSFORM_INHERIT_KHR = 0x00000008,
654}
655
656@extension("VK_EXT_KHR_swapchain")
657enum VkPlatformKHR {
658 VK_PLATFORM_WIN32_KHR = 0x00000000,
659 VK_PLATFORM_X11_KHR = 0x00000001,
660 VK_PLATFORM_XCB_KHR = 0x00000002,
661 VK_PLATFORM_ANDROID_KHR = 0x00000003,
662 VK_PLATFORM_WAYLAND_KHR = 0x00000004,
663 VK_PLATFORM_MIR_KHR = 0x00000005,
664}
665
666@extension("VK_EXT_KHR_device_swapchain")
667enum VkPresentModeKHR {
668 VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000,
669 VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001,
670 VK_PRESENT_MODE_FIFO_KHR = 0x00000002,
671}
672
673@extension("VK_EXT_KHR_device_swapchain")
674enum VkColorSpaceKHR {
675 VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
676}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700677
678/////////////////
679// Bitfields //
680/////////////////
681
Jesse Halld27f6aa2015-08-15 17:58:48 -0700682/// Queue capabilities
683bitfield VkQueueFlags {
684 VK_QUEUE_GRAPHICS_BIT = 0x00000001, /// Queue supports graphics operations
685 VK_QUEUE_COMPUTE_BIT = 0x00000002, /// Queue supports compute operations
686 VK_QUEUE_DMA_BIT = 0x00000004, /// Queue supports DMA operations
687 VK_QUEUE_SPARSE_MEMMGR_BIT = 0x00000008, /// Queue supports sparse resource memory management operations
688 VK_QUEUE_EXTENDED_BIT = 0x40000000, /// Extended queue
689}
690
691/// Memory properties passed into vkAllocMemory().
692bitfield VkMemoryPropertyFlags {
693 VK_MEMORY_PROPERTY_DEVICE_ONLY = 0x00000000, /// If otherwise stated, then allocate memory on device
694 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000001, /// Memory should be mappable by host
695 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT = 0x00000002, /// Memory may not have i/o coherency so vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
696 /// vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
697 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT = 0x00000004, /// Memory should not be cached by the host
698 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT = 0x00000008, /// Memory should support host write combining
699 VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010, /// Memory may be allocated by the driver when it is required
700}
701
702/// Memory heap flags
703bitfield VkMemoryHeapFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700704 VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001, /// If set, heap represents host memory
Jesse Halld27f6aa2015-08-15 17:58:48 -0700705}
706
707/// Memory output flags passed to resource transition commands
708bitfield VkMemoryOutputFlags {
709 VK_MEMORY_OUTPUT_HOST_WRITE_BIT = 0x00000001, /// Controls output coherency of host writes
710 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT = 0x00000002, /// Controls output coherency of generic shader writes
711 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT = 0x00000004, /// Controls output coherency of color attachment writes
712 VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000008, /// Controls output coherency of depth/stencil attachment writes
713 VK_MEMORY_OUTPUT_TRANSFER_BIT = 0x00000010, /// Controls output coherency of transfer operations
714}
715
716/// Memory input flags passed to resource transition commands
717bitfield VkMemoryInputFlags {
718 VK_MEMORY_INPUT_HOST_READ_BIT = 0x00000001, /// Controls input coherency of host reads
719 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT = 0x00000002, /// Controls input coherency of indirect command reads
720 VK_MEMORY_INPUT_INDEX_FETCH_BIT = 0x00000004, /// Controls input coherency of index fetches
721 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT = 0x00000008, /// Controls input coherency of vertex attribute fetches
722 VK_MEMORY_INPUT_UNIFORM_READ_BIT = 0x00000010, /// Controls input coherency of uniform buffer reads
723 VK_MEMORY_INPUT_SHADER_READ_BIT = 0x00000020, /// Controls input coherency of generic shader reads
724 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT = 0x00000040, /// Controls input coherency of color attachment reads
725 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000080, /// Controls input coherency of depth/stencil attachment reads
726 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT = 0x00000100, /// Controls input coherency of input attachment reads
727 VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200, /// Controls input coherency of transfer operations
728}
729
730/// Buffer usage flags
731bitfield VkBufferUsageFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700732 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001, /// Can be used as a source of transfer operations
733 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002, /// Can be used as a destination of transfer operations
734 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, /// Can be used as TBO
735 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, /// Can be used as IBO
736 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, /// Can be used as UBO
737 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, /// Can be used as SSBO
738 VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, /// Can be used as source of fixed function index fetch (index buffer)
739 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, /// Can be used as source of fixed function vertex fetch (VBO)
740 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
741}
742
743/// Buffer creation flags
744bitfield VkBufferCreateFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700745 VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Buffer should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700746 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Buffer should support sparse backing with partial residency
747 VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
748}
749
750/// Shader stage flags
751bitfield VkShaderStageFlags {
752 VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
Jesse Hallae38f732015-11-19 21:32:50 -0800753 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
754 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700755 VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
756 VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
757 VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
758
759 VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
760}
761
762/// Image usage flags
763bitfield VkImageUsageFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700764 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT = 0x00000001, /// Can be used as a source of transfer operations
765 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002, /// Can be used as a destination of transfer operations
766 VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
767 VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, /// Can be used as storage image (STORAGE_IMAGE descriptor type)
768 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, /// Can be used as framebuffer color attachment
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700769 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, /// Can be used as framebuffer depth/stencil attachment
Jesse Halld27f6aa2015-08-15 17:58:48 -0700770 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, /// Image data not needed outside of rendering
771 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, /// Can be used as framebuffer input attachment
772}
773
774/// Image creation flags
775bitfield VkImageCreateFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700776 VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Image should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700777 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Image should support sparse backing with partial residency
778 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 -0700779 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, /// Allows image views to have different format than the base image
780 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 -0700781}
782
783/// Framebuffer attachment view creation flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700784bitfield VkImageViewCreateFlags {
785 VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
786 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700787}
788
789/// Pipeline creation flags
790bitfield VkPipelineCreateFlags {
791 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
792 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
793 VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
794}
795
796/// Channel flags
797bitfield VkChannelFlags {
798 VK_CHANNEL_R_BIT = 0x00000001,
799 VK_CHANNEL_G_BIT = 0x00000002,
800 VK_CHANNEL_B_BIT = 0x00000004,
801 VK_CHANNEL_A_BIT = 0x00000008,
802}
803
804/// Fence creation flags
805bitfield VkFenceCreateFlags {
806 VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
807}
808
809/// Semaphore creation flags
810bitfield VkSemaphoreCreateFlags {
811}
812
813/// Format capability flags
814bitfield VkFormatFeatureFlags {
815 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
816 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
817 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, /// Format supports atomic operations in case it's used for storage images
818 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, /// Format can be used for uniform texel buffers (TBOs)
819 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, /// Format can be used for storage texel buffers (IBOs)
820 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, /// Format supports atomic operations in case it's used for storage texel buffers
821 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, /// Format can be used for vertex buffers (VBOs)
822 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, /// Format can be used for color attachment images
823 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, /// Format supports blending in case it's used for color attachment images
824 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, /// Format can be used for depth/stencil attachment images
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700825 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT = 0x00000400, /// Format can be used as the source image of blits with vkCmdBlitImage
826 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT = 0x00000800, /// Format can be used as the destination image of blits with vkCmdBlitImage
Jesse Halld27f6aa2015-08-15 17:58:48 -0700827}
828
829/// Query control flags
830bitfield VkQueryControlFlags {
831 VK_QUERY_CONTROL_CONSERVATIVE_BIT = 0x00000001, /// Allow conservative results to be collected by the query
832}
833
834/// Query result flags
835bitfield VkQueryResultFlags {
836 VK_QUERY_RESULT_DEFAULT = 0x00000000, /// Results of the queries are immediately written to the destination buffer as 32-bit values
837 VK_QUERY_RESULT_64_BIT = 0x00000001, /// Results of the queries are written to the destination buffer as 64-bit values
838 VK_QUERY_RESULT_WAIT_BIT = 0x00000002, /// Results of the queries are waited on before proceeding with the result copy
839 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, /// Besides the results of the query, the availability of the results is also written
840 VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, /// Copy the partial results of the query even if the final results aren't available
841}
842
843/// Shader module creation flags
844bitfield VkShaderModuleCreateFlags {
845}
846
847/// Shader creation flags
848bitfield VkShaderCreateFlags {
849}
850
851/// Event creation flags
852bitfield VkEventCreateFlags {
853}
854
855/// Command buffer creation flags
856bitfield VkCmdBufferCreateFlags {
857}
858
859/// Command buffer optimization flags
860bitfield VkCmdBufferOptimizeFlags {
861 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT = 0x00000001,
862 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT = 0x00000002,
863 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT = 0x00000004,
864 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT = 0x00000008,
865 VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT = 0x00000010, /// Only one call to the secondary command buffer will exist at any given time
866}
867
868/// Pipeline statistics flags
869bitfield VkQueryPipelineStatisticFlags {
Jesse Hallae38f732015-11-19 21:32:50 -0800870 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, /// Optional
871 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, /// Optional
872 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, /// Optional
873 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, /// Optional
874 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, /// Optional
875 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, /// Optional
876 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, /// Optional
877 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, /// Optional
878 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, /// Optional
879 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, /// Optional
880 VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, /// Optional
Jesse Halld27f6aa2015-08-15 17:58:48 -0700881}
882
883/// Memory mapping flags
884bitfield VkMemoryMapFlags {
885}
886
887/// Bitfield of image aspects
888bitfield VkImageAspectFlags {
889 VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
890 VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
891 VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
892 VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
893}
894
895/// Sparse memory bind flags
896bitfield VkSparseMemoryBindFlags {
897 VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT = 0x00000001, /// Replicate the first 64 KiB memory block to the entire bind rage
898}
899
900/// Sparse image memory requirements flags
901bitfield VkSparseImageFormatFlags {
902 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT = 0x00000001, /// Image uses a single miptail region for all array slices
903 VK_SPARSE_IMAGE_FMT_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.
904 VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT = 0x00000004, /// Image uses a non-standard sparse block size
905}
906
907/// Pipeline stages
908bitfield VkPipelineStageFlags {
909 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, /// Before subsequent commands are processed
910 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, /// Draw/DispatchIndirect command fetch
911 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, /// Vertex/index fetch
912 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, /// Vertex shading
Jesse Hallae38f732015-11-19 21:32:50 -0800913 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, /// Tessellation control shading
914 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, /// Tessellation evaluation shading
Jesse Halld27f6aa2015-08-15 17:58:48 -0700915 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, /// Geometry shading
916 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, /// Fragment shading
917 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, /// Early fragment (depth/stencil) tests
918 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, /// Late fragment (depth/stencil) tests
919 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, /// Color attachment writes
920 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, /// Compute shading
921 VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, /// Transfer/copy operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700922 VK_PIPELINE_STAGE_HOST_BIT = 0x00002000, /// Indicates host (CPU) is a source/sink of the dependency
Jesse Halld27f6aa2015-08-15 17:58:48 -0700923
924 VK_PIPELINE_STAGE_ALL_GRAPHICS = 0x000007FF, /// All stages of the graphics pipeline
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700925 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00001FFF, /// All graphics, compute, copy, and transition commands
926}
927
928/// Render pass attachment description flags
929bitfield VkAttachmentDescriptionFlags {
930 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 -0700931}
932
933/// Subpass description flags
934bitfield VkSubpassDescriptionFlags {
935 VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT = 0x00000001,
936}
937
938/// Command pool creation flags
939bitfield VkCmdPoolCreateFlags {
940 VK_CMD_POOL_CREATE_TRANSIENT_BIT = 0x00000001, /// Command buffers have a short lifetime
941 VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, /// Command buffers may release their memory individually
942}
943
944/// Command pool reset flags
945bitfield VkCmdPoolResetFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700946 VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the pool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700947}
948
949bitfield VkCmdBufferResetFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700950 VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the buffer
951}
952
953bitfield VkSampleCountFlags {
954 VK_SAMPLE_COUNT_1_BIT = 0x00000001,
955 VK_SAMPLE_COUNT_2_BIT = 0x00000002,
956 VK_SAMPLE_COUNT_4_BIT = 0x00000004,
957 VK_SAMPLE_COUNT_8_BIT = 0x00000008,
958 VK_SAMPLE_COUNT_16_BIT = 0x00000010,
959 VK_SAMPLE_COUNT_32_BIT = 0x00000020,
960 VK_SAMPLE_COUNT_64_BIT = 0x00000040,
961}
962
963bitfield VkStencilFaceFlags {
964 VK_STENCIL_FACE_NONE = 0x00000000, /// No faces
965 VK_STENCIL_FACE_FRONT_BIT = 0x00000001, /// Front face
966 VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face
Jesse Halld27f6aa2015-08-15 17:58:48 -0700967}
968
Michael Lentine88594d72015-11-12 12:49:45 -0800969//////////////////
970// Extensions //
971//////////////////
972
973@extension("VK_EXT_KHR_swapchain")
974bitfield VkSurfaceTransformFlagsKHR {
975 VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
976 VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
977 VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
978 VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
979 VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
980 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
981 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
982 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
983 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
984}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700985
986//////////////////
987// Structures //
988//////////////////
989
990class VkOffset2D {
991 s32 x
992 s32 y
993}
994
995class VkOffset3D {
996 s32 x
997 s32 y
998 s32 z
999}
1000
1001class VkExtent2D {
1002 s32 width
1003 s32 height
1004}
1005
1006class VkExtent3D {
1007 s32 width
1008 s32 height
1009 s32 depth
1010}
1011
1012class VkViewport {
1013 f32 originX
1014 f32 originY
1015 f32 width
1016 f32 height
1017 f32 minDepth
1018 f32 maxDepth
1019}
1020
1021class VkRect2D {
1022 VkOffset2D offset
1023 VkExtent2D extent
1024}
1025
1026class VkRect3D {
1027 VkOffset3D offset
1028 VkExtent3D extent
1029}
1030
1031class VkChannelMapping {
1032 VkChannelSwizzle r
1033 VkChannelSwizzle g
1034 VkChannelSwizzle b
1035 VkChannelSwizzle a
1036}
1037
1038class VkPhysicalDeviceProperties {
1039 u32 apiVersion
1040 u32 driverVersion
1041 u32 vendorId
1042 u32 deviceId
1043 VkPhysicalDeviceType deviceType
1044 char[VK_MAX_PHYSICAL_DEVICE_NAME] deviceName
1045 u8[VK_UUID_LENGTH] pipelineCacheUUID
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001046 VkPhysicalDeviceLimits limits
1047 VkPhysicalDeviceSparseProperties sparseProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07001048}
1049
1050class VkExtensionProperties {
1051 char[VK_MAX_EXTENSION_NAME] extName /// extension name
1052 u32 specVersion /// version of the extension specification implemented
1053}
1054
1055class VkLayerProperties {
1056 char[VK_MAX_EXTENSION_NAME] layerName /// layer name
1057 u32 specVersion /// version of the layer specification implemented
1058 u32 implVersion /// build or release version of the layer's library
Jesse Hallf09c6b12015-08-15 19:54:28 -07001059 char[VK_MAX_DESCRIPTION] description /// Free-form description of the layer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001060}
1061
1062class VkApplicationInfo {
1063 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1064 const void* pNext /// Next structure in chain
1065 const char* pAppName
1066 u32 appVersion
1067 const char* pEngineName
1068 u32 engineVersion
1069 u32 apiVersion
1070}
1071
1072class VkAllocCallbacks {
1073 void* pUserData
1074 PFN_vkAllocFunction pfnAlloc
1075 PFN_vkFreeFunction pfnFree
1076}
1077
1078class VkDeviceQueueCreateInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001079 VkStructureType sStype /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
1080 const void* pNext /// Pointer to next structure
Jesse Halld27f6aa2015-08-15 17:58:48 -07001081 u32 queueFamilyIndex
1082 u32 queueCount
1083}
1084
1085class VkDeviceCreateInfo {
1086 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1087 const void* pNext /// Pointer to next structure
Jesse Hallae38f732015-11-19 21:32:50 -08001088 u32 requestedQueueRecordCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001089 const VkDeviceQueueCreateInfo* pRequestedQueues
1090 u32 layerCount
1091 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
1092 u32 extensionCount
1093 const char* const* ppEnabledExtensionNames
1094 const VkPhysicalDeviceFeatures* pEnabledFeatures
Jesse Halld27f6aa2015-08-15 17:58:48 -07001095}
1096
1097class VkInstanceCreateInfo {
1098 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1099 const void* pNext /// Pointer to next structure
1100 const VkApplicationInfo* pAppInfo
1101 const VkAllocCallbacks* pAllocCb
1102 u32 layerCount
1103 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
1104 u32 extensionCount
1105 const char* const* ppEnabledExtensionNames /// Extension names to be enabled
1106}
1107
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001108class VkQueueFamilyProperties {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001109 VkQueueFlags queueFlags /// Queue flags
1110 u32 queueCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001111 VkBool32 supportsTimestamps
Jesse Halld27f6aa2015-08-15 17:58:48 -07001112}
1113
1114class VkPhysicalDeviceMemoryProperties {
1115 u32 memoryTypeCount
1116 VkMemoryType[VK_MAX_MEMORY_TYPES] memoryTypes
1117 u32 memoryHeapCount
1118 VkMemoryHeap[VK_MAX_MEMORY_HEAPS] memoryHeaps
1119}
1120
1121class VkMemoryAllocInfo {
1122 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1123 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001124 VkDeviceSize allocationSize /// Size of memory allocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001125 u32 memoryTypeIndex /// Index of the of the memory type to allocate from
1126}
1127
1128class VkMemoryRequirements {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001129 VkDeviceSize size /// Specified in bytes
1130 VkDeviceSize alignment /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001131 u32 memoryTypeBits /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1132}
1133
1134class VkSparseImageFormatProperties {
1135 VkImageAspect aspect
1136 VkExtent3D imageGranularity
1137 VkSparseImageFormatFlags flags
1138}
1139
1140class VkSparseImageMemoryRequirements {
1141 VkSparseImageFormatProperties formatProps
1142 u32 imageMipTailStartLOD
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001143 VkDeviceSize imageMipTailSize /// Specified in bytes, must be a multiple of image block size / alignment
1144 VkDeviceSize imageMipTailOffset /// Specified in bytes, must be a multiple of image block size / alignment
1145 VkDeviceSize imageMipTailStride /// Specified in bytes, must be a multiple of image block size / alignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07001146}
1147
1148class VkMemoryType {
1149 VkMemoryPropertyFlags propertyFlags /// Memory properties of this memory type
1150 u32 heapIndex /// Index of the memory heap allocations of this memory type are taken from
1151}
1152
1153class VkMemoryHeap {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001154 VkDeviceSize size /// Available memory in the heap
Jesse Halld27f6aa2015-08-15 17:58:48 -07001155 VkMemoryHeapFlags flags /// Flags for the heap
1156}
1157
1158class VkMappedMemoryRange {
1159 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1160 const void* pNext /// Pointer to next structure
1161 VkDeviceMemory mem /// Mapped memory object
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001162 VkDeviceSize offset /// Offset within the mapped memory the range starts from
1163 VkDeviceSize size /// Size of the range within the mapped memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07001164}
1165
1166class VkFormatProperties {
1167 VkFormatFeatureFlags linearTilingFeatures /// Format features in case of linear tiling
1168 VkFormatFeatureFlags optimalTilingFeatures /// Format features in case of optimal tiling
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001169 VkFormatFeatureFlags bufferFeatures /// Format features supported by buffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001170}
1171
1172class VkImageFormatProperties {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001173 VkExtent3D maxExtent /// max image dimensions for this resource type
1174 u32 maxMipLevels /// max number of mipmap levels for this resource type
1175 u32 maxArraySize /// max array size for this resource type
1176 VkSampleCountFlags sampleCounts /// supported sample counts for this resource type
1177 VkDeviceSize maxResourceSize /// max size (in bytes) of this resource type
1178}
1179
1180class VkDescriptorBufferInfo {
1181 VkBuffer buffer /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
1182 VkDeviceSize offset /// Base offset from buffer start in bytes to update in the descriptor set.
1183 VkDeviceSize range /// Size in bytes of the buffer resource for this descriptor update.
Jesse Halld27f6aa2015-08-15 17:58:48 -07001184}
1185
1186class VkDescriptorInfo {
1187 VkBufferView bufferView /// Buffer view to write to the descriptor (in case it's a buffer descriptor, otherwise should be VK_NULL_HANDLE)
1188 VkSampler sampler /// Sampler to write to the descriptor (in case it's a SAMPLER or COMBINED_IMAGE_SAMPLER descriptor, otherwise should be VK_NULL_HANDLE)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001189 VkImageView imageView /// Image view to write to the descriptor (in case it's a SAMPLED_IMAGE, STORAGE_IMAGE, COMBINED_IMAGE_SAMPLER, or INPUT_ATTACHMENT descriptor, otherwise should be VK_NULL_HANDLE)
1190 VkImageLayout imageLayout /// Layout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE)
1191 VkDescriptorBufferInfo bufferInfo /// Raw buffer, size and offset for UNIFORM_BUFFER[_DYNAMIC] or STORAGE_BUFFER[_DYNAMIC] descriptor types. Ignored otherwise.
Jesse Halld27f6aa2015-08-15 17:58:48 -07001192}
1193
1194class VkWriteDescriptorSet {
1195 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1196 const void* pNext /// Pointer to next structure
1197 VkDescriptorSet destSet /// Destination descriptor set
1198 u32 destBinding /// Binding within the destination descriptor set to write
1199 u32 destArrayElement /// Array element within the destination binding to write
1200 u32 count /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
1201 VkDescriptorType descriptorType /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
1202 const VkDescriptorInfo* pDescriptors /// Array of info structures describing the descriptors to write
1203}
1204
1205class VkCopyDescriptorSet {
1206 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1207 const void* pNext /// Pointer to next structure
1208 VkDescriptorSet srcSet /// Source descriptor set
1209 u32 srcBinding /// Binding within the source descriptor set to copy from
1210 u32 srcArrayElement /// Array element within the source binding to copy from
1211 VkDescriptorSet destSet /// Destination descriptor set
1212 u32 destBinding /// Binding within the destination descriptor set to copy to
1213 u32 destArrayElement /// Array element within the destination binding to copy to
1214 u32 count /// Number of descriptors to copy
1215}
1216
1217class VkBufferCreateInfo {
1218 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1219 const void* pNext /// Pointer to next structure.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001220 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001221 VkBufferUsageFlags usage /// Buffer usage flags
1222 VkBufferCreateFlags flags /// Buffer creation flags
1223 VkSharingMode sharingMode
1224 u32 queueFamilyCount
1225 const u32* pQueueFamilyIndices
1226}
1227
1228class VkBufferViewCreateInfo {
1229 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1230 const void* pNext /// Pointer to next structure.
1231 VkBuffer buffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001232 VkFormat format /// Optionally specifies format of elements
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001233 VkDeviceSize offset /// Specified in bytes
1234 VkDeviceSize range /// View size specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001235}
1236
1237class VkImageSubresource {
1238 VkImageAspect aspect
1239 u32 mipLevel
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001240 u32 arrayLayer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001241}
1242
1243class VkImageSubresourceRange {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001244 VkImageAspectFlags aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001245 u32 baseMipLevel
1246 u32 mipLevels
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001247 u32 baseArrayLayer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001248 u32 arraySize
1249}
1250
1251class VkMemoryBarrier {
1252 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1253 const void* pNext /// Pointer to next structure.
1254 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1255 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1256}
1257
1258class VkBufferMemoryBarrier {
1259 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1260 const void* pNext /// Pointer to next structure.
1261 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1262 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1263 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
1264 u32 destQueueFamilyIndex /// Queue family to transition ownership to
1265 VkBuffer buffer /// Buffer to sync
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001266 VkDeviceSize offset /// Offset within the buffer to sync
1267 VkDeviceSize size /// Amount of bytes to sync
Jesse Halld27f6aa2015-08-15 17:58:48 -07001268}
1269
1270class VkImageMemoryBarrier {
1271 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1272 const void* pNext /// Pointer to next structure.
1273 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1274 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1275 VkImageLayout oldLayout /// Current layout of the image
1276 VkImageLayout newLayout /// New layout to transition the image to
1277 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
1278 u32 destQueueFamilyIndex /// Queue family to transition ownership to
1279 VkImage image /// Image to sync
1280 VkImageSubresourceRange subresourceRange /// Subresource range to sync
1281}
1282
1283class VkImageCreateInfo {
1284 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1285 const void* pNext /// Pointer to next structure.
1286 VkImageType imageType
1287 VkFormat format
1288 VkExtent3D extent
1289 u32 mipLevels
1290 u32 arraySize
1291 u32 samples
1292 VkImageTiling tiling
1293 VkImageUsageFlags usage /// Image usage flags
1294 VkImageCreateFlags flags /// Image creation flags
1295 VkSharingMode sharingMode /// Cross-queue-family sharing mode
1296 u32 queueFamilyCount /// Number of queue families to share across
1297 const u32* pQueueFamilyIndices /// Array of queue family indices to share across
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001298 VkImageLayout initialLayout /// Initial image layout for all subresources
Jesse Halld27f6aa2015-08-15 17:58:48 -07001299}
1300
1301class VkSubresourceLayout {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001302 VkDeviceSize offset /// Specified in bytes
1303 VkDeviceSize size /// Specified in bytes
1304 VkDeviceSize rowPitch /// Specified in bytes
1305 VkDeviceSize depthPitch /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001306}
1307
1308class VkImageViewCreateInfo {
1309 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1310 const void* pNext /// Pointer to next structure
1311 VkImage image
1312 VkImageViewType viewType
1313 VkFormat format
1314 VkChannelMapping channels
1315 VkImageSubresourceRange subresourceRange
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001316 VkImageViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001317}
1318
1319class VkBufferCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001320 VkDeviceSize srcOffset /// Specified in bytes
1321 VkDeviceSize destOffset /// Specified in bytes
1322 VkDeviceSize copySize /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001323}
1324
1325class VkSparseMemoryBindInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001326 VkDeviceSize rangeOffset /// Specified in bytes
1327 VkDeviceSize rangeSize /// Specified in bytes
1328 VkDeviceSize memOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001329 VkDeviceMemory mem
1330 VkSparseMemoryBindFlags flags
1331}
1332
1333class VkSparseImageMemoryBindInfo {
1334 VkImageSubresource subresource
1335 VkOffset3D offset
1336 VkExtent3D extent
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001337 VkDeviceSize memOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001338 VkDeviceMemory mem
1339 VkSparseMemoryBindFlags flags
1340}
1341
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001342class VkImageSubresourceCopy {
1343 VkImageAspect aspect
1344 u32 mipLevel
1345 u32 arrayLayer
1346 u32 arraySize
1347}
1348
Jesse Halld27f6aa2015-08-15 17:58:48 -07001349class VkImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001350 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001351 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001352 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001353 VkOffset3D destOffset /// Specified in pixels for both compressed and uncompressed images
1354 VkExtent3D extent /// Specified in pixels for both compressed and uncompressed images
1355}
1356
1357class VkImageBlit {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001358 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001359 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
1360 VkExtent3D srcExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001361 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001362 VkOffset3D destOffset /// Specified in pixels for both compressed and uncompressed images
1363 VkExtent3D destExtent /// Specified in pixels for both compressed and uncompressed images
1364}
1365
1366class VkBufferImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001367 VkDeviceSize bufferOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001368 u32 bufferRowLength /// Specified in texels
1369 u32 bufferImageHeight
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001370 VkImageSubresourceCopy imageSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001371 VkOffset3D imageOffset /// Specified in pixels for both compressed and uncompressed images
1372 VkExtent3D imageExtent /// Specified in pixels for both compressed and uncompressed images
1373}
1374
1375class VkImageResolve {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001376 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001377 VkOffset3D srcOffset
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001378 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001379 VkOffset3D destOffset
1380 VkExtent3D extent
1381}
1382
1383class VkShaderModuleCreateInfo {
1384 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1385 const void* pNext /// Pointer to next structure
1386 platform.size_t codeSize /// Specified in bytes
1387 const void* pCode /// Binary code of size codeSize
1388 VkShaderModuleCreateFlags flags /// Reserved
1389}
1390
1391class VkShaderCreateInfo {
1392 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
1393 const void* pNext /// Pointer to next structure
1394 VkShaderModule module /// Module containing entry point
1395 const char* pName /// Null-terminated entry point name
1396 VkShaderCreateFlags flags /// Reserved
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001397 VkShaderStage stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001398}
1399
1400class VkDescriptorSetLayoutBinding {
1401 VkDescriptorType descriptorType /// Type of the descriptors in this binding
1402 u32 arraySize /// Number of descriptors in this binding
1403 VkShaderStageFlags stageFlags /// Shader stages this binding is visible to
1404 const VkSampler* pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
1405}
1406
1407class VkDescriptorSetLayoutCreateInfo {
1408 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1409 const void* pNext /// Pointer to next structure
1410 u32 count /// Number of bindings in the descriptor set layout
1411 const VkDescriptorSetLayoutBinding* pBinding /// Array of descriptor set layout bindings
1412}
1413
1414class VkDescriptorTypeCount {
1415 VkDescriptorType type
1416 u32 count
1417}
1418
1419class VkDescriptorPoolCreateInfo {
1420 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1421 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001422 VkDescriptorPoolUsage poolUsage
1423 u32 maxSets
Jesse Halld27f6aa2015-08-15 17:58:48 -07001424 u32 count
1425 const VkDescriptorTypeCount* pTypeCount
1426}
1427
1428class VkSpecializationMapEntry {
1429 u32 constantId /// The SpecConstant ID specified in the BIL
1430 platform.size_t size /// Size in bytes of the SpecConstant
1431 u32 offset /// Offset of the value in the data block
1432}
1433
1434class VkSpecializationInfo {
1435 u32 mapEntryCount /// Number of entries in the map
1436 const VkSpecializationMapEntry* pMap /// Array of map entries
1437 platform.size_t dataSize /// Size in bytes of pData
1438 const void* pData /// Pointer to SpecConstant data
1439}
1440
1441class VkPipelineShaderStageCreateInfo {
1442 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1443 const void* pNext /// Pointer to next structure
1444 VkShaderStage stage
1445 VkShader shader
1446 const VkSpecializationInfo* pSpecializationInfo
1447}
1448
1449class VkComputePipelineCreateInfo {
1450 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1451 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001452 VkPipelineShaderStageCreateInfo stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001453 VkPipelineCreateFlags flags /// Pipeline creation flags
1454 VkPipelineLayout layout /// Interface layout of the pipeline
1455 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
1456 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
1457}
1458
1459class VkVertexInputBindingDescription {
1460 u32 binding /// Vertex buffer binding id
1461 u32 strideInBytes /// Distance between vertices in bytes (0 = no advancement)
1462 VkVertexInputStepRate stepRate /// Rate at which binding is incremented
1463}
1464
1465class VkVertexInputAttributeDescription {
1466 u32 location /// location of the shader vertex attrib
1467 u32 binding /// Vertex buffer binding id
1468 VkFormat format /// format of source data
1469 u32 offsetInBytes /// Offset of first element in bytes from base of vertex
1470}
1471
1472class VkPipelineVertexInputStateCreateInfo {
1473 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
1474 const void* pNext /// Pointer to next structure
1475 u32 bindingCount /// number of bindings
1476 const VkVertexInputBindingDescription* pVertexBindingDescriptions
1477 u32 attributeCount /// number of attributes
1478 const VkVertexInputAttributeDescription* pVertexAttributeDescriptions
1479}
1480
1481class VkPipelineInputAssemblyStateCreateInfo {
1482 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
1483 const void* pNext /// Pointer to next structure
1484 VkPrimitiveTopology topology
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001485 VkBool32 primitiveRestartEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001486}
1487
1488class VkPipelineTessellationStateCreateInfo {
1489 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
1490 const void* pNext /// Pointer to next structure
1491 u32 patchControlPoints
1492}
1493
1494class VkPipelineViewportStateCreateInfo {
1495 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
1496 const void* pNext /// Pointer to next structure
1497 u32 viewportCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001498 const VkViewport* pViewports
1499 u32 scissorCount
1500 const VkRect2D* pScissors
Jesse Halld27f6aa2015-08-15 17:58:48 -07001501}
1502
1503class VkPipelineRasterStateCreateInfo {
1504 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
1505 const void* pNext /// Pointer to next structure
Jesse Hallae38f732015-11-19 21:32:50 -08001506 VkBool32 depthClampEnable
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001507 VkBool32 rasterizerDiscardEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001508 VkFillMode fillMode /// optional (GL45)
1509 VkCullMode cullMode
1510 VkFrontFace frontFace
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001511 VkBool32 depthBiasEnable
1512 f32 depthBias
1513 f32 depthBiasClamp
1514 f32 slopeScaledDepthBias
1515 f32 lineWidth
Jesse Halld27f6aa2015-08-15 17:58:48 -07001516}
1517
1518class VkPipelineMultisampleStateCreateInfo {
1519 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
1520 const void* pNext /// Pointer to next structure
1521 u32 rasterSamples /// Number of samples used for rasterization
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001522 VkBool32 sampleShadingEnable /// optional (GL45)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001523 f32 minSampleShading /// optional (GL45)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001524 const VkSampleMask* pSampleMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001525}
1526
1527class VkPipelineColorBlendAttachmentState {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001528 VkBool32 blendEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001529 VkBlend srcBlendColor
1530 VkBlend destBlendColor
1531 VkBlendOp blendOpColor
1532 VkBlend srcBlendAlpha
1533 VkBlend destBlendAlpha
1534 VkBlendOp blendOpAlpha
1535 VkChannelFlags channelWriteMask
1536}
1537
1538class VkPipelineColorBlendStateCreateInfo {
1539 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
1540 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001541 VkBool32 alphaToCoverageEnable
1542 VkBool32 alphaToOneEnable
1543 VkBool32 logicOpEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001544 VkLogicOp logicOp
1545 u32 attachmentCount /// # of pAttachments
1546 const VkPipelineColorBlendAttachmentState* pAttachments
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001547 f32[4] blendConst
Jesse Halld27f6aa2015-08-15 17:58:48 -07001548}
1549
1550class VkStencilOpState {
1551 VkStencilOp stencilFailOp
1552 VkStencilOp stencilPassOp
1553 VkStencilOp stencilDepthFailOp
1554 VkCompareOp stencilCompareOp
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001555 u32 stencilCompareMask
1556 u32 stencilWriteMask
1557 u32 stencilReference
Jesse Halld27f6aa2015-08-15 17:58:48 -07001558}
1559
1560class VkPipelineDepthStencilStateCreateInfo {
1561 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
1562 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001563 VkBool32 depthTestEnable
1564 VkBool32 depthWriteEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001565 VkCompareOp depthCompareOp
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001566 VkBool32 depthBoundsTestEnable /// optional (depth_bounds_test)
1567 VkBool32 stencilTestEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001568 VkStencilOpState front
1569 VkStencilOpState back
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001570 f32 minDepthBounds
1571 f32 maxDepthBounds
1572}
1573
1574class VkPipelineDynamicStateCreateInfo {
1575 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
1576 const void* pNext /// Pointer to next structure
1577 u32 dynamicStateCount
1578 const VkDynamicState* pDynamicStates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001579}
1580
1581class VkGraphicsPipelineCreateInfo {
1582 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
1583 const void* pNext /// Pointer to next structure
1584 u32 stageCount
1585 const VkPipelineShaderStageCreateInfo* pStages /// One entry for each active shader stage
1586 const VkPipelineVertexInputStateCreateInfo* pVertexInputState
1587 const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState
1588 const VkPipelineTessellationStateCreateInfo* pTessellationState
1589 const VkPipelineViewportStateCreateInfo* pViewportState
1590 const VkPipelineRasterStateCreateInfo* pRasterState
1591 const VkPipelineMultisampleStateCreateInfo* pMultisampleState
1592 const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState
1593 const VkPipelineColorBlendStateCreateInfo* pColorBlendState
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001594 const VkPipelineDynamicStateCreateInfo* pDynamicState
Jesse Halld27f6aa2015-08-15 17:58:48 -07001595 VkPipelineCreateFlags flags /// Pipeline creation flags
1596 VkPipelineLayout layout /// Interface layout of the pipeline
1597 VkRenderPass renderPass
1598 u32 subpass
1599 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
1600 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
1601}
1602
1603class VkPipelineCacheCreateInfo {
1604 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
1605 const void* pNext /// Pointer to next structure
1606 platform.size_t initialSize /// Size of initial data to populate cache, in bytes
1607 const void* initialData /// Initial data to populate cache
1608 platform.size_t maxSize /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
1609}
1610
1611class VkPushConstantRange {
1612 VkShaderStageFlags stageFlags /// Which stages use the range
1613 u32 start /// Start of the range, in bytes
1614 u32 length /// Length of the range, in bytes
1615}
1616
1617class VkPipelineLayoutCreateInfo {
1618 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
1619 const void* pNext /// Pointer to next structure
1620 u32 descriptorSetCount /// Number of descriptor sets interfaced by the pipeline
1621 const VkDescriptorSetLayout* pSetLayouts /// Array of <setCount> number of descriptor set layout objects defining the layout of the
1622 u32 pushConstantRangeCount /// Number of push-constant ranges used by the pipeline
1623 const VkPushConstantRange* pPushConstantRanges /// Array of pushConstantRangeCount number of ranges used by various shader stages
1624}
1625
1626class VkSamplerCreateInfo {
1627 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
1628 const void* pNext /// Pointer to next structure
1629 VkTexFilter magFilter /// Filter mode for magnification
1630 VkTexFilter minFilter /// Filter mode for minifiation
1631 VkTexMipmapMode mipMode /// Mipmap selection mode
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001632 VkTexAddressMode addressModeU
1633 VkTexAddressMode addressModeV
1634 VkTexAddressMode addressModeW
Jesse Halld27f6aa2015-08-15 17:58:48 -07001635 f32 mipLodBias
1636 f32 maxAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001637 VkBool32 compareEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001638 VkCompareOp compareOp
1639 f32 minLod
1640 f32 maxLod
1641 VkBorderColor borderColor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001642 VkBool32 unnormalizedCoordinates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001643}
1644
1645class VkCmdPoolCreateInfo {
1646 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO
1647 const void* pNext /// Pointer to next structure
1648 u32 queueFamilyIndex
1649 VkCmdPoolCreateFlags flags /// Command pool creation flags
1650}
1651
1652class VkCmdBufferCreateInfo {
1653 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
1654 const void* pNext /// Pointer to next structure
1655 VkCmdPool cmdPool
1656 VkCmdBufferLevel level
1657 VkCmdBufferCreateFlags flags /// Command buffer creation flags
1658}
1659
1660class VkCmdBufferBeginInfo {
1661 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
1662 const void* pNext /// Pointer to next structure
1663 VkCmdBufferOptimizeFlags flags /// Command buffer optimization flags
1664 VkRenderPass renderPass /// Render pass for secondary command buffers
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001665 u32 subpass
Jesse Halld27f6aa2015-08-15 17:58:48 -07001666 VkFramebuffer framebuffer /// Framebuffer for secondary command buffers
1667}
1668
1669class VkRenderPassBeginInfo {
1670 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
1671 const void* pNext /// Pointer to next structure
1672 VkRenderPass renderPass
1673 VkFramebuffer framebuffer
1674 VkRect2D renderArea
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001675 u32 clearValueCount
1676 const VkClearValue* pClearValues
Jesse Halld27f6aa2015-08-15 17:58:48 -07001677}
1678
1679@union
1680/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
1681class VkClearColorValue {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001682 f32[4] float32
1683 s32[4] int32
1684 u32[4] uint32
Jesse Halld27f6aa2015-08-15 17:58:48 -07001685}
1686
1687class VkClearDepthStencilValue {
1688 f32 depth
1689 u32 stencil
1690}
1691
1692@union
1693/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
1694class VkClearValue {
1695 VkClearColorValue color
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001696 VkClearDepthStencilValue depthStencil
Jesse Halld27f6aa2015-08-15 17:58:48 -07001697}
1698
Jesse Hallae38f732015-11-19 21:32:50 -08001699class VkClearAttachment {
1700 VkImageAspectFlags aspectMask
1701 u32 colorAttachment
1702 VkClearValue clearValue
1703}
1704
Jesse Halld27f6aa2015-08-15 17:58:48 -07001705class VkAttachmentDescription {
1706 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION
1707 const void* pNext /// Pointer to next structure
1708 VkFormat format
1709 u32 samples
1710 VkAttachmentLoadOp loadOp /// Load op for color or depth data
1711 VkAttachmentStoreOp storeOp /// Store op for color or depth data
1712 VkAttachmentLoadOp stencilLoadOp /// Load op for stencil data
1713 VkAttachmentStoreOp stencilStoreOp /// Store op for stencil data
1714 VkImageLayout initialLayout
1715 VkImageLayout finalLayout
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001716 VkAttachmentDescriptionFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001717}
1718
1719class VkAttachmentReference {
1720 u32 attachment
1721 VkImageLayout layout
1722}
1723
1724class VkSubpassDescription {
1725 VkStructureType sType /// Must be VK_STRUCTURE_SUBPASS_DESCRIPTION
1726 const void* pNext /// Pointer to next structure
1727 VkPipelineBindPoint pipelineBindPoint /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
1728 VkSubpassDescriptionFlags flags
1729 u32 inputCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001730 const VkAttachmentReference* pInputAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001731 u32 colorCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001732 const VkAttachmentReference* pColorAttachments
1733 const VkAttachmentReference* pResolveAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001734 VkAttachmentReference depthStencilAttachment
1735 u32 preserveCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001736 const VkAttachmentReference* pPreserveAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001737}
1738
1739class VkSubpassDependency {
1740 VkStructureType sType /// Must be VK_STRUCTURE_SUBPASS_DEPENDENCY
1741 const void* pNext /// Pointer to next structure
1742 u32 srcSubpass
1743 u32 destSubpass
1744 VkPipelineStageFlags srcStageMask
1745 VkPipelineStageFlags destStageMask
1746 VkMemoryOutputFlags outputMask
1747 VkMemoryInputFlags inputMask
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001748 VkBool32 byRegion
Jesse Halld27f6aa2015-08-15 17:58:48 -07001749}
1750
1751class VkRenderPassCreateInfo {
1752 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
1753 const void* pNext /// Pointer to next structure
1754 u32 attachmentCount
1755 const VkAttachmentDescription* pAttachments
1756 u32 subpassCount
1757 const VkSubpassDescription* pSubpasses
1758 u32 dependencyCount
1759 const VkSubpassDependency* pDependencies
1760}
1761
1762class VkEventCreateInfo {
1763 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
1764 const void* pNext /// Pointer to next structure
1765 VkEventCreateFlags flags /// Event creation flags
1766}
1767
1768class VkFenceCreateInfo {
1769 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
1770 const void* pNext /// Pointer to next structure
1771 VkFenceCreateFlags flags /// Fence creation flags
1772}
1773
1774class VkPhysicalDeviceFeatures {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001775 VkBool32 robustBufferAccess /// out of bounds buffer accesses are well defined
1776 VkBool32 fullDrawIndexUint32 /// full 32-bit range of indices for indexed draw calls
1777 VkBool32 imageCubeArray /// image views which are arrays of cube maps
1778 VkBool32 independentBlend /// blending operations are controlled per-attachment
1779 VkBool32 geometryShader /// geometry stage
1780 VkBool32 tessellationShader /// tessellation control and evaluation stage
1781 VkBool32 sampleRateShading /// per-sample shading and interpolation
1782 VkBool32 dualSourceBlend /// blend operations which take two sources
1783 VkBool32 logicOp /// logic operations
1784 VkBool32 multiDrawIndirect /// multi draw indirect
Jesse Hallae38f732015-11-19 21:32:50 -08001785 VkBool32 depthClamp /// depth clamping
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001786 VkBool32 depthBiasClamp /// depth bias clamping
1787 VkBool32 fillModeNonSolid /// point and wireframe fill modes
1788 VkBool32 depthBounds /// depth bounds test
1789 VkBool32 wideLines /// lines with width greater than 1
1790 VkBool32 largePoints /// points with size greater than 1
1791 VkBool32 textureCompressionETC2 /// ETC texture compression formats
1792 VkBool32 textureCompressionASTC_LDR /// ASTC LDR texture compression formats
1793 VkBool32 textureCompressionBC /// BC1-7 texture compressed formats
1794 VkBool32 occlusionQueryNonConservative /// non-conservative (exact) occlusion queries
1795 VkBool32 pipelineStatisticsQuery /// pipeline statistics query
1796 VkBool32 vertexSideEffects /// storage buffers and images in vertex stage
1797 VkBool32 tessellationSideEffects /// storage buffers and images in tessellation stage
1798 VkBool32 geometrySideEffects /// storage buffers and images in geometry stage
1799 VkBool32 fragmentSideEffects /// storage buffers and images in fragment stage
1800 VkBool32 shaderTessellationPointSize /// tessellation stage can export point size
1801 VkBool32 shaderGeometryPointSize /// geometry stage can export point size
1802 VkBool32 shaderImageGatherExtended /// texture gather with run-time values and independent offsets
1803 VkBool32 shaderStorageImageExtendedFormats /// the extended set of formats can be used for storage images
1804 VkBool32 shaderStorageImageMultisample /// multisample images can be used for storage images
1805 VkBool32 shaderUniformBufferArrayDynamicIndexing /// arrays of uniform buffers can be accessed with dynamically uniform indices
1806 VkBool32 shaderSampledImageArrayDynamicIndexing /// arrays of sampled images can be accessed with dynamically uniform indices
1807 VkBool32 shaderStorageBufferArrayDynamicIndexing /// arrays of storage buffers can be accessed with dynamically uniform indices
1808 VkBool32 shaderStorageImageArrayDynamicIndexing /// arrays of storage images can be accessed with dynamically uniform indices
1809 VkBool32 shaderClipDistance /// clip distance in shaders
1810 VkBool32 shaderCullDistance /// cull distance in shaders
1811 VkBool32 shaderFloat64 /// 64-bit floats (doubles) in shaders
1812 VkBool32 shaderInt64 /// 64-bit integers in shaders
1813 VkBool32 shaderInt16 /// 16-bit integers in shaders
1814 VkBool32 shaderResourceResidency /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
1815 VkBool32 shaderResourceMinLOD /// shader can use texture operations that specify minimum resource LOD
1816 VkBool32 alphaToOne /// The fragment alpha channel can be forced to maximum representable alpha value
1817 VkBool32 sparseBinding /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
1818 VkBool32 sparseResidencyBuffer /// Sparse resources support: GPU can access partially resident buffers
1819 VkBool32 sparseResidencyImage2D /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
1820 VkBool32 sparseResidencyImage3D /// Sparse resources support: GPU can access partially resident 3D images
1821 VkBool32 sparseResidency2Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
1822 VkBool32 sparseResidency4Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
1823 VkBool32 sparseResidency8Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
1824 VkBool32 sparseResidency16Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
1825 VkBool32 sparseResidencyAliased /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001826}
1827
1828class VkPhysicalDeviceLimits {
1829 /// resource maximum sizes
1830 u32 maxImageDimension1D /// max 1D image dimension
1831 u32 maxImageDimension2D /// max 2D image dimension
1832 u32 maxImageDimension3D /// max 3D image dimension
1833 u32 maxImageDimensionCube /// max cubemap image dimension
1834 u32 maxImageArrayLayers /// max layers for image arrays
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001835 VkSampleCountFlags sampleCounts /// sample counts supported for all images supporting rendering and sampling
Jesse Halld27f6aa2015-08-15 17:58:48 -07001836 u32 maxTexelBufferSize /// max texel buffer size (bytes)
1837 u32 maxUniformBufferSize /// max uniform buffer size (bytes)
1838 u32 maxStorageBufferSize /// max storage buffer size (bytes)
1839 u32 maxPushConstantsSize /// max size of the push constants pool (bytes)
1840 /// memory limits
1841 u32 maxMemoryAllocationCount /// max number of device memory allocations supported
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001842 VkDeviceSize bufferImageGranularity /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
1843 VkDeviceSize sparseAddressSpaceSize /// Total address space available for sparse allocations (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001844 /// descriptor set limits
1845 u32 maxBoundDescriptorSets /// max number of descriptors sets that can be bound to a pipeline
1846 u32 maxDescriptorSets /// max number of allocated descriptor sets
1847 u32 maxPerStageDescriptorSamplers /// max num of samplers allowed per-stage in a descriptor set
1848 u32 maxPerStageDescriptorUniformBuffers /// max num of uniform buffers allowed per-stage in a descriptor set
1849 u32 maxPerStageDescriptorStorageBuffers /// max num of storage buffers allowed per-stage in a descriptor set
1850 u32 maxPerStageDescriptorSampledImages /// max num of sampled images allowed per-stage in a descriptor set
1851 u32 maxPerStageDescriptorStorageImages /// max num of storage images allowed per-stage in a descriptor set
1852 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set
1853 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001854 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07001855 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001856 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07001857 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set
1858 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set
1859 /// vertex stage limits
1860 u32 maxVertexInputAttributes /// max num of vertex input attribute slots
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001861 u32 maxVertexInputBindings /// max num of vertex input binding slots
Jesse Halld27f6aa2015-08-15 17:58:48 -07001862 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset
1863 u32 maxVertexInputBindingStride /// max vertex input binding stride
1864 u32 maxVertexOutputComponents /// max num of output components written by vertex shader
1865 /// tessellation control stage limits
Jesse Hallae38f732015-11-19 21:32:50 -08001866 u32 maxTessellationGenLevel /// max level supported by tess primitive generator
1867 u32 maxTessellationPatchSize /// max patch size (vertices)
1868 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS
1869 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
1870 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS
1871 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS
1872 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES
1873 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES
Jesse Halld27f6aa2015-08-15 17:58:48 -07001874 /// geometry stage limits
1875 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader
1876 u32 maxGeometryInputComponents /// max num of input components read in geometry stage
1877 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage
1878 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage
1879 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage
1880 /// fragment stage limits
1881 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage
1882 u32 maxFragmentOutputBuffers /// max num of output buffers written in fragment stage
1883 u32 maxFragmentDualSourceBuffers /// max num of output buffers written when using dual source blending
1884 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers
1885 /// compute stage limits
1886 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes)
1887 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z)
1888 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group
1889 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z)
1890
1891 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y
1892 u32 subTexelPrecisionBits /// num bits of subtexel precision
1893 u32 mipmapPrecisionBits /// num bits of mipmap precision
1894
1895 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices)
1896 u32 maxDrawIndirectInstanceCount /// max instance count for indirect draw calls
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001897 VkBool32 primitiveRestartForPatches /// is primitive restart supported for PATCHES
Jesse Halld27f6aa2015-08-15 17:58:48 -07001898
1899 f32 maxSamplerLodBias /// max absolute sampler level of detail bias
1900 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy
1901
1902 u32 maxViewports /// max number of active viewports
Jesse Halld27f6aa2015-08-15 17:58:48 -07001903 u32[2] maxViewportDimensions /// max viewport dimensions (x,y)
1904 f32[2] viewportBoundsRange /// viewport bounds range (min,max)
1905 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport
1906
1907 u32 minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes)
Jesse Hallf09c6b12015-08-15 19:54:28 -07001908 u32 minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001909 u32 minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes)
1910 u32 minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes)
1911
1912 u32 minTexelOffset /// min texel offset for OpTextureSampleOffset
1913 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset
1914 u32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset
1915 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset
1916 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset
1917 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset
1918 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset
1919
1920 u32 maxFramebufferWidth /// max width for a framebuffer
1921 u32 maxFramebufferHeight /// max height for a framebuffer
1922 u32 maxFramebufferLayers /// max layer count for a layered framebuffer
1923 u32 maxFramebufferColorSamples /// max color sample count for a framebuffer
1924 u32 maxFramebufferDepthSamples /// max depth sample count for a framebuffer
1925 u32 maxFramebufferStencilSamples /// max stencil sample count for a framebuffer
1926 u32 maxColorAttachments /// max num of framebuffer color attachments
1927
1928 u32 maxSampledImageColorSamples /// max num of color samples for a non-integer sampled image
1929 u32 maxSampledImageDepthSamples /// max num of depth/stencil samples for a sampled image
1930 u32 maxSampledImageIntegerSamples /// max num of samples supported for an integer image
1931 u32 maxStorageImageSamples /// max num of samples for a storage image
1932 u32 maxSampleMaskWords /// max num of sample mask words
1933
1934 u64 timestampFrequency /// 1/clock_tick_granularity for timestamp queries
1935
1936 u32 maxClipDistances /// max number of clip distances
1937 u32 maxCullDistances /// max number of cull distances
1938 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping
1939
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001940 f32[2] pointSizeRange /// range (min,max) of supported point sizes
1941 f32[2] lineWidthRange /// range (min,max) of supported line widths
Jesse Halld27f6aa2015-08-15 17:58:48 -07001942 f32 pointSizeGranularity /// granularity of supported point sizes
1943 f32 lineWidthGranularity /// granularity of supported line widths
1944}
1945
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001946class VkPhysicalDeviceSparseProperties {
1947 VkBool32 residencyStandard2DBlockShape /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
1948 VkBool32 residencyStandard2DMSBlockShape /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
1949 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
1950 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
1951 VkBool32 residencyNonResident /// Sparse resources support: GPU can safely access non-resident regions of a resource, read values from read-write resources are undefined
1952 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
1953}
1954
Jesse Halld27f6aa2015-08-15 17:58:48 -07001955class VkSemaphoreCreateInfo {
1956 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
1957 const void* pNext /// Pointer to next structure
1958 VkSemaphoreCreateFlags flags /// Semaphore creation flags
1959}
1960
1961class VkQueryPoolCreateInfo {
1962 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
1963 const void* pNext /// Pointer to next structure
1964 VkQueryType queryType
1965 u32 slots
1966 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional
1967}
1968
1969class VkFramebufferCreateInfo {
1970 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
1971 const void* pNext /// Pointer to next structure
1972 VkRenderPass renderPass
1973 u32 attachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001974 const VkImageView* pAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001975 u32 width
1976 u32 height
1977 u32 layers
1978}
1979
1980class VkDrawIndirectCmd {
1981 u32 vertexCount
1982 u32 instanceCount
1983 u32 firstVertex
1984 u32 firstInstance
1985}
1986
1987class VkDrawIndexedIndirectCmd {
1988 u32 indexCount
1989 u32 instanceCount
1990 u32 firstIndex
1991 s32 vertexOffset
1992 u32 firstInstance
1993}
1994
1995class VkDispatchIndirectCmd {
1996 u32 x
1997 u32 y
1998 u32 z
1999}
2000
Michael Lentine88594d72015-11-12 12:49:45 -08002001//////////////////
2002// Extensions //
2003//////////////////
2004
2005@extension("VK_EXT_KHR_device_swapchain")
2006class VkSurfacePropertiesKHR {
2007 u32 minImageCount
2008 u32 maxImageCount
2009 VkExtent2D currentExtent
2010 VkExtent2D minImageExtent
2011 VkExtent2D maxImageExtent
2012 VkSurfaceTransformFlagsKHR supportedTransforms
2013 VkSurfaceTransformKHR currentTransform
2014 u32 maxImageArraySize
2015 VkImageUsageFlags supportedUsageFlags
2016}
2017
2018@extension("VK_EXT_KHR_device_swapchain")
2019class VkSurfaceFormatKHR {
2020 VkFormat format
2021 VkColorSpaceKHR colorSpace
2022}
2023
2024@extension("VK_EXT_KHR_device_swapchain")
2025class VkSwapchainCreateInfoKHR {
2026 VkStructureType sType
2027 const void* pNext
2028 const VkSurfaceDescriptionKHR* pSurfaceDescription
2029 u32 minImageCount
2030 VkFormat imageFormat
2031 VkColorSpaceKHR imageColorSpace
2032 VkExtent2D imageExtent
2033 VkImageUsageFlags imageUsageFlags
2034 VkSurfaceTransformKHR preTransform
2035 u32 imageArraySize
2036 VkSharingMode sharingMode
2037 u32 queueFamilyCount
2038 const u32* pQueueFamilyIndices
2039 VkPresentModeKHR presentMode
2040 VkSwapchainKHR oldSwapchain
2041 VkBool32 clipped
2042}
2043
2044@extension("VK_EXT_KHR_device_swapchain")
2045class VkPresentInfoKHR {
2046 VkStructureType sType
2047 const void* pNext
2048 u32 swapchainCount
2049 const VkSwapchainKHR* swapchains
2050 const u32* imageIndices
2051}
2052
2053@extension("VK_EXT_KHR_swapchain")
2054class VkSurfaceDescriptionKHR {
2055 VkStructureType sType
2056 const void* pNext
2057}
2058
2059@extension("VK_EXT_KHR_swapchain")
2060class VkSurfaceDescriptionWindowKHR {
2061 VkStructureType sType
2062 const void* pNext
2063 VkPlatformKHR platform
2064 void* pPlatformHandle
2065 void* pPlatformWindow
2066}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002067
2068////////////////
2069// Commands //
2070////////////////
2071
2072// Function pointers. TODO: add support for function pointers.
2073
2074@external type void* PFN_vkVoidFunction
2075@pfn cmd void vkVoidFunction() {
2076}
2077
2078@external type void* PFN_vkAllocFunction
2079@pfn cmd void* vkAllocFunction(
2080 void* pUserData,
2081 platform.size_t size,
2082 platform.size_t alignment,
2083 VkSystemAllocType allocType) {
2084 return ?
2085}
2086
2087@external type void* PFN_vkFreeFunction
2088@pfn cmd void vkFreeFunction(
2089 void* pUserData,
2090 void* pMem) {
2091}
2092
2093
2094// Global functions
2095
2096@threadSafety("system")
2097cmd VkResult vkCreateInstance(
2098 const VkInstanceCreateInfo* pCreateInfo,
2099 VkInstance* pInstance) {
2100 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2101
2102 instance := ?
2103 pInstance[0] = instance
2104 State.Instances[instance] = new!InstanceObject()
2105
2106 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.layerCount]
2107 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.extensionCount]
2108
2109 return ?
2110}
2111
2112@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002113cmd void vkDestroyInstance(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002114 VkInstance instance) {
2115 instanceObject := GetInstance(instance)
2116
2117 State.Instances[instance] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002118}
2119
2120@threadSafety("system")
2121cmd VkResult vkEnumeratePhysicalDevices(
2122 VkInstance instance,
2123 u32* pPhysicalDeviceCount,
2124 VkPhysicalDevice* pPhysicalDevices) {
2125 instanceObject := GetInstance(instance)
2126
2127 physicalDeviceCount := as!u32(?)
2128 pPhysicalDeviceCount[0] = physicalDeviceCount
2129 physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2130
2131 for i in (0 .. physicalDeviceCount) {
2132 physicalDevice := ?
2133 physicalDevices[i] = physicalDevice
2134 if !(physicalDevice in State.PhysicalDevices) {
2135 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2136 }
2137 }
2138
2139 return ?
2140}
2141
2142cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2143 VkDevice device,
2144 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002145 if device != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002146 device := GetDevice(device)
2147 }
2148
2149 return ?
2150}
2151
2152cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2153 VkInstance instance,
2154 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002155 if instance != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002156 instanceObject := GetInstance(instance)
2157 }
2158
2159 return ?
2160}
2161
2162cmd VkResult vkGetPhysicalDeviceProperties(
2163 VkPhysicalDevice physicalDevice,
2164 VkPhysicalDeviceProperties* pProperties) {
2165 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2166
2167 properties := ?
2168 pProperties[0] = properties
2169
2170 return ?
2171}
2172
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002173cmd VkResult vkGetPhysicalDeviceQueueFamilyProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002174 VkPhysicalDevice physicalDevice,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002175 u32* pCount,
2176 VkQueueFamilyProperties* pQueueFamilyProperties) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002177 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002178 // TODO: Figure out how to express fetch-count-or-properties
2179 // This version fails 'apic validate' with 'fence not allowed in
2180 // *semantic.Branch'. Other attempts have failed with the same or other
2181 // errors.
2182 // if pQueueFamilyProperties != null {
2183 // queuesProperties := pQueueFamilyProperties[0:pCount[0]]
2184 // for i in (0 .. pCount[0]) {
2185 // queueProperties := as!VkQueueFamilyProperties(?)
2186 // queuesProperties[i] = queueProperties
2187 // }
2188 // } else {
2189 // count := ?
2190 // pCount[0] = count
2191 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002192 return ?
2193}
2194
2195cmd VkResult vkGetPhysicalDeviceMemoryProperties(
2196 VkPhysicalDevice physicalDevice,
2197 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
2198 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2199
2200 memoryProperties := ?
2201 pMemoryProperties[0] = memoryProperties
2202
2203 return ?
2204}
2205
2206cmd VkResult vkGetPhysicalDeviceFeatures(
2207 VkPhysicalDevice physicalDevice,
2208 VkPhysicalDeviceFeatures* pFeatures) {
2209 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2210
2211 features := ?
2212 pFeatures[0] = features
2213
2214 return ?
2215}
2216
2217cmd VkResult vkGetPhysicalDeviceFormatProperties(
2218 VkPhysicalDevice physicalDevice,
2219 VkFormat format,
2220 VkFormatProperties* pFormatProperties) {
2221 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2222
2223 formatProperties := ?
2224 pFormatProperties[0] = formatProperties
2225
2226 return ?
2227}
2228
2229cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
2230 VkPhysicalDevice physicalDevice,
2231 VkFormat format,
2232 VkImageType type,
2233 VkImageTiling tiling,
2234 VkImageUsageFlags usage,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002235 VkImageCreateFlags flags,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002236 VkImageFormatProperties* pImageFormatProperties) {
2237 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2238
2239 imageFormatProperties := ?
2240 pImageFormatProperties[0] = imageFormatProperties
2241
2242 return ?
2243}
2244
Jesse Halld27f6aa2015-08-15 17:58:48 -07002245
2246// Device functions
2247
2248@threadSafety("system")
2249cmd VkResult vkCreateDevice(
2250 VkPhysicalDevice physicalDevice,
2251 const VkDeviceCreateInfo* pCreateInfo,
2252 VkDevice* pDevice) {
2253 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2254 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2255
2256 device := ?
2257 pDevice[0] = device
2258 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2259
2260 return ?
2261}
2262
2263@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002264cmd void vkDestroyDevice(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002265 VkDevice device) {
2266 deviceObject := GetDevice(device)
2267
2268 State.Devices[device] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002269}
2270
2271
2272// Extension discovery functions
2273
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002274cmd VkResult vkEnumerateInstanceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002275 u32* pCount,
2276 VkLayerProperties* pProperties) {
2277 count := as!u32(?)
2278 pCount[0] = count
2279
2280 properties := pProperties[0:count]
2281 for i in (0 .. count) {
2282 property := ?
2283 properties[i] = property
2284 }
2285
2286 return ?
2287}
2288
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002289cmd VkResult vkEnumerateInstanceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002290 const char* pLayerName,
2291 u32* pCount,
2292 VkExtensionProperties* pProperties) {
2293 count := as!u32(?)
2294 pCount[0] = count
2295
2296 properties := pProperties[0:count]
2297 for i in (0 .. count) {
2298 property := ?
2299 properties[i] = property
2300 }
2301
2302 return ?
2303}
2304
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002305cmd VkResult vkEnumerateDeviceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002306 VkPhysicalDevice physicalDevice,
2307 u32* pCount,
2308 VkLayerProperties* pProperties) {
2309 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2310 count := as!u32(?)
2311 pCount[0] = count
2312
2313 properties := pProperties[0:count]
2314 for i in (0 .. count) {
2315 property := ?
2316 properties[i] = property
2317 }
2318
2319 return ?
2320}
2321
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002322cmd VkResult vkEnumerateDeviceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002323 VkPhysicalDevice physicalDevice,
2324 const char* pLayerName,
2325 u32* pCount,
2326 VkExtensionProperties* pProperties) {
2327 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2328
2329 count := as!u32(?)
2330 pCount[0] = count
2331
2332 properties := pProperties[0:count]
2333 for i in (0 .. count) {
2334 property := ?
2335 properties[i] = property
2336 }
2337
2338 return ?
2339}
2340
2341
2342// Queue functions
2343
2344@threadSafety("system")
2345cmd VkResult vkGetDeviceQueue(
2346 VkDevice device,
2347 u32 queueFamilyIndex,
2348 u32 queueIndex,
2349 VkQueue* pQueue) {
2350 deviceObject := GetDevice(device)
2351
2352 queue := ?
2353 pQueue[0] = queue
2354
2355 if !(queue in State.Queues) {
2356 State.Queues[queue] = new!QueueObject(device: device)
2357 }
2358
2359 return ?
2360}
2361
2362@threadSafety("app")
2363cmd VkResult vkQueueSubmit(
2364 VkQueue queue,
2365 u32 cmdBufferCount,
2366 const VkCmdBuffer* pCmdBuffers,
2367 VkFence fence) {
2368 queueObject := GetQueue(queue)
2369
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002370 if fence != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002371 fenceObject := GetFence(fence)
2372 assert(fenceObject.device == queueObject.device)
2373 }
2374
2375 cmdBuffers := pCmdBuffers[0:cmdBufferCount]
2376 for i in (0 .. cmdBufferCount) {
2377 cmdBuffer := cmdBuffers[i]
2378 cmdBufferObject := GetCmdBuffer(cmdBuffer)
2379 assert(cmdBufferObject.device == queueObject.device)
2380
2381 validate("QueueCheck", cmdBufferObject.queueFlags in queueObject.flags,
2382 "vkQueueSubmit: enqueued cmdBuffer requires missing queue capabilities.")
2383 }
2384
2385 return ?
2386}
2387
2388@threadSafety("system")
2389cmd VkResult vkQueueWaitIdle(
2390 VkQueue queue) {
2391 queueObject := GetQueue(queue)
2392
2393 return ?
2394}
2395
2396@threadSafety("system")
2397cmd VkResult vkDeviceWaitIdle(
2398 VkDevice device) {
2399 deviceObject := GetDevice(device)
2400
2401 return ?
2402}
2403
2404
2405// Memory functions
2406
2407@threadSafety("system")
2408cmd VkResult vkAllocMemory(
2409 VkDevice device,
2410 const VkMemoryAllocInfo* pAllocInfo,
2411 VkDeviceMemory* pMem) {
2412 assert(pAllocInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
2413 deviceObject := GetDevice(device)
2414
2415 mem := ?
2416 pMem[0] = mem
2417 State.DeviceMemories[mem] = new!DeviceMemoryObject(
2418 device: device,
2419 allocationSize: pAllocInfo[0].allocationSize)
2420
2421 return ?
2422}
2423
2424@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002425cmd void vkFreeMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002426 VkDevice device,
2427 VkDeviceMemory mem) {
2428 deviceObject := GetDevice(device)
2429 memObject := GetDeviceMemory(mem)
2430 assert(memObject.device == device)
2431
2432 // Check that no objects are still bound before freeing.
2433 validate("MemoryCheck", len(memObject.boundObjects) == 0,
2434 "vkFreeMemory: objects still bound")
2435 validate("MemoryCheck", len(memObject.boundCommandBuffers) == 0,
2436 "vkFreeMemory: cmdBuffers still bound")
2437 State.DeviceMemories[mem] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002438}
2439
2440@threadSafety("app")
2441cmd VkResult vkMapMemory(
2442 VkDevice device,
2443 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002444 VkDeviceSize offset,
2445 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002446 VkMemoryMapFlags flags,
2447 void** ppData) {
2448 deviceObject := GetDevice(device)
2449 memObject := GetDeviceMemory(mem)
2450 assert(memObject.device == device)
2451
2452 assert(flags == as!VkMemoryMapFlags(0))
2453 assert((offset + size) <= memObject.allocationSize)
2454
2455 return ?
2456}
2457
2458@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002459cmd void vkUnmapMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002460 VkDevice device,
2461 VkDeviceMemory mem) {
2462 deviceObject := GetDevice(device)
2463 memObject := GetDeviceMemory(mem)
2464 assert(memObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002465}
2466
2467cmd VkResult vkFlushMappedMemoryRanges(
2468 VkDevice device,
2469 u32 memRangeCount
2470 const VkMappedMemoryRange* pMemRanges) {
2471 deviceObject := GetDevice(device)
2472
2473 memRanges := pMemRanges[0:memRangeCount]
2474 for i in (0 .. memRangeCount) {
2475 memRange := memRanges[i]
2476 memObject := GetDeviceMemory(memRange.mem)
2477 assert(memObject.device == device)
2478 assert((memRange.offset + memRange.size) <= memObject.allocationSize)
2479 }
2480
2481 return ?
2482}
2483
2484cmd VkResult vkInvalidateMappedMemoryRanges(
2485 VkDevice device,
2486 u32 memRangeCount,
2487 const VkMappedMemoryRange* pMemRanges) {
2488 deviceObject := GetDevice(device)
2489
2490 memRanges := pMemRanges[0:memRangeCount]
2491 for i in (0 .. memRangeCount) {
2492 memRange := memRanges[i]
2493 memObject := GetDeviceMemory(memRange.mem)
2494 assert(memObject.device == device)
2495 assert((memRange.offset + memRange.size) <= memObject.allocationSize)
2496 }
2497
2498 return ?
2499}
2500
2501
2502// Memory management API functions
2503
2504cmd VkResult vkGetDeviceMemoryCommitment(
2505 VkDevice device,
2506 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002507 VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002508 deviceObject := GetDevice(device)
2509
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002510 if memory != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002511 memoryObject := GetDeviceMemory(memory)
2512 assert(memoryObject.device == device)
2513 }
2514
2515 committedMemoryInBytes := ?
2516 pCommittedMemoryInBytes[0] = committedMemoryInBytes
2517
2518 return ?
2519}
2520
2521cmd VkResult vkGetBufferMemoryRequirements(
2522 VkDevice device,
2523 VkBuffer buffer,
2524 VkMemoryRequirements* pMemoryRequirements) {
2525 deviceObject := GetDevice(device)
2526 bufferObject := GetBuffer(buffer)
2527 assert(bufferObject.device == device)
2528
2529 return ?
2530}
2531
2532cmd VkResult vkBindBufferMemory(
2533 VkDevice device,
2534 VkBuffer buffer,
2535 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002536 VkDeviceSize memOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002537 deviceObject := GetDevice(device)
2538 bufferObject := GetBuffer(buffer)
2539 assert(bufferObject.device == device)
2540
2541 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002542 if bufferObject.mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002543 memObject := GetDeviceMemory(bufferObject.mem)
2544 memObject.boundObjects[as!u64(buffer)] = null
2545 }
2546
2547 // Bind buffer to given memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002548 if mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002549 memObject := GetDeviceMemory(mem)
2550 assert(memObject.device == device)
2551 memObject.boundObjects[as!u64(buffer)] = memOffset
2552 }
2553 bufferObject.mem = mem
2554 bufferObject.memOffset = memOffset
2555
2556 return ?
2557}
2558
2559cmd VkResult vkGetImageMemoryRequirements(
2560 VkDevice device,
2561 VkImage image,
2562 VkMemoryRequirements* pMemoryRequirements) {
2563 deviceObject := GetDevice(device)
2564 imageObject := GetImage(image)
2565 assert(imageObject.device == device)
2566
2567 return ?
2568}
2569
2570cmd VkResult vkBindImageMemory(
2571 VkDevice device,
2572 VkImage image,
2573 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002574 VkDeviceSize memOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002575 deviceObject := GetDevice(device)
2576 imageObject := GetImage(image)
2577 assert(imageObject.device == device)
2578
2579 // Unbind image from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002580 if imageObject.mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002581 memObject := GetDeviceMemory(imageObject.mem)
2582 memObject.boundObjects[as!u64(image)] = null
2583 }
2584
2585 // Bind image to given memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002586 if mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002587 memObject := GetDeviceMemory(mem)
2588 assert(memObject.device == device)
2589 memObject.boundObjects[as!u64(image)] = memOffset
2590 }
2591 imageObject.mem = mem
2592 imageObject.memOffset = memOffset
2593
2594 return ?
2595}
2596
2597cmd VkResult vkGetImageSparseMemoryRequirements(
2598 VkDevice device,
2599 VkImage image,
2600 u32* pNumRequirements,
2601 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
2602 deviceObject := GetDevice(device)
2603 imageObject := GetImage(image)
2604 assert(imageObject.device == device)
2605
2606 return ?
2607}
2608
2609cmd VkResult vkGetPhysicalDeviceSparseImageFormatProperties(
2610 VkPhysicalDevice physicalDevice,
2611 VkFormat format,
2612 VkImageType type,
2613 u32 samples,
2614 VkImageUsageFlags usage,
2615 VkImageTiling tiling,
2616 u32* pNumProperties,
2617 VkSparseImageFormatProperties* pProperties) {
2618 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2619
2620 return ?
2621}
2622
2623cmd VkResult vkQueueBindSparseBufferMemory(
2624 VkQueue queue,
2625 VkBuffer buffer,
2626 u32 numBindings,
2627 const VkSparseMemoryBindInfo* pBindInfo) {
2628 queueObject := GetQueue(queue)
2629 bufferObject := GetBuffer(buffer)
2630 assert(bufferObject.device == queueObject.device)
2631
2632 return ?
2633}
2634
2635cmd VkResult vkQueueBindSparseImageOpaqueMemory(
2636 VkQueue queue,
2637 VkImage image,
2638 u32 numBindings,
2639 const VkSparseMemoryBindInfo* pBindInfo) {
2640 queueObject := GetQueue(queue)
2641 imageObject := GetImage(image)
2642 assert(imageObject.device == queueObject.device)
2643
2644 return ?
2645}
2646
2647
2648cmd VkResult vkQueueBindSparseImageMemory(
2649 VkQueue queue,
2650 VkImage image,
2651 u32 numBindings,
2652 const VkSparseImageMemoryBindInfo* pBindInfo) {
2653 queueObject := GetQueue(queue)
2654 imageObject := GetImage(image)
2655
2656 return ?
2657}
2658
2659
2660// Fence functions
2661
2662@threadSafety("system")
2663cmd VkResult vkCreateFence(
2664 VkDevice device,
2665 const VkFenceCreateInfo* pCreateInfo,
2666 VkFence* pFence) {
2667 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2668 deviceObject := GetDevice(device)
2669
2670 fence := ?
2671 pFence[0] = fence
2672 State.Fences[fence] = new!FenceObject(
2673 device: device, signaled: (pCreateInfo.flags == VK_FENCE_CREATE_SIGNALED_BIT))
2674
2675 return ?
2676}
2677
2678@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002679cmd void vkDestroyFence(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002680 VkDevice device,
2681 VkFence fence) {
2682 deviceObject := GetDevice(device)
2683 fenceObject := GetFence(fence)
2684 assert(fenceObject.device == device)
2685
2686 State.Fences[fence] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002687}
2688
2689@threadSafety("system")
2690cmd VkResult vkResetFences(
2691 VkDevice device,
2692 u32 fenceCount,
2693 const VkFence* pFences) {
2694 deviceObject := GetDevice(device)
2695
2696 fences := pFences[0:fenceCount]
2697 for i in (0 .. fenceCount) {
2698 fence := fences[i]
2699 fenceObject := GetFence(fence)
2700 assert(fenceObject.device == device)
2701 fenceObject.signaled = false
2702 }
2703
2704 return ?
2705}
2706
2707@threadSafety("system")
2708cmd VkResult vkGetFenceStatus(
2709 VkDevice device,
2710 VkFence fence) {
2711 deviceObject := GetDevice(device)
2712 fenceObject := GetFence(fence)
2713 assert(fenceObject.device == device)
2714
2715 return ?
2716}
2717
2718@threadSafety("system")
2719cmd VkResult vkWaitForFences(
2720 VkDevice device,
2721 u32 fenceCount,
2722 const VkFence* pFences,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002723 VkBool32 waitAll,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002724 u64 timeout) { /// timeout in nanoseconds
2725 deviceObject := GetDevice(device)
2726
2727 fences := pFences[0:fenceCount]
2728 for i in (0 .. fenceCount) {
2729 fence := fences[i]
2730 fenceObject := GetFence(fence)
2731 assert(fenceObject.device == device)
2732 }
2733
2734 return ?
2735}
2736
2737
2738// Queue semaphore functions
2739
2740@threadSafety("system")
2741cmd VkResult vkCreateSemaphore(
2742 VkDevice device,
2743 const VkSemaphoreCreateInfo* pCreateInfo,
2744 VkSemaphore* pSemaphore) {
2745 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
2746 deviceObject := GetDevice(device)
2747
2748 semaphore := ?
2749 pSemaphore[0] = semaphore
2750 State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
2751
2752 return ?
2753}
2754
2755@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002756cmd void vkDestroySemaphore(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002757 VkDevice device,
2758 VkSemaphore semaphore) {
2759 deviceObject := GetDevice(device)
2760 semaphoreObject := GetSemaphore(semaphore)
2761 assert(semaphoreObject.device == device)
2762
2763 State.Semaphores[semaphore] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002764}
2765
2766@threadSafety("app")
2767cmd VkResult vkQueueSignalSemaphore(
2768 VkQueue queue,
2769 VkSemaphore semaphore) {
2770 queueObject := GetQueue(queue)
2771 semaphoreObject := GetSemaphore(semaphore)
2772 assert(queueObject.device == semaphoreObject.device)
2773
2774 return ?
2775}
2776
2777@threadSafety("system")
2778cmd VkResult vkQueueWaitSemaphore(
2779 VkQueue queue,
2780 VkSemaphore semaphore) {
2781 queueObject := GetQueue(queue)
2782 semaphoreObject := GetSemaphore(semaphore)
2783 assert(queueObject.device == semaphoreObject.device)
2784
2785 return ?
2786}
2787
2788
2789// Event functions
2790
2791@threadSafety("system")
2792cmd VkResult vkCreateEvent(
2793 VkDevice device,
2794 const VkEventCreateInfo* pCreateInfo,
2795 VkEvent* pEvent) {
2796 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
2797 deviceObject := GetDevice(device)
2798
2799 event := ?
2800 pEvent[0] = event
2801 State.Events[event] = new!EventObject(device: device)
2802
2803 return ?
2804}
2805
2806@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002807cmd void vkDestroyEvent(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002808 VkDevice device,
2809 VkEvent event) {
2810 deviceObject := GetDevice(device)
2811 eventObject := GetEvent(event)
2812 assert(eventObject.device == device)
2813
2814 State.Events[event] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002815}
2816
2817@threadSafety("system")
2818cmd VkResult vkGetEventStatus(
2819 VkDevice device,
2820 VkEvent event) {
2821 deviceObject := GetDevice(device)
2822 eventObject := GetEvent(event)
2823 assert(eventObject.device == device)
2824
2825 return ?
2826}
2827
2828@threadSafety("system")
2829cmd VkResult vkSetEvent(
2830 VkDevice device,
2831 VkEvent event) {
2832 deviceObject := GetDevice(device)
2833 eventObject := GetEvent(event)
2834 assert(eventObject.device == device)
2835
2836 return ?
2837}
2838
2839@threadSafety("system")
2840cmd VkResult vkResetEvent(
2841 VkDevice device,
2842 VkEvent event) {
2843 deviceObject := GetDevice(device)
2844 eventObject := GetEvent(event)
2845 assert(eventObject.device == device)
2846
2847 return ?
2848}
2849
2850
2851// Query functions
2852
2853@threadSafety("system")
2854cmd VkResult vkCreateQueryPool(
2855 VkDevice device,
2856 const VkQueryPoolCreateInfo* pCreateInfo,
2857 VkQueryPool* pQueryPool) {
2858 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
2859 deviceObject := GetDevice(device)
2860
2861 queryPool := ?
2862 pQueryPool[0] = queryPool
2863 State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
2864
2865 return ?
2866}
2867
2868@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002869cmd void vkDestroyQueryPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002870 VkDevice device,
2871 VkQueryPool queryPool) {
2872 deviceObject := GetDevice(device)
2873 queryPoolObject := GetQueryPool(queryPool)
2874 assert(queryPoolObject.device == device)
2875
2876 State.QueryPools[queryPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002877}
2878
2879@threadSafety("system")
2880cmd VkResult vkGetQueryPoolResults(
2881 VkDevice device,
2882 VkQueryPool queryPool,
2883 u32 startQuery,
2884 u32 queryCount,
2885 platform.size_t* pDataSize,
2886 void* pData,
2887 VkQueryResultFlags flags) {
2888 deviceObject := GetDevice(device)
2889 queryPoolObject := GetQueryPool(queryPool)
2890 assert(queryPoolObject.device == device)
2891
2892 dataSize := ?
2893 pDataSize[0] = dataSize
2894 data := pData[0:dataSize]
2895
2896 return ?
2897}
2898
2899// Buffer functions
2900
2901@threadSafety("system")
2902cmd VkResult vkCreateBuffer(
2903 VkDevice device,
2904 const VkBufferCreateInfo* pCreateInfo,
2905 VkBuffer* pBuffer) {
2906 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
2907 deviceObject := GetDevice(device)
2908
2909 buffer := ?
2910 pBuffer[0] = buffer
2911 State.Buffers[buffer] = new!BufferObject(device: device)
2912
2913 return ?
2914}
2915
2916@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002917cmd void vkDestroyBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002918 VkDevice device,
2919 VkBuffer buffer) {
2920 deviceObject := GetDevice(device)
2921 bufferObject := GetBuffer(buffer)
2922 assert(bufferObject.device == device)
2923
2924 assert(bufferObject.mem == 0)
2925 State.Buffers[buffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002926}
2927
2928
2929// Buffer view functions
2930
2931@threadSafety("system")
2932cmd VkResult vkCreateBufferView(
2933 VkDevice device,
2934 const VkBufferViewCreateInfo* pCreateInfo,
2935 VkBufferView* pView) {
2936 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
2937 deviceObject := GetDevice(device)
2938
2939 bufferObject := GetBuffer(pCreateInfo.buffer)
2940 assert(bufferObject.device == device)
2941
2942 view := ?
2943 pView[0] = view
2944 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
2945
2946 return ?
2947}
2948
2949@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002950cmd void vkDestroyBufferView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002951 VkDevice device,
2952 VkBufferView bufferView) {
2953 deviceObject := GetDevice(device)
2954 bufferViewObject := GetBufferView(bufferView)
2955 assert(bufferViewObject.device == device)
2956
2957 State.BufferViews[bufferView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002958}
2959
2960
2961// Image functions
2962
2963@threadSafety("system")
2964cmd VkResult vkCreateImage(
2965 VkDevice device,
2966 const VkImageCreateInfo* pCreateInfo,
2967 VkImage* pImage) {
2968 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
2969 deviceObject := GetDevice(device)
2970
2971 image := ?
2972 pImage[0] = image
2973 State.Images[image] = new!ImageObject(device: device)
2974
2975 return ?
2976}
2977
2978@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002979cmd void vkDestroyImage(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002980 VkDevice device,
2981 VkImage image) {
2982 deviceObject := GetDevice(device)
2983 imageObject := GetImage(image)
2984 assert(imageObject.device == device)
2985
2986 assert(imageObject.mem == 0)
2987 State.Images[image] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002988}
2989
2990cmd VkResult vkGetImageSubresourceLayout(
2991 VkDevice device,
2992 VkImage image,
2993 const VkImageSubresource* pSubresource,
2994 VkSubresourceLayout* pLayout) {
2995 deviceObject := GetDevice(device)
2996 imageObject := GetImage(image)
2997 assert(imageObject.device == device)
2998
2999 return ?
3000}
3001
3002
3003// Image view functions
3004
3005@threadSafety("system")
3006cmd VkResult vkCreateImageView(
3007 VkDevice device,
3008 const VkImageViewCreateInfo* pCreateInfo,
3009 VkImageView* pView) {
3010 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3011 deviceObject := GetDevice(device)
3012
3013 imageObject := GetImage(pCreateInfo.image)
3014 assert(imageObject.device == device)
3015
3016 view := ?
3017 pView[0] = view
3018 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
3019
3020 return ?
3021}
3022
3023@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003024cmd void vkDestroyImageView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003025 VkDevice device,
3026 VkImageView imageView) {
3027 deviceObject := GetDevice(device)
3028 imageViewObject := GetImageView(imageView)
3029 assert(imageViewObject.device == device)
3030
3031 State.ImageViews[imageView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003032}
3033
3034
3035// Shader functions
3036
3037cmd VkResult vkCreateShaderModule(
3038 VkDevice device,
3039 const VkShaderModuleCreateInfo* pCreateInfo,
3040 VkShaderModule* pShaderModule) {
3041 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3042 deviceObject := GetDevice(device)
3043
3044 shaderModule := ?
3045 pShaderModule[0] = shaderModule
3046 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3047
3048 return ?
3049}
3050
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003051cmd void vkDestroyShaderModule(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003052 VkDevice device,
3053 VkShaderModule shaderModule) {
3054 deviceObject := GetDevice(device)
3055 shaderModuleObject := GetShaderModule(shaderModule)
3056 assert(shaderModuleObject.device == device)
3057
3058 State.ShaderModules[shaderModule] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003059}
3060
3061@threadSafety("system")
3062cmd VkResult vkCreateShader(
3063 VkDevice device,
3064 const VkShaderCreateInfo* pCreateInfo,
3065 VkShader* pShader) {
3066 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
3067 deviceObject := GetDevice(device)
3068
3069 shader := ?
3070 pShader[0] = shader
3071 State.Shaders[shader] = new!ShaderObject(device: device)
3072
3073 return ?
3074}
3075
3076@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003077cmd void vkDestroyShader(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003078 VkDevice device,
3079 VkShader shader) {
3080 deviceObject := GetDevice(device)
3081 shaderObject := GetShader(shader)
3082 assert(shaderObject.device == device)
3083
3084 State.Shaders[shader] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003085}
3086
3087
3088// Pipeline functions
3089
3090cmd VkResult vkCreatePipelineCache(
3091 VkDevice device,
3092 const VkPipelineCacheCreateInfo* pCreateInfo,
3093 VkPipelineCache* pPipelineCache) {
3094 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3095 deviceObject := GetDevice(device)
3096
3097 pipelineCache := ?
3098 pPipelineCache[0] = pipelineCache
3099 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3100
3101 return ?
3102}
3103
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003104cmd void vkDestroyPipelineCache(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003105 VkDevice device,
3106 VkPipelineCache pipelineCache) {
3107 deviceObject := GetDevice(device)
3108 pipelineCacheObject := GetPipelineCache(pipelineCache)
3109 assert(pipelineCacheObject.device == device)
3110
3111 State.PipelineCaches[pipelineCache] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003112}
3113
3114cmd platform.size_t vkGetPipelineCacheSize(
3115 VkDevice device,
3116 VkPipelineCache pipelineCache) {
3117 deviceObject := GetDevice(device)
3118 pipelineCacheObject := GetPipelineCache(pipelineCache)
3119 assert(pipelineCacheObject.device == device)
3120
3121 return ?
3122}
3123
3124cmd VkResult vkGetPipelineCacheData(
3125 VkDevice device,
3126 VkPipelineCache pipelineCache,
3127 void* pData) {
3128 deviceObject := GetDevice(device)
3129 pipelineCacheObject := GetPipelineCache(pipelineCache)
3130 assert(pipelineCacheObject.device == device)
3131
3132 return ?
3133}
3134
3135cmd VkResult vkMergePipelineCaches(
3136 VkDevice device,
3137 VkPipelineCache destCache,
3138 u32 srcCacheCount,
3139 const VkPipelineCache* pSrcCaches) {
3140 deviceObject := GetDevice(device)
3141 destCacheObject := GetPipelineCache(destCache)
3142 assert(destCacheObject.device == device)
3143
3144 srcCaches := pSrcCaches[0:srcCacheCount]
3145 for i in (0 .. srcCacheCount) {
3146 srcCache := srcCaches[i]
3147 srcCacheObject := GetPipelineCache(srcCache)
3148 assert(srcCacheObject.device == device)
3149 }
3150
3151 return ?
3152}
3153
3154cmd VkResult vkCreateGraphicsPipelines(
3155 VkDevice device,
3156 VkPipelineCache pipelineCache,
3157 u32 count,
3158 const VkGraphicsPipelineCreateInfo* pCreateInfos,
3159 VkPipeline* pPipelines) {
3160 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003161 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003162 pipelineCacheObject := GetPipelineCache(pipelineCache)
3163 assert(pipelineCacheObject.device == device)
3164 }
3165
3166 createInfos := pCreateInfos[0:count]
3167 pipelines := pPipelines[0:count]
3168 for i in (0 .. count) {
3169 pipeline := ?
3170 pipelines[i] = pipeline
3171 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3172 }
3173
3174 return ?
3175}
3176
3177cmd VkResult vkCreateComputePipelines(
3178 VkDevice device,
3179 VkPipelineCache pipelineCache,
3180 u32 count,
3181 const VkComputePipelineCreateInfo* pCreateInfos,
3182 VkPipeline* pPipelines) {
3183 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003184 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003185 pipelineCacheObject := GetPipelineCache(pipelineCache)
3186 assert(pipelineCacheObject.device == device)
3187 }
3188
3189 createInfos := pCreateInfos[0:count]
3190 pipelines := pPipelines[0:count]
3191 for i in (0 .. count) {
3192 pipeline := ?
3193 pipelines[i] = pipeline
3194 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3195 }
3196
3197 return ?
3198}
3199
3200@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003201cmd void vkDestroyPipeline(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003202 VkDevice device,
3203 VkPipeline pipeline) {
3204 deviceObject := GetDevice(device)
3205 pipelineObjects := GetPipeline(pipeline)
3206 assert(pipelineObjects.device == device)
3207
3208 State.Pipelines[pipeline] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003209}
3210
3211
3212// Pipeline layout functions
3213
3214@threadSafety("system")
3215cmd VkResult vkCreatePipelineLayout(
3216 VkDevice device,
3217 const VkPipelineLayoutCreateInfo* pCreateInfo,
3218 VkPipelineLayout* pPipelineLayout) {
3219 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3220 deviceObject := GetDevice(device)
3221
3222 pipelineLayout := ?
3223 pPipelineLayout[0] = pipelineLayout
3224 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3225
3226 return ?
3227}
3228
3229@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003230cmd void vkDestroyPipelineLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003231 VkDevice device,
3232 VkPipelineLayout pipelineLayout) {
3233 deviceObject := GetDevice(device)
3234 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3235 assert(pipelineLayoutObjects.device == device)
3236
3237 State.PipelineLayouts[pipelineLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003238}
3239
3240
3241// Sampler functions
3242
3243@threadSafety("system")
3244cmd VkResult vkCreateSampler(
3245 VkDevice device,
3246 const VkSamplerCreateInfo* pCreateInfo,
3247 VkSampler* pSampler) {
3248 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3249 deviceObject := GetDevice(device)
3250
3251 sampler := ?
3252 pSampler[0] = sampler
3253 State.Samplers[sampler] = new!SamplerObject(device: device)
3254
3255 return ?
3256}
3257
3258@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003259cmd void vkDestroySampler(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003260 VkDevice device,
3261 VkSampler sampler) {
3262 deviceObject := GetDevice(device)
3263 samplerObject := GetSampler(sampler)
3264 assert(samplerObject.device == device)
3265
3266 State.Samplers[sampler] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003267}
3268
3269
3270// Descriptor set functions
3271
3272@threadSafety("system")
3273cmd VkResult vkCreateDescriptorSetLayout(
3274 VkDevice device,
3275 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
3276 VkDescriptorSetLayout* pSetLayout) {
3277 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3278 deviceObject := GetDevice(device)
3279
3280 setLayout := ?
3281 pSetLayout[0] = setLayout
3282 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3283
3284 return ?
3285}
3286
3287@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003288cmd void vkDestroyDescriptorSetLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003289 VkDevice device,
3290 VkDescriptorSetLayout descriptorSetLayout) {
3291 deviceObject := GetDevice(device)
3292 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3293 assert(descriptorSetLayoutObject.device == device)
3294
3295 State.DescriptorSetLayouts[descriptorSetLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003296}
3297
3298@threadSafety("system")
3299cmd VkResult vkCreateDescriptorPool(
3300 VkDevice device,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003301 const VkDescriptorPoolCreateInfo* pCreateInfo
Jesse Halld27f6aa2015-08-15 17:58:48 -07003302 VkDescriptorPool* pDescriptorPool) {
3303 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3304 deviceObject := GetDevice(device)
3305
3306 descriptorPool := ?
3307 pDescriptorPool[0] = descriptorPool
3308 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3309
3310 return ?
3311}
3312
3313@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003314cmd void vkDestroyDescriptorPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003315 VkDevice device,
3316 VkDescriptorPool descriptorPool) {
3317 deviceObject := GetDevice(device)
3318 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3319 assert(descriptorPoolObject.device == device)
3320
3321 State.DescriptorPools[descriptorPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003322}
3323
3324@threadSafety("app")
3325cmd VkResult vkResetDescriptorPool(
3326 VkDevice device,
3327 VkDescriptorPool descriptorPool) {
3328 deviceObject := GetDevice(device)
3329 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3330 assert(descriptorPoolObject.device == device)
3331
3332 return ?
3333}
3334
3335@threadSafety("app")
3336cmd VkResult vkAllocDescriptorSets(
3337 VkDevice device,
3338 VkDescriptorPool descriptorPool,
3339 VkDescriptorSetUsage setUsage,
3340 u32 count,
3341 const VkDescriptorSetLayout* pSetLayouts,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003342 VkDescriptorSet* pDescriptorSets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003343 deviceObject := GetDevice(device)
3344 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3345
3346 setLayouts := pSetLayouts[0:count]
3347 for i in (0 .. count) {
3348 setLayout := setLayouts[i]
3349 setLayoutObject := GetDescriptorSetLayout(setLayout)
3350 assert(setLayoutObject.device == device)
3351 }
3352
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003353 descriptorSets := pDescriptorSets[0:count]
3354 for i in (0 .. count) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003355 descriptorSet := ?
3356 descriptorSets[i] = descriptorSet
3357 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3358 }
3359
3360 return ?
3361}
3362
Jesse Hallf09c6b12015-08-15 19:54:28 -07003363cmd VkResult vkFreeDescriptorSets(
3364 VkDevice device,
3365 VkDescriptorPool descriptorPool,
3366 u32 count,
3367 const VkDescriptorSet* pDescriptorSets) {
3368 deviceObject := GetDevice(device)
3369 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3370
3371 descriptorSets := pDescriptorSets[0:count]
3372 for i in (0 .. count) {
3373 descriptorSet := descriptorSets[i]
3374 descriptorSetObject := GetDescriptorSet(descriptorSet)
3375 assert(descriptorSetObject.device == device)
3376 State.DescriptorSets[descriptorSet] = null
3377 }
3378
3379 return ?
3380}
3381
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003382cmd void vkUpdateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003383 VkDevice device,
3384 u32 writeCount,
3385 const VkWriteDescriptorSet* pDescriptorWrites,
3386 u32 copyCount,
3387 const VkCopyDescriptorSet* pDescriptorCopies) {
3388 deviceObject := GetDevice(device)
3389
3390 descriptorWrites := pDescriptorWrites[0:writeCount]
3391 for i in (0 .. writeCount) {
3392 descriptorWrite := descriptorWrites[i]
3393 descriptorWriteObject := GetDescriptorSet(descriptorWrite.destSet)
3394 assert(descriptorWriteObject.device == device)
3395 }
3396
3397 descriptorCopies := pDescriptorCopies[0:copyCount]
3398 for i in (0 .. copyCount) {
3399 descriptorCopy := descriptorCopies[i]
3400 descriptorCopyObject := GetDescriptorSet(descriptorCopy.destSet)
3401 assert(descriptorCopyObject.device == device)
3402 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003403}
3404
3405
3406// Framebuffer functions
3407
3408@threadSafety("system")
3409cmd VkResult vkCreateFramebuffer(
3410 VkDevice device,
3411 const VkFramebufferCreateInfo* pCreateInfo,
3412 VkFramebuffer* pFramebuffer) {
3413 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3414 deviceObject := GetDevice(device)
3415
3416 framebuffer := ?
3417 pFramebuffer[0] = framebuffer
3418 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3419
3420 return ?
3421}
3422
3423@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003424cmd void vkDestroyFramebuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003425 VkDevice device,
3426 VkFramebuffer framebuffer) {
3427 deviceObject := GetDevice(device)
3428 framebufferObject := GetFramebuffer(framebuffer)
3429 assert(framebufferObject.device == device)
3430
3431 State.Framebuffers[framebuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003432}
3433
3434
3435// Renderpass functions
3436
3437@threadSafety("system")
3438cmd VkResult vkCreateRenderPass(
3439 VkDevice device,
3440 const VkRenderPassCreateInfo* pCreateInfo,
3441 VkRenderPass* pRenderPass) {
3442 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3443 deviceObject := GetDevice(device)
3444
3445 renderpass := ?
3446 pRenderPass[0] = renderpass
3447 State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3448
3449 return ?
3450}
3451
3452@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003453cmd void vkDestroyRenderPass(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003454 VkDevice device,
3455 VkRenderPass renderPass) {
3456 deviceObject := GetDevice(device)
3457 renderPassObject := GetRenderPass(renderPass)
3458 assert(renderPassObject.device == device)
3459
3460 State.RenderPasses[renderPass] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003461}
3462
3463cmd VkResult vkGetRenderAreaGranularity(
3464 VkDevice device,
3465 VkRenderPass renderPass,
3466 VkExtent2D* pGranularity) {
3467 deviceObject := GetDevice(device)
3468 renderPassObject := GetRenderPass(renderPass)
3469
3470 granularity := ?
3471 pGranularity[0] = granularity
3472
3473 return ?
3474}
3475
3476// Command pool functions
3477
3478cmd VkResult vkCreateCommandPool(
3479 VkDevice device,
3480 const VkCmdPoolCreateInfo* pCreateInfo,
3481 VkCmdPool* pCmdPool) {
3482 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
3483 deviceObject := GetDevice(device)
3484
3485 cmdPool := ?
3486 pCmdPool[0] = cmdPool
3487 State.CmdPools[cmdPool] = new!CmdPoolObject(device: device)
3488
3489 return ?
3490}
3491
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003492cmd void vkDestroyCommandPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003493 VkDevice device,
3494 VkCmdPool cmdPool) {
3495 deviceObject := GetDevice(device)
3496 cmdPoolObject := GetCmdPool(cmdPool)
3497 assert(cmdPoolObject.device == device)
3498
3499 State.CmdPools[cmdPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003500}
3501
3502cmd VkResult vkResetCommandPool(
3503 VkDevice device,
3504 VkCmdPool cmdPool,
3505 VkCmdPoolResetFlags flags) {
3506 deviceObject := GetDevice(device)
3507 cmdPoolObject := GetCmdPool(cmdPool)
3508 assert(cmdPoolObject.device == device)
3509
3510 return ?
3511}
3512
3513// Command buffer functions
3514
3515macro void bindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
3516 memoryObject := GetDeviceMemory(mem)
3517 memoryObject.boundCommandBuffers[cmdBuffer] = cmdBuffer
3518
3519 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3520 cmdBufferObject.boundObjects[as!u64(obj)] = mem
3521}
3522
3523macro void unbindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
3524 memoryObject := GetDeviceMemory(mem)
3525 memoryObject.boundCommandBuffers[cmdBuffer] = null
3526
3527 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3528 cmdBufferObject.boundObjects[as!u64(obj)] = null
3529}
3530
3531@threadSafety("system")
3532cmd VkResult vkCreateCommandBuffer(
3533 VkDevice device,
3534 const VkCmdBufferCreateInfo* pCreateInfo,
3535 VkCmdBuffer* pCmdBuffer) {
3536 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
3537
3538 cmdBuffer := ?
3539 pCmdBuffer[0] = cmdBuffer
3540 State.CmdBuffers[cmdBuffer] = new!CmdBufferObject(device: device)
3541
3542 return ?
3543}
3544
3545@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003546cmd void vkDestroyCommandBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003547 VkDevice device,
3548 VkCmdBuffer commandBuffer) {
3549 deviceObject := GetDevice(device)
3550 cmdBufferObject := GetCmdBuffer(commandBuffer)
3551 assert(cmdBufferObject.device == device)
3552
3553 // TODO: iterate over boundObjects and clear memory bindings
3554 State.CmdBuffers[commandBuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003555}
3556
3557@threadSafety("app")
3558cmd VkResult vkBeginCommandBuffer(
3559 VkCmdBuffer cmdBuffer,
3560 const VkCmdBufferBeginInfo* pBeginInfo) {
3561 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
3562 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3563
3564 // TODO: iterate over boundObjects and clear memory bindings
3565
3566 return ?
3567}
3568
3569@threadSafety("app")
3570cmd VkResult vkEndCommandBuffer(
3571 VkCmdBuffer cmdBuffer) {
3572 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3573
3574 return ?
3575}
3576
3577@threadSafety("app")
3578cmd VkResult vkResetCommandBuffer(
3579 VkCmdBuffer cmdBuffer,
3580 VkCmdBufferResetFlags flags) {
3581 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3582
3583 // TODO: iterate over boundObjects and clear memory bindings
3584
3585 return ?
3586}
3587
3588
3589// Command buffer building functions
3590
3591@threadSafety("app")
3592cmd void vkCmdBindPipeline(
3593 VkCmdBuffer cmdBuffer,
3594 VkPipelineBindPoint pipelineBindPoint,
3595 VkPipeline pipeline) {
3596 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3597 pipelineObject := GetPipeline(pipeline)
3598 assert(cmdBufferObject.device == pipelineObject.device)
3599
3600 queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
3601 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3602 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3603 }
3604 cmdBufferObject.queueFlags = queueFlags
3605}
3606
3607@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003608cmd void vkCmdSetViewport(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003609 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003610 u32 viewportCount,
3611 const VkViewport* pViewports) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003612 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003613 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3614 cmdBufferObject.queueFlags = queueFlags
3615}
3616
3617@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003618cmd void vkCmdSetScissor(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003619 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003620 u32 scissorCount,
3621 const VkRect2D* pScissors) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003622 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003623 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3624 cmdBufferObject.queueFlags = queueFlags
3625}
3626
3627@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003628cmd void vkCmdSetLineWidth(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003629 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003630 f32 lineWidth) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003631 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003632 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3633 cmdBufferObject.queueFlags = queueFlags
3634}
3635
3636@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003637cmd void vkCmdSetDepthBias(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003638 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003639 f32 depthBias,
3640 f32 depthBiasClamp,
3641 f32 slopeScaledDepthBias) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003642 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003643 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3644 cmdBufferObject.queueFlags = queueFlags
3645}
Jesse Halld27f6aa2015-08-15 17:58:48 -07003646
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003647@threadSafety("app")
3648cmd void vkCmdSetBlendConstants(
3649 VkCmdBuffer cmdBuffer,
3650 // TODO(jessehall): apic only supports 'const' on pointer types. Using
3651 // an annotation as a quick hack to pass this to the template without
3652 // having to modify the AST and semantic model.
3653 @readonly f32[4] blendConst) {
3654 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3655 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3656 cmdBufferObject.queueFlags = queueFlags
3657}
3658
3659@threadSafety("app")
3660cmd void vkCmdSetDepthBounds(
3661 VkCmdBuffer cmdBuffer,
3662 f32 minDepthBounds,
3663 f32 maxDepthBounds) {
3664 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3665 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3666 cmdBufferObject.queueFlags = queueFlags
3667}
3668
3669@threadSafety("app")
3670cmd void vkCmdSetStencilCompareMask(
3671 VkCmdBuffer cmdBuffer,
3672 VkStencilFaceFlags faceMask,
3673 u32 stencilCompareMask) {
3674 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3675 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3676 cmdBufferObject.queueFlags = queueFlags
3677}
3678
3679@threadSafety("app")
3680cmd void vkCmdSetStencilWriteMask(
3681 VkCmdBuffer cmdBuffer,
3682 VkStencilFaceFlags faceMask,
3683 u32 stencilWriteMask) {
3684 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3685 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3686 cmdBufferObject.queueFlags = queueFlags
3687}
3688
3689@threadSafety("app")
3690cmd void vkCmdSetStencilReference(
3691 VkCmdBuffer cmdBuffer,
3692 VkStencilFaceFlags faceMask,
3693 u32 stencilReference) {
3694 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003695 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3696 cmdBufferObject.queueFlags = queueFlags
3697}
3698
3699@threadSafety("app")
3700cmd void vkCmdBindDescriptorSets(
3701 VkCmdBuffer cmdBuffer,
3702 VkPipelineBindPoint pipelineBindPoint,
3703 VkPipelineLayout layout,
3704 u32 firstSet,
3705 u32 setCount,
3706 const VkDescriptorSet* pDescriptorSets,
3707 u32 dynamicOffsetCount,
3708 const u32* pDynamicOffsets) {
3709 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3710
3711 descriptorSets := pDescriptorSets[0:setCount]
3712 for i in (0 .. setCount) {
3713 descriptorSet := descriptorSets[i]
3714 descriptorSetObject := GetDescriptorSet(descriptorSet)
3715 assert(cmdBufferObject.device == descriptorSetObject.device)
3716 }
3717
3718 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
3719 for i in (0 .. dynamicOffsetCount) {
3720 dynamicOffset := dynamicOffsets[i]
3721 }
3722
3723 queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
3724 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3725 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3726 }
3727 cmdBufferObject.queueFlags = queueFlags
3728}
3729
3730@threadSafety("app")
3731cmd void vkCmdBindIndexBuffer(
3732 VkCmdBuffer cmdBuffer,
3733 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003734 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003735 VkIndexType indexType) {
3736 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3737 bufferObject := GetBuffer(buffer)
3738 assert(cmdBufferObject.device == bufferObject.device)
3739
3740 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3741
3742 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3743 cmdBufferObject.queueFlags = queueFlags
3744}
3745
3746@threadSafety("app")
3747cmd void vkCmdBindVertexBuffers(
3748 VkCmdBuffer cmdBuffer,
3749 u32 startBinding,
3750 u32 bindingCount,
3751 const VkBuffer* pBuffers,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003752 const VkDeviceSize* pOffsets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003753 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3754
3755 // TODO: check if not [startBinding:startBinding+bindingCount]
3756 buffers := pBuffers[0:bindingCount]
3757 offsets := pOffsets[0:bindingCount]
3758 for i in (0 .. bindingCount) {
3759 buffer := buffers[i]
3760 offset := offsets[i]
3761 bufferObject := GetBuffer(buffer)
3762 assert(cmdBufferObject.device == bufferObject.device)
3763
3764 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3765 }
3766
3767 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3768 cmdBufferObject.queueFlags = queueFlags
3769}
3770
3771@threadSafety("app")
3772cmd void vkCmdDraw(
3773 VkCmdBuffer cmdBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003774 u32 vertexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003775 u32 instanceCount,
3776 u32 firstVertex,
3777 u32 firstInstance) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003778 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3779
3780 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3781 cmdBufferObject.queueFlags = queueFlags
3782}
3783
3784@threadSafety("app")
3785cmd void vkCmdDrawIndexed(
3786 VkCmdBuffer cmdBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003787 u32 indexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003788 u32 instanceCount,
3789 u32 firstIndex,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003790 s32 vertexOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003791 u32 firstInstance) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003792 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3793
3794 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3795 cmdBufferObject.queueFlags = queueFlags
3796}
3797
3798@threadSafety("app")
3799cmd void vkCmdDrawIndirect(
3800 VkCmdBuffer cmdBuffer,
3801 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003802 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003803 u32 count,
3804 u32 stride) {
3805 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3806 bufferObject := GetBuffer(buffer)
3807 assert(cmdBufferObject.device == bufferObject.device)
3808
3809 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3810
3811 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3812 cmdBufferObject.queueFlags = queueFlags
3813}
3814
3815@threadSafety("app")
3816cmd void vkCmdDrawIndexedIndirect(
3817 VkCmdBuffer cmdBuffer,
3818 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003819 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003820 u32 count,
3821 u32 stride) {
3822 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3823 bufferObject := GetBuffer(buffer)
3824 assert(cmdBufferObject.device == bufferObject.device)
3825
3826 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3827
3828 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3829 cmdBufferObject.queueFlags = queueFlags
3830}
3831
3832@threadSafety("app")
3833cmd void vkCmdDispatch(
3834 VkCmdBuffer cmdBuffer,
3835 u32 x,
3836 u32 y,
3837 u32 z) {
3838 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3839
3840 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
3841 cmdBufferObject.queueFlags = queueFlags
3842}
3843
3844@threadSafety("app")
3845cmd void vkCmdDispatchIndirect(
3846 VkCmdBuffer cmdBuffer,
3847 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003848 VkDeviceSize offset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003849 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3850 bufferObject := GetBuffer(buffer)
3851 assert(cmdBufferObject.device == bufferObject.device)
3852
3853 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3854
3855 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
3856 cmdBufferObject.queueFlags = queueFlags
3857}
3858
3859@threadSafety("app")
3860cmd void vkCmdCopyBuffer(
3861 VkCmdBuffer cmdBuffer,
3862 VkBuffer srcBuffer,
3863 VkBuffer destBuffer,
3864 u32 regionCount,
3865 const VkBufferCopy* pRegions) {
3866 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3867 srcBufferObject := GetBuffer(srcBuffer)
3868 destBufferObject := GetBuffer(destBuffer)
3869 assert(cmdBufferObject.device == srcBufferObject.device)
3870 assert(cmdBufferObject.device == destBufferObject.device)
3871
3872 regions := pRegions[0:regionCount]
3873 for i in (0 .. regionCount) {
3874 region := regions[i]
3875 }
3876
3877 bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
3878 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3879
3880 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3881 cmdBufferObject.queueFlags = queueFlags
3882}
3883
3884@threadSafety("app")
3885cmd void vkCmdCopyImage(
3886 VkCmdBuffer cmdBuffer,
3887 VkImage srcImage,
3888 VkImageLayout srcImageLayout,
3889 VkImage destImage,
3890 VkImageLayout destImageLayout,
3891 u32 regionCount,
3892 const VkImageCopy* pRegions) {
3893 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3894 srcImageObject := GetImage(srcImage)
3895 destImageObject := GetImage(destImage)
3896 assert(cmdBufferObject.device == srcImageObject.device)
3897 assert(cmdBufferObject.device == destImageObject.device)
3898
3899 regions := pRegions[0:regionCount]
3900 for i in (0 .. regionCount) {
3901 region := regions[i]
3902 }
3903
3904 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3905 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3906
3907 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3908 cmdBufferObject.queueFlags = queueFlags
3909}
3910
3911@threadSafety("app")
3912cmd void vkCmdBlitImage(
3913 VkCmdBuffer cmdBuffer,
3914 VkImage srcImage,
3915 VkImageLayout srcImageLayout,
3916 VkImage destImage,
3917 VkImageLayout destImageLayout,
3918 u32 regionCount,
3919 const VkImageBlit* pRegions,
3920 VkTexFilter filter) {
3921 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3922 srcImageObject := GetImage(srcImage)
3923 destImageObject := GetImage(destImage)
3924 assert(cmdBufferObject.device == srcImageObject.device)
3925 assert(cmdBufferObject.device == destImageObject.device)
3926
3927 regions := pRegions[0:regionCount]
3928 for i in (0 .. regionCount) {
3929 region := regions[i]
3930 }
3931
3932 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3933 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3934
3935 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3936 cmdBufferObject.queueFlags = queueFlags
3937}
3938
3939@threadSafety("app")
3940cmd void vkCmdCopyBufferToImage(
3941 VkCmdBuffer cmdBuffer,
3942 VkBuffer srcBuffer,
3943 VkImage destImage,
3944 VkImageLayout destImageLayout,
3945 u32 regionCount,
3946 const VkBufferImageCopy* pRegions) {
3947 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3948 srcBufferObject := GetBuffer(srcBuffer)
3949 destImageObject := GetImage(destImage)
3950 assert(cmdBufferObject.device == srcBufferObject.device)
3951 assert(cmdBufferObject.device == destImageObject.device)
3952
3953 regions := pRegions[0:regionCount]
3954 for i in (0 .. regionCount) {
3955 region := regions[i]
3956 }
3957
3958 bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
3959 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3960
3961 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3962 cmdBufferObject.queueFlags = queueFlags
3963}
3964
3965@threadSafety("app")
3966cmd void vkCmdCopyImageToBuffer(
3967 VkCmdBuffer cmdBuffer,
3968 VkImage srcImage,
3969 VkImageLayout srcImageLayout,
3970 VkBuffer destBuffer,
3971 u32 regionCount,
3972 const VkBufferImageCopy* pRegions) {
3973 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3974 srcImageObject := GetImage(srcImage)
3975 destBufferObject := GetBuffer(destBuffer)
3976 assert(cmdBufferObject.device == srcImageObject.device)
3977 assert(cmdBufferObject.device == destBufferObject.device)
3978
3979 regions := pRegions[0:regionCount]
3980 for i in (0 .. regionCount) {
3981 region := regions[i]
3982 }
3983
3984 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3985 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3986
3987 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3988 cmdBufferObject.queueFlags = queueFlags
3989}
3990
3991@threadSafety("app")
3992cmd void vkCmdUpdateBuffer(
3993 VkCmdBuffer cmdBuffer,
3994 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003995 VkDeviceSize destOffset,
3996 VkDeviceSize dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003997 const u32* pData) {
3998 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3999 destBufferObject := GetBuffer(destBuffer)
4000 assert(cmdBufferObject.device == destBufferObject.device)
4001
4002 data := pData[0:dataSize]
4003
4004 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
4005
4006 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
4007 cmdBufferObject.queueFlags = queueFlags
4008}
4009
4010@threadSafety("app")
4011cmd void vkCmdFillBuffer(
4012 VkCmdBuffer cmdBuffer,
4013 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004014 VkDeviceSize destOffset,
4015 VkDeviceSize fillSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004016 u32 data) {
4017 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4018 destBufferObject := GetBuffer(destBuffer)
4019 assert(cmdBufferObject.device == destBufferObject.device)
4020
4021 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
4022 cmdBufferObject.queueFlags = queueFlags
4023}
4024
4025@threadSafety("app")
4026cmd void vkCmdClearColorImage(
4027 VkCmdBuffer cmdBuffer,
4028 VkImage image,
4029 VkImageLayout imageLayout,
4030 const VkClearColorValue* pColor,
4031 u32 rangeCount,
4032 const VkImageSubresourceRange* pRanges) {
4033 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4034 imageObject := GetImage(image)
4035 assert(cmdBufferObject.device == imageObject.device)
4036
4037 ranges := pRanges[0:rangeCount]
4038 for i in (0 .. rangeCount) {
4039 range := ranges[i]
4040 }
4041
4042 bindCmdBuffer(cmdBuffer, image, imageObject.mem)
4043
4044 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4045 cmdBufferObject.queueFlags = queueFlags
4046}
4047
4048@threadSafety("app")
4049cmd void vkCmdClearDepthStencilImage(
4050 VkCmdBuffer cmdBuffer,
4051 VkImage image,
4052 VkImageLayout imageLayout,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004053 const VkClearDepthStencilValue* pDepthStencil,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004054 u32 rangeCount,
4055 const VkImageSubresourceRange* pRanges) {
4056 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4057 imageObject := GetImage(image)
4058 assert(cmdBufferObject.device == imageObject.device)
4059
4060 ranges := pRanges[0:rangeCount]
4061 for i in (0 .. rangeCount) {
4062 range := ranges[i]
4063 }
4064
4065 bindCmdBuffer(cmdBuffer, image, imageObject.mem)
4066
4067 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4068 cmdBufferObject.queueFlags = queueFlags
4069}
4070
4071@threadSafety("app")
Jesse Hallae38f732015-11-19 21:32:50 -08004072cmd void vkCmdClearAttachments(
Jesse Halld27f6aa2015-08-15 17:58:48 -07004073 VkCmdBuffer cmdBuffer,
Jesse Hallae38f732015-11-19 21:32:50 -08004074 u32 attachmentCount,
4075 const VkClearAttachment* pAttachments,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004076 u32 rectCount,
4077 const VkRect3D* pRects) {
4078 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4079
4080 rects := pRects[0:rectCount]
4081 for i in (0 .. rectCount) {
4082 rect := rects[i]
4083 }
4084
4085 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4086 cmdBufferObject.queueFlags = queueFlags
4087}
4088
4089@threadSafety("app")
4090cmd void vkCmdResolveImage(
4091 VkCmdBuffer cmdBuffer,
4092 VkImage srcImage,
4093 VkImageLayout srcImageLayout,
4094 VkImage destImage,
4095 VkImageLayout destImageLayout,
4096 u32 regionCount,
4097 const VkImageResolve* pRegions) {
4098 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4099 srcImageObject := GetImage(srcImage)
4100 destImageObject := GetImage(destImage)
4101 assert(cmdBufferObject.device == srcImageObject.device)
4102 assert(cmdBufferObject.device == destImageObject.device)
4103
4104 regions := pRegions[0:regionCount]
4105 for i in (0 .. regionCount) {
4106 region := regions[i]
4107 }
4108
4109 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
4110 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
4111
4112 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4113 cmdBufferObject.queueFlags = queueFlags
4114}
4115
4116@threadSafety("app")
4117cmd void vkCmdSetEvent(
4118 VkCmdBuffer cmdBuffer,
4119 VkEvent event,
4120 VkPipelineStageFlags stageMask) {
4121 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4122 eventObject := GetEvent(event)
4123 assert(cmdBufferObject.device == eventObject.device)
4124}
4125
4126@threadSafety("app")
4127cmd void vkCmdResetEvent(
4128 VkCmdBuffer cmdBuffer,
4129 VkEvent event,
4130 VkPipelineStageFlags stageMask) {
4131 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4132 eventObject := GetEvent(event)
4133 assert(cmdBufferObject.device == eventObject.device)
4134}
4135
4136@threadSafety("app")
4137cmd void vkCmdWaitEvents(
4138 VkCmdBuffer cmdBuffer,
4139 u32 eventCount,
4140 const VkEvent* pEvents,
4141 VkPipelineStageFlags srcStageMask,
4142 VkPipelineStageFlags destStageMask,
4143 u32 memBarrierCount,
4144 const void* const* ppMemBarriers) {
4145 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4146
4147 events := pEvents[0:eventCount]
4148 for i in (0 .. eventCount) {
4149 event := events[i]
4150 eventObject := GetEvent(event)
4151 assert(cmdBufferObject.device == eventObject.device)
4152 }
4153
4154 pMemBarriers := ppMemBarriers[0:memBarrierCount]
4155 for i in (0 .. memBarrierCount) {
4156 switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
4157 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
4158 memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
4159 }
4160 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
4161 imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
4162 imageObject := GetImage(imageMemBarrier.image)
4163 assert(imageObject.device == cmdBufferObject.device)
4164 }
4165 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
4166 bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
4167 bufferObject := GetBuffer(bufferMemBarrier.buffer)
4168 assert(bufferObject.device == cmdBufferObject.device)
4169 }
4170 }
4171 }
4172}
4173
4174@threadSafety("app")
4175cmd void vkCmdPipelineBarrier(
4176 VkCmdBuffer cmdBuffer,
4177 VkPipelineStageFlags srcStageMask,
4178 VkPipelineStageFlags destStageMask,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004179 VkBool32 byRegion,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004180 u32 memBarrierCount,
4181 const void* const* ppMemBarriers) {
4182 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4183
4184 pMemBarriers := ppMemBarriers[0:memBarrierCount]
4185 for i in (0 .. memBarrierCount) {
4186 switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
4187 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
4188 memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
4189 }
4190 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
4191 imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
4192 imageObject := GetImage(imageMemBarrier.image)
4193 assert(imageObject.device == cmdBufferObject.device)
4194 }
4195 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
4196 bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
4197 bufferObject := GetBuffer(bufferMemBarrier.buffer)
4198 assert(bufferObject.device == cmdBufferObject.device)
4199 }
4200 }
4201 }
4202}
4203
4204@threadSafety("app")
4205cmd void vkCmdBeginQuery(
4206 VkCmdBuffer cmdBuffer,
4207 VkQueryPool queryPool,
4208 u32 slot,
4209 VkQueryControlFlags flags) {
4210 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4211 queryPoolObject := GetQueryPool(queryPool)
4212 assert(cmdBufferObject.device == queryPoolObject.device)
4213}
4214
4215@threadSafety("app")
4216cmd void vkCmdEndQuery(
4217 VkCmdBuffer cmdBuffer,
4218 VkQueryPool queryPool,
4219 u32 slot) {
4220 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4221 queryPoolObject := GetQueryPool(queryPool)
4222 assert(cmdBufferObject.device == queryPoolObject.device)
4223}
4224
4225@threadSafety("app")
4226cmd void vkCmdResetQueryPool(
4227 VkCmdBuffer cmdBuffer,
4228 VkQueryPool queryPool,
4229 u32 startQuery,
4230 u32 queryCount) {
4231 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4232 queryPoolObject := GetQueryPool(queryPool)
4233 assert(cmdBufferObject.device == queryPoolObject.device)
4234}
4235
4236@threadSafety("app")
4237cmd void vkCmdWriteTimestamp(
4238 VkCmdBuffer cmdBuffer,
4239 VkTimestampType timestampType,
4240 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004241 VkDeviceSize destOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004242 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4243 destBufferObject := GetBuffer(destBuffer)
4244 assert(cmdBufferObject.device == destBufferObject.device)
4245}
4246
4247@threadSafety("app")
4248cmd void vkCmdCopyQueryPoolResults(
4249 VkCmdBuffer cmdBuffer,
4250 VkQueryPool queryPool,
4251 u32 startQuery,
4252 u32 queryCount,
4253 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004254 VkDeviceSize destOffset,
4255 VkDeviceSize destStride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004256 VkQueryResultFlags flags) {
4257 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4258 queryPoolObject := GetQueryPool(queryPool)
4259 destBufferObject := GetBuffer(destBuffer)
4260 assert(cmdBufferObject.device == queryPoolObject.device)
4261 assert(cmdBufferObject.device == destBufferObject.device)
4262}
4263
4264cmd void vkCmdPushConstants(
4265 VkCmdBuffer cmdBuffer,
4266 VkPipelineLayout layout,
4267 VkShaderStageFlags stageFlags,
4268 u32 start,
4269 u32 length,
4270 const void* values) {
4271 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4272 layoutObject := GetPipelineLayout(layout)
4273 assert(cmdBufferObject.device == layoutObject.device)
4274}
4275
4276@threadSafety("app")
4277cmd void vkCmdBeginRenderPass(
4278 VkCmdBuffer cmdBuffer,
4279 const VkRenderPassBeginInfo* pRenderPassBegin,
4280 VkRenderPassContents contents) {
4281 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4282 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4283 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
4284 assert(cmdBufferObject.device == renderPassObject.device)
4285 assert(cmdBufferObject.device == framebufferObject.device)
4286
4287 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4288 cmdBufferObject.queueFlags = queueFlags
4289}
4290
4291cmd void vkCmdNextSubpass(
4292 VkCmdBuffer cmdBuffer,
4293 VkRenderPassContents contents) {
4294 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4295}
4296
4297@threadSafety("app")
4298cmd void vkCmdEndRenderPass(
4299 VkCmdBuffer cmdBuffer) {
4300 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4301
4302 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4303 cmdBufferObject.queueFlags = queueFlags
4304}
4305
4306cmd void vkCmdExecuteCommands(
4307 VkCmdBuffer cmdBuffer,
4308 u32 cmdBuffersCount,
4309 const VkCmdBuffer* pCmdBuffers) {
4310 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4311
4312 cmdBuffers := pCmdBuffers[0:cmdBuffersCount]
4313 for i in (0 .. cmdBuffersCount) {
4314 secondaryCmdBuffer := cmdBuffers[i]
4315 secondaryCmdBufferObject := GetCmdBuffer(secondaryCmdBuffer)
4316 assert(cmdBufferObject.device == secondaryCmdBufferObject.device)
4317 }
4318}
4319
Michael Lentine88594d72015-11-12 12:49:45 -08004320////////////////
4321// Extensions //
4322////////////////
4323
Jesse Hall2818f932015-11-19 21:19:17 -08004324@extension("VK_EXT_KHR_swapchain")
4325cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
4326 VkPhysicalDevice physicalDevice,
4327 u32 queueFamilyIndex,
4328 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4329 VkBool32* pSupported) {
4330 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4331
4332 supported := ?
4333 pSupported[0] = supported
4334
4335 return ?
4336}
4337
Michael Lentine88594d72015-11-12 12:49:45 -08004338@extension("VK_EXT_KHR_device_swapchain")
4339cmd VkResult vkGetSurfacePropertiesKHR(
4340 VkDevice device,
4341 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4342 VkSurfacePropertiesKHR* pSurfaceProperties) {
4343 deviceObject := GetDevice(device)
4344
4345 surfaceProperties := ?
4346 pSurfaceProperties[0] = surfaceProperties
4347
4348 return ?
4349}
4350
4351@extension("VK_EXT_KHR_device_swapchain")
4352cmd VkResult vkGetSurfaceFormatsKHR(
4353 VkDevice device,
4354 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4355 u32* pCount,
4356 VkSurfaceFormatKHR* pSurfaceFormats) {
4357 deviceObject := GetDevice(device)
4358
4359 count := as!u32(?)
4360 pCount[0] = count
4361 surfaceFormats := pSurfaceFormats[0:count]
4362
4363 for i in (0 .. count) {
4364 surfaceFormat := ?
4365 surfaceFormats[i] = surfaceFormat
4366 }
4367
4368 return ?
4369}
4370
4371@extension("VK_EXT_KHR_device_swapchain")
4372cmd VkResult vkGetSurfacePresentModesKHR(
4373 VkDevice device,
4374 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4375 u32* pCount,
4376 VkPresentModeKHR* pPresentModes) {
4377 deviceObject := GetDevice(device)
4378
4379 count := as!u32(?)
4380 pCount[0] = count
4381 presentModes := pPresentModes[0:count]
4382
4383 for i in (0 .. count) {
4384 presentMode := ?
4385 presentModes[i] = presentMode
4386 }
4387
4388 return ?
4389}
4390
4391@extension("VK_EXT_KHR_device_swapchain")
4392cmd VkResult vkCreateSwapchainKHR(
4393 VkDevice device,
4394 const VkSwapchainCreateInfoKHR* pCreateInfo,
4395 VkSwapchainKHR* pSwapchain) {
4396 //assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
4397 deviceObject := GetDevice(device)
4398
4399 swapchain := ?
4400 pSwapchain[0] = swapchain
4401 State.Swapchains[swapchain] = new!SwapchainObject(device: device)
4402
4403 return ?
4404}
4405
4406@extension("VK_EXT_KHR_device_swapchain")
4407cmd VkResult vkDestroySwapchainKHR(
4408 VkDevice device,
4409 VkSwapchainKHR swapchain) {
4410 deviceObject := GetDevice(device)
4411 swapchainObject := GetSwapchain(swapchain)
4412 assert(swapchainObject.device == device)
4413
4414 State.Swapchains[swapchain] = null
4415
4416 return ?
4417}
4418
4419@extension("VK_EXT_KHR_device_swapchain")
4420cmd VkResult vkGetSwapchainImagesKHR(
4421 VkDevice device,
4422 VkSwapchainKHR swapchain,
4423 u32* pCount,
4424 VkImage* pSwapchainImages) {
4425 deviceObject := GetDevice(device)
4426
4427 count := as!u32(?)
4428 pCount[0] = count
4429 swapchainImages := pSwapchainImages[0:count]
4430
4431 for i in (0 .. count) {
4432 swapchainImage := ?
4433 swapchainImages[i] = swapchainImage
4434 if !(swapchainImage in State.Images) {
4435 State.Images[swapchainImage] = new!ImageObject(device: device)
4436 }
4437 }
4438
4439 return ?
4440}
4441
4442@extension("VK_EXT_KHR_device_swapchain")
4443cmd VkResult vkAcquireNextImageKHR(
4444 VkDevice device,
4445 VkSwapchainKHR swapchain,
4446 u64 timeout,
4447 VkSemaphore semaphore,
4448 u32* pImageIndex) {
4449 deviceObject := GetDevice(device)
4450 swapchainObject := GetSwapchain(swapchain)
4451
4452 imageIndex := ?
4453 pImageIndex[0] = imageIndex
4454
4455 return ?
4456}
4457
4458@extension("VK_EXT_KHR_device_swapchain")
4459cmd VkResult vkQueuePresentKHR(
4460 VkQueue queue,
4461 VkPresentInfoKHR* pPresentInfo) {
4462 queueObject := GetQueue(queue)
4463
4464 presentInfo := ?
4465 pPresentInfo[0] = presentInfo
4466
4467 return ?
4468}
4469
Jesse Halld27f6aa2015-08-15 17:58:48 -07004470
4471////////////////
4472// Validation //
4473////////////////
4474
4475extern void validate(string layerName, bool condition, string message)
4476
4477
4478/////////////////////////////
4479// Internal State Tracking //
4480/////////////////////////////
4481
4482StateObject State
4483
4484@internal class StateObject {
4485 // Dispatchable objects.
4486 map!(VkInstance, ref!InstanceObject) Instances
4487 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4488 map!(VkDevice, ref!DeviceObject) Devices
4489 map!(VkQueue, ref!QueueObject) Queues
4490 map!(VkCmdBuffer, ref!CmdBufferObject) CmdBuffers
4491
4492 // Non-dispatchable objects.
4493 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories
4494 map!(VkBuffer, ref!BufferObject) Buffers
4495 map!(VkBufferView, ref!BufferViewObject) BufferViews
4496 map!(VkImage, ref!ImageObject) Images
4497 map!(VkImageView, ref!ImageViewObject) ImageViews
Jesse Halld27f6aa2015-08-15 17:58:48 -07004498 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules
4499 map!(VkShader, ref!ShaderObject) Shaders
4500 map!(VkPipeline, ref!PipelineObject) Pipelines
4501 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts
4502 map!(VkSampler, ref!SamplerObject) Samplers
4503 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets
4504 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts
4505 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools
Jesse Halld27f6aa2015-08-15 17:58:48 -07004506 map!(VkFence, ref!FenceObject) Fences
4507 map!(VkSemaphore, ref!SemaphoreObject) Semaphores
4508 map!(VkEvent, ref!EventObject) Events
4509 map!(VkQueryPool, ref!QueryPoolObject) QueryPools
4510 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers
4511 map!(VkRenderPass, ref!RenderPassObject) RenderPasses
4512 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
4513 map!(VkCmdPool, ref!CmdPoolObject) CmdPools
Michael Lentine88594d72015-11-12 12:49:45 -08004514 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
Jesse Halld27f6aa2015-08-15 17:58:48 -07004515}
4516
4517@internal class InstanceObject {
4518}
4519
4520@internal class PhysicalDeviceObject {
4521 VkInstance instance
4522}
4523
4524@internal class DeviceObject {
4525 VkPhysicalDevice physicalDevice
4526}
4527
4528@internal class QueueObject {
4529 VkDevice device
4530 VkQueueFlags flags
4531}
4532
4533@internal class CmdBufferObject {
4534 VkDevice device
4535 map!(u64, VkDeviceMemory) boundObjects
4536 VkQueueFlags queueFlags
4537}
4538
4539@internal class DeviceMemoryObject {
4540 VkDevice device
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004541 VkDeviceSize allocationSize
4542 map!(u64, VkDeviceSize ) boundObjects
Jesse Halld27f6aa2015-08-15 17:58:48 -07004543 map!(VkCmdBuffer, VkCmdBuffer) boundCommandBuffers
4544}
4545
4546@internal class BufferObject {
4547 VkDevice device
4548 VkDeviceMemory mem
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004549 VkDeviceSize memOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004550}
4551
4552@internal class BufferViewObject {
4553 VkDevice device
4554 VkBuffer buffer
4555}
4556
4557@internal class ImageObject {
4558 VkDevice device
4559 VkDeviceMemory mem
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004560 VkDeviceSize memOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004561}
4562
4563@internal class ImageViewObject {
4564 VkDevice device
4565 VkImage image
4566}
4567
Jesse Halld27f6aa2015-08-15 17:58:48 -07004568@internal class ShaderObject {
4569 VkDevice device
4570}
4571
4572@internal class ShaderModuleObject {
4573 VkDevice device
4574}
4575
4576@internal class PipelineObject {
4577 VkDevice device
4578}
4579
4580@internal class PipelineLayoutObject {
4581 VkDevice device
4582}
4583
4584@internal class SamplerObject {
4585 VkDevice device
4586}
4587
4588@internal class DescriptorSetObject {
4589 VkDevice device
4590}
4591
4592@internal class DescriptorSetLayoutObject {
4593 VkDevice device
4594}
4595
4596@internal class DescriptorPoolObject {
4597 VkDevice device
4598}
4599
Jesse Halld27f6aa2015-08-15 17:58:48 -07004600@internal class FenceObject {
4601 VkDevice device
4602 bool signaled
4603}
4604
4605@internal class SemaphoreObject {
4606 VkDevice device
4607}
4608
4609@internal class EventObject {
4610 VkDevice device
4611}
4612
4613@internal class QueryPoolObject {
4614 VkDevice device
4615}
4616
4617@internal class FramebufferObject {
4618 VkDevice device
4619}
4620
4621@internal class RenderPassObject {
4622 VkDevice device
4623}
4624
4625@internal class PipelineCacheObject {
4626 VkDevice device
4627}
4628
4629@internal class CmdPoolObject {
4630 VkDevice device
4631}
4632
Michael Lentine88594d72015-11-12 12:49:45 -08004633@internal class SwapchainObject {
4634 VkDevice device
4635}
4636
Jesse Halld27f6aa2015-08-15 17:58:48 -07004637macro ref!InstanceObject GetInstance(VkInstance instance) {
4638 assert(instance in State.Instances)
4639 return State.Instances[instance]
4640}
4641
4642macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
4643 assert(physicalDevice in State.PhysicalDevices)
4644 return State.PhysicalDevices[physicalDevice]
4645}
4646
4647macro ref!DeviceObject GetDevice(VkDevice device) {
4648 assert(device in State.Devices)
4649 return State.Devices[device]
4650}
4651
4652macro ref!QueueObject GetQueue(VkQueue queue) {
4653 assert(queue in State.Queues)
4654 return State.Queues[queue]
4655}
4656
4657macro ref!CmdBufferObject GetCmdBuffer(VkCmdBuffer cmdBuffer) {
4658 assert(cmdBuffer in State.CmdBuffers)
4659 return State.CmdBuffers[cmdBuffer]
4660}
4661
4662macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory mem) {
4663 assert(mem in State.DeviceMemories)
4664 return State.DeviceMemories[mem]
4665}
4666
4667macro ref!BufferObject GetBuffer(VkBuffer buffer) {
4668 assert(buffer in State.Buffers)
4669 return State.Buffers[buffer]
4670}
4671
4672macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
4673 assert(bufferView in State.BufferViews)
4674 return State.BufferViews[bufferView]
4675}
4676
4677macro ref!ImageObject GetImage(VkImage image) {
4678 assert(image in State.Images)
4679 return State.Images[image]
4680}
4681
4682macro ref!ImageViewObject GetImageView(VkImageView imageView) {
4683 assert(imageView in State.ImageViews)
4684 return State.ImageViews[imageView]
4685}
4686
Jesse Halld27f6aa2015-08-15 17:58:48 -07004687macro ref!ShaderObject GetShader(VkShader shader) {
4688 assert(shader in State.Shaders)
4689 return State.Shaders[shader]
4690}
4691
4692macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
4693 assert(shaderModule in State.ShaderModules)
4694 return State.ShaderModules[shaderModule]
4695}
4696
4697macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
4698 assert(pipeline in State.Pipelines)
4699 return State.Pipelines[pipeline]
4700}
4701
4702macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
4703 assert(pipelineLayout in State.PipelineLayouts)
4704 return State.PipelineLayouts[pipelineLayout]
4705}
4706
4707macro ref!SamplerObject GetSampler(VkSampler sampler) {
4708 assert(sampler in State.Samplers)
4709 return State.Samplers[sampler]
4710}
4711
4712macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
4713 assert(descriptorSet in State.DescriptorSets)
4714 return State.DescriptorSets[descriptorSet]
4715}
4716
4717macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
4718 assert(descriptorSetLayout in State.DescriptorSetLayouts)
4719 return State.DescriptorSetLayouts[descriptorSetLayout]
4720}
4721
4722macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
4723 assert(descriptorPool in State.DescriptorPools)
4724 return State.DescriptorPools[descriptorPool]
4725}
4726
Jesse Halld27f6aa2015-08-15 17:58:48 -07004727macro ref!FenceObject GetFence(VkFence fence) {
4728 assert(fence in State.Fences)
4729 return State.Fences[fence]
4730}
4731
4732macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
4733 assert(semaphore in State.Semaphores)
4734 return State.Semaphores[semaphore]
4735}
4736
4737macro ref!EventObject GetEvent(VkEvent event) {
4738 assert(event in State.Events)
4739 return State.Events[event]
4740}
4741
4742macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
4743 assert(queryPool in State.QueryPools)
4744 return State.QueryPools[queryPool]
4745}
4746
4747macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
4748 assert(framebuffer in State.Framebuffers)
4749 return State.Framebuffers[framebuffer]
4750}
4751
4752macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
4753 assert(renderPass in State.RenderPasses)
4754 return State.RenderPasses[renderPass]
4755}
4756
4757macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
4758 assert(pipelineCache in State.PipelineCaches)
4759 return State.PipelineCaches[pipelineCache]
4760}
4761
4762macro ref!CmdPoolObject GetCmdPool(VkCmdPool cmdPool) {
4763 assert(cmdPool in State.CmdPools)
4764 return State.CmdPools[cmdPool]
Jesse Hallf09c6b12015-08-15 19:54:28 -07004765}
Michael Lentine88594d72015-11-12 12:49:45 -08004766
4767macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
4768 assert(swapchain in State.Swapchains)
4769 return State.Swapchains[swapchain]
4770}