blob: fbd1d9d8b54891a341cff9abb3a4079888a5b21f [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 Halla15a4bf2015-11-19 22:48:02 -080030define VERSION_MINOR 181
Jesse Hallae38f732015-11-19 21:32:50 -080031define 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
Jesse Halld27f6aa2015-08-15 17:58:48 -0700138enum VkCmdBufferLevel {
139 VK_CMD_BUFFER_LEVEL_PRIMARY = 0x00000000,
140 VK_CMD_BUFFER_LEVEL_SECONDARY = 0x00000001,
141}
142
143enum VkChannelSwizzle {
144 VK_CHANNEL_SWIZZLE_ZERO = 0x00000000,
145 VK_CHANNEL_SWIZZLE_ONE = 0x00000001,
146 VK_CHANNEL_SWIZZLE_R = 0x00000002,
147 VK_CHANNEL_SWIZZLE_G = 0x00000003,
148 VK_CHANNEL_SWIZZLE_B = 0x00000004,
149 VK_CHANNEL_SWIZZLE_A = 0x00000005,
150}
151
152enum VkDescriptorType {
153 VK_DESCRIPTOR_TYPE_SAMPLER = 0x00000000,
154 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 0x00000001,
155 VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 0x00000002,
156 VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 0x00000003,
157 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 0x00000004,
158 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 0x00000005,
159 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 0x00000006,
160 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 0x00000007,
161 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 0x00000008,
162 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 0x00000009,
163 VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 0x0000000a,
164}
165
166enum VkDescriptorPoolUsage {
167 VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT = 0x00000000,
168 VK_DESCRIPTOR_POOL_USAGE_DYNAMIC = 0x00000001,
169}
170
171enum VkDescriptorSetUsage {
172 VK_DESCRIPTOR_SET_USAGE_ONE_SHOT = 0x00000000,
173 VK_DESCRIPTOR_SET_USAGE_STATIC = 0x00000001,
174}
175
176enum VkQueryType {
177 VK_QUERY_TYPE_OCCLUSION = 0x00000000,
178 VK_QUERY_TYPE_PIPELINE_STATISTICS = 0x00000001, /// Optional
179}
180
181enum VkTimestampType {
182 VK_TIMESTAMP_TYPE_TOP = 0x00000000,
183 VK_TIMESTAMP_TYPE_BOTTOM = 0x00000001,
184}
185
186enum VkBorderColor {
187 VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000,
188 VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 0x00000001,
189 VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 0x00000002,
190 VK_BORDER_COLOR_INT_OPAQUE_BLACK = 0x00000003,
191 VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 0x00000004,
192 VK_BORDER_COLOR_INT_OPAQUE_WHITE = 0x00000005,
193}
194
195enum VkPipelineBindPoint {
196 VK_PIPELINE_BIND_POINT_COMPUTE = 0x00000000,
197 VK_PIPELINE_BIND_POINT_GRAPHICS = 0x00000001,
198}
199
200enum VkPrimitiveTopology {
201 VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0x00000000,
202 VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 0x00000001,
203 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 0x00000002,
204 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
205 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
206 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 0x00000005,
207 VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ = 0x00000006,
208 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ = 0x00000007,
209 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ = 0x00000008,
210 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ = 0x00000009,
211 VK_PRIMITIVE_TOPOLOGY_PATCH = 0x0000000a,
212}
213
214enum VkSharingMode {
215 VK_SHARING_MODE_EXCLUSIVE = 0x00000000,
216 VK_SHARING_MODE_CONCURRENT = 0x00000001,
217}
218
219enum VkIndexType {
220 VK_INDEX_TYPE_UINT16 = 0x00000000,
221 VK_INDEX_TYPE_UINT32 = 0x00000001,
222}
223
224enum VkTexFilter {
225 VK_TEX_FILTER_NEAREST = 0x00000000,
226 VK_TEX_FILTER_LINEAR = 0x00000001,
227}
228
229enum VkTexMipmapMode {
230 VK_TEX_MIPMAP_MODE_BASE = 0x00000000, /// Always choose base level
231 VK_TEX_MIPMAP_MODE_NEAREST = 0x00000001, /// Choose nearest mip level
232 VK_TEX_MIPMAP_MODE_LINEAR = 0x00000002, /// Linear filter between mip levels
233}
234
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700235enum VkTexAddressMode {
236 VK_TEX_ADDRESS_MODE_WRAP = 0x00000000,
237 VK_TEX_ADDRESS_MODE_MIRROR = 0x00000001,
238 VK_TEX_ADDRESS_MODE_CLAMP = 0x00000002,
239 VK_TEX_ADDRESS_MODE_MIRROR_ONCE = 0x00000003,
240 VK_TEX_ADDRESS_MODE_CLAMP_BORDER = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700241}
242
243enum VkCompareOp {
244 VK_COMPARE_OP_NEVER = 0x00000000,
245 VK_COMPARE_OP_LESS = 0x00000001,
246 VK_COMPARE_OP_EQUAL = 0x00000002,
247 VK_COMPARE_OP_LESS_EQUAL = 0x00000003,
248 VK_COMPARE_OP_GREATER = 0x00000004,
249 VK_COMPARE_OP_NOT_EQUAL = 0x00000005,
250 VK_COMPARE_OP_GREATER_EQUAL = 0x00000006,
251 VK_COMPARE_OP_ALWAYS = 0x00000007,
252}
253
254enum VkFillMode {
255 VK_FILL_MODE_POINTS = 0x00000000,
256 VK_FILL_MODE_WIREFRAME = 0x00000001,
257 VK_FILL_MODE_SOLID = 0x00000002,
258}
259
260enum VkCullMode {
261 VK_CULL_MODE_NONE = 0x00000000,
262 VK_CULL_MODE_FRONT = 0x00000001,
263 VK_CULL_MODE_BACK = 0x00000002,
264 VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
265}
266
267enum VkFrontFace {
268 VK_FRONT_FACE_CCW = 0x00000000,
269 VK_FRONT_FACE_CW = 0x00000001,
270}
271
272enum VkBlend {
273 VK_BLEND_ZERO = 0x00000000,
274 VK_BLEND_ONE = 0x00000001,
275 VK_BLEND_SRC_COLOR = 0x00000002,
276 VK_BLEND_ONE_MINUS_SRC_COLOR = 0x00000003,
277 VK_BLEND_DEST_COLOR = 0x00000004,
278 VK_BLEND_ONE_MINUS_DEST_COLOR = 0x00000005,
279 VK_BLEND_SRC_ALPHA = 0x00000006,
280 VK_BLEND_ONE_MINUS_SRC_ALPHA = 0x00000007,
281 VK_BLEND_DEST_ALPHA = 0x00000008,
282 VK_BLEND_ONE_MINUS_DEST_ALPHA = 0x00000009,
283 VK_BLEND_CONSTANT_COLOR = 0x0000000a,
284 VK_BLEND_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
285 VK_BLEND_CONSTANT_ALPHA = 0x0000000c,
286 VK_BLEND_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
287 VK_BLEND_SRC_ALPHA_SATURATE = 0x0000000e,
288 VK_BLEND_SRC1_COLOR = 0x0000000f,
289 VK_BLEND_ONE_MINUS_SRC1_COLOR = 0x00000010,
290 VK_BLEND_SRC1_ALPHA = 0x00000011,
291 VK_BLEND_ONE_MINUS_SRC1_ALPHA = 0x00000012,
292}
293
294enum VkBlendOp {
295 VK_BLEND_OP_ADD = 0x00000000,
296 VK_BLEND_OP_SUBTRACT = 0x00000001,
297 VK_BLEND_OP_REVERSE_SUBTRACT = 0x00000002,
298 VK_BLEND_OP_MIN = 0x00000003,
299 VK_BLEND_OP_MAX = 0x00000004,
300}
301
302enum VkStencilOp {
303 VK_STENCIL_OP_KEEP = 0x00000000,
304 VK_STENCIL_OP_ZERO = 0x00000001,
305 VK_STENCIL_OP_REPLACE = 0x00000002,
306 VK_STENCIL_OP_INC_CLAMP = 0x00000003,
307 VK_STENCIL_OP_DEC_CLAMP = 0x00000004,
308 VK_STENCIL_OP_INVERT = 0x00000005,
309 VK_STENCIL_OP_INC_WRAP = 0x00000006,
310 VK_STENCIL_OP_DEC_WRAP = 0x00000007,
311}
312
313enum VkLogicOp {
314 VK_LOGIC_OP_CLEAR = 0x00000000,
315 VK_LOGIC_OP_AND = 0x00000001,
316 VK_LOGIC_OP_AND_REVERSE = 0x00000002,
317 VK_LOGIC_OP_COPY = 0x00000003,
318 VK_LOGIC_OP_AND_INVERTED = 0x00000004,
319 VK_LOGIC_OP_NOOP = 0x00000005,
320 VK_LOGIC_OP_XOR = 0x00000006,
321 VK_LOGIC_OP_OR = 0x00000007,
322 VK_LOGIC_OP_NOR = 0x00000008,
323 VK_LOGIC_OP_EQUIV = 0x00000009,
324 VK_LOGIC_OP_INVERT = 0x0000000a,
325 VK_LOGIC_OP_OR_REVERSE = 0x0000000b,
326 VK_LOGIC_OP_COPY_INVERTED = 0x0000000c,
327 VK_LOGIC_OP_OR_INVERTED = 0x0000000d,
328 VK_LOGIC_OP_NAND = 0x0000000e,
329 VK_LOGIC_OP_SET = 0x0000000f,
330}
331
332enum VkSystemAllocType {
333 VK_SYSTEM_ALLOC_TYPE_API_OBJECT = 0x00000000,
334 VK_SYSTEM_ALLOC_TYPE_INTERNAL = 0x00000001,
335 VK_SYSTEM_ALLOC_TYPE_INTERNAL_TEMP = 0x00000002,
336 VK_SYSTEM_ALLOC_TYPE_INTERNAL_SHADER = 0x00000003,
337 VK_SYSTEM_ALLOC_TYPE_DEBUG = 0x00000004,
338}
339
340enum VkPhysicalDeviceType {
341 VK_PHYSICAL_DEVICE_TYPE_OTHER = 0x00000000,
342 VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 0x00000001,
343 VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 0x00000002,
344 VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 0x00000003,
345 VK_PHYSICAL_DEVICE_TYPE_CPU = 0x00000004,
346}
347
348enum VkVertexInputStepRate {
349 VK_VERTEX_INPUT_STEP_RATE_VERTEX = 0x00000000,
350 VK_VERTEX_INPUT_STEP_RATE_INSTANCE = 0x00000001,
351}
352
353/// Vulkan format definitions
354enum VkFormat {
355 VK_FORMAT_UNDEFINED = 0x00000000,
356 VK_FORMAT_R4G4_UNORM = 0x00000001,
357 VK_FORMAT_R4G4_USCALED = 0x00000002,
358 VK_FORMAT_R4G4B4A4_UNORM = 0x00000003,
359 VK_FORMAT_R4G4B4A4_USCALED = 0x00000004,
360 VK_FORMAT_R5G6B5_UNORM = 0x00000005,
361 VK_FORMAT_R5G6B5_USCALED = 0x00000006,
362 VK_FORMAT_R5G5B5A1_UNORM = 0x00000007,
363 VK_FORMAT_R5G5B5A1_USCALED = 0x00000008,
364 VK_FORMAT_R8_UNORM = 0x00000009,
365 VK_FORMAT_R8_SNORM = 0x0000000A,
366 VK_FORMAT_R8_USCALED = 0x0000000B,
367 VK_FORMAT_R8_SSCALED = 0x0000000C,
368 VK_FORMAT_R8_UINT = 0x0000000D,
369 VK_FORMAT_R8_SINT = 0x0000000E,
370 VK_FORMAT_R8_SRGB = 0x0000000F,
371 VK_FORMAT_R8G8_UNORM = 0x00000010,
372 VK_FORMAT_R8G8_SNORM = 0x00000011,
373 VK_FORMAT_R8G8_USCALED = 0x00000012,
374 VK_FORMAT_R8G8_SSCALED = 0x00000013,
375 VK_FORMAT_R8G8_UINT = 0x00000014,
376 VK_FORMAT_R8G8_SINT = 0x00000015,
377 VK_FORMAT_R8G8_SRGB = 0x00000016,
378 VK_FORMAT_R8G8B8_UNORM = 0x00000017,
379 VK_FORMAT_R8G8B8_SNORM = 0x00000018,
380 VK_FORMAT_R8G8B8_USCALED = 0x00000019,
381 VK_FORMAT_R8G8B8_SSCALED = 0x0000001A,
382 VK_FORMAT_R8G8B8_UINT = 0x0000001B,
383 VK_FORMAT_R8G8B8_SINT = 0x0000001C,
384 VK_FORMAT_R8G8B8_SRGB = 0x0000001D,
385 VK_FORMAT_R8G8B8A8_UNORM = 0x0000001E,
386 VK_FORMAT_R8G8B8A8_SNORM = 0x0000001F,
387 VK_FORMAT_R8G8B8A8_USCALED = 0x00000020,
388 VK_FORMAT_R8G8B8A8_SSCALED = 0x00000021,
389 VK_FORMAT_R8G8B8A8_UINT = 0x00000022,
390 VK_FORMAT_R8G8B8A8_SINT = 0x00000023,
391 VK_FORMAT_R8G8B8A8_SRGB = 0x00000024,
392 VK_FORMAT_R10G10B10A2_UNORM = 0x00000025,
393 VK_FORMAT_R10G10B10A2_SNORM = 0x00000026,
394 VK_FORMAT_R10G10B10A2_USCALED = 0x00000027,
395 VK_FORMAT_R10G10B10A2_SSCALED = 0x00000028,
396 VK_FORMAT_R10G10B10A2_UINT = 0x00000029,
397 VK_FORMAT_R10G10B10A2_SINT = 0x0000002A,
398 VK_FORMAT_R16_UNORM = 0x0000002B,
399 VK_FORMAT_R16_SNORM = 0x0000002C,
400 VK_FORMAT_R16_USCALED = 0x0000002D,
401 VK_FORMAT_R16_SSCALED = 0x0000002E,
402 VK_FORMAT_R16_UINT = 0x0000002F,
403 VK_FORMAT_R16_SINT = 0x00000030,
404 VK_FORMAT_R16_SFLOAT = 0x00000031,
405 VK_FORMAT_R16G16_UNORM = 0x00000032,
406 VK_FORMAT_R16G16_SNORM = 0x00000033,
407 VK_FORMAT_R16G16_USCALED = 0x00000034,
408 VK_FORMAT_R16G16_SSCALED = 0x00000035,
409 VK_FORMAT_R16G16_UINT = 0x00000036,
410 VK_FORMAT_R16G16_SINT = 0x00000037,
411 VK_FORMAT_R16G16_SFLOAT = 0x00000038,
412 VK_FORMAT_R16G16B16_UNORM = 0x00000039,
413 VK_FORMAT_R16G16B16_SNORM = 0x0000003A,
414 VK_FORMAT_R16G16B16_USCALED = 0x0000003B,
415 VK_FORMAT_R16G16B16_SSCALED = 0x0000003C,
416 VK_FORMAT_R16G16B16_UINT = 0x0000003D,
417 VK_FORMAT_R16G16B16_SINT = 0x0000003E,
418 VK_FORMAT_R16G16B16_SFLOAT = 0x0000003F,
419 VK_FORMAT_R16G16B16A16_UNORM = 0x00000040,
420 VK_FORMAT_R16G16B16A16_SNORM = 0x00000041,
421 VK_FORMAT_R16G16B16A16_USCALED = 0x00000042,
422 VK_FORMAT_R16G16B16A16_SSCALED = 0x00000043,
423 VK_FORMAT_R16G16B16A16_UINT = 0x00000044,
424 VK_FORMAT_R16G16B16A16_SINT = 0x00000045,
425 VK_FORMAT_R16G16B16A16_SFLOAT = 0x00000046,
426 VK_FORMAT_R32_UINT = 0x00000047,
427 VK_FORMAT_R32_SINT = 0x00000048,
428 VK_FORMAT_R32_SFLOAT = 0x00000049,
429 VK_FORMAT_R32G32_UINT = 0x0000004A,
430 VK_FORMAT_R32G32_SINT = 0x0000004B,
431 VK_FORMAT_R32G32_SFLOAT = 0x0000004C,
432 VK_FORMAT_R32G32B32_UINT = 0x0000004D,
433 VK_FORMAT_R32G32B32_SINT = 0x0000004E,
434 VK_FORMAT_R32G32B32_SFLOAT = 0x0000004F,
435 VK_FORMAT_R32G32B32A32_UINT = 0x00000050,
436 VK_FORMAT_R32G32B32A32_SINT = 0x00000051,
437 VK_FORMAT_R32G32B32A32_SFLOAT = 0x00000052,
438 VK_FORMAT_R64_SFLOAT = 0x00000053,
439 VK_FORMAT_R64G64_SFLOAT = 0x00000054,
440 VK_FORMAT_R64G64B64_SFLOAT = 0x00000055,
441 VK_FORMAT_R64G64B64A64_SFLOAT = 0x00000056,
442 VK_FORMAT_R11G11B10_UFLOAT = 0x00000057,
443 VK_FORMAT_R9G9B9E5_UFLOAT = 0x00000058,
444 VK_FORMAT_D16_UNORM = 0x00000059,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700445 VK_FORMAT_D24_UNORM_X8 = 0x0000005A,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700446 VK_FORMAT_D32_SFLOAT = 0x0000005B,
447 VK_FORMAT_S8_UINT = 0x0000005C,
448 VK_FORMAT_D16_UNORM_S8_UINT = 0x0000005D,
449 VK_FORMAT_D24_UNORM_S8_UINT = 0x0000005E,
450 VK_FORMAT_D32_SFLOAT_S8_UINT = 0x0000005F,
451 VK_FORMAT_BC1_RGB_UNORM = 0x00000060,
452 VK_FORMAT_BC1_RGB_SRGB = 0x00000061,
453 VK_FORMAT_BC1_RGBA_UNORM = 0x00000062,
454 VK_FORMAT_BC1_RGBA_SRGB = 0x00000063,
455 VK_FORMAT_BC2_UNORM = 0x00000064,
456 VK_FORMAT_BC2_SRGB = 0x00000065,
457 VK_FORMAT_BC3_UNORM = 0x00000066,
458 VK_FORMAT_BC3_SRGB = 0x00000067,
459 VK_FORMAT_BC4_UNORM = 0x00000068,
460 VK_FORMAT_BC4_SNORM = 0x00000069,
461 VK_FORMAT_BC5_UNORM = 0x0000006A,
462 VK_FORMAT_BC5_SNORM = 0x0000006B,
463 VK_FORMAT_BC6H_UFLOAT = 0x0000006C,
464 VK_FORMAT_BC6H_SFLOAT = 0x0000006D,
465 VK_FORMAT_BC7_UNORM = 0x0000006E,
466 VK_FORMAT_BC7_SRGB = 0x0000006F,
467 VK_FORMAT_ETC2_R8G8B8_UNORM = 0x00000070,
468 VK_FORMAT_ETC2_R8G8B8_SRGB = 0x00000071,
469 VK_FORMAT_ETC2_R8G8B8A1_UNORM = 0x00000072,
470 VK_FORMAT_ETC2_R8G8B8A1_SRGB = 0x00000073,
471 VK_FORMAT_ETC2_R8G8B8A8_UNORM = 0x00000074,
472 VK_FORMAT_ETC2_R8G8B8A8_SRGB = 0x00000075,
473 VK_FORMAT_EAC_R11_UNORM = 0x00000076,
474 VK_FORMAT_EAC_R11_SNORM = 0x00000077,
475 VK_FORMAT_EAC_R11G11_UNORM = 0x00000078,
476 VK_FORMAT_EAC_R11G11_SNORM = 0x00000079,
477 VK_FORMAT_ASTC_4x4_UNORM = 0x0000007A,
478 VK_FORMAT_ASTC_4x4_SRGB = 0x0000007B,
479 VK_FORMAT_ASTC_5x4_UNORM = 0x0000007C,
480 VK_FORMAT_ASTC_5x4_SRGB = 0x0000007D,
481 VK_FORMAT_ASTC_5x5_UNORM = 0x0000007E,
482 VK_FORMAT_ASTC_5x5_SRGB = 0x0000007F,
483 VK_FORMAT_ASTC_6x5_UNORM = 0x00000080,
484 VK_FORMAT_ASTC_6x5_SRGB = 0x00000081,
485 VK_FORMAT_ASTC_6x6_UNORM = 0x00000082,
486 VK_FORMAT_ASTC_6x6_SRGB = 0x00000083,
487 VK_FORMAT_ASTC_8x5_UNORM = 0x00000084,
488 VK_FORMAT_ASTC_8x5_SRGB = 0x00000085,
489 VK_FORMAT_ASTC_8x6_UNORM = 0x00000086,
490 VK_FORMAT_ASTC_8x6_SRGB = 0x00000087,
491 VK_FORMAT_ASTC_8x8_UNORM = 0x00000088,
492 VK_FORMAT_ASTC_8x8_SRGB = 0x00000089,
493 VK_FORMAT_ASTC_10x5_UNORM = 0x0000008A,
494 VK_FORMAT_ASTC_10x5_SRGB = 0x0000008B,
495 VK_FORMAT_ASTC_10x6_UNORM = 0x0000008C,
496 VK_FORMAT_ASTC_10x6_SRGB = 0x0000008D,
497 VK_FORMAT_ASTC_10x8_UNORM = 0x0000008E,
498 VK_FORMAT_ASTC_10x8_SRGB = 0x0000008F,
499 VK_FORMAT_ASTC_10x10_UNORM = 0x00000090,
500 VK_FORMAT_ASTC_10x10_SRGB = 0x00000091,
501 VK_FORMAT_ASTC_12x10_UNORM = 0x00000092,
502 VK_FORMAT_ASTC_12x10_SRGB = 0x00000093,
503 VK_FORMAT_ASTC_12x12_UNORM = 0x00000094,
504 VK_FORMAT_ASTC_12x12_SRGB = 0x00000095,
505 VK_FORMAT_B4G4R4A4_UNORM = 0x00000096,
506 VK_FORMAT_B5G5R5A1_UNORM = 0x00000097,
507 VK_FORMAT_B5G6R5_UNORM = 0x00000098,
508 VK_FORMAT_B5G6R5_USCALED = 0x00000099,
509 VK_FORMAT_B8G8R8_UNORM = 0x0000009A,
510 VK_FORMAT_B8G8R8_SNORM = 0x0000009B,
511 VK_FORMAT_B8G8R8_USCALED = 0x0000009C,
512 VK_FORMAT_B8G8R8_SSCALED = 0x0000009D,
513 VK_FORMAT_B8G8R8_UINT = 0x0000009E,
514 VK_FORMAT_B8G8R8_SINT = 0x0000009F,
515 VK_FORMAT_B8G8R8_SRGB = 0x000000A0,
516 VK_FORMAT_B8G8R8A8_UNORM = 0x000000A1,
517 VK_FORMAT_B8G8R8A8_SNORM = 0x000000A2,
518 VK_FORMAT_B8G8R8A8_USCALED = 0x000000A3,
519 VK_FORMAT_B8G8R8A8_SSCALED = 0x000000A4,
520 VK_FORMAT_B8G8R8A8_UINT = 0x000000A5,
521 VK_FORMAT_B8G8R8A8_SINT = 0x000000A6,
522 VK_FORMAT_B8G8R8A8_SRGB = 0x000000A7,
523 VK_FORMAT_B10G10R10A2_UNORM = 0x000000A8,
524 VK_FORMAT_B10G10R10A2_SNORM = 0x000000A9,
525 VK_FORMAT_B10G10R10A2_USCALED = 0x000000AA,
526 VK_FORMAT_B10G10R10A2_SSCALED = 0x000000AB,
527 VK_FORMAT_B10G10R10A2_UINT = 0x000000AC,
528 VK_FORMAT_B10G10R10A2_SINT = 0x000000AD,
529}
530
Jesse Halld27f6aa2015-08-15 17:58:48 -0700531/// Structure type enumerant
532enum VkStructureType {
533 VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
534 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1,
535 VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2,
536 VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 3,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700537 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 4,
538 VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 5,
539 VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6,
540 VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7,
541 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8,
542 VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 9,
543 VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
544 VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11,
545 VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12,
546 VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 13,
547 VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 14,
548 VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 15,
549 VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 16,
550 VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17,
551 VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 18,
552 VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 19,
553 VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 20,
554 VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 21,
555 VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 22,
556 VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 23,
557 VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 24,
558 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 25,
559 VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 26,
560 VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 27,
561 VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 28,
562 VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 29,
563 VK_STRUCTURE_TYPE_MEMORY_BARRIER = 30,
564 VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 31,
565 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 32,
566 VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
567 VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 34,
568 VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 35,
569 VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 36,
570 VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 37,
571 VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 38,
572 VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 39,
573 VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 40,
574 VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 41,
575 VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 42,
576 VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
577 VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44,
578 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
579 VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700580}
581
582enum VkRenderPassContents {
583 VK_RENDER_PASS_CONTENTS_INLINE = 0x00000000,
584 VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS = 0x00000001,
585}
586
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700587@lastUnused(-8)
Jesse Halld27f6aa2015-08-15 17:58:48 -0700588/// Error and return codes
589enum VkResult {
590 // Return codes for successful operation execution (positive values)
591 VK_SUCCESS = 0x00000000,
Jesse Halla15a4bf2015-11-19 22:48:02 -0800592 VK_NOT_READY = 0x00000001,
593 VK_TIMEOUT = 0x00000002,
594 VK_EVENT_SET = 0x00000003,
595 VK_EVENT_RESET = 0x00000004,
596 VK_INCOMPLETE = 0x00000005,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700597
598 // Error codes (negative values)
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700599 VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF,
600 VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700601 VK_ERROR_INITIALIZATION_FAILED = 0xFFFFFFFD,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700602 VK_ERROR_DEVICE_LOST = 0xFFFFFFFC,
603 VK_ERROR_MEMORY_MAP_FAILED = 0xFFFFFFFB,
604 VK_ERROR_LAYER_NOT_PRESENT = 0xFFFFFFFA,
605 VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9,
Jesse Hall606a54e2015-11-19 22:17:28 -0800606 VK_ERROR_FEATURE_NOT_PRESENT = 0xFFFFFFF8,
607 VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF7,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700608}
609
610enum VkDynamicState {
611 VK_DYNAMIC_STATE_VIEWPORT = 0x00000000,
612 VK_DYNAMIC_STATE_SCISSOR = 0x00000001,
613 VK_DYNAMIC_STATE_LINE_WIDTH = 0x00000002,
614 VK_DYNAMIC_STATE_DEPTH_BIAS = 0x00000003,
615 VK_DYNAMIC_STATE_BLEND_CONSTANTS = 0x00000004,
616 VK_DYNAMIC_STATE_DEPTH_BOUNDS = 0x00000005,
617 VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 0x00000006,
618 VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 0x00000007,
619 VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700620}
621
Michael Lentine88594d72015-11-12 12:49:45 -0800622//////////////////
623// Extensions //
624//////////////////
625
626@extension("VK_EXT_KHR_swapchain")
627enum VkSurfaceTransformKHR {
628 VK_SURFACE_TRANSFORM_NONE_KHR = 0x00000000,
629 VK_SURFACE_TRANSFORM_ROT90_KHR = 0x00000001,
630 VK_SURFACE_TRANSFORM_ROT180_KHR = 0x00000002,
631 VK_SURFACE_TRANSFORM_ROT270_KHR = 0x00000003,
632 VK_SURFACE_TRANSFORM_HMIRROR_KHR = 0x00000004,
633 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 0x00000005,
634 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 0x00000006,
635 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 0x00000007,
636 VK_SURFACE_TRANSFORM_INHERIT_KHR = 0x00000008,
637}
638
639@extension("VK_EXT_KHR_swapchain")
640enum VkPlatformKHR {
641 VK_PLATFORM_WIN32_KHR = 0x00000000,
642 VK_PLATFORM_X11_KHR = 0x00000001,
643 VK_PLATFORM_XCB_KHR = 0x00000002,
644 VK_PLATFORM_ANDROID_KHR = 0x00000003,
645 VK_PLATFORM_WAYLAND_KHR = 0x00000004,
646 VK_PLATFORM_MIR_KHR = 0x00000005,
647}
648
649@extension("VK_EXT_KHR_device_swapchain")
650enum VkPresentModeKHR {
651 VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000,
652 VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001,
653 VK_PRESENT_MODE_FIFO_KHR = 0x00000002,
654}
655
656@extension("VK_EXT_KHR_device_swapchain")
657enum VkColorSpaceKHR {
658 VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
659}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700660
661/////////////////
662// Bitfields //
663/////////////////
664
Jesse Halld27f6aa2015-08-15 17:58:48 -0700665/// Queue capabilities
666bitfield VkQueueFlags {
667 VK_QUEUE_GRAPHICS_BIT = 0x00000001, /// Queue supports graphics operations
668 VK_QUEUE_COMPUTE_BIT = 0x00000002, /// Queue supports compute operations
669 VK_QUEUE_DMA_BIT = 0x00000004, /// Queue supports DMA operations
670 VK_QUEUE_SPARSE_MEMMGR_BIT = 0x00000008, /// Queue supports sparse resource memory management operations
671 VK_QUEUE_EXTENDED_BIT = 0x40000000, /// Extended queue
672}
673
674/// Memory properties passed into vkAllocMemory().
675bitfield VkMemoryPropertyFlags {
676 VK_MEMORY_PROPERTY_DEVICE_ONLY = 0x00000000, /// If otherwise stated, then allocate memory on device
677 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000001, /// Memory should be mappable by host
678 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
679 /// vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
680 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT = 0x00000004, /// Memory should not be cached by the host
Jesse Hallacfa5342015-11-19 21:51:33 -0800681 VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000008, /// Memory may be allocated by the driver when it is required
Jesse Halld27f6aa2015-08-15 17:58:48 -0700682}
683
684/// Memory heap flags
685bitfield VkMemoryHeapFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700686 VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001, /// If set, heap represents host memory
Jesse Halld27f6aa2015-08-15 17:58:48 -0700687}
688
689/// Memory output flags passed to resource transition commands
690bitfield VkMemoryOutputFlags {
691 VK_MEMORY_OUTPUT_HOST_WRITE_BIT = 0x00000001, /// Controls output coherency of host writes
692 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT = 0x00000002, /// Controls output coherency of generic shader writes
693 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT = 0x00000004, /// Controls output coherency of color attachment writes
694 VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000008, /// Controls output coherency of depth/stencil attachment writes
695 VK_MEMORY_OUTPUT_TRANSFER_BIT = 0x00000010, /// Controls output coherency of transfer operations
696}
697
698/// Memory input flags passed to resource transition commands
699bitfield VkMemoryInputFlags {
700 VK_MEMORY_INPUT_HOST_READ_BIT = 0x00000001, /// Controls input coherency of host reads
701 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT = 0x00000002, /// Controls input coherency of indirect command reads
702 VK_MEMORY_INPUT_INDEX_FETCH_BIT = 0x00000004, /// Controls input coherency of index fetches
703 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT = 0x00000008, /// Controls input coherency of vertex attribute fetches
704 VK_MEMORY_INPUT_UNIFORM_READ_BIT = 0x00000010, /// Controls input coherency of uniform buffer reads
705 VK_MEMORY_INPUT_SHADER_READ_BIT = 0x00000020, /// Controls input coherency of generic shader reads
706 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT = 0x00000040, /// Controls input coherency of color attachment reads
707 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000080, /// Controls input coherency of depth/stencil attachment reads
708 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT = 0x00000100, /// Controls input coherency of input attachment reads
709 VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200, /// Controls input coherency of transfer operations
710}
711
712/// Buffer usage flags
713bitfield VkBufferUsageFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700714 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001, /// Can be used as a source of transfer operations
715 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002, /// Can be used as a destination of transfer operations
716 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, /// Can be used as TBO
717 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, /// Can be used as IBO
718 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, /// Can be used as UBO
719 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, /// Can be used as SSBO
720 VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, /// Can be used as source of fixed function index fetch (index buffer)
721 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, /// Can be used as source of fixed function vertex fetch (VBO)
722 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
723}
724
725/// Buffer creation flags
726bitfield VkBufferCreateFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700727 VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Buffer should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700728 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Buffer should support sparse backing with partial residency
729 VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
730}
731
732/// Shader stage flags
733bitfield VkShaderStageFlags {
734 VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
Jesse Hallae38f732015-11-19 21:32:50 -0800735 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
736 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700737 VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
738 VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
739 VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
740
741 VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
742}
743
744/// Image usage flags
745bitfield VkImageUsageFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700746 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT = 0x00000001, /// Can be used as a source of transfer operations
747 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002, /// Can be used as a destination of transfer operations
748 VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
749 VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, /// Can be used as storage image (STORAGE_IMAGE descriptor type)
750 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, /// Can be used as framebuffer color attachment
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700751 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, /// Can be used as framebuffer depth/stencil attachment
Jesse Halld27f6aa2015-08-15 17:58:48 -0700752 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, /// Image data not needed outside of rendering
753 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, /// Can be used as framebuffer input attachment
754}
755
756/// Image creation flags
757bitfield VkImageCreateFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700758 VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Image should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700759 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Image should support sparse backing with partial residency
760 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 -0700761 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, /// Allows image views to have different format than the base image
762 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 -0700763}
764
765/// Framebuffer attachment view creation flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700766bitfield VkImageViewCreateFlags {
767 VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
768 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700769}
770
771/// Pipeline creation flags
772bitfield VkPipelineCreateFlags {
773 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
774 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
775 VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
776}
777
778/// Channel flags
779bitfield VkChannelFlags {
780 VK_CHANNEL_R_BIT = 0x00000001,
781 VK_CHANNEL_G_BIT = 0x00000002,
782 VK_CHANNEL_B_BIT = 0x00000004,
783 VK_CHANNEL_A_BIT = 0x00000008,
784}
785
786/// Fence creation flags
787bitfield VkFenceCreateFlags {
788 VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
789}
790
791/// Semaphore creation flags
792bitfield VkSemaphoreCreateFlags {
793}
794
795/// Format capability flags
796bitfield VkFormatFeatureFlags {
797 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
798 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
799 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, /// Format supports atomic operations in case it's used for storage images
800 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, /// Format can be used for uniform texel buffers (TBOs)
801 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, /// Format can be used for storage texel buffers (IBOs)
802 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, /// Format supports atomic operations in case it's used for storage texel buffers
803 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, /// Format can be used for vertex buffers (VBOs)
804 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, /// Format can be used for color attachment images
805 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, /// Format supports blending in case it's used for color attachment images
806 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, /// Format can be used for depth/stencil attachment images
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700807 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT = 0x00000400, /// Format can be used as the source image of blits with vkCmdBlitImage
808 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 -0700809}
810
811/// Query control flags
812bitfield VkQueryControlFlags {
813 VK_QUERY_CONTROL_CONSERVATIVE_BIT = 0x00000001, /// Allow conservative results to be collected by the query
814}
815
816/// Query result flags
817bitfield VkQueryResultFlags {
818 VK_QUERY_RESULT_DEFAULT = 0x00000000, /// Results of the queries are immediately written to the destination buffer as 32-bit values
819 VK_QUERY_RESULT_64_BIT = 0x00000001, /// Results of the queries are written to the destination buffer as 64-bit values
820 VK_QUERY_RESULT_WAIT_BIT = 0x00000002, /// Results of the queries are waited on before proceeding with the result copy
821 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, /// Besides the results of the query, the availability of the results is also written
822 VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, /// Copy the partial results of the query even if the final results aren't available
823}
824
825/// Shader module creation flags
826bitfield VkShaderModuleCreateFlags {
827}
828
829/// Shader creation flags
830bitfield VkShaderCreateFlags {
831}
832
833/// Event creation flags
834bitfield VkEventCreateFlags {
835}
836
837/// Command buffer creation flags
838bitfield VkCmdBufferCreateFlags {
839}
840
Jesse Halla15a4bf2015-11-19 22:48:02 -0800841/// Command buffer usage flags
842bitfield VkCmdBufferUsageFlags {
843 VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
844 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
845 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700846}
847
848/// Pipeline statistics flags
849bitfield VkQueryPipelineStatisticFlags {
Jesse Hallae38f732015-11-19 21:32:50 -0800850 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, /// Optional
851 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, /// Optional
852 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, /// Optional
853 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, /// Optional
854 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, /// Optional
855 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, /// Optional
856 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, /// Optional
857 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, /// Optional
858 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, /// Optional
859 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, /// Optional
860 VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, /// Optional
Jesse Halld27f6aa2015-08-15 17:58:48 -0700861}
862
863/// Memory mapping flags
864bitfield VkMemoryMapFlags {
865}
866
867/// Bitfield of image aspects
868bitfield VkImageAspectFlags {
869 VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
870 VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
871 VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
872 VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
873}
874
875/// Sparse memory bind flags
876bitfield VkSparseMemoryBindFlags {
877 VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT = 0x00000001, /// Replicate the first 64 KiB memory block to the entire bind rage
878}
879
880/// Sparse image memory requirements flags
881bitfield VkSparseImageFormatFlags {
882 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT = 0x00000001, /// Image uses a single miptail region for all array slices
883 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.
884 VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT = 0x00000004, /// Image uses a non-standard sparse block size
885}
886
887/// Pipeline stages
888bitfield VkPipelineStageFlags {
889 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, /// Before subsequent commands are processed
890 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, /// Draw/DispatchIndirect command fetch
891 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, /// Vertex/index fetch
892 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, /// Vertex shading
Jesse Hallae38f732015-11-19 21:32:50 -0800893 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, /// Tessellation control shading
894 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, /// Tessellation evaluation shading
Jesse Halld27f6aa2015-08-15 17:58:48 -0700895 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, /// Geometry shading
896 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, /// Fragment shading
897 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, /// Early fragment (depth/stencil) tests
898 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, /// Late fragment (depth/stencil) tests
899 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, /// Color attachment writes
900 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, /// Compute shading
901 VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, /// Transfer/copy operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700902 VK_PIPELINE_STAGE_HOST_BIT = 0x00002000, /// Indicates host (CPU) is a source/sink of the dependency
Jesse Halld27f6aa2015-08-15 17:58:48 -0700903
904 VK_PIPELINE_STAGE_ALL_GRAPHICS = 0x000007FF, /// All stages of the graphics pipeline
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700905 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00001FFF, /// All graphics, compute, copy, and transition commands
906}
907
908/// Render pass attachment description flags
909bitfield VkAttachmentDescriptionFlags {
910 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 -0700911}
912
913/// Subpass description flags
914bitfield VkSubpassDescriptionFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700915}
916
917/// Command pool creation flags
918bitfield VkCmdPoolCreateFlags {
919 VK_CMD_POOL_CREATE_TRANSIENT_BIT = 0x00000001, /// Command buffers have a short lifetime
920 VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, /// Command buffers may release their memory individually
921}
922
923/// Command pool reset flags
924bitfield VkCmdPoolResetFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700925 VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the pool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700926}
927
928bitfield VkCmdBufferResetFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700929 VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the buffer
930}
931
932bitfield VkSampleCountFlags {
933 VK_SAMPLE_COUNT_1_BIT = 0x00000001,
934 VK_SAMPLE_COUNT_2_BIT = 0x00000002,
935 VK_SAMPLE_COUNT_4_BIT = 0x00000004,
936 VK_SAMPLE_COUNT_8_BIT = 0x00000008,
937 VK_SAMPLE_COUNT_16_BIT = 0x00000010,
938 VK_SAMPLE_COUNT_32_BIT = 0x00000020,
939 VK_SAMPLE_COUNT_64_BIT = 0x00000040,
940}
941
942bitfield VkStencilFaceFlags {
943 VK_STENCIL_FACE_NONE = 0x00000000, /// No faces
944 VK_STENCIL_FACE_FRONT_BIT = 0x00000001, /// Front face
945 VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face
Jesse Halld27f6aa2015-08-15 17:58:48 -0700946}
947
Michael Lentine88594d72015-11-12 12:49:45 -0800948//////////////////
949// Extensions //
950//////////////////
951
952@extension("VK_EXT_KHR_swapchain")
953bitfield VkSurfaceTransformFlagsKHR {
954 VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
955 VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
956 VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
957 VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
958 VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
959 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
960 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
961 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
962 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
963}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700964
965//////////////////
966// Structures //
967//////////////////
968
969class VkOffset2D {
970 s32 x
971 s32 y
972}
973
974class VkOffset3D {
975 s32 x
976 s32 y
977 s32 z
978}
979
980class VkExtent2D {
981 s32 width
982 s32 height
983}
984
985class VkExtent3D {
986 s32 width
987 s32 height
988 s32 depth
989}
990
991class VkViewport {
992 f32 originX
993 f32 originY
994 f32 width
995 f32 height
996 f32 minDepth
997 f32 maxDepth
998}
999
1000class VkRect2D {
1001 VkOffset2D offset
1002 VkExtent2D extent
1003}
1004
Jesse Halla15a4bf2015-11-19 22:48:02 -08001005class VkClearRect {
1006 VkRect2D rect
1007 u32 baseArrayLayer
1008 u32 numLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001009}
1010
1011class VkChannelMapping {
1012 VkChannelSwizzle r
1013 VkChannelSwizzle g
1014 VkChannelSwizzle b
1015 VkChannelSwizzle a
1016}
1017
1018class VkPhysicalDeviceProperties {
1019 u32 apiVersion
1020 u32 driverVersion
1021 u32 vendorId
1022 u32 deviceId
1023 VkPhysicalDeviceType deviceType
1024 char[VK_MAX_PHYSICAL_DEVICE_NAME] deviceName
1025 u8[VK_UUID_LENGTH] pipelineCacheUUID
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001026 VkPhysicalDeviceLimits limits
1027 VkPhysicalDeviceSparseProperties sparseProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07001028}
1029
1030class VkExtensionProperties {
1031 char[VK_MAX_EXTENSION_NAME] extName /// extension name
1032 u32 specVersion /// version of the extension specification implemented
1033}
1034
1035class VkLayerProperties {
1036 char[VK_MAX_EXTENSION_NAME] layerName /// layer name
1037 u32 specVersion /// version of the layer specification implemented
1038 u32 implVersion /// build or release version of the layer's library
Jesse Hallf09c6b12015-08-15 19:54:28 -07001039 char[VK_MAX_DESCRIPTION] description /// Free-form description of the layer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001040}
1041
Jesse Halla366a512015-11-19 22:30:07 -08001042class VkSubmitInfo {
1043 u32 waitSemCount
1044 const VkSemaphore* pWaitSemaphores
1045 u32 cmdBufferCount
1046 const VkCmdBuffer* pCommandBuffers
1047 u32 signalSemCount
1048 const VkSemaphore* pSignalSemaphores
1049}
1050
Jesse Halld27f6aa2015-08-15 17:58:48 -07001051class VkApplicationInfo {
1052 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1053 const void* pNext /// Next structure in chain
1054 const char* pAppName
1055 u32 appVersion
1056 const char* pEngineName
1057 u32 engineVersion
1058 u32 apiVersion
1059}
1060
1061class VkAllocCallbacks {
1062 void* pUserData
1063 PFN_vkAllocFunction pfnAlloc
1064 PFN_vkFreeFunction pfnFree
1065}
1066
1067class VkDeviceQueueCreateInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001068 VkStructureType sStype /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
1069 const void* pNext /// Pointer to next structure
Jesse Halld27f6aa2015-08-15 17:58:48 -07001070 u32 queueFamilyIndex
1071 u32 queueCount
1072}
1073
1074class VkDeviceCreateInfo {
1075 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1076 const void* pNext /// Pointer to next structure
Jesse Hallae38f732015-11-19 21:32:50 -08001077 u32 requestedQueueRecordCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001078 const VkDeviceQueueCreateInfo* pRequestedQueues
1079 u32 layerCount
1080 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
1081 u32 extensionCount
1082 const char* const* ppEnabledExtensionNames
1083 const VkPhysicalDeviceFeatures* pEnabledFeatures
Jesse Halld27f6aa2015-08-15 17:58:48 -07001084}
1085
1086class VkInstanceCreateInfo {
1087 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1088 const void* pNext /// Pointer to next structure
1089 const VkApplicationInfo* pAppInfo
1090 const VkAllocCallbacks* pAllocCb
1091 u32 layerCount
1092 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
1093 u32 extensionCount
1094 const char* const* ppEnabledExtensionNames /// Extension names to be enabled
1095}
1096
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001097class VkQueueFamilyProperties {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001098 VkQueueFlags queueFlags /// Queue flags
1099 u32 queueCount
Jesse Hallacfa5342015-11-19 21:51:33 -08001100 u32 timestampValidBits
Jesse Halld27f6aa2015-08-15 17:58:48 -07001101}
1102
1103class VkPhysicalDeviceMemoryProperties {
1104 u32 memoryTypeCount
1105 VkMemoryType[VK_MAX_MEMORY_TYPES] memoryTypes
1106 u32 memoryHeapCount
1107 VkMemoryHeap[VK_MAX_MEMORY_HEAPS] memoryHeaps
1108}
1109
1110class VkMemoryAllocInfo {
1111 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1112 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001113 VkDeviceSize allocationSize /// Size of memory allocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001114 u32 memoryTypeIndex /// Index of the of the memory type to allocate from
1115}
1116
1117class VkMemoryRequirements {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001118 VkDeviceSize size /// Specified in bytes
1119 VkDeviceSize alignment /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001120 u32 memoryTypeBits /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1121}
1122
1123class VkSparseImageFormatProperties {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001124 VkImageAspectFlags aspect
Jesse Halld27f6aa2015-08-15 17:58:48 -07001125 VkExtent3D imageGranularity
1126 VkSparseImageFormatFlags flags
1127}
1128
1129class VkSparseImageMemoryRequirements {
1130 VkSparseImageFormatProperties formatProps
1131 u32 imageMipTailStartLOD
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001132 VkDeviceSize imageMipTailSize /// Specified in bytes, must be a multiple of image block size / alignment
1133 VkDeviceSize imageMipTailOffset /// Specified in bytes, must be a multiple of image block size / alignment
1134 VkDeviceSize imageMipTailStride /// Specified in bytes, must be a multiple of image block size / alignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07001135}
1136
1137class VkMemoryType {
1138 VkMemoryPropertyFlags propertyFlags /// Memory properties of this memory type
1139 u32 heapIndex /// Index of the memory heap allocations of this memory type are taken from
1140}
1141
1142class VkMemoryHeap {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001143 VkDeviceSize size /// Available memory in the heap
Jesse Halld27f6aa2015-08-15 17:58:48 -07001144 VkMemoryHeapFlags flags /// Flags for the heap
1145}
1146
1147class VkMappedMemoryRange {
1148 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1149 const void* pNext /// Pointer to next structure
1150 VkDeviceMemory mem /// Mapped memory object
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001151 VkDeviceSize offset /// Offset within the mapped memory the range starts from
1152 VkDeviceSize size /// Size of the range within the mapped memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07001153}
1154
1155class VkFormatProperties {
1156 VkFormatFeatureFlags linearTilingFeatures /// Format features in case of linear tiling
1157 VkFormatFeatureFlags optimalTilingFeatures /// Format features in case of optimal tiling
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001158 VkFormatFeatureFlags bufferFeatures /// Format features supported by buffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001159}
1160
1161class VkImageFormatProperties {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001162 VkExtent3D maxExtent /// max image dimensions for this resource type
1163 u32 maxMipLevels /// max number of mipmap levels for this resource type
Jesse Halla15a4bf2015-11-19 22:48:02 -08001164 u32 maxArrayLayers /// max array layers for this resource type
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001165 VkSampleCountFlags sampleCounts /// supported sample counts for this resource type
1166 VkDeviceSize maxResourceSize /// max size (in bytes) of this resource type
1167}
1168
Jesse Halla15a4bf2015-11-19 22:48:02 -08001169class VkDescriptorImageInfo {
1170 VkSampler sampler
1171 VkImageView imageView
1172 VkImageLayout imageLayout
1173}
1174
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001175class VkDescriptorBufferInfo {
1176 VkBuffer buffer /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
1177 VkDeviceSize offset /// Base offset from buffer start in bytes to update in the descriptor set.
1178 VkDeviceSize range /// Size in bytes of the buffer resource for this descriptor update.
Jesse Halld27f6aa2015-08-15 17:58:48 -07001179}
1180
Jesse Halla15a4bf2015-11-19 22:48:02 -08001181@union
Jesse Halld27f6aa2015-08-15 17:58:48 -07001182class VkDescriptorInfo {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001183 VkDescriptorImageInfo imageInfo
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001184 VkDescriptorBufferInfo bufferInfo /// Raw buffer, size and offset for UNIFORM_BUFFER[_DYNAMIC] or STORAGE_BUFFER[_DYNAMIC] descriptor types. Ignored otherwise.
Jesse Halla15a4bf2015-11-19 22:48:02 -08001185 VkBufferView texelBufferView
Jesse Halld27f6aa2015-08-15 17:58:48 -07001186}
1187
1188class VkWriteDescriptorSet {
1189 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1190 const void* pNext /// Pointer to next structure
1191 VkDescriptorSet destSet /// Destination descriptor set
1192 u32 destBinding /// Binding within the destination descriptor set to write
1193 u32 destArrayElement /// Array element within the destination binding to write
1194 u32 count /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
1195 VkDescriptorType descriptorType /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
1196 const VkDescriptorInfo* pDescriptors /// Array of info structures describing the descriptors to write
1197}
1198
1199class VkCopyDescriptorSet {
1200 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1201 const void* pNext /// Pointer to next structure
1202 VkDescriptorSet srcSet /// Source descriptor set
1203 u32 srcBinding /// Binding within the source descriptor set to copy from
1204 u32 srcArrayElement /// Array element within the source binding to copy from
1205 VkDescriptorSet destSet /// Destination descriptor set
1206 u32 destBinding /// Binding within the destination descriptor set to copy to
1207 u32 destArrayElement /// Array element within the destination binding to copy to
1208 u32 count /// Number of descriptors to copy
1209}
1210
1211class VkBufferCreateInfo {
1212 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1213 const void* pNext /// Pointer to next structure.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001214 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001215 VkBufferUsageFlags usage /// Buffer usage flags
1216 VkBufferCreateFlags flags /// Buffer creation flags
1217 VkSharingMode sharingMode
1218 u32 queueFamilyCount
1219 const u32* pQueueFamilyIndices
1220}
1221
1222class VkBufferViewCreateInfo {
1223 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1224 const void* pNext /// Pointer to next structure.
1225 VkBuffer buffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001226 VkFormat format /// Optionally specifies format of elements
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001227 VkDeviceSize offset /// Specified in bytes
1228 VkDeviceSize range /// View size specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001229}
1230
1231class VkImageSubresource {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001232 VkImageAspectFlags aspect
Jesse Halld27f6aa2015-08-15 17:58:48 -07001233 u32 mipLevel
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001234 u32 arrayLayer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001235}
1236
1237class VkImageSubresourceRange {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001238 VkImageAspectFlags aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001239 u32 baseMipLevel
Jesse Halla15a4bf2015-11-19 22:48:02 -08001240 u32 numLevels
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001241 u32 baseArrayLayer
Jesse Halla15a4bf2015-11-19 22:48:02 -08001242 u32 numLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001243}
1244
1245class VkMemoryBarrier {
1246 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1247 const void* pNext /// Pointer to next structure.
1248 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1249 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1250}
1251
1252class VkBufferMemoryBarrier {
1253 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1254 const void* pNext /// Pointer to next structure.
1255 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1256 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1257 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
1258 u32 destQueueFamilyIndex /// Queue family to transition ownership to
1259 VkBuffer buffer /// Buffer to sync
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001260 VkDeviceSize offset /// Offset within the buffer to sync
1261 VkDeviceSize size /// Amount of bytes to sync
Jesse Halld27f6aa2015-08-15 17:58:48 -07001262}
1263
1264class VkImageMemoryBarrier {
1265 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1266 const void* pNext /// Pointer to next structure.
1267 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1268 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1269 VkImageLayout oldLayout /// Current layout of the image
1270 VkImageLayout newLayout /// New layout to transition the image to
1271 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
1272 u32 destQueueFamilyIndex /// Queue family to transition ownership to
1273 VkImage image /// Image to sync
1274 VkImageSubresourceRange subresourceRange /// Subresource range to sync
1275}
1276
1277class VkImageCreateInfo {
1278 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1279 const void* pNext /// Pointer to next structure.
1280 VkImageType imageType
1281 VkFormat format
1282 VkExtent3D extent
1283 u32 mipLevels
Jesse Halla15a4bf2015-11-19 22:48:02 -08001284 u32 arrayLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001285 u32 samples
1286 VkImageTiling tiling
1287 VkImageUsageFlags usage /// Image usage flags
1288 VkImageCreateFlags flags /// Image creation flags
1289 VkSharingMode sharingMode /// Cross-queue-family sharing mode
1290 u32 queueFamilyCount /// Number of queue families to share across
1291 const u32* pQueueFamilyIndices /// Array of queue family indices to share across
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001292 VkImageLayout initialLayout /// Initial image layout for all subresources
Jesse Halld27f6aa2015-08-15 17:58:48 -07001293}
1294
1295class VkSubresourceLayout {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001296 VkDeviceSize offset /// Specified in bytes
1297 VkDeviceSize size /// Specified in bytes
1298 VkDeviceSize rowPitch /// Specified in bytes
1299 VkDeviceSize depthPitch /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001300}
1301
1302class VkImageViewCreateInfo {
1303 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1304 const void* pNext /// Pointer to next structure
1305 VkImage image
1306 VkImageViewType viewType
1307 VkFormat format
1308 VkChannelMapping channels
1309 VkImageSubresourceRange subresourceRange
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001310 VkImageViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001311}
1312
1313class VkBufferCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001314 VkDeviceSize srcOffset /// Specified in bytes
1315 VkDeviceSize destOffset /// Specified in bytes
1316 VkDeviceSize copySize /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001317}
1318
1319class VkSparseMemoryBindInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001320 VkDeviceSize rangeOffset /// Specified in bytes
1321 VkDeviceSize rangeSize /// Specified in bytes
1322 VkDeviceSize memOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001323 VkDeviceMemory mem
1324 VkSparseMemoryBindFlags flags
1325}
1326
1327class VkSparseImageMemoryBindInfo {
1328 VkImageSubresource subresource
1329 VkOffset3D offset
1330 VkExtent3D extent
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001331 VkDeviceSize memOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001332 VkDeviceMemory mem
1333 VkSparseMemoryBindFlags flags
1334}
1335
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001336class VkImageSubresourceCopy {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001337 VkImageAspectFlags aspect
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001338 u32 mipLevel
Jesse Halla15a4bf2015-11-19 22:48:02 -08001339 u32 baseArrayLayer
1340 u32 numLayers
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001341}
1342
Jesse Halld27f6aa2015-08-15 17:58:48 -07001343class VkImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001344 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001345 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001346 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001347 VkOffset3D destOffset /// Specified in pixels for both compressed and uncompressed images
1348 VkExtent3D extent /// Specified in pixels for both compressed and uncompressed images
1349}
1350
1351class VkImageBlit {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001352 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001353 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
1354 VkExtent3D srcExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001355 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001356 VkOffset3D destOffset /// Specified in pixels for both compressed and uncompressed images
1357 VkExtent3D destExtent /// Specified in pixels for both compressed and uncompressed images
1358}
1359
1360class VkBufferImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001361 VkDeviceSize bufferOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001362 u32 bufferRowLength /// Specified in texels
1363 u32 bufferImageHeight
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001364 VkImageSubresourceCopy imageSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001365 VkOffset3D imageOffset /// Specified in pixels for both compressed and uncompressed images
1366 VkExtent3D imageExtent /// Specified in pixels for both compressed and uncompressed images
1367}
1368
1369class VkImageResolve {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001370 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001371 VkOffset3D srcOffset
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001372 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001373 VkOffset3D destOffset
1374 VkExtent3D extent
1375}
1376
1377class VkShaderModuleCreateInfo {
1378 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1379 const void* pNext /// Pointer to next structure
1380 platform.size_t codeSize /// Specified in bytes
1381 const void* pCode /// Binary code of size codeSize
1382 VkShaderModuleCreateFlags flags /// Reserved
1383}
1384
1385class VkShaderCreateInfo {
1386 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
1387 const void* pNext /// Pointer to next structure
1388 VkShaderModule module /// Module containing entry point
1389 const char* pName /// Null-terminated entry point name
1390 VkShaderCreateFlags flags /// Reserved
Jesse Halla15a4bf2015-11-19 22:48:02 -08001391 VkShaderStageFlags stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001392}
1393
1394class VkDescriptorSetLayoutBinding {
1395 VkDescriptorType descriptorType /// Type of the descriptors in this binding
1396 u32 arraySize /// Number of descriptors in this binding
1397 VkShaderStageFlags stageFlags /// Shader stages this binding is visible to
1398 const VkSampler* pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
1399}
1400
1401class VkDescriptorSetLayoutCreateInfo {
1402 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1403 const void* pNext /// Pointer to next structure
1404 u32 count /// Number of bindings in the descriptor set layout
1405 const VkDescriptorSetLayoutBinding* pBinding /// Array of descriptor set layout bindings
1406}
1407
1408class VkDescriptorTypeCount {
1409 VkDescriptorType type
1410 u32 count
1411}
1412
1413class VkDescriptorPoolCreateInfo {
1414 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1415 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001416 VkDescriptorPoolUsage poolUsage
1417 u32 maxSets
Jesse Halld27f6aa2015-08-15 17:58:48 -07001418 u32 count
1419 const VkDescriptorTypeCount* pTypeCount
1420}
1421
1422class VkSpecializationMapEntry {
1423 u32 constantId /// The SpecConstant ID specified in the BIL
1424 platform.size_t size /// Size in bytes of the SpecConstant
1425 u32 offset /// Offset of the value in the data block
1426}
1427
1428class VkSpecializationInfo {
1429 u32 mapEntryCount /// Number of entries in the map
1430 const VkSpecializationMapEntry* pMap /// Array of map entries
1431 platform.size_t dataSize /// Size in bytes of pData
1432 const void* pData /// Pointer to SpecConstant data
1433}
1434
1435class VkPipelineShaderStageCreateInfo {
1436 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1437 const void* pNext /// Pointer to next structure
Jesse Halla15a4bf2015-11-19 22:48:02 -08001438 VkShaderStageFlags stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001439 VkShader shader
1440 const VkSpecializationInfo* pSpecializationInfo
1441}
1442
1443class VkComputePipelineCreateInfo {
1444 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1445 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001446 VkPipelineShaderStageCreateInfo stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001447 VkPipelineCreateFlags flags /// Pipeline creation flags
1448 VkPipelineLayout layout /// Interface layout of the pipeline
1449 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
1450 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
1451}
1452
1453class VkVertexInputBindingDescription {
1454 u32 binding /// Vertex buffer binding id
1455 u32 strideInBytes /// Distance between vertices in bytes (0 = no advancement)
1456 VkVertexInputStepRate stepRate /// Rate at which binding is incremented
1457}
1458
1459class VkVertexInputAttributeDescription {
1460 u32 location /// location of the shader vertex attrib
1461 u32 binding /// Vertex buffer binding id
1462 VkFormat format /// format of source data
1463 u32 offsetInBytes /// Offset of first element in bytes from base of vertex
1464}
1465
1466class VkPipelineVertexInputStateCreateInfo {
1467 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
1468 const void* pNext /// Pointer to next structure
1469 u32 bindingCount /// number of bindings
1470 const VkVertexInputBindingDescription* pVertexBindingDescriptions
1471 u32 attributeCount /// number of attributes
1472 const VkVertexInputAttributeDescription* pVertexAttributeDescriptions
1473}
1474
1475class VkPipelineInputAssemblyStateCreateInfo {
1476 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
1477 const void* pNext /// Pointer to next structure
1478 VkPrimitiveTopology topology
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001479 VkBool32 primitiveRestartEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001480}
1481
1482class VkPipelineTessellationStateCreateInfo {
1483 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
1484 const void* pNext /// Pointer to next structure
1485 u32 patchControlPoints
1486}
1487
1488class VkPipelineViewportStateCreateInfo {
1489 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
1490 const void* pNext /// Pointer to next structure
1491 u32 viewportCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001492 const VkViewport* pViewports
1493 u32 scissorCount
1494 const VkRect2D* pScissors
Jesse Halld27f6aa2015-08-15 17:58:48 -07001495}
1496
1497class VkPipelineRasterStateCreateInfo {
1498 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
1499 const void* pNext /// Pointer to next structure
Jesse Hallae38f732015-11-19 21:32:50 -08001500 VkBool32 depthClampEnable
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001501 VkBool32 rasterizerDiscardEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001502 VkFillMode fillMode /// optional (GL45)
1503 VkCullMode cullMode
1504 VkFrontFace frontFace
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001505 VkBool32 depthBiasEnable
1506 f32 depthBias
1507 f32 depthBiasClamp
1508 f32 slopeScaledDepthBias
1509 f32 lineWidth
Jesse Halld27f6aa2015-08-15 17:58:48 -07001510}
1511
1512class VkPipelineMultisampleStateCreateInfo {
1513 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
1514 const void* pNext /// Pointer to next structure
1515 u32 rasterSamples /// Number of samples used for rasterization
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001516 VkBool32 sampleShadingEnable /// optional (GL45)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001517 f32 minSampleShading /// optional (GL45)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001518 const VkSampleMask* pSampleMask
Jesse Hallacfa5342015-11-19 21:51:33 -08001519 VkBool32 alphaToCoverageEnable
1520 VkBool32 alphaToOneEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001521}
1522
1523class VkPipelineColorBlendAttachmentState {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001524 VkBool32 blendEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001525 VkBlend srcBlendColor
1526 VkBlend destBlendColor
1527 VkBlendOp blendOpColor
1528 VkBlend srcBlendAlpha
1529 VkBlend destBlendAlpha
1530 VkBlendOp blendOpAlpha
1531 VkChannelFlags channelWriteMask
1532}
1533
1534class VkPipelineColorBlendStateCreateInfo {
1535 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
1536 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001537 VkBool32 logicOpEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001538 VkLogicOp logicOp
1539 u32 attachmentCount /// # of pAttachments
1540 const VkPipelineColorBlendAttachmentState* pAttachments
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001541 f32[4] blendConst
Jesse Halld27f6aa2015-08-15 17:58:48 -07001542}
1543
1544class VkStencilOpState {
1545 VkStencilOp stencilFailOp
1546 VkStencilOp stencilPassOp
1547 VkStencilOp stencilDepthFailOp
1548 VkCompareOp stencilCompareOp
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001549 u32 stencilCompareMask
1550 u32 stencilWriteMask
1551 u32 stencilReference
Jesse Halld27f6aa2015-08-15 17:58:48 -07001552}
1553
1554class VkPipelineDepthStencilStateCreateInfo {
1555 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
1556 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001557 VkBool32 depthTestEnable
1558 VkBool32 depthWriteEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001559 VkCompareOp depthCompareOp
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001560 VkBool32 depthBoundsTestEnable /// optional (depth_bounds_test)
1561 VkBool32 stencilTestEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001562 VkStencilOpState front
1563 VkStencilOpState back
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001564 f32 minDepthBounds
1565 f32 maxDepthBounds
1566}
1567
1568class VkPipelineDynamicStateCreateInfo {
1569 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
1570 const void* pNext /// Pointer to next structure
1571 u32 dynamicStateCount
1572 const VkDynamicState* pDynamicStates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001573}
1574
1575class VkGraphicsPipelineCreateInfo {
1576 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
1577 const void* pNext /// Pointer to next structure
1578 u32 stageCount
1579 const VkPipelineShaderStageCreateInfo* pStages /// One entry for each active shader stage
1580 const VkPipelineVertexInputStateCreateInfo* pVertexInputState
1581 const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState
1582 const VkPipelineTessellationStateCreateInfo* pTessellationState
1583 const VkPipelineViewportStateCreateInfo* pViewportState
1584 const VkPipelineRasterStateCreateInfo* pRasterState
1585 const VkPipelineMultisampleStateCreateInfo* pMultisampleState
1586 const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState
1587 const VkPipelineColorBlendStateCreateInfo* pColorBlendState
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001588 const VkPipelineDynamicStateCreateInfo* pDynamicState
Jesse Halld27f6aa2015-08-15 17:58:48 -07001589 VkPipelineCreateFlags flags /// Pipeline creation flags
1590 VkPipelineLayout layout /// Interface layout of the pipeline
1591 VkRenderPass renderPass
1592 u32 subpass
1593 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
1594 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
1595}
1596
1597class VkPipelineCacheCreateInfo {
1598 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
1599 const void* pNext /// Pointer to next structure
1600 platform.size_t initialSize /// Size of initial data to populate cache, in bytes
1601 const void* initialData /// Initial data to populate cache
1602 platform.size_t maxSize /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
1603}
1604
1605class VkPushConstantRange {
1606 VkShaderStageFlags stageFlags /// Which stages use the range
1607 u32 start /// Start of the range, in bytes
1608 u32 length /// Length of the range, in bytes
1609}
1610
1611class VkPipelineLayoutCreateInfo {
1612 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
1613 const void* pNext /// Pointer to next structure
1614 u32 descriptorSetCount /// Number of descriptor sets interfaced by the pipeline
1615 const VkDescriptorSetLayout* pSetLayouts /// Array of <setCount> number of descriptor set layout objects defining the layout of the
1616 u32 pushConstantRangeCount /// Number of push-constant ranges used by the pipeline
1617 const VkPushConstantRange* pPushConstantRanges /// Array of pushConstantRangeCount number of ranges used by various shader stages
1618}
1619
1620class VkSamplerCreateInfo {
1621 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
1622 const void* pNext /// Pointer to next structure
1623 VkTexFilter magFilter /// Filter mode for magnification
1624 VkTexFilter minFilter /// Filter mode for minifiation
1625 VkTexMipmapMode mipMode /// Mipmap selection mode
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001626 VkTexAddressMode addressModeU
1627 VkTexAddressMode addressModeV
1628 VkTexAddressMode addressModeW
Jesse Halld27f6aa2015-08-15 17:58:48 -07001629 f32 mipLodBias
1630 f32 maxAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001631 VkBool32 compareEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001632 VkCompareOp compareOp
1633 f32 minLod
1634 f32 maxLod
1635 VkBorderColor borderColor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001636 VkBool32 unnormalizedCoordinates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001637}
1638
1639class VkCmdPoolCreateInfo {
1640 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO
1641 const void* pNext /// Pointer to next structure
1642 u32 queueFamilyIndex
1643 VkCmdPoolCreateFlags flags /// Command pool creation flags
1644}
1645
1646class VkCmdBufferCreateInfo {
1647 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
1648 const void* pNext /// Pointer to next structure
1649 VkCmdPool cmdPool
1650 VkCmdBufferLevel level
1651 VkCmdBufferCreateFlags flags /// Command buffer creation flags
1652}
1653
1654class VkCmdBufferBeginInfo {
1655 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
1656 const void* pNext /// Pointer to next structure
Jesse Halla15a4bf2015-11-19 22:48:02 -08001657 VkCmdBufferUsageFlags flags /// Command buffer usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001658 VkRenderPass renderPass /// Render pass for secondary command buffers
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001659 u32 subpass
Jesse Halld27f6aa2015-08-15 17:58:48 -07001660 VkFramebuffer framebuffer /// Framebuffer for secondary command buffers
1661}
1662
1663class VkRenderPassBeginInfo {
1664 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
1665 const void* pNext /// Pointer to next structure
1666 VkRenderPass renderPass
1667 VkFramebuffer framebuffer
1668 VkRect2D renderArea
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001669 u32 clearValueCount
1670 const VkClearValue* pClearValues
Jesse Halld27f6aa2015-08-15 17:58:48 -07001671}
1672
1673@union
1674/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
1675class VkClearColorValue {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001676 f32[4] float32
1677 s32[4] int32
1678 u32[4] uint32
Jesse Halld27f6aa2015-08-15 17:58:48 -07001679}
1680
1681class VkClearDepthStencilValue {
1682 f32 depth
1683 u32 stencil
1684}
1685
1686@union
1687/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
1688class VkClearValue {
1689 VkClearColorValue color
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001690 VkClearDepthStencilValue depthStencil
Jesse Halld27f6aa2015-08-15 17:58:48 -07001691}
1692
Jesse Hallae38f732015-11-19 21:32:50 -08001693class VkClearAttachment {
1694 VkImageAspectFlags aspectMask
1695 u32 colorAttachment
1696 VkClearValue clearValue
1697}
1698
Jesse Halld27f6aa2015-08-15 17:58:48 -07001699class VkAttachmentDescription {
1700 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION
1701 const void* pNext /// Pointer to next structure
1702 VkFormat format
1703 u32 samples
1704 VkAttachmentLoadOp loadOp /// Load op for color or depth data
1705 VkAttachmentStoreOp storeOp /// Store op for color or depth data
1706 VkAttachmentLoadOp stencilLoadOp /// Load op for stencil data
1707 VkAttachmentStoreOp stencilStoreOp /// Store op for stencil data
1708 VkImageLayout initialLayout
1709 VkImageLayout finalLayout
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001710 VkAttachmentDescriptionFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001711}
1712
1713class VkAttachmentReference {
1714 u32 attachment
1715 VkImageLayout layout
1716}
1717
1718class VkSubpassDescription {
1719 VkStructureType sType /// Must be VK_STRUCTURE_SUBPASS_DESCRIPTION
1720 const void* pNext /// Pointer to next structure
1721 VkPipelineBindPoint pipelineBindPoint /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
1722 VkSubpassDescriptionFlags flags
1723 u32 inputCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001724 const VkAttachmentReference* pInputAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001725 u32 colorCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001726 const VkAttachmentReference* pColorAttachments
1727 const VkAttachmentReference* pResolveAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001728 VkAttachmentReference depthStencilAttachment
1729 u32 preserveCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001730 const VkAttachmentReference* pPreserveAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001731}
1732
1733class VkSubpassDependency {
1734 VkStructureType sType /// Must be VK_STRUCTURE_SUBPASS_DEPENDENCY
1735 const void* pNext /// Pointer to next structure
1736 u32 srcSubpass
1737 u32 destSubpass
1738 VkPipelineStageFlags srcStageMask
1739 VkPipelineStageFlags destStageMask
1740 VkMemoryOutputFlags outputMask
1741 VkMemoryInputFlags inputMask
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001742 VkBool32 byRegion
Jesse Halld27f6aa2015-08-15 17:58:48 -07001743}
1744
1745class VkRenderPassCreateInfo {
1746 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
1747 const void* pNext /// Pointer to next structure
1748 u32 attachmentCount
1749 const VkAttachmentDescription* pAttachments
1750 u32 subpassCount
1751 const VkSubpassDescription* pSubpasses
1752 u32 dependencyCount
1753 const VkSubpassDependency* pDependencies
1754}
1755
1756class VkEventCreateInfo {
1757 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
1758 const void* pNext /// Pointer to next structure
1759 VkEventCreateFlags flags /// Event creation flags
1760}
1761
1762class VkFenceCreateInfo {
1763 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
1764 const void* pNext /// Pointer to next structure
1765 VkFenceCreateFlags flags /// Fence creation flags
1766}
1767
1768class VkPhysicalDeviceFeatures {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001769 VkBool32 robustBufferAccess /// out of bounds buffer accesses are well defined
1770 VkBool32 fullDrawIndexUint32 /// full 32-bit range of indices for indexed draw calls
1771 VkBool32 imageCubeArray /// image views which are arrays of cube maps
1772 VkBool32 independentBlend /// blending operations are controlled per-attachment
1773 VkBool32 geometryShader /// geometry stage
1774 VkBool32 tessellationShader /// tessellation control and evaluation stage
1775 VkBool32 sampleRateShading /// per-sample shading and interpolation
1776 VkBool32 dualSourceBlend /// blend operations which take two sources
1777 VkBool32 logicOp /// logic operations
1778 VkBool32 multiDrawIndirect /// multi draw indirect
Jesse Hallae38f732015-11-19 21:32:50 -08001779 VkBool32 depthClamp /// depth clamping
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001780 VkBool32 depthBiasClamp /// depth bias clamping
1781 VkBool32 fillModeNonSolid /// point and wireframe fill modes
1782 VkBool32 depthBounds /// depth bounds test
1783 VkBool32 wideLines /// lines with width greater than 1
1784 VkBool32 largePoints /// points with size greater than 1
1785 VkBool32 textureCompressionETC2 /// ETC texture compression formats
1786 VkBool32 textureCompressionASTC_LDR /// ASTC LDR texture compression formats
1787 VkBool32 textureCompressionBC /// BC1-7 texture compressed formats
1788 VkBool32 occlusionQueryNonConservative /// non-conservative (exact) occlusion queries
1789 VkBool32 pipelineStatisticsQuery /// pipeline statistics query
1790 VkBool32 vertexSideEffects /// storage buffers and images in vertex stage
1791 VkBool32 tessellationSideEffects /// storage buffers and images in tessellation stage
1792 VkBool32 geometrySideEffects /// storage buffers and images in geometry stage
1793 VkBool32 fragmentSideEffects /// storage buffers and images in fragment stage
1794 VkBool32 shaderTessellationPointSize /// tessellation stage can export point size
1795 VkBool32 shaderGeometryPointSize /// geometry stage can export point size
1796 VkBool32 shaderImageGatherExtended /// texture gather with run-time values and independent offsets
1797 VkBool32 shaderStorageImageExtendedFormats /// the extended set of formats can be used for storage images
1798 VkBool32 shaderStorageImageMultisample /// multisample images can be used for storage images
1799 VkBool32 shaderUniformBufferArrayDynamicIndexing /// arrays of uniform buffers can be accessed with dynamically uniform indices
1800 VkBool32 shaderSampledImageArrayDynamicIndexing /// arrays of sampled images can be accessed with dynamically uniform indices
1801 VkBool32 shaderStorageBufferArrayDynamicIndexing /// arrays of storage buffers can be accessed with dynamically uniform indices
1802 VkBool32 shaderStorageImageArrayDynamicIndexing /// arrays of storage images can be accessed with dynamically uniform indices
1803 VkBool32 shaderClipDistance /// clip distance in shaders
1804 VkBool32 shaderCullDistance /// cull distance in shaders
1805 VkBool32 shaderFloat64 /// 64-bit floats (doubles) in shaders
1806 VkBool32 shaderInt64 /// 64-bit integers in shaders
1807 VkBool32 shaderInt16 /// 16-bit integers in shaders
1808 VkBool32 shaderResourceResidency /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
1809 VkBool32 shaderResourceMinLOD /// shader can use texture operations that specify minimum resource LOD
1810 VkBool32 alphaToOne /// The fragment alpha channel can be forced to maximum representable alpha value
1811 VkBool32 sparseBinding /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
1812 VkBool32 sparseResidencyBuffer /// Sparse resources support: GPU can access partially resident buffers
1813 VkBool32 sparseResidencyImage2D /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
1814 VkBool32 sparseResidencyImage3D /// Sparse resources support: GPU can access partially resident 3D images
1815 VkBool32 sparseResidency2Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
1816 VkBool32 sparseResidency4Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
1817 VkBool32 sparseResidency8Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
1818 VkBool32 sparseResidency16Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
1819 VkBool32 sparseResidencyAliased /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001820}
1821
1822class VkPhysicalDeviceLimits {
1823 /// resource maximum sizes
1824 u32 maxImageDimension1D /// max 1D image dimension
1825 u32 maxImageDimension2D /// max 2D image dimension
1826 u32 maxImageDimension3D /// max 3D image dimension
1827 u32 maxImageDimensionCube /// max cubemap image dimension
1828 u32 maxImageArrayLayers /// max layers for image arrays
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001829 VkSampleCountFlags sampleCounts /// sample counts supported for all images supporting rendering and sampling
Jesse Halld27f6aa2015-08-15 17:58:48 -07001830 u32 maxTexelBufferSize /// max texel buffer size (bytes)
1831 u32 maxUniformBufferSize /// max uniform buffer size (bytes)
1832 u32 maxStorageBufferSize /// max storage buffer size (bytes)
1833 u32 maxPushConstantsSize /// max size of the push constants pool (bytes)
1834 /// memory limits
1835 u32 maxMemoryAllocationCount /// max number of device memory allocations supported
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001836 VkDeviceSize bufferImageGranularity /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
1837 VkDeviceSize sparseAddressSpaceSize /// Total address space available for sparse allocations (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001838 /// descriptor set limits
1839 u32 maxBoundDescriptorSets /// max number of descriptors sets that can be bound to a pipeline
1840 u32 maxDescriptorSets /// max number of allocated descriptor sets
1841 u32 maxPerStageDescriptorSamplers /// max num of samplers allowed per-stage in a descriptor set
1842 u32 maxPerStageDescriptorUniformBuffers /// max num of uniform buffers allowed per-stage in a descriptor set
1843 u32 maxPerStageDescriptorStorageBuffers /// max num of storage buffers allowed per-stage in a descriptor set
1844 u32 maxPerStageDescriptorSampledImages /// max num of sampled images allowed per-stage in a descriptor set
1845 u32 maxPerStageDescriptorStorageImages /// max num of storage images allowed per-stage in a descriptor set
1846 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set
1847 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001848 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07001849 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001850 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07001851 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set
1852 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set
1853 /// vertex stage limits
1854 u32 maxVertexInputAttributes /// max num of vertex input attribute slots
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001855 u32 maxVertexInputBindings /// max num of vertex input binding slots
Jesse Halld27f6aa2015-08-15 17:58:48 -07001856 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset
1857 u32 maxVertexInputBindingStride /// max vertex input binding stride
1858 u32 maxVertexOutputComponents /// max num of output components written by vertex shader
1859 /// tessellation control stage limits
Jesse Hallae38f732015-11-19 21:32:50 -08001860 u32 maxTessellationGenLevel /// max level supported by tess primitive generator
1861 u32 maxTessellationPatchSize /// max patch size (vertices)
1862 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS
1863 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
1864 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS
1865 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS
1866 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES
1867 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES
Jesse Halld27f6aa2015-08-15 17:58:48 -07001868 /// geometry stage limits
1869 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader
1870 u32 maxGeometryInputComponents /// max num of input components read in geometry stage
1871 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage
1872 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage
1873 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage
1874 /// fragment stage limits
1875 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage
1876 u32 maxFragmentOutputBuffers /// max num of output buffers written in fragment stage
1877 u32 maxFragmentDualSourceBuffers /// max num of output buffers written when using dual source blending
1878 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers
1879 /// compute stage limits
1880 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes)
1881 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z)
1882 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group
1883 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z)
1884
1885 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y
1886 u32 subTexelPrecisionBits /// num bits of subtexel precision
1887 u32 mipmapPrecisionBits /// num bits of mipmap precision
1888
1889 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices)
1890 u32 maxDrawIndirectInstanceCount /// max instance count for indirect draw calls
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001891 VkBool32 primitiveRestartForPatches /// is primitive restart supported for PATCHES
Jesse Halld27f6aa2015-08-15 17:58:48 -07001892
1893 f32 maxSamplerLodBias /// max absolute sampler level of detail bias
1894 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy
1895
1896 u32 maxViewports /// max number of active viewports
Jesse Halld27f6aa2015-08-15 17:58:48 -07001897 u32[2] maxViewportDimensions /// max viewport dimensions (x,y)
1898 f32[2] viewportBoundsRange /// viewport bounds range (min,max)
1899 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport
1900
1901 u32 minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes)
Jesse Hallf09c6b12015-08-15 19:54:28 -07001902 u32 minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001903 u32 minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes)
1904 u32 minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes)
1905
1906 u32 minTexelOffset /// min texel offset for OpTextureSampleOffset
1907 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset
1908 u32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset
1909 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset
1910 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset
1911 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset
1912 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset
1913
1914 u32 maxFramebufferWidth /// max width for a framebuffer
1915 u32 maxFramebufferHeight /// max height for a framebuffer
1916 u32 maxFramebufferLayers /// max layer count for a layered framebuffer
1917 u32 maxFramebufferColorSamples /// max color sample count for a framebuffer
1918 u32 maxFramebufferDepthSamples /// max depth sample count for a framebuffer
1919 u32 maxFramebufferStencilSamples /// max stencil sample count for a framebuffer
1920 u32 maxColorAttachments /// max num of framebuffer color attachments
1921
1922 u32 maxSampledImageColorSamples /// max num of color samples for a non-integer sampled image
1923 u32 maxSampledImageDepthSamples /// max num of depth/stencil samples for a sampled image
1924 u32 maxSampledImageIntegerSamples /// max num of samples supported for an integer image
1925 u32 maxStorageImageSamples /// max num of samples for a storage image
1926 u32 maxSampleMaskWords /// max num of sample mask words
1927
1928 u64 timestampFrequency /// 1/clock_tick_granularity for timestamp queries
1929
1930 u32 maxClipDistances /// max number of clip distances
1931 u32 maxCullDistances /// max number of cull distances
1932 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping
1933
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001934 f32[2] pointSizeRange /// range (min,max) of supported point sizes
1935 f32[2] lineWidthRange /// range (min,max) of supported line widths
Jesse Halld27f6aa2015-08-15 17:58:48 -07001936 f32 pointSizeGranularity /// granularity of supported point sizes
1937 f32 lineWidthGranularity /// granularity of supported line widths
1938}
1939
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001940class VkPhysicalDeviceSparseProperties {
1941 VkBool32 residencyStandard2DBlockShape /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
1942 VkBool32 residencyStandard2DMSBlockShape /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
1943 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
1944 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
1945 VkBool32 residencyNonResident /// Sparse resources support: GPU can safely access non-resident regions of a resource, read values from read-write resources are undefined
1946 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
1947}
1948
Jesse Halld27f6aa2015-08-15 17:58:48 -07001949class VkSemaphoreCreateInfo {
1950 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
1951 const void* pNext /// Pointer to next structure
1952 VkSemaphoreCreateFlags flags /// Semaphore creation flags
1953}
1954
1955class VkQueryPoolCreateInfo {
1956 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
1957 const void* pNext /// Pointer to next structure
1958 VkQueryType queryType
1959 u32 slots
1960 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional
1961}
1962
1963class VkFramebufferCreateInfo {
1964 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
1965 const void* pNext /// Pointer to next structure
1966 VkRenderPass renderPass
1967 u32 attachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001968 const VkImageView* pAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001969 u32 width
1970 u32 height
1971 u32 layers
1972}
1973
1974class VkDrawIndirectCmd {
1975 u32 vertexCount
1976 u32 instanceCount
1977 u32 firstVertex
1978 u32 firstInstance
1979}
1980
1981class VkDrawIndexedIndirectCmd {
1982 u32 indexCount
1983 u32 instanceCount
1984 u32 firstIndex
1985 s32 vertexOffset
1986 u32 firstInstance
1987}
1988
1989class VkDispatchIndirectCmd {
1990 u32 x
1991 u32 y
1992 u32 z
1993}
1994
Michael Lentine88594d72015-11-12 12:49:45 -08001995//////////////////
1996// Extensions //
1997//////////////////
1998
1999@extension("VK_EXT_KHR_device_swapchain")
2000class VkSurfacePropertiesKHR {
2001 u32 minImageCount
2002 u32 maxImageCount
2003 VkExtent2D currentExtent
2004 VkExtent2D minImageExtent
2005 VkExtent2D maxImageExtent
2006 VkSurfaceTransformFlagsKHR supportedTransforms
2007 VkSurfaceTransformKHR currentTransform
2008 u32 maxImageArraySize
2009 VkImageUsageFlags supportedUsageFlags
2010}
2011
2012@extension("VK_EXT_KHR_device_swapchain")
2013class VkSurfaceFormatKHR {
2014 VkFormat format
2015 VkColorSpaceKHR colorSpace
2016}
2017
2018@extension("VK_EXT_KHR_device_swapchain")
2019class VkSwapchainCreateInfoKHR {
2020 VkStructureType sType
2021 const void* pNext
2022 const VkSurfaceDescriptionKHR* pSurfaceDescription
2023 u32 minImageCount
2024 VkFormat imageFormat
2025 VkColorSpaceKHR imageColorSpace
2026 VkExtent2D imageExtent
2027 VkImageUsageFlags imageUsageFlags
2028 VkSurfaceTransformKHR preTransform
2029 u32 imageArraySize
2030 VkSharingMode sharingMode
2031 u32 queueFamilyCount
2032 const u32* pQueueFamilyIndices
2033 VkPresentModeKHR presentMode
2034 VkSwapchainKHR oldSwapchain
2035 VkBool32 clipped
2036}
2037
2038@extension("VK_EXT_KHR_device_swapchain")
2039class VkPresentInfoKHR {
2040 VkStructureType sType
2041 const void* pNext
2042 u32 swapchainCount
2043 const VkSwapchainKHR* swapchains
2044 const u32* imageIndices
2045}
2046
2047@extension("VK_EXT_KHR_swapchain")
2048class VkSurfaceDescriptionKHR {
2049 VkStructureType sType
2050 const void* pNext
2051}
2052
2053@extension("VK_EXT_KHR_swapchain")
2054class VkSurfaceDescriptionWindowKHR {
2055 VkStructureType sType
2056 const void* pNext
2057 VkPlatformKHR platform
2058 void* pPlatformHandle
2059 void* pPlatformWindow
2060}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002061
2062////////////////
2063// Commands //
2064////////////////
2065
2066// Function pointers. TODO: add support for function pointers.
2067
2068@external type void* PFN_vkVoidFunction
2069@pfn cmd void vkVoidFunction() {
2070}
2071
2072@external type void* PFN_vkAllocFunction
2073@pfn cmd void* vkAllocFunction(
2074 void* pUserData,
2075 platform.size_t size,
2076 platform.size_t alignment,
2077 VkSystemAllocType allocType) {
2078 return ?
2079}
2080
2081@external type void* PFN_vkFreeFunction
2082@pfn cmd void vkFreeFunction(
2083 void* pUserData,
2084 void* pMem) {
2085}
2086
2087
2088// Global functions
2089
2090@threadSafety("system")
2091cmd VkResult vkCreateInstance(
2092 const VkInstanceCreateInfo* pCreateInfo,
2093 VkInstance* pInstance) {
2094 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2095
2096 instance := ?
2097 pInstance[0] = instance
2098 State.Instances[instance] = new!InstanceObject()
2099
2100 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.layerCount]
2101 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.extensionCount]
2102
2103 return ?
2104}
2105
2106@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002107cmd void vkDestroyInstance(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002108 VkInstance instance) {
2109 instanceObject := GetInstance(instance)
2110
2111 State.Instances[instance] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002112}
2113
2114@threadSafety("system")
2115cmd VkResult vkEnumeratePhysicalDevices(
2116 VkInstance instance,
2117 u32* pPhysicalDeviceCount,
2118 VkPhysicalDevice* pPhysicalDevices) {
2119 instanceObject := GetInstance(instance)
2120
2121 physicalDeviceCount := as!u32(?)
2122 pPhysicalDeviceCount[0] = physicalDeviceCount
2123 physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2124
2125 for i in (0 .. physicalDeviceCount) {
2126 physicalDevice := ?
2127 physicalDevices[i] = physicalDevice
2128 if !(physicalDevice in State.PhysicalDevices) {
2129 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2130 }
2131 }
2132
2133 return ?
2134}
2135
2136cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2137 VkDevice device,
2138 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002139 if device != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002140 device := GetDevice(device)
2141 }
2142
2143 return ?
2144}
2145
2146cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2147 VkInstance instance,
2148 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002149 if instance != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002150 instanceObject := GetInstance(instance)
2151 }
2152
2153 return ?
2154}
2155
Jesse Hall606a54e2015-11-19 22:17:28 -08002156cmd void vkGetPhysicalDeviceProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002157 VkPhysicalDevice physicalDevice,
2158 VkPhysicalDeviceProperties* pProperties) {
2159 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2160
2161 properties := ?
2162 pProperties[0] = properties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002163}
2164
Jesse Hall606a54e2015-11-19 22:17:28 -08002165cmd void vkGetPhysicalDeviceQueueFamilyProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002166 VkPhysicalDevice physicalDevice,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002167 u32* pCount,
2168 VkQueueFamilyProperties* pQueueFamilyProperties) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002169 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002170 // TODO: Figure out how to express fetch-count-or-properties
2171 // This version fails 'apic validate' with 'fence not allowed in
2172 // *semantic.Branch'. Other attempts have failed with the same or other
2173 // errors.
2174 // if pQueueFamilyProperties != null {
2175 // queuesProperties := pQueueFamilyProperties[0:pCount[0]]
2176 // for i in (0 .. pCount[0]) {
2177 // queueProperties := as!VkQueueFamilyProperties(?)
2178 // queuesProperties[i] = queueProperties
2179 // }
2180 // } else {
2181 // count := ?
2182 // pCount[0] = count
2183 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002184}
2185
Jesse Hall606a54e2015-11-19 22:17:28 -08002186cmd void vkGetPhysicalDeviceMemoryProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002187 VkPhysicalDevice physicalDevice,
2188 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
2189 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2190
2191 memoryProperties := ?
2192 pMemoryProperties[0] = memoryProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002193}
2194
Jesse Hall606a54e2015-11-19 22:17:28 -08002195cmd void vkGetPhysicalDeviceFeatures(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002196 VkPhysicalDevice physicalDevice,
2197 VkPhysicalDeviceFeatures* pFeatures) {
2198 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2199
2200 features := ?
2201 pFeatures[0] = features
Jesse Halld27f6aa2015-08-15 17:58:48 -07002202}
2203
Jesse Hall606a54e2015-11-19 22:17:28 -08002204cmd void vkGetPhysicalDeviceFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002205 VkPhysicalDevice physicalDevice,
2206 VkFormat format,
2207 VkFormatProperties* pFormatProperties) {
2208 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2209
2210 formatProperties := ?
2211 pFormatProperties[0] = formatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002212}
2213
Jesse Hall606a54e2015-11-19 22:17:28 -08002214cmd void vkGetPhysicalDeviceImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002215 VkPhysicalDevice physicalDevice,
2216 VkFormat format,
2217 VkImageType type,
2218 VkImageTiling tiling,
2219 VkImageUsageFlags usage,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002220 VkImageCreateFlags flags,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002221 VkImageFormatProperties* pImageFormatProperties) {
2222 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2223
2224 imageFormatProperties := ?
2225 pImageFormatProperties[0] = imageFormatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002226}
2227
Jesse Halld27f6aa2015-08-15 17:58:48 -07002228
2229// Device functions
2230
2231@threadSafety("system")
2232cmd VkResult vkCreateDevice(
2233 VkPhysicalDevice physicalDevice,
2234 const VkDeviceCreateInfo* pCreateInfo,
2235 VkDevice* pDevice) {
2236 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2237 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2238
2239 device := ?
2240 pDevice[0] = device
2241 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2242
2243 return ?
2244}
2245
2246@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002247cmd void vkDestroyDevice(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002248 VkDevice device) {
2249 deviceObject := GetDevice(device)
2250
2251 State.Devices[device] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002252}
2253
2254
2255// Extension discovery functions
2256
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002257cmd VkResult vkEnumerateInstanceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002258 u32* pCount,
2259 VkLayerProperties* pProperties) {
2260 count := as!u32(?)
2261 pCount[0] = count
2262
2263 properties := pProperties[0:count]
2264 for i in (0 .. count) {
2265 property := ?
2266 properties[i] = property
2267 }
2268
2269 return ?
2270}
2271
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002272cmd VkResult vkEnumerateInstanceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002273 const char* pLayerName,
2274 u32* pCount,
2275 VkExtensionProperties* pProperties) {
2276 count := as!u32(?)
2277 pCount[0] = count
2278
2279 properties := pProperties[0:count]
2280 for i in (0 .. count) {
2281 property := ?
2282 properties[i] = property
2283 }
2284
2285 return ?
2286}
2287
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002288cmd VkResult vkEnumerateDeviceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002289 VkPhysicalDevice physicalDevice,
2290 u32* pCount,
2291 VkLayerProperties* pProperties) {
2292 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
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 vkEnumerateDeviceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002306 VkPhysicalDevice physicalDevice,
2307 const char* pLayerName,
2308 u32* pCount,
2309 VkExtensionProperties* pProperties) {
2310 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2311
2312 count := as!u32(?)
2313 pCount[0] = count
2314
2315 properties := pProperties[0:count]
2316 for i in (0 .. count) {
2317 property := ?
2318 properties[i] = property
2319 }
2320
2321 return ?
2322}
2323
2324
2325// Queue functions
2326
2327@threadSafety("system")
Jesse Hall606a54e2015-11-19 22:17:28 -08002328cmd void vkGetDeviceQueue(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002329 VkDevice device,
2330 u32 queueFamilyIndex,
2331 u32 queueIndex,
2332 VkQueue* pQueue) {
2333 deviceObject := GetDevice(device)
2334
2335 queue := ?
2336 pQueue[0] = queue
2337
2338 if !(queue in State.Queues) {
2339 State.Queues[queue] = new!QueueObject(device: device)
2340 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002341}
2342
2343@threadSafety("app")
2344cmd VkResult vkQueueSubmit(
2345 VkQueue queue,
Jesse Halla366a512015-11-19 22:30:07 -08002346 u32 submitCount,
2347 const VkSubmitInfo* pSubmitInfo,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002348 VkFence fence) {
2349 queueObject := GetQueue(queue)
2350
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002351 if fence != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002352 fenceObject := GetFence(fence)
2353 assert(fenceObject.device == queueObject.device)
2354 }
2355
Jesse Halla366a512015-11-19 22:30:07 -08002356 // cmdBuffers := pCmdBuffers[0:cmdBufferCount]
2357 // for i in (0 .. cmdBufferCount) {
2358 // cmdBuffer := cmdBuffers[i]
2359 // cmdBufferObject := GetCmdBuffer(cmdBuffer)
2360 // assert(cmdBufferObject.device == queueObject.device)
2361 //
2362 // validate("QueueCheck", cmdBufferObject.queueFlags in queueObject.flags,
2363 // "vkQueueSubmit: enqueued cmdBuffer requires missing queue capabilities.")
2364 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002365
2366 return ?
2367}
2368
2369@threadSafety("system")
2370cmd VkResult vkQueueWaitIdle(
2371 VkQueue queue) {
2372 queueObject := GetQueue(queue)
2373
2374 return ?
2375}
2376
2377@threadSafety("system")
2378cmd VkResult vkDeviceWaitIdle(
2379 VkDevice device) {
2380 deviceObject := GetDevice(device)
2381
2382 return ?
2383}
2384
2385
2386// Memory functions
2387
2388@threadSafety("system")
2389cmd VkResult vkAllocMemory(
2390 VkDevice device,
2391 const VkMemoryAllocInfo* pAllocInfo,
2392 VkDeviceMemory* pMem) {
2393 assert(pAllocInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
2394 deviceObject := GetDevice(device)
2395
2396 mem := ?
2397 pMem[0] = mem
2398 State.DeviceMemories[mem] = new!DeviceMemoryObject(
2399 device: device,
2400 allocationSize: pAllocInfo[0].allocationSize)
2401
2402 return ?
2403}
2404
2405@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002406cmd void vkFreeMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002407 VkDevice device,
2408 VkDeviceMemory mem) {
2409 deviceObject := GetDevice(device)
2410 memObject := GetDeviceMemory(mem)
2411 assert(memObject.device == device)
2412
2413 // Check that no objects are still bound before freeing.
2414 validate("MemoryCheck", len(memObject.boundObjects) == 0,
2415 "vkFreeMemory: objects still bound")
2416 validate("MemoryCheck", len(memObject.boundCommandBuffers) == 0,
2417 "vkFreeMemory: cmdBuffers still bound")
2418 State.DeviceMemories[mem] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002419}
2420
2421@threadSafety("app")
2422cmd VkResult vkMapMemory(
2423 VkDevice device,
2424 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002425 VkDeviceSize offset,
2426 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002427 VkMemoryMapFlags flags,
2428 void** ppData) {
2429 deviceObject := GetDevice(device)
2430 memObject := GetDeviceMemory(mem)
2431 assert(memObject.device == device)
2432
2433 assert(flags == as!VkMemoryMapFlags(0))
2434 assert((offset + size) <= memObject.allocationSize)
2435
2436 return ?
2437}
2438
2439@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002440cmd void vkUnmapMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002441 VkDevice device,
2442 VkDeviceMemory mem) {
2443 deviceObject := GetDevice(device)
2444 memObject := GetDeviceMemory(mem)
2445 assert(memObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002446}
2447
2448cmd VkResult vkFlushMappedMemoryRanges(
2449 VkDevice device,
2450 u32 memRangeCount
2451 const VkMappedMemoryRange* pMemRanges) {
2452 deviceObject := GetDevice(device)
2453
2454 memRanges := pMemRanges[0:memRangeCount]
2455 for i in (0 .. memRangeCount) {
2456 memRange := memRanges[i]
2457 memObject := GetDeviceMemory(memRange.mem)
2458 assert(memObject.device == device)
2459 assert((memRange.offset + memRange.size) <= memObject.allocationSize)
2460 }
2461
2462 return ?
2463}
2464
2465cmd VkResult vkInvalidateMappedMemoryRanges(
2466 VkDevice device,
2467 u32 memRangeCount,
2468 const VkMappedMemoryRange* pMemRanges) {
2469 deviceObject := GetDevice(device)
2470
2471 memRanges := pMemRanges[0:memRangeCount]
2472 for i in (0 .. memRangeCount) {
2473 memRange := memRanges[i]
2474 memObject := GetDeviceMemory(memRange.mem)
2475 assert(memObject.device == device)
2476 assert((memRange.offset + memRange.size) <= memObject.allocationSize)
2477 }
2478
2479 return ?
2480}
2481
2482
2483// Memory management API functions
2484
Jesse Hall606a54e2015-11-19 22:17:28 -08002485cmd void vkGetDeviceMemoryCommitment(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002486 VkDevice device,
2487 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002488 VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002489 deviceObject := GetDevice(device)
2490
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002491 if memory != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002492 memoryObject := GetDeviceMemory(memory)
2493 assert(memoryObject.device == device)
2494 }
2495
2496 committedMemoryInBytes := ?
2497 pCommittedMemoryInBytes[0] = committedMemoryInBytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07002498}
2499
Jesse Hall606a54e2015-11-19 22:17:28 -08002500cmd void vkGetBufferMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002501 VkDevice device,
2502 VkBuffer buffer,
2503 VkMemoryRequirements* pMemoryRequirements) {
2504 deviceObject := GetDevice(device)
2505 bufferObject := GetBuffer(buffer)
2506 assert(bufferObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002507}
2508
2509cmd VkResult vkBindBufferMemory(
2510 VkDevice device,
2511 VkBuffer buffer,
2512 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002513 VkDeviceSize memOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002514 deviceObject := GetDevice(device)
2515 bufferObject := GetBuffer(buffer)
2516 assert(bufferObject.device == device)
2517
2518 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002519 if bufferObject.mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002520 memObject := GetDeviceMemory(bufferObject.mem)
2521 memObject.boundObjects[as!u64(buffer)] = null
2522 }
2523
2524 // Bind buffer to given memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002525 if mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002526 memObject := GetDeviceMemory(mem)
2527 assert(memObject.device == device)
2528 memObject.boundObjects[as!u64(buffer)] = memOffset
2529 }
2530 bufferObject.mem = mem
2531 bufferObject.memOffset = memOffset
2532
2533 return ?
2534}
2535
Jesse Hall606a54e2015-11-19 22:17:28 -08002536cmd void vkGetImageMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002537 VkDevice device,
2538 VkImage image,
2539 VkMemoryRequirements* pMemoryRequirements) {
2540 deviceObject := GetDevice(device)
2541 imageObject := GetImage(image)
2542 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002543}
2544
2545cmd VkResult vkBindImageMemory(
2546 VkDevice device,
2547 VkImage image,
2548 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002549 VkDeviceSize memOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002550 deviceObject := GetDevice(device)
2551 imageObject := GetImage(image)
2552 assert(imageObject.device == device)
2553
2554 // Unbind image from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002555 if imageObject.mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002556 memObject := GetDeviceMemory(imageObject.mem)
2557 memObject.boundObjects[as!u64(image)] = null
2558 }
2559
2560 // Bind image to given memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002561 if mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002562 memObject := GetDeviceMemory(mem)
2563 assert(memObject.device == device)
2564 memObject.boundObjects[as!u64(image)] = memOffset
2565 }
2566 imageObject.mem = mem
2567 imageObject.memOffset = memOffset
2568
2569 return ?
2570}
2571
Jesse Hall606a54e2015-11-19 22:17:28 -08002572cmd void vkGetImageSparseMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002573 VkDevice device,
2574 VkImage image,
2575 u32* pNumRequirements,
2576 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
2577 deviceObject := GetDevice(device)
2578 imageObject := GetImage(image)
2579 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002580}
2581
Jesse Hall606a54e2015-11-19 22:17:28 -08002582cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002583 VkPhysicalDevice physicalDevice,
2584 VkFormat format,
2585 VkImageType type,
2586 u32 samples,
2587 VkImageUsageFlags usage,
2588 VkImageTiling tiling,
2589 u32* pNumProperties,
2590 VkSparseImageFormatProperties* pProperties) {
2591 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002592}
2593
2594cmd VkResult vkQueueBindSparseBufferMemory(
2595 VkQueue queue,
2596 VkBuffer buffer,
2597 u32 numBindings,
2598 const VkSparseMemoryBindInfo* pBindInfo) {
2599 queueObject := GetQueue(queue)
2600 bufferObject := GetBuffer(buffer)
2601 assert(bufferObject.device == queueObject.device)
2602
2603 return ?
2604}
2605
2606cmd VkResult vkQueueBindSparseImageOpaqueMemory(
2607 VkQueue queue,
2608 VkImage image,
2609 u32 numBindings,
2610 const VkSparseMemoryBindInfo* pBindInfo) {
2611 queueObject := GetQueue(queue)
2612 imageObject := GetImage(image)
2613 assert(imageObject.device == queueObject.device)
2614
2615 return ?
2616}
2617
2618
2619cmd VkResult vkQueueBindSparseImageMemory(
2620 VkQueue queue,
2621 VkImage image,
2622 u32 numBindings,
2623 const VkSparseImageMemoryBindInfo* pBindInfo) {
2624 queueObject := GetQueue(queue)
2625 imageObject := GetImage(image)
2626
2627 return ?
2628}
2629
2630
2631// Fence functions
2632
2633@threadSafety("system")
2634cmd VkResult vkCreateFence(
2635 VkDevice device,
2636 const VkFenceCreateInfo* pCreateInfo,
2637 VkFence* pFence) {
2638 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2639 deviceObject := GetDevice(device)
2640
2641 fence := ?
2642 pFence[0] = fence
2643 State.Fences[fence] = new!FenceObject(
2644 device: device, signaled: (pCreateInfo.flags == VK_FENCE_CREATE_SIGNALED_BIT))
2645
2646 return ?
2647}
2648
2649@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002650cmd void vkDestroyFence(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002651 VkDevice device,
2652 VkFence fence) {
2653 deviceObject := GetDevice(device)
2654 fenceObject := GetFence(fence)
2655 assert(fenceObject.device == device)
2656
2657 State.Fences[fence] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002658}
2659
2660@threadSafety("system")
2661cmd VkResult vkResetFences(
2662 VkDevice device,
2663 u32 fenceCount,
2664 const VkFence* pFences) {
2665 deviceObject := GetDevice(device)
2666
2667 fences := pFences[0:fenceCount]
2668 for i in (0 .. fenceCount) {
2669 fence := fences[i]
2670 fenceObject := GetFence(fence)
2671 assert(fenceObject.device == device)
2672 fenceObject.signaled = false
2673 }
2674
2675 return ?
2676}
2677
2678@threadSafety("system")
2679cmd VkResult vkGetFenceStatus(
2680 VkDevice device,
2681 VkFence fence) {
2682 deviceObject := GetDevice(device)
2683 fenceObject := GetFence(fence)
2684 assert(fenceObject.device == device)
2685
2686 return ?
2687}
2688
2689@threadSafety("system")
2690cmd VkResult vkWaitForFences(
2691 VkDevice device,
2692 u32 fenceCount,
2693 const VkFence* pFences,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002694 VkBool32 waitAll,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002695 u64 timeout) { /// timeout in nanoseconds
2696 deviceObject := GetDevice(device)
2697
2698 fences := pFences[0:fenceCount]
2699 for i in (0 .. fenceCount) {
2700 fence := fences[i]
2701 fenceObject := GetFence(fence)
2702 assert(fenceObject.device == device)
2703 }
2704
2705 return ?
2706}
2707
2708
2709// Queue semaphore functions
2710
2711@threadSafety("system")
2712cmd VkResult vkCreateSemaphore(
2713 VkDevice device,
2714 const VkSemaphoreCreateInfo* pCreateInfo,
2715 VkSemaphore* pSemaphore) {
2716 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
2717 deviceObject := GetDevice(device)
2718
2719 semaphore := ?
2720 pSemaphore[0] = semaphore
2721 State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
2722
2723 return ?
2724}
2725
2726@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002727cmd void vkDestroySemaphore(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002728 VkDevice device,
2729 VkSemaphore semaphore) {
2730 deviceObject := GetDevice(device)
2731 semaphoreObject := GetSemaphore(semaphore)
2732 assert(semaphoreObject.device == device)
2733
2734 State.Semaphores[semaphore] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002735}
2736
2737@threadSafety("app")
2738cmd VkResult vkQueueSignalSemaphore(
2739 VkQueue queue,
2740 VkSemaphore semaphore) {
2741 queueObject := GetQueue(queue)
2742 semaphoreObject := GetSemaphore(semaphore)
2743 assert(queueObject.device == semaphoreObject.device)
2744
2745 return ?
2746}
2747
2748@threadSafety("system")
2749cmd VkResult vkQueueWaitSemaphore(
2750 VkQueue queue,
2751 VkSemaphore semaphore) {
2752 queueObject := GetQueue(queue)
2753 semaphoreObject := GetSemaphore(semaphore)
2754 assert(queueObject.device == semaphoreObject.device)
2755
2756 return ?
2757}
2758
2759
2760// Event functions
2761
2762@threadSafety("system")
2763cmd VkResult vkCreateEvent(
2764 VkDevice device,
2765 const VkEventCreateInfo* pCreateInfo,
2766 VkEvent* pEvent) {
2767 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
2768 deviceObject := GetDevice(device)
2769
2770 event := ?
2771 pEvent[0] = event
2772 State.Events[event] = new!EventObject(device: device)
2773
2774 return ?
2775}
2776
2777@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002778cmd void vkDestroyEvent(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002779 VkDevice device,
2780 VkEvent event) {
2781 deviceObject := GetDevice(device)
2782 eventObject := GetEvent(event)
2783 assert(eventObject.device == device)
2784
2785 State.Events[event] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002786}
2787
2788@threadSafety("system")
2789cmd VkResult vkGetEventStatus(
2790 VkDevice device,
2791 VkEvent event) {
2792 deviceObject := GetDevice(device)
2793 eventObject := GetEvent(event)
2794 assert(eventObject.device == device)
2795
2796 return ?
2797}
2798
2799@threadSafety("system")
2800cmd VkResult vkSetEvent(
2801 VkDevice device,
2802 VkEvent event) {
2803 deviceObject := GetDevice(device)
2804 eventObject := GetEvent(event)
2805 assert(eventObject.device == device)
2806
2807 return ?
2808}
2809
2810@threadSafety("system")
2811cmd VkResult vkResetEvent(
2812 VkDevice device,
2813 VkEvent event) {
2814 deviceObject := GetDevice(device)
2815 eventObject := GetEvent(event)
2816 assert(eventObject.device == device)
2817
2818 return ?
2819}
2820
2821
2822// Query functions
2823
2824@threadSafety("system")
2825cmd VkResult vkCreateQueryPool(
2826 VkDevice device,
2827 const VkQueryPoolCreateInfo* pCreateInfo,
2828 VkQueryPool* pQueryPool) {
2829 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
2830 deviceObject := GetDevice(device)
2831
2832 queryPool := ?
2833 pQueryPool[0] = queryPool
2834 State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
2835
2836 return ?
2837}
2838
2839@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002840cmd void vkDestroyQueryPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002841 VkDevice device,
2842 VkQueryPool queryPool) {
2843 deviceObject := GetDevice(device)
2844 queryPoolObject := GetQueryPool(queryPool)
2845 assert(queryPoolObject.device == device)
2846
2847 State.QueryPools[queryPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002848}
2849
2850@threadSafety("system")
2851cmd VkResult vkGetQueryPoolResults(
2852 VkDevice device,
2853 VkQueryPool queryPool,
2854 u32 startQuery,
2855 u32 queryCount,
2856 platform.size_t* pDataSize,
2857 void* pData,
2858 VkQueryResultFlags flags) {
2859 deviceObject := GetDevice(device)
2860 queryPoolObject := GetQueryPool(queryPool)
2861 assert(queryPoolObject.device == device)
2862
2863 dataSize := ?
2864 pDataSize[0] = dataSize
2865 data := pData[0:dataSize]
2866
2867 return ?
2868}
2869
2870// Buffer functions
2871
2872@threadSafety("system")
2873cmd VkResult vkCreateBuffer(
2874 VkDevice device,
2875 const VkBufferCreateInfo* pCreateInfo,
2876 VkBuffer* pBuffer) {
2877 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
2878 deviceObject := GetDevice(device)
2879
2880 buffer := ?
2881 pBuffer[0] = buffer
2882 State.Buffers[buffer] = new!BufferObject(device: device)
2883
2884 return ?
2885}
2886
2887@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002888cmd void vkDestroyBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002889 VkDevice device,
2890 VkBuffer buffer) {
2891 deviceObject := GetDevice(device)
2892 bufferObject := GetBuffer(buffer)
2893 assert(bufferObject.device == device)
2894
2895 assert(bufferObject.mem == 0)
2896 State.Buffers[buffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002897}
2898
2899
2900// Buffer view functions
2901
2902@threadSafety("system")
2903cmd VkResult vkCreateBufferView(
2904 VkDevice device,
2905 const VkBufferViewCreateInfo* pCreateInfo,
2906 VkBufferView* pView) {
2907 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
2908 deviceObject := GetDevice(device)
2909
2910 bufferObject := GetBuffer(pCreateInfo.buffer)
2911 assert(bufferObject.device == device)
2912
2913 view := ?
2914 pView[0] = view
2915 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
2916
2917 return ?
2918}
2919
2920@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002921cmd void vkDestroyBufferView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002922 VkDevice device,
2923 VkBufferView bufferView) {
2924 deviceObject := GetDevice(device)
2925 bufferViewObject := GetBufferView(bufferView)
2926 assert(bufferViewObject.device == device)
2927
2928 State.BufferViews[bufferView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002929}
2930
2931
2932// Image functions
2933
2934@threadSafety("system")
2935cmd VkResult vkCreateImage(
2936 VkDevice device,
2937 const VkImageCreateInfo* pCreateInfo,
2938 VkImage* pImage) {
2939 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
2940 deviceObject := GetDevice(device)
2941
2942 image := ?
2943 pImage[0] = image
2944 State.Images[image] = new!ImageObject(device: device)
2945
2946 return ?
2947}
2948
2949@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002950cmd void vkDestroyImage(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002951 VkDevice device,
2952 VkImage image) {
2953 deviceObject := GetDevice(device)
2954 imageObject := GetImage(image)
2955 assert(imageObject.device == device)
2956
2957 assert(imageObject.mem == 0)
2958 State.Images[image] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002959}
2960
Jesse Hall606a54e2015-11-19 22:17:28 -08002961cmd void vkGetImageSubresourceLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002962 VkDevice device,
2963 VkImage image,
2964 const VkImageSubresource* pSubresource,
2965 VkSubresourceLayout* pLayout) {
2966 deviceObject := GetDevice(device)
2967 imageObject := GetImage(image)
2968 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002969}
2970
2971
2972// Image view functions
2973
2974@threadSafety("system")
2975cmd VkResult vkCreateImageView(
2976 VkDevice device,
2977 const VkImageViewCreateInfo* pCreateInfo,
2978 VkImageView* pView) {
2979 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
2980 deviceObject := GetDevice(device)
2981
2982 imageObject := GetImage(pCreateInfo.image)
2983 assert(imageObject.device == device)
2984
2985 view := ?
2986 pView[0] = view
2987 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
2988
2989 return ?
2990}
2991
2992@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002993cmd void vkDestroyImageView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002994 VkDevice device,
2995 VkImageView imageView) {
2996 deviceObject := GetDevice(device)
2997 imageViewObject := GetImageView(imageView)
2998 assert(imageViewObject.device == device)
2999
3000 State.ImageViews[imageView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003001}
3002
3003
3004// Shader functions
3005
3006cmd VkResult vkCreateShaderModule(
3007 VkDevice device,
3008 const VkShaderModuleCreateInfo* pCreateInfo,
3009 VkShaderModule* pShaderModule) {
3010 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3011 deviceObject := GetDevice(device)
3012
3013 shaderModule := ?
3014 pShaderModule[0] = shaderModule
3015 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3016
3017 return ?
3018}
3019
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003020cmd void vkDestroyShaderModule(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003021 VkDevice device,
3022 VkShaderModule shaderModule) {
3023 deviceObject := GetDevice(device)
3024 shaderModuleObject := GetShaderModule(shaderModule)
3025 assert(shaderModuleObject.device == device)
3026
3027 State.ShaderModules[shaderModule] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003028}
3029
3030@threadSafety("system")
3031cmd VkResult vkCreateShader(
3032 VkDevice device,
3033 const VkShaderCreateInfo* pCreateInfo,
3034 VkShader* pShader) {
3035 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
3036 deviceObject := GetDevice(device)
3037
3038 shader := ?
3039 pShader[0] = shader
3040 State.Shaders[shader] = new!ShaderObject(device: device)
3041
3042 return ?
3043}
3044
3045@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003046cmd void vkDestroyShader(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003047 VkDevice device,
3048 VkShader shader) {
3049 deviceObject := GetDevice(device)
3050 shaderObject := GetShader(shader)
3051 assert(shaderObject.device == device)
3052
3053 State.Shaders[shader] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003054}
3055
3056
3057// Pipeline functions
3058
3059cmd VkResult vkCreatePipelineCache(
3060 VkDevice device,
3061 const VkPipelineCacheCreateInfo* pCreateInfo,
3062 VkPipelineCache* pPipelineCache) {
3063 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3064 deviceObject := GetDevice(device)
3065
3066 pipelineCache := ?
3067 pPipelineCache[0] = pipelineCache
3068 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3069
3070 return ?
3071}
3072
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003073cmd void vkDestroyPipelineCache(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003074 VkDevice device,
3075 VkPipelineCache pipelineCache) {
3076 deviceObject := GetDevice(device)
3077 pipelineCacheObject := GetPipelineCache(pipelineCache)
3078 assert(pipelineCacheObject.device == device)
3079
3080 State.PipelineCaches[pipelineCache] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003081}
3082
3083cmd platform.size_t vkGetPipelineCacheSize(
3084 VkDevice device,
3085 VkPipelineCache pipelineCache) {
3086 deviceObject := GetDevice(device)
3087 pipelineCacheObject := GetPipelineCache(pipelineCache)
3088 assert(pipelineCacheObject.device == device)
3089
3090 return ?
3091}
3092
3093cmd VkResult vkGetPipelineCacheData(
3094 VkDevice device,
3095 VkPipelineCache pipelineCache,
Jesse Hall606a54e2015-11-19 22:17:28 -08003096 platform.size_t dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003097 void* pData) {
3098 deviceObject := GetDevice(device)
3099 pipelineCacheObject := GetPipelineCache(pipelineCache)
3100 assert(pipelineCacheObject.device == device)
3101
3102 return ?
3103}
3104
3105cmd VkResult vkMergePipelineCaches(
3106 VkDevice device,
3107 VkPipelineCache destCache,
3108 u32 srcCacheCount,
3109 const VkPipelineCache* pSrcCaches) {
3110 deviceObject := GetDevice(device)
3111 destCacheObject := GetPipelineCache(destCache)
3112 assert(destCacheObject.device == device)
3113
3114 srcCaches := pSrcCaches[0:srcCacheCount]
3115 for i in (0 .. srcCacheCount) {
3116 srcCache := srcCaches[i]
3117 srcCacheObject := GetPipelineCache(srcCache)
3118 assert(srcCacheObject.device == device)
3119 }
3120
3121 return ?
3122}
3123
3124cmd VkResult vkCreateGraphicsPipelines(
3125 VkDevice device,
3126 VkPipelineCache pipelineCache,
3127 u32 count,
3128 const VkGraphicsPipelineCreateInfo* pCreateInfos,
3129 VkPipeline* pPipelines) {
3130 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003131 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003132 pipelineCacheObject := GetPipelineCache(pipelineCache)
3133 assert(pipelineCacheObject.device == device)
3134 }
3135
3136 createInfos := pCreateInfos[0:count]
3137 pipelines := pPipelines[0:count]
3138 for i in (0 .. count) {
3139 pipeline := ?
3140 pipelines[i] = pipeline
3141 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3142 }
3143
3144 return ?
3145}
3146
3147cmd VkResult vkCreateComputePipelines(
3148 VkDevice device,
3149 VkPipelineCache pipelineCache,
3150 u32 count,
3151 const VkComputePipelineCreateInfo* pCreateInfos,
3152 VkPipeline* pPipelines) {
3153 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003154 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003155 pipelineCacheObject := GetPipelineCache(pipelineCache)
3156 assert(pipelineCacheObject.device == device)
3157 }
3158
3159 createInfos := pCreateInfos[0:count]
3160 pipelines := pPipelines[0:count]
3161 for i in (0 .. count) {
3162 pipeline := ?
3163 pipelines[i] = pipeline
3164 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3165 }
3166
3167 return ?
3168}
3169
3170@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003171cmd void vkDestroyPipeline(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003172 VkDevice device,
3173 VkPipeline pipeline) {
3174 deviceObject := GetDevice(device)
3175 pipelineObjects := GetPipeline(pipeline)
3176 assert(pipelineObjects.device == device)
3177
3178 State.Pipelines[pipeline] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003179}
3180
3181
3182// Pipeline layout functions
3183
3184@threadSafety("system")
3185cmd VkResult vkCreatePipelineLayout(
3186 VkDevice device,
3187 const VkPipelineLayoutCreateInfo* pCreateInfo,
3188 VkPipelineLayout* pPipelineLayout) {
3189 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3190 deviceObject := GetDevice(device)
3191
3192 pipelineLayout := ?
3193 pPipelineLayout[0] = pipelineLayout
3194 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3195
3196 return ?
3197}
3198
3199@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003200cmd void vkDestroyPipelineLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003201 VkDevice device,
3202 VkPipelineLayout pipelineLayout) {
3203 deviceObject := GetDevice(device)
3204 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3205 assert(pipelineLayoutObjects.device == device)
3206
3207 State.PipelineLayouts[pipelineLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003208}
3209
3210
3211// Sampler functions
3212
3213@threadSafety("system")
3214cmd VkResult vkCreateSampler(
3215 VkDevice device,
3216 const VkSamplerCreateInfo* pCreateInfo,
3217 VkSampler* pSampler) {
3218 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3219 deviceObject := GetDevice(device)
3220
3221 sampler := ?
3222 pSampler[0] = sampler
3223 State.Samplers[sampler] = new!SamplerObject(device: device)
3224
3225 return ?
3226}
3227
3228@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003229cmd void vkDestroySampler(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003230 VkDevice device,
3231 VkSampler sampler) {
3232 deviceObject := GetDevice(device)
3233 samplerObject := GetSampler(sampler)
3234 assert(samplerObject.device == device)
3235
3236 State.Samplers[sampler] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003237}
3238
3239
3240// Descriptor set functions
3241
3242@threadSafety("system")
3243cmd VkResult vkCreateDescriptorSetLayout(
3244 VkDevice device,
3245 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
3246 VkDescriptorSetLayout* pSetLayout) {
3247 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3248 deviceObject := GetDevice(device)
3249
3250 setLayout := ?
3251 pSetLayout[0] = setLayout
3252 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3253
3254 return ?
3255}
3256
3257@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003258cmd void vkDestroyDescriptorSetLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003259 VkDevice device,
3260 VkDescriptorSetLayout descriptorSetLayout) {
3261 deviceObject := GetDevice(device)
3262 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3263 assert(descriptorSetLayoutObject.device == device)
3264
3265 State.DescriptorSetLayouts[descriptorSetLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003266}
3267
3268@threadSafety("system")
3269cmd VkResult vkCreateDescriptorPool(
3270 VkDevice device,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003271 const VkDescriptorPoolCreateInfo* pCreateInfo
Jesse Halld27f6aa2015-08-15 17:58:48 -07003272 VkDescriptorPool* pDescriptorPool) {
3273 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3274 deviceObject := GetDevice(device)
3275
3276 descriptorPool := ?
3277 pDescriptorPool[0] = descriptorPool
3278 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3279
3280 return ?
3281}
3282
3283@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003284cmd void vkDestroyDescriptorPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003285 VkDevice device,
3286 VkDescriptorPool descriptorPool) {
3287 deviceObject := GetDevice(device)
3288 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3289 assert(descriptorPoolObject.device == device)
3290
3291 State.DescriptorPools[descriptorPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003292}
3293
3294@threadSafety("app")
3295cmd VkResult vkResetDescriptorPool(
3296 VkDevice device,
3297 VkDescriptorPool descriptorPool) {
3298 deviceObject := GetDevice(device)
3299 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3300 assert(descriptorPoolObject.device == device)
3301
3302 return ?
3303}
3304
3305@threadSafety("app")
3306cmd VkResult vkAllocDescriptorSets(
3307 VkDevice device,
3308 VkDescriptorPool descriptorPool,
3309 VkDescriptorSetUsage setUsage,
3310 u32 count,
3311 const VkDescriptorSetLayout* pSetLayouts,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003312 VkDescriptorSet* pDescriptorSets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003313 deviceObject := GetDevice(device)
3314 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3315
3316 setLayouts := pSetLayouts[0:count]
3317 for i in (0 .. count) {
3318 setLayout := setLayouts[i]
3319 setLayoutObject := GetDescriptorSetLayout(setLayout)
3320 assert(setLayoutObject.device == device)
3321 }
3322
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003323 descriptorSets := pDescriptorSets[0:count]
3324 for i in (0 .. count) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003325 descriptorSet := ?
3326 descriptorSets[i] = descriptorSet
3327 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3328 }
3329
3330 return ?
3331}
3332
Jesse Hallf09c6b12015-08-15 19:54:28 -07003333cmd VkResult vkFreeDescriptorSets(
3334 VkDevice device,
3335 VkDescriptorPool descriptorPool,
3336 u32 count,
3337 const VkDescriptorSet* pDescriptorSets) {
3338 deviceObject := GetDevice(device)
3339 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3340
3341 descriptorSets := pDescriptorSets[0:count]
3342 for i in (0 .. count) {
3343 descriptorSet := descriptorSets[i]
3344 descriptorSetObject := GetDescriptorSet(descriptorSet)
3345 assert(descriptorSetObject.device == device)
3346 State.DescriptorSets[descriptorSet] = null
3347 }
3348
3349 return ?
3350}
3351
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003352cmd void vkUpdateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003353 VkDevice device,
3354 u32 writeCount,
3355 const VkWriteDescriptorSet* pDescriptorWrites,
3356 u32 copyCount,
3357 const VkCopyDescriptorSet* pDescriptorCopies) {
3358 deviceObject := GetDevice(device)
3359
3360 descriptorWrites := pDescriptorWrites[0:writeCount]
3361 for i in (0 .. writeCount) {
3362 descriptorWrite := descriptorWrites[i]
3363 descriptorWriteObject := GetDescriptorSet(descriptorWrite.destSet)
3364 assert(descriptorWriteObject.device == device)
3365 }
3366
3367 descriptorCopies := pDescriptorCopies[0:copyCount]
3368 for i in (0 .. copyCount) {
3369 descriptorCopy := descriptorCopies[i]
3370 descriptorCopyObject := GetDescriptorSet(descriptorCopy.destSet)
3371 assert(descriptorCopyObject.device == device)
3372 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003373}
3374
3375
3376// Framebuffer functions
3377
3378@threadSafety("system")
3379cmd VkResult vkCreateFramebuffer(
3380 VkDevice device,
3381 const VkFramebufferCreateInfo* pCreateInfo,
3382 VkFramebuffer* pFramebuffer) {
3383 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3384 deviceObject := GetDevice(device)
3385
3386 framebuffer := ?
3387 pFramebuffer[0] = framebuffer
3388 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3389
3390 return ?
3391}
3392
3393@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003394cmd void vkDestroyFramebuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003395 VkDevice device,
3396 VkFramebuffer framebuffer) {
3397 deviceObject := GetDevice(device)
3398 framebufferObject := GetFramebuffer(framebuffer)
3399 assert(framebufferObject.device == device)
3400
3401 State.Framebuffers[framebuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003402}
3403
3404
3405// Renderpass functions
3406
3407@threadSafety("system")
3408cmd VkResult vkCreateRenderPass(
3409 VkDevice device,
3410 const VkRenderPassCreateInfo* pCreateInfo,
3411 VkRenderPass* pRenderPass) {
3412 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3413 deviceObject := GetDevice(device)
3414
3415 renderpass := ?
3416 pRenderPass[0] = renderpass
3417 State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3418
3419 return ?
3420}
3421
3422@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003423cmd void vkDestroyRenderPass(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003424 VkDevice device,
3425 VkRenderPass renderPass) {
3426 deviceObject := GetDevice(device)
3427 renderPassObject := GetRenderPass(renderPass)
3428 assert(renderPassObject.device == device)
3429
3430 State.RenderPasses[renderPass] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003431}
3432
Jesse Hall606a54e2015-11-19 22:17:28 -08003433cmd void vkGetRenderAreaGranularity(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003434 VkDevice device,
3435 VkRenderPass renderPass,
3436 VkExtent2D* pGranularity) {
3437 deviceObject := GetDevice(device)
3438 renderPassObject := GetRenderPass(renderPass)
3439
3440 granularity := ?
3441 pGranularity[0] = granularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07003442}
3443
3444// Command pool functions
3445
3446cmd VkResult vkCreateCommandPool(
3447 VkDevice device,
3448 const VkCmdPoolCreateInfo* pCreateInfo,
3449 VkCmdPool* pCmdPool) {
3450 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
3451 deviceObject := GetDevice(device)
3452
3453 cmdPool := ?
3454 pCmdPool[0] = cmdPool
3455 State.CmdPools[cmdPool] = new!CmdPoolObject(device: device)
3456
3457 return ?
3458}
3459
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003460cmd void vkDestroyCommandPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003461 VkDevice device,
3462 VkCmdPool cmdPool) {
3463 deviceObject := GetDevice(device)
3464 cmdPoolObject := GetCmdPool(cmdPool)
3465 assert(cmdPoolObject.device == device)
3466
3467 State.CmdPools[cmdPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003468}
3469
3470cmd VkResult vkResetCommandPool(
3471 VkDevice device,
3472 VkCmdPool cmdPool,
3473 VkCmdPoolResetFlags flags) {
3474 deviceObject := GetDevice(device)
3475 cmdPoolObject := GetCmdPool(cmdPool)
3476 assert(cmdPoolObject.device == device)
3477
3478 return ?
3479}
3480
3481// Command buffer functions
3482
3483macro void bindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
3484 memoryObject := GetDeviceMemory(mem)
3485 memoryObject.boundCommandBuffers[cmdBuffer] = cmdBuffer
3486
3487 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3488 cmdBufferObject.boundObjects[as!u64(obj)] = mem
3489}
3490
3491macro void unbindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
3492 memoryObject := GetDeviceMemory(mem)
3493 memoryObject.boundCommandBuffers[cmdBuffer] = null
3494
3495 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3496 cmdBufferObject.boundObjects[as!u64(obj)] = null
3497}
3498
3499@threadSafety("system")
3500cmd VkResult vkCreateCommandBuffer(
3501 VkDevice device,
3502 const VkCmdBufferCreateInfo* pCreateInfo,
3503 VkCmdBuffer* pCmdBuffer) {
3504 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
3505
3506 cmdBuffer := ?
3507 pCmdBuffer[0] = cmdBuffer
3508 State.CmdBuffers[cmdBuffer] = new!CmdBufferObject(device: device)
3509
3510 return ?
3511}
3512
3513@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003514cmd void vkDestroyCommandBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003515 VkDevice device,
3516 VkCmdBuffer commandBuffer) {
3517 deviceObject := GetDevice(device)
3518 cmdBufferObject := GetCmdBuffer(commandBuffer)
3519 assert(cmdBufferObject.device == device)
3520
3521 // TODO: iterate over boundObjects and clear memory bindings
3522 State.CmdBuffers[commandBuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003523}
3524
3525@threadSafety("app")
3526cmd VkResult vkBeginCommandBuffer(
3527 VkCmdBuffer cmdBuffer,
3528 const VkCmdBufferBeginInfo* pBeginInfo) {
3529 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
3530 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3531
3532 // TODO: iterate over boundObjects and clear memory bindings
3533
3534 return ?
3535}
3536
3537@threadSafety("app")
3538cmd VkResult vkEndCommandBuffer(
3539 VkCmdBuffer cmdBuffer) {
3540 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3541
3542 return ?
3543}
3544
3545@threadSafety("app")
3546cmd VkResult vkResetCommandBuffer(
3547 VkCmdBuffer cmdBuffer,
3548 VkCmdBufferResetFlags flags) {
3549 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3550
3551 // TODO: iterate over boundObjects and clear memory bindings
3552
3553 return ?
3554}
3555
3556
3557// Command buffer building functions
3558
3559@threadSafety("app")
3560cmd void vkCmdBindPipeline(
3561 VkCmdBuffer cmdBuffer,
3562 VkPipelineBindPoint pipelineBindPoint,
3563 VkPipeline pipeline) {
3564 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3565 pipelineObject := GetPipeline(pipeline)
3566 assert(cmdBufferObject.device == pipelineObject.device)
3567
3568 queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
3569 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3570 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3571 }
3572 cmdBufferObject.queueFlags = queueFlags
3573}
3574
3575@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003576cmd void vkCmdSetViewport(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003577 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003578 u32 viewportCount,
3579 const VkViewport* pViewports) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003580 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003581 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3582 cmdBufferObject.queueFlags = queueFlags
3583}
3584
3585@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003586cmd void vkCmdSetScissor(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003587 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003588 u32 scissorCount,
3589 const VkRect2D* pScissors) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003590 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003591 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3592 cmdBufferObject.queueFlags = queueFlags
3593}
3594
3595@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003596cmd void vkCmdSetLineWidth(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003597 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003598 f32 lineWidth) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003599 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003600 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3601 cmdBufferObject.queueFlags = queueFlags
3602}
3603
3604@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003605cmd void vkCmdSetDepthBias(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003606 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003607 f32 depthBias,
3608 f32 depthBiasClamp,
3609 f32 slopeScaledDepthBias) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003610 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003611 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3612 cmdBufferObject.queueFlags = queueFlags
3613}
Jesse Halld27f6aa2015-08-15 17:58:48 -07003614
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003615@threadSafety("app")
3616cmd void vkCmdSetBlendConstants(
3617 VkCmdBuffer cmdBuffer,
3618 // TODO(jessehall): apic only supports 'const' on pointer types. Using
3619 // an annotation as a quick hack to pass this to the template without
3620 // having to modify the AST and semantic model.
3621 @readonly f32[4] blendConst) {
3622 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3623 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3624 cmdBufferObject.queueFlags = queueFlags
3625}
3626
3627@threadSafety("app")
3628cmd void vkCmdSetDepthBounds(
3629 VkCmdBuffer cmdBuffer,
3630 f32 minDepthBounds,
3631 f32 maxDepthBounds) {
3632 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3633 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3634 cmdBufferObject.queueFlags = queueFlags
3635}
3636
3637@threadSafety("app")
3638cmd void vkCmdSetStencilCompareMask(
3639 VkCmdBuffer cmdBuffer,
3640 VkStencilFaceFlags faceMask,
3641 u32 stencilCompareMask) {
3642 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3643 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3644 cmdBufferObject.queueFlags = queueFlags
3645}
3646
3647@threadSafety("app")
3648cmd void vkCmdSetStencilWriteMask(
3649 VkCmdBuffer cmdBuffer,
3650 VkStencilFaceFlags faceMask,
3651 u32 stencilWriteMask) {
3652 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3653 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3654 cmdBufferObject.queueFlags = queueFlags
3655}
3656
3657@threadSafety("app")
3658cmd void vkCmdSetStencilReference(
3659 VkCmdBuffer cmdBuffer,
3660 VkStencilFaceFlags faceMask,
3661 u32 stencilReference) {
3662 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003663 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3664 cmdBufferObject.queueFlags = queueFlags
3665}
3666
3667@threadSafety("app")
3668cmd void vkCmdBindDescriptorSets(
3669 VkCmdBuffer cmdBuffer,
3670 VkPipelineBindPoint pipelineBindPoint,
3671 VkPipelineLayout layout,
3672 u32 firstSet,
3673 u32 setCount,
3674 const VkDescriptorSet* pDescriptorSets,
3675 u32 dynamicOffsetCount,
3676 const u32* pDynamicOffsets) {
3677 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3678
3679 descriptorSets := pDescriptorSets[0:setCount]
3680 for i in (0 .. setCount) {
3681 descriptorSet := descriptorSets[i]
3682 descriptorSetObject := GetDescriptorSet(descriptorSet)
3683 assert(cmdBufferObject.device == descriptorSetObject.device)
3684 }
3685
3686 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
3687 for i in (0 .. dynamicOffsetCount) {
3688 dynamicOffset := dynamicOffsets[i]
3689 }
3690
3691 queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
3692 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3693 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3694 }
3695 cmdBufferObject.queueFlags = queueFlags
3696}
3697
3698@threadSafety("app")
3699cmd void vkCmdBindIndexBuffer(
3700 VkCmdBuffer cmdBuffer,
3701 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003702 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003703 VkIndexType indexType) {
3704 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3705 bufferObject := GetBuffer(buffer)
3706 assert(cmdBufferObject.device == bufferObject.device)
3707
3708 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3709
3710 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3711 cmdBufferObject.queueFlags = queueFlags
3712}
3713
3714@threadSafety("app")
3715cmd void vkCmdBindVertexBuffers(
3716 VkCmdBuffer cmdBuffer,
3717 u32 startBinding,
3718 u32 bindingCount,
3719 const VkBuffer* pBuffers,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003720 const VkDeviceSize* pOffsets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003721 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3722
3723 // TODO: check if not [startBinding:startBinding+bindingCount]
3724 buffers := pBuffers[0:bindingCount]
3725 offsets := pOffsets[0:bindingCount]
3726 for i in (0 .. bindingCount) {
3727 buffer := buffers[i]
3728 offset := offsets[i]
3729 bufferObject := GetBuffer(buffer)
3730 assert(cmdBufferObject.device == bufferObject.device)
3731
3732 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3733 }
3734
3735 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3736 cmdBufferObject.queueFlags = queueFlags
3737}
3738
3739@threadSafety("app")
3740cmd void vkCmdDraw(
3741 VkCmdBuffer cmdBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003742 u32 vertexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003743 u32 instanceCount,
3744 u32 firstVertex,
3745 u32 firstInstance) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003746 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3747
3748 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3749 cmdBufferObject.queueFlags = queueFlags
3750}
3751
3752@threadSafety("app")
3753cmd void vkCmdDrawIndexed(
3754 VkCmdBuffer cmdBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003755 u32 indexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003756 u32 instanceCount,
3757 u32 firstIndex,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003758 s32 vertexOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003759 u32 firstInstance) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003760 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3761
3762 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3763 cmdBufferObject.queueFlags = queueFlags
3764}
3765
3766@threadSafety("app")
3767cmd void vkCmdDrawIndirect(
3768 VkCmdBuffer cmdBuffer,
3769 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003770 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003771 u32 count,
3772 u32 stride) {
3773 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3774 bufferObject := GetBuffer(buffer)
3775 assert(cmdBufferObject.device == bufferObject.device)
3776
3777 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3778
3779 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3780 cmdBufferObject.queueFlags = queueFlags
3781}
3782
3783@threadSafety("app")
3784cmd void vkCmdDrawIndexedIndirect(
3785 VkCmdBuffer cmdBuffer,
3786 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003787 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003788 u32 count,
3789 u32 stride) {
3790 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3791 bufferObject := GetBuffer(buffer)
3792 assert(cmdBufferObject.device == bufferObject.device)
3793
3794 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3795
3796 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3797 cmdBufferObject.queueFlags = queueFlags
3798}
3799
3800@threadSafety("app")
3801cmd void vkCmdDispatch(
3802 VkCmdBuffer cmdBuffer,
3803 u32 x,
3804 u32 y,
3805 u32 z) {
3806 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3807
3808 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
3809 cmdBufferObject.queueFlags = queueFlags
3810}
3811
3812@threadSafety("app")
3813cmd void vkCmdDispatchIndirect(
3814 VkCmdBuffer cmdBuffer,
3815 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003816 VkDeviceSize offset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003817 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3818 bufferObject := GetBuffer(buffer)
3819 assert(cmdBufferObject.device == bufferObject.device)
3820
3821 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3822
3823 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
3824 cmdBufferObject.queueFlags = queueFlags
3825}
3826
3827@threadSafety("app")
3828cmd void vkCmdCopyBuffer(
3829 VkCmdBuffer cmdBuffer,
3830 VkBuffer srcBuffer,
3831 VkBuffer destBuffer,
3832 u32 regionCount,
3833 const VkBufferCopy* pRegions) {
3834 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3835 srcBufferObject := GetBuffer(srcBuffer)
3836 destBufferObject := GetBuffer(destBuffer)
3837 assert(cmdBufferObject.device == srcBufferObject.device)
3838 assert(cmdBufferObject.device == destBufferObject.device)
3839
3840 regions := pRegions[0:regionCount]
3841 for i in (0 .. regionCount) {
3842 region := regions[i]
3843 }
3844
3845 bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
3846 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3847
3848 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3849 cmdBufferObject.queueFlags = queueFlags
3850}
3851
3852@threadSafety("app")
3853cmd void vkCmdCopyImage(
3854 VkCmdBuffer cmdBuffer,
3855 VkImage srcImage,
3856 VkImageLayout srcImageLayout,
3857 VkImage destImage,
3858 VkImageLayout destImageLayout,
3859 u32 regionCount,
3860 const VkImageCopy* pRegions) {
3861 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3862 srcImageObject := GetImage(srcImage)
3863 destImageObject := GetImage(destImage)
3864 assert(cmdBufferObject.device == srcImageObject.device)
3865 assert(cmdBufferObject.device == destImageObject.device)
3866
3867 regions := pRegions[0:regionCount]
3868 for i in (0 .. regionCount) {
3869 region := regions[i]
3870 }
3871
3872 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3873 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3874
3875 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3876 cmdBufferObject.queueFlags = queueFlags
3877}
3878
3879@threadSafety("app")
3880cmd void vkCmdBlitImage(
3881 VkCmdBuffer cmdBuffer,
3882 VkImage srcImage,
3883 VkImageLayout srcImageLayout,
3884 VkImage destImage,
3885 VkImageLayout destImageLayout,
3886 u32 regionCount,
3887 const VkImageBlit* pRegions,
3888 VkTexFilter filter) {
3889 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3890 srcImageObject := GetImage(srcImage)
3891 destImageObject := GetImage(destImage)
3892 assert(cmdBufferObject.device == srcImageObject.device)
3893 assert(cmdBufferObject.device == destImageObject.device)
3894
3895 regions := pRegions[0:regionCount]
3896 for i in (0 .. regionCount) {
3897 region := regions[i]
3898 }
3899
3900 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3901 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3902
3903 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3904 cmdBufferObject.queueFlags = queueFlags
3905}
3906
3907@threadSafety("app")
3908cmd void vkCmdCopyBufferToImage(
3909 VkCmdBuffer cmdBuffer,
3910 VkBuffer srcBuffer,
3911 VkImage destImage,
3912 VkImageLayout destImageLayout,
3913 u32 regionCount,
3914 const VkBufferImageCopy* pRegions) {
3915 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3916 srcBufferObject := GetBuffer(srcBuffer)
3917 destImageObject := GetImage(destImage)
3918 assert(cmdBufferObject.device == srcBufferObject.device)
3919 assert(cmdBufferObject.device == destImageObject.device)
3920
3921 regions := pRegions[0:regionCount]
3922 for i in (0 .. regionCount) {
3923 region := regions[i]
3924 }
3925
3926 bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
3927 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3928
3929 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3930 cmdBufferObject.queueFlags = queueFlags
3931}
3932
3933@threadSafety("app")
3934cmd void vkCmdCopyImageToBuffer(
3935 VkCmdBuffer cmdBuffer,
3936 VkImage srcImage,
3937 VkImageLayout srcImageLayout,
3938 VkBuffer destBuffer,
3939 u32 regionCount,
3940 const VkBufferImageCopy* pRegions) {
3941 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3942 srcImageObject := GetImage(srcImage)
3943 destBufferObject := GetBuffer(destBuffer)
3944 assert(cmdBufferObject.device == srcImageObject.device)
3945 assert(cmdBufferObject.device == destBufferObject.device)
3946
3947 regions := pRegions[0:regionCount]
3948 for i in (0 .. regionCount) {
3949 region := regions[i]
3950 }
3951
3952 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3953 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3954
3955 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3956 cmdBufferObject.queueFlags = queueFlags
3957}
3958
3959@threadSafety("app")
3960cmd void vkCmdUpdateBuffer(
3961 VkCmdBuffer cmdBuffer,
3962 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003963 VkDeviceSize destOffset,
3964 VkDeviceSize dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003965 const u32* pData) {
3966 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3967 destBufferObject := GetBuffer(destBuffer)
3968 assert(cmdBufferObject.device == destBufferObject.device)
3969
3970 data := pData[0:dataSize]
3971
3972 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3973
3974 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3975 cmdBufferObject.queueFlags = queueFlags
3976}
3977
3978@threadSafety("app")
3979cmd void vkCmdFillBuffer(
3980 VkCmdBuffer cmdBuffer,
3981 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003982 VkDeviceSize destOffset,
3983 VkDeviceSize fillSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003984 u32 data) {
3985 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3986 destBufferObject := GetBuffer(destBuffer)
3987 assert(cmdBufferObject.device == destBufferObject.device)
3988
3989 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3990 cmdBufferObject.queueFlags = queueFlags
3991}
3992
3993@threadSafety("app")
3994cmd void vkCmdClearColorImage(
3995 VkCmdBuffer cmdBuffer,
3996 VkImage image,
3997 VkImageLayout imageLayout,
3998 const VkClearColorValue* pColor,
3999 u32 rangeCount,
4000 const VkImageSubresourceRange* pRanges) {
4001 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4002 imageObject := GetImage(image)
4003 assert(cmdBufferObject.device == imageObject.device)
4004
4005 ranges := pRanges[0:rangeCount]
4006 for i in (0 .. rangeCount) {
4007 range := ranges[i]
4008 }
4009
4010 bindCmdBuffer(cmdBuffer, image, imageObject.mem)
4011
4012 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4013 cmdBufferObject.queueFlags = queueFlags
4014}
4015
4016@threadSafety("app")
4017cmd void vkCmdClearDepthStencilImage(
4018 VkCmdBuffer cmdBuffer,
4019 VkImage image,
4020 VkImageLayout imageLayout,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004021 const VkClearDepthStencilValue* pDepthStencil,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004022 u32 rangeCount,
4023 const VkImageSubresourceRange* pRanges) {
4024 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4025 imageObject := GetImage(image)
4026 assert(cmdBufferObject.device == imageObject.device)
4027
4028 ranges := pRanges[0:rangeCount]
4029 for i in (0 .. rangeCount) {
4030 range := ranges[i]
4031 }
4032
4033 bindCmdBuffer(cmdBuffer, image, imageObject.mem)
4034
4035 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4036 cmdBufferObject.queueFlags = queueFlags
4037}
4038
4039@threadSafety("app")
Jesse Hallae38f732015-11-19 21:32:50 -08004040cmd void vkCmdClearAttachments(
Jesse Halld27f6aa2015-08-15 17:58:48 -07004041 VkCmdBuffer cmdBuffer,
Jesse Hallae38f732015-11-19 21:32:50 -08004042 u32 attachmentCount,
4043 const VkClearAttachment* pAttachments,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004044 u32 rectCount,
Jesse Halla15a4bf2015-11-19 22:48:02 -08004045 const VkClearRect* pRects) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004046 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4047
4048 rects := pRects[0:rectCount]
4049 for i in (0 .. rectCount) {
4050 rect := rects[i]
4051 }
4052
4053 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4054 cmdBufferObject.queueFlags = queueFlags
4055}
4056
4057@threadSafety("app")
4058cmd void vkCmdResolveImage(
4059 VkCmdBuffer cmdBuffer,
4060 VkImage srcImage,
4061 VkImageLayout srcImageLayout,
4062 VkImage destImage,
4063 VkImageLayout destImageLayout,
4064 u32 regionCount,
4065 const VkImageResolve* pRegions) {
4066 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4067 srcImageObject := GetImage(srcImage)
4068 destImageObject := GetImage(destImage)
4069 assert(cmdBufferObject.device == srcImageObject.device)
4070 assert(cmdBufferObject.device == destImageObject.device)
4071
4072 regions := pRegions[0:regionCount]
4073 for i in (0 .. regionCount) {
4074 region := regions[i]
4075 }
4076
4077 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
4078 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
4079
4080 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4081 cmdBufferObject.queueFlags = queueFlags
4082}
4083
4084@threadSafety("app")
4085cmd void vkCmdSetEvent(
4086 VkCmdBuffer cmdBuffer,
4087 VkEvent event,
4088 VkPipelineStageFlags stageMask) {
4089 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4090 eventObject := GetEvent(event)
4091 assert(cmdBufferObject.device == eventObject.device)
4092}
4093
4094@threadSafety("app")
4095cmd void vkCmdResetEvent(
4096 VkCmdBuffer cmdBuffer,
4097 VkEvent event,
4098 VkPipelineStageFlags stageMask) {
4099 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4100 eventObject := GetEvent(event)
4101 assert(cmdBufferObject.device == eventObject.device)
4102}
4103
4104@threadSafety("app")
4105cmd void vkCmdWaitEvents(
4106 VkCmdBuffer cmdBuffer,
4107 u32 eventCount,
4108 const VkEvent* pEvents,
4109 VkPipelineStageFlags srcStageMask,
4110 VkPipelineStageFlags destStageMask,
4111 u32 memBarrierCount,
4112 const void* const* ppMemBarriers) {
4113 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4114
4115 events := pEvents[0:eventCount]
4116 for i in (0 .. eventCount) {
4117 event := events[i]
4118 eventObject := GetEvent(event)
4119 assert(cmdBufferObject.device == eventObject.device)
4120 }
4121
4122 pMemBarriers := ppMemBarriers[0:memBarrierCount]
4123 for i in (0 .. memBarrierCount) {
4124 switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
4125 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
4126 memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
4127 }
4128 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
4129 imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
4130 imageObject := GetImage(imageMemBarrier.image)
4131 assert(imageObject.device == cmdBufferObject.device)
4132 }
4133 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
4134 bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
4135 bufferObject := GetBuffer(bufferMemBarrier.buffer)
4136 assert(bufferObject.device == cmdBufferObject.device)
4137 }
4138 }
4139 }
4140}
4141
4142@threadSafety("app")
4143cmd void vkCmdPipelineBarrier(
4144 VkCmdBuffer cmdBuffer,
4145 VkPipelineStageFlags srcStageMask,
4146 VkPipelineStageFlags destStageMask,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004147 VkBool32 byRegion,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004148 u32 memBarrierCount,
4149 const void* const* ppMemBarriers) {
4150 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4151
4152 pMemBarriers := ppMemBarriers[0:memBarrierCount]
4153 for i in (0 .. memBarrierCount) {
4154 switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
4155 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
4156 memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
4157 }
4158 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
4159 imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
4160 imageObject := GetImage(imageMemBarrier.image)
4161 assert(imageObject.device == cmdBufferObject.device)
4162 }
4163 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
4164 bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
4165 bufferObject := GetBuffer(bufferMemBarrier.buffer)
4166 assert(bufferObject.device == cmdBufferObject.device)
4167 }
4168 }
4169 }
4170}
4171
4172@threadSafety("app")
4173cmd void vkCmdBeginQuery(
4174 VkCmdBuffer cmdBuffer,
4175 VkQueryPool queryPool,
4176 u32 slot,
4177 VkQueryControlFlags flags) {
4178 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4179 queryPoolObject := GetQueryPool(queryPool)
4180 assert(cmdBufferObject.device == queryPoolObject.device)
4181}
4182
4183@threadSafety("app")
4184cmd void vkCmdEndQuery(
4185 VkCmdBuffer cmdBuffer,
4186 VkQueryPool queryPool,
4187 u32 slot) {
4188 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4189 queryPoolObject := GetQueryPool(queryPool)
4190 assert(cmdBufferObject.device == queryPoolObject.device)
4191}
4192
4193@threadSafety("app")
4194cmd void vkCmdResetQueryPool(
4195 VkCmdBuffer cmdBuffer,
4196 VkQueryPool queryPool,
4197 u32 startQuery,
4198 u32 queryCount) {
4199 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4200 queryPoolObject := GetQueryPool(queryPool)
4201 assert(cmdBufferObject.device == queryPoolObject.device)
4202}
4203
4204@threadSafety("app")
4205cmd void vkCmdWriteTimestamp(
4206 VkCmdBuffer cmdBuffer,
4207 VkTimestampType timestampType,
4208 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004209 VkDeviceSize destOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004210 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4211 destBufferObject := GetBuffer(destBuffer)
4212 assert(cmdBufferObject.device == destBufferObject.device)
4213}
4214
4215@threadSafety("app")
4216cmd void vkCmdCopyQueryPoolResults(
4217 VkCmdBuffer cmdBuffer,
4218 VkQueryPool queryPool,
4219 u32 startQuery,
4220 u32 queryCount,
4221 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004222 VkDeviceSize destOffset,
4223 VkDeviceSize destStride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004224 VkQueryResultFlags flags) {
4225 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4226 queryPoolObject := GetQueryPool(queryPool)
4227 destBufferObject := GetBuffer(destBuffer)
4228 assert(cmdBufferObject.device == queryPoolObject.device)
4229 assert(cmdBufferObject.device == destBufferObject.device)
4230}
4231
4232cmd void vkCmdPushConstants(
4233 VkCmdBuffer cmdBuffer,
4234 VkPipelineLayout layout,
4235 VkShaderStageFlags stageFlags,
4236 u32 start,
4237 u32 length,
4238 const void* values) {
4239 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4240 layoutObject := GetPipelineLayout(layout)
4241 assert(cmdBufferObject.device == layoutObject.device)
4242}
4243
4244@threadSafety("app")
4245cmd void vkCmdBeginRenderPass(
4246 VkCmdBuffer cmdBuffer,
4247 const VkRenderPassBeginInfo* pRenderPassBegin,
4248 VkRenderPassContents contents) {
4249 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4250 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4251 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
4252 assert(cmdBufferObject.device == renderPassObject.device)
4253 assert(cmdBufferObject.device == framebufferObject.device)
4254
4255 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4256 cmdBufferObject.queueFlags = queueFlags
4257}
4258
4259cmd void vkCmdNextSubpass(
4260 VkCmdBuffer cmdBuffer,
4261 VkRenderPassContents contents) {
4262 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4263}
4264
4265@threadSafety("app")
4266cmd void vkCmdEndRenderPass(
4267 VkCmdBuffer cmdBuffer) {
4268 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4269
4270 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4271 cmdBufferObject.queueFlags = queueFlags
4272}
4273
4274cmd void vkCmdExecuteCommands(
4275 VkCmdBuffer cmdBuffer,
4276 u32 cmdBuffersCount,
4277 const VkCmdBuffer* pCmdBuffers) {
4278 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4279
4280 cmdBuffers := pCmdBuffers[0:cmdBuffersCount]
4281 for i in (0 .. cmdBuffersCount) {
4282 secondaryCmdBuffer := cmdBuffers[i]
4283 secondaryCmdBufferObject := GetCmdBuffer(secondaryCmdBuffer)
4284 assert(cmdBufferObject.device == secondaryCmdBufferObject.device)
4285 }
4286}
4287
Michael Lentine88594d72015-11-12 12:49:45 -08004288////////////////
4289// Extensions //
4290////////////////
4291
Jesse Hall2818f932015-11-19 21:19:17 -08004292@extension("VK_EXT_KHR_swapchain")
4293cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
4294 VkPhysicalDevice physicalDevice,
4295 u32 queueFamilyIndex,
4296 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4297 VkBool32* pSupported) {
4298 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4299
4300 supported := ?
4301 pSupported[0] = supported
4302
4303 return ?
4304}
4305
Michael Lentine88594d72015-11-12 12:49:45 -08004306@extension("VK_EXT_KHR_device_swapchain")
4307cmd VkResult vkGetSurfacePropertiesKHR(
4308 VkDevice device,
4309 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4310 VkSurfacePropertiesKHR* pSurfaceProperties) {
4311 deviceObject := GetDevice(device)
4312
4313 surfaceProperties := ?
4314 pSurfaceProperties[0] = surfaceProperties
4315
4316 return ?
4317}
4318
4319@extension("VK_EXT_KHR_device_swapchain")
4320cmd VkResult vkGetSurfaceFormatsKHR(
4321 VkDevice device,
4322 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4323 u32* pCount,
4324 VkSurfaceFormatKHR* pSurfaceFormats) {
4325 deviceObject := GetDevice(device)
4326
4327 count := as!u32(?)
4328 pCount[0] = count
4329 surfaceFormats := pSurfaceFormats[0:count]
4330
4331 for i in (0 .. count) {
4332 surfaceFormat := ?
4333 surfaceFormats[i] = surfaceFormat
4334 }
4335
4336 return ?
4337}
4338
4339@extension("VK_EXT_KHR_device_swapchain")
4340cmd VkResult vkGetSurfacePresentModesKHR(
4341 VkDevice device,
4342 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4343 u32* pCount,
4344 VkPresentModeKHR* pPresentModes) {
4345 deviceObject := GetDevice(device)
4346
4347 count := as!u32(?)
4348 pCount[0] = count
4349 presentModes := pPresentModes[0:count]
4350
4351 for i in (0 .. count) {
4352 presentMode := ?
4353 presentModes[i] = presentMode
4354 }
4355
4356 return ?
4357}
4358
4359@extension("VK_EXT_KHR_device_swapchain")
4360cmd VkResult vkCreateSwapchainKHR(
4361 VkDevice device,
4362 const VkSwapchainCreateInfoKHR* pCreateInfo,
4363 VkSwapchainKHR* pSwapchain) {
4364 //assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
4365 deviceObject := GetDevice(device)
4366
4367 swapchain := ?
4368 pSwapchain[0] = swapchain
4369 State.Swapchains[swapchain] = new!SwapchainObject(device: device)
4370
4371 return ?
4372}
4373
4374@extension("VK_EXT_KHR_device_swapchain")
4375cmd VkResult vkDestroySwapchainKHR(
4376 VkDevice device,
4377 VkSwapchainKHR swapchain) {
4378 deviceObject := GetDevice(device)
4379 swapchainObject := GetSwapchain(swapchain)
4380 assert(swapchainObject.device == device)
4381
4382 State.Swapchains[swapchain] = null
4383
4384 return ?
4385}
4386
4387@extension("VK_EXT_KHR_device_swapchain")
4388cmd VkResult vkGetSwapchainImagesKHR(
4389 VkDevice device,
4390 VkSwapchainKHR swapchain,
4391 u32* pCount,
4392 VkImage* pSwapchainImages) {
4393 deviceObject := GetDevice(device)
4394
4395 count := as!u32(?)
4396 pCount[0] = count
4397 swapchainImages := pSwapchainImages[0:count]
4398
4399 for i in (0 .. count) {
4400 swapchainImage := ?
4401 swapchainImages[i] = swapchainImage
4402 if !(swapchainImage in State.Images) {
4403 State.Images[swapchainImage] = new!ImageObject(device: device)
4404 }
4405 }
4406
4407 return ?
4408}
4409
4410@extension("VK_EXT_KHR_device_swapchain")
4411cmd VkResult vkAcquireNextImageKHR(
4412 VkDevice device,
4413 VkSwapchainKHR swapchain,
4414 u64 timeout,
4415 VkSemaphore semaphore,
4416 u32* pImageIndex) {
4417 deviceObject := GetDevice(device)
4418 swapchainObject := GetSwapchain(swapchain)
4419
4420 imageIndex := ?
4421 pImageIndex[0] = imageIndex
4422
4423 return ?
4424}
4425
4426@extension("VK_EXT_KHR_device_swapchain")
4427cmd VkResult vkQueuePresentKHR(
4428 VkQueue queue,
4429 VkPresentInfoKHR* pPresentInfo) {
4430 queueObject := GetQueue(queue)
4431
4432 presentInfo := ?
4433 pPresentInfo[0] = presentInfo
4434
4435 return ?
4436}
4437
Jesse Halld27f6aa2015-08-15 17:58:48 -07004438
4439////////////////
4440// Validation //
4441////////////////
4442
4443extern void validate(string layerName, bool condition, string message)
4444
4445
4446/////////////////////////////
4447// Internal State Tracking //
4448/////////////////////////////
4449
4450StateObject State
4451
4452@internal class StateObject {
4453 // Dispatchable objects.
4454 map!(VkInstance, ref!InstanceObject) Instances
4455 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4456 map!(VkDevice, ref!DeviceObject) Devices
4457 map!(VkQueue, ref!QueueObject) Queues
4458 map!(VkCmdBuffer, ref!CmdBufferObject) CmdBuffers
4459
4460 // Non-dispatchable objects.
4461 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories
4462 map!(VkBuffer, ref!BufferObject) Buffers
4463 map!(VkBufferView, ref!BufferViewObject) BufferViews
4464 map!(VkImage, ref!ImageObject) Images
4465 map!(VkImageView, ref!ImageViewObject) ImageViews
Jesse Halld27f6aa2015-08-15 17:58:48 -07004466 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules
4467 map!(VkShader, ref!ShaderObject) Shaders
4468 map!(VkPipeline, ref!PipelineObject) Pipelines
4469 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts
4470 map!(VkSampler, ref!SamplerObject) Samplers
4471 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets
4472 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts
4473 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools
Jesse Halld27f6aa2015-08-15 17:58:48 -07004474 map!(VkFence, ref!FenceObject) Fences
4475 map!(VkSemaphore, ref!SemaphoreObject) Semaphores
4476 map!(VkEvent, ref!EventObject) Events
4477 map!(VkQueryPool, ref!QueryPoolObject) QueryPools
4478 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers
4479 map!(VkRenderPass, ref!RenderPassObject) RenderPasses
4480 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
4481 map!(VkCmdPool, ref!CmdPoolObject) CmdPools
Michael Lentine88594d72015-11-12 12:49:45 -08004482 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
Jesse Halld27f6aa2015-08-15 17:58:48 -07004483}
4484
4485@internal class InstanceObject {
4486}
4487
4488@internal class PhysicalDeviceObject {
4489 VkInstance instance
4490}
4491
4492@internal class DeviceObject {
4493 VkPhysicalDevice physicalDevice
4494}
4495
4496@internal class QueueObject {
4497 VkDevice device
4498 VkQueueFlags flags
4499}
4500
4501@internal class CmdBufferObject {
4502 VkDevice device
4503 map!(u64, VkDeviceMemory) boundObjects
4504 VkQueueFlags queueFlags
4505}
4506
4507@internal class DeviceMemoryObject {
4508 VkDevice device
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004509 VkDeviceSize allocationSize
4510 map!(u64, VkDeviceSize ) boundObjects
Jesse Halld27f6aa2015-08-15 17:58:48 -07004511 map!(VkCmdBuffer, VkCmdBuffer) boundCommandBuffers
4512}
4513
4514@internal class BufferObject {
4515 VkDevice device
4516 VkDeviceMemory mem
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004517 VkDeviceSize memOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004518}
4519
4520@internal class BufferViewObject {
4521 VkDevice device
4522 VkBuffer buffer
4523}
4524
4525@internal class ImageObject {
4526 VkDevice device
4527 VkDeviceMemory mem
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004528 VkDeviceSize memOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004529}
4530
4531@internal class ImageViewObject {
4532 VkDevice device
4533 VkImage image
4534}
4535
Jesse Halld27f6aa2015-08-15 17:58:48 -07004536@internal class ShaderObject {
4537 VkDevice device
4538}
4539
4540@internal class ShaderModuleObject {
4541 VkDevice device
4542}
4543
4544@internal class PipelineObject {
4545 VkDevice device
4546}
4547
4548@internal class PipelineLayoutObject {
4549 VkDevice device
4550}
4551
4552@internal class SamplerObject {
4553 VkDevice device
4554}
4555
4556@internal class DescriptorSetObject {
4557 VkDevice device
4558}
4559
4560@internal class DescriptorSetLayoutObject {
4561 VkDevice device
4562}
4563
4564@internal class DescriptorPoolObject {
4565 VkDevice device
4566}
4567
Jesse Halld27f6aa2015-08-15 17:58:48 -07004568@internal class FenceObject {
4569 VkDevice device
4570 bool signaled
4571}
4572
4573@internal class SemaphoreObject {
4574 VkDevice device
4575}
4576
4577@internal class EventObject {
4578 VkDevice device
4579}
4580
4581@internal class QueryPoolObject {
4582 VkDevice device
4583}
4584
4585@internal class FramebufferObject {
4586 VkDevice device
4587}
4588
4589@internal class RenderPassObject {
4590 VkDevice device
4591}
4592
4593@internal class PipelineCacheObject {
4594 VkDevice device
4595}
4596
4597@internal class CmdPoolObject {
4598 VkDevice device
4599}
4600
Michael Lentine88594d72015-11-12 12:49:45 -08004601@internal class SwapchainObject {
4602 VkDevice device
4603}
4604
Jesse Halld27f6aa2015-08-15 17:58:48 -07004605macro ref!InstanceObject GetInstance(VkInstance instance) {
4606 assert(instance in State.Instances)
4607 return State.Instances[instance]
4608}
4609
4610macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
4611 assert(physicalDevice in State.PhysicalDevices)
4612 return State.PhysicalDevices[physicalDevice]
4613}
4614
4615macro ref!DeviceObject GetDevice(VkDevice device) {
4616 assert(device in State.Devices)
4617 return State.Devices[device]
4618}
4619
4620macro ref!QueueObject GetQueue(VkQueue queue) {
4621 assert(queue in State.Queues)
4622 return State.Queues[queue]
4623}
4624
4625macro ref!CmdBufferObject GetCmdBuffer(VkCmdBuffer cmdBuffer) {
4626 assert(cmdBuffer in State.CmdBuffers)
4627 return State.CmdBuffers[cmdBuffer]
4628}
4629
4630macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory mem) {
4631 assert(mem in State.DeviceMemories)
4632 return State.DeviceMemories[mem]
4633}
4634
4635macro ref!BufferObject GetBuffer(VkBuffer buffer) {
4636 assert(buffer in State.Buffers)
4637 return State.Buffers[buffer]
4638}
4639
4640macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
4641 assert(bufferView in State.BufferViews)
4642 return State.BufferViews[bufferView]
4643}
4644
4645macro ref!ImageObject GetImage(VkImage image) {
4646 assert(image in State.Images)
4647 return State.Images[image]
4648}
4649
4650macro ref!ImageViewObject GetImageView(VkImageView imageView) {
4651 assert(imageView in State.ImageViews)
4652 return State.ImageViews[imageView]
4653}
4654
Jesse Halld27f6aa2015-08-15 17:58:48 -07004655macro ref!ShaderObject GetShader(VkShader shader) {
4656 assert(shader in State.Shaders)
4657 return State.Shaders[shader]
4658}
4659
4660macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
4661 assert(shaderModule in State.ShaderModules)
4662 return State.ShaderModules[shaderModule]
4663}
4664
4665macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
4666 assert(pipeline in State.Pipelines)
4667 return State.Pipelines[pipeline]
4668}
4669
4670macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
4671 assert(pipelineLayout in State.PipelineLayouts)
4672 return State.PipelineLayouts[pipelineLayout]
4673}
4674
4675macro ref!SamplerObject GetSampler(VkSampler sampler) {
4676 assert(sampler in State.Samplers)
4677 return State.Samplers[sampler]
4678}
4679
4680macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
4681 assert(descriptorSet in State.DescriptorSets)
4682 return State.DescriptorSets[descriptorSet]
4683}
4684
4685macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
4686 assert(descriptorSetLayout in State.DescriptorSetLayouts)
4687 return State.DescriptorSetLayouts[descriptorSetLayout]
4688}
4689
4690macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
4691 assert(descriptorPool in State.DescriptorPools)
4692 return State.DescriptorPools[descriptorPool]
4693}
4694
Jesse Halld27f6aa2015-08-15 17:58:48 -07004695macro ref!FenceObject GetFence(VkFence fence) {
4696 assert(fence in State.Fences)
4697 return State.Fences[fence]
4698}
4699
4700macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
4701 assert(semaphore in State.Semaphores)
4702 return State.Semaphores[semaphore]
4703}
4704
4705macro ref!EventObject GetEvent(VkEvent event) {
4706 assert(event in State.Events)
4707 return State.Events[event]
4708}
4709
4710macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
4711 assert(queryPool in State.QueryPools)
4712 return State.QueryPools[queryPool]
4713}
4714
4715macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
4716 assert(framebuffer in State.Framebuffers)
4717 return State.Framebuffers[framebuffer]
4718}
4719
4720macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
4721 assert(renderPass in State.RenderPasses)
4722 return State.RenderPasses[renderPass]
4723}
4724
4725macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
4726 assert(pipelineCache in State.PipelineCaches)
4727 return State.PipelineCaches[pipelineCache]
4728}
4729
4730macro ref!CmdPoolObject GetCmdPool(VkCmdPool cmdPool) {
4731 assert(cmdPool in State.CmdPools)
4732 return State.CmdPools[cmdPool]
Jesse Hallf09c6b12015-08-15 19:54:28 -07004733}
Michael Lentine88594d72015-11-12 12:49:45 -08004734
4735macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
4736 assert(swapchain in State.Swapchains)
4737 return State.Swapchains[swapchain]
4738}