blob: 175e3533d83a980f8e5de8825169c9a5796ce158 [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 Hallfbf97b02015-11-20 14:17:03 -080030define VERSION_MINOR 183
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
Jesse Halld27f6aa2015-08-15 17:58:48 -0700166enum VkQueryType {
167 VK_QUERY_TYPE_OCCLUSION = 0x00000000,
168 VK_QUERY_TYPE_PIPELINE_STATISTICS = 0x00000001, /// Optional
169}
170
171enum VkTimestampType {
172 VK_TIMESTAMP_TYPE_TOP = 0x00000000,
173 VK_TIMESTAMP_TYPE_BOTTOM = 0x00000001,
174}
175
176enum VkBorderColor {
177 VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000,
178 VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 0x00000001,
179 VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 0x00000002,
180 VK_BORDER_COLOR_INT_OPAQUE_BLACK = 0x00000003,
181 VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 0x00000004,
182 VK_BORDER_COLOR_INT_OPAQUE_WHITE = 0x00000005,
183}
184
185enum VkPipelineBindPoint {
186 VK_PIPELINE_BIND_POINT_COMPUTE = 0x00000000,
187 VK_PIPELINE_BIND_POINT_GRAPHICS = 0x00000001,
188}
189
190enum VkPrimitiveTopology {
191 VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0x00000000,
192 VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 0x00000001,
193 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 0x00000002,
194 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
195 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
196 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 0x00000005,
197 VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ = 0x00000006,
198 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ = 0x00000007,
199 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ = 0x00000008,
200 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ = 0x00000009,
201 VK_PRIMITIVE_TOPOLOGY_PATCH = 0x0000000a,
202}
203
204enum VkSharingMode {
205 VK_SHARING_MODE_EXCLUSIVE = 0x00000000,
206 VK_SHARING_MODE_CONCURRENT = 0x00000001,
207}
208
209enum VkIndexType {
210 VK_INDEX_TYPE_UINT16 = 0x00000000,
211 VK_INDEX_TYPE_UINT32 = 0x00000001,
212}
213
214enum VkTexFilter {
215 VK_TEX_FILTER_NEAREST = 0x00000000,
216 VK_TEX_FILTER_LINEAR = 0x00000001,
217}
218
219enum VkTexMipmapMode {
220 VK_TEX_MIPMAP_MODE_BASE = 0x00000000, /// Always choose base level
221 VK_TEX_MIPMAP_MODE_NEAREST = 0x00000001, /// Choose nearest mip level
222 VK_TEX_MIPMAP_MODE_LINEAR = 0x00000002, /// Linear filter between mip levels
223}
224
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700225enum VkTexAddressMode {
226 VK_TEX_ADDRESS_MODE_WRAP = 0x00000000,
227 VK_TEX_ADDRESS_MODE_MIRROR = 0x00000001,
228 VK_TEX_ADDRESS_MODE_CLAMP = 0x00000002,
229 VK_TEX_ADDRESS_MODE_MIRROR_ONCE = 0x00000003,
230 VK_TEX_ADDRESS_MODE_CLAMP_BORDER = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700231}
232
233enum VkCompareOp {
234 VK_COMPARE_OP_NEVER = 0x00000000,
235 VK_COMPARE_OP_LESS = 0x00000001,
236 VK_COMPARE_OP_EQUAL = 0x00000002,
237 VK_COMPARE_OP_LESS_EQUAL = 0x00000003,
238 VK_COMPARE_OP_GREATER = 0x00000004,
239 VK_COMPARE_OP_NOT_EQUAL = 0x00000005,
240 VK_COMPARE_OP_GREATER_EQUAL = 0x00000006,
241 VK_COMPARE_OP_ALWAYS = 0x00000007,
242}
243
244enum VkFillMode {
245 VK_FILL_MODE_POINTS = 0x00000000,
246 VK_FILL_MODE_WIREFRAME = 0x00000001,
247 VK_FILL_MODE_SOLID = 0x00000002,
248}
249
250enum VkCullMode {
251 VK_CULL_MODE_NONE = 0x00000000,
252 VK_CULL_MODE_FRONT = 0x00000001,
253 VK_CULL_MODE_BACK = 0x00000002,
254 VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
255}
256
257enum VkFrontFace {
258 VK_FRONT_FACE_CCW = 0x00000000,
259 VK_FRONT_FACE_CW = 0x00000001,
260}
261
262enum VkBlend {
263 VK_BLEND_ZERO = 0x00000000,
264 VK_BLEND_ONE = 0x00000001,
265 VK_BLEND_SRC_COLOR = 0x00000002,
266 VK_BLEND_ONE_MINUS_SRC_COLOR = 0x00000003,
267 VK_BLEND_DEST_COLOR = 0x00000004,
268 VK_BLEND_ONE_MINUS_DEST_COLOR = 0x00000005,
269 VK_BLEND_SRC_ALPHA = 0x00000006,
270 VK_BLEND_ONE_MINUS_SRC_ALPHA = 0x00000007,
271 VK_BLEND_DEST_ALPHA = 0x00000008,
272 VK_BLEND_ONE_MINUS_DEST_ALPHA = 0x00000009,
273 VK_BLEND_CONSTANT_COLOR = 0x0000000a,
274 VK_BLEND_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
275 VK_BLEND_CONSTANT_ALPHA = 0x0000000c,
276 VK_BLEND_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
277 VK_BLEND_SRC_ALPHA_SATURATE = 0x0000000e,
278 VK_BLEND_SRC1_COLOR = 0x0000000f,
279 VK_BLEND_ONE_MINUS_SRC1_COLOR = 0x00000010,
280 VK_BLEND_SRC1_ALPHA = 0x00000011,
281 VK_BLEND_ONE_MINUS_SRC1_ALPHA = 0x00000012,
282}
283
284enum VkBlendOp {
285 VK_BLEND_OP_ADD = 0x00000000,
286 VK_BLEND_OP_SUBTRACT = 0x00000001,
287 VK_BLEND_OP_REVERSE_SUBTRACT = 0x00000002,
288 VK_BLEND_OP_MIN = 0x00000003,
289 VK_BLEND_OP_MAX = 0x00000004,
290}
291
292enum VkStencilOp {
293 VK_STENCIL_OP_KEEP = 0x00000000,
294 VK_STENCIL_OP_ZERO = 0x00000001,
295 VK_STENCIL_OP_REPLACE = 0x00000002,
296 VK_STENCIL_OP_INC_CLAMP = 0x00000003,
297 VK_STENCIL_OP_DEC_CLAMP = 0x00000004,
298 VK_STENCIL_OP_INVERT = 0x00000005,
299 VK_STENCIL_OP_INC_WRAP = 0x00000006,
300 VK_STENCIL_OP_DEC_WRAP = 0x00000007,
301}
302
303enum VkLogicOp {
304 VK_LOGIC_OP_CLEAR = 0x00000000,
305 VK_LOGIC_OP_AND = 0x00000001,
306 VK_LOGIC_OP_AND_REVERSE = 0x00000002,
307 VK_LOGIC_OP_COPY = 0x00000003,
308 VK_LOGIC_OP_AND_INVERTED = 0x00000004,
309 VK_LOGIC_OP_NOOP = 0x00000005,
310 VK_LOGIC_OP_XOR = 0x00000006,
311 VK_LOGIC_OP_OR = 0x00000007,
312 VK_LOGIC_OP_NOR = 0x00000008,
313 VK_LOGIC_OP_EQUIV = 0x00000009,
314 VK_LOGIC_OP_INVERT = 0x0000000a,
315 VK_LOGIC_OP_OR_REVERSE = 0x0000000b,
316 VK_LOGIC_OP_COPY_INVERTED = 0x0000000c,
317 VK_LOGIC_OP_OR_INVERTED = 0x0000000d,
318 VK_LOGIC_OP_NAND = 0x0000000e,
319 VK_LOGIC_OP_SET = 0x0000000f,
320}
321
322enum VkSystemAllocType {
323 VK_SYSTEM_ALLOC_TYPE_API_OBJECT = 0x00000000,
324 VK_SYSTEM_ALLOC_TYPE_INTERNAL = 0x00000001,
325 VK_SYSTEM_ALLOC_TYPE_INTERNAL_TEMP = 0x00000002,
326 VK_SYSTEM_ALLOC_TYPE_INTERNAL_SHADER = 0x00000003,
327 VK_SYSTEM_ALLOC_TYPE_DEBUG = 0x00000004,
328}
329
330enum VkPhysicalDeviceType {
331 VK_PHYSICAL_DEVICE_TYPE_OTHER = 0x00000000,
332 VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 0x00000001,
333 VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 0x00000002,
334 VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 0x00000003,
335 VK_PHYSICAL_DEVICE_TYPE_CPU = 0x00000004,
336}
337
338enum VkVertexInputStepRate {
339 VK_VERTEX_INPUT_STEP_RATE_VERTEX = 0x00000000,
340 VK_VERTEX_INPUT_STEP_RATE_INSTANCE = 0x00000001,
341}
342
343/// Vulkan format definitions
344enum VkFormat {
345 VK_FORMAT_UNDEFINED = 0x00000000,
346 VK_FORMAT_R4G4_UNORM = 0x00000001,
347 VK_FORMAT_R4G4_USCALED = 0x00000002,
348 VK_FORMAT_R4G4B4A4_UNORM = 0x00000003,
349 VK_FORMAT_R4G4B4A4_USCALED = 0x00000004,
350 VK_FORMAT_R5G6B5_UNORM = 0x00000005,
351 VK_FORMAT_R5G6B5_USCALED = 0x00000006,
352 VK_FORMAT_R5G5B5A1_UNORM = 0x00000007,
353 VK_FORMAT_R5G5B5A1_USCALED = 0x00000008,
354 VK_FORMAT_R8_UNORM = 0x00000009,
355 VK_FORMAT_R8_SNORM = 0x0000000A,
356 VK_FORMAT_R8_USCALED = 0x0000000B,
357 VK_FORMAT_R8_SSCALED = 0x0000000C,
358 VK_FORMAT_R8_UINT = 0x0000000D,
359 VK_FORMAT_R8_SINT = 0x0000000E,
360 VK_FORMAT_R8_SRGB = 0x0000000F,
361 VK_FORMAT_R8G8_UNORM = 0x00000010,
362 VK_FORMAT_R8G8_SNORM = 0x00000011,
363 VK_FORMAT_R8G8_USCALED = 0x00000012,
364 VK_FORMAT_R8G8_SSCALED = 0x00000013,
365 VK_FORMAT_R8G8_UINT = 0x00000014,
366 VK_FORMAT_R8G8_SINT = 0x00000015,
367 VK_FORMAT_R8G8_SRGB = 0x00000016,
368 VK_FORMAT_R8G8B8_UNORM = 0x00000017,
369 VK_FORMAT_R8G8B8_SNORM = 0x00000018,
370 VK_FORMAT_R8G8B8_USCALED = 0x00000019,
371 VK_FORMAT_R8G8B8_SSCALED = 0x0000001A,
372 VK_FORMAT_R8G8B8_UINT = 0x0000001B,
373 VK_FORMAT_R8G8B8_SINT = 0x0000001C,
374 VK_FORMAT_R8G8B8_SRGB = 0x0000001D,
375 VK_FORMAT_R8G8B8A8_UNORM = 0x0000001E,
376 VK_FORMAT_R8G8B8A8_SNORM = 0x0000001F,
377 VK_FORMAT_R8G8B8A8_USCALED = 0x00000020,
378 VK_FORMAT_R8G8B8A8_SSCALED = 0x00000021,
379 VK_FORMAT_R8G8B8A8_UINT = 0x00000022,
380 VK_FORMAT_R8G8B8A8_SINT = 0x00000023,
381 VK_FORMAT_R8G8B8A8_SRGB = 0x00000024,
382 VK_FORMAT_R10G10B10A2_UNORM = 0x00000025,
383 VK_FORMAT_R10G10B10A2_SNORM = 0x00000026,
384 VK_FORMAT_R10G10B10A2_USCALED = 0x00000027,
385 VK_FORMAT_R10G10B10A2_SSCALED = 0x00000028,
386 VK_FORMAT_R10G10B10A2_UINT = 0x00000029,
387 VK_FORMAT_R10G10B10A2_SINT = 0x0000002A,
388 VK_FORMAT_R16_UNORM = 0x0000002B,
389 VK_FORMAT_R16_SNORM = 0x0000002C,
390 VK_FORMAT_R16_USCALED = 0x0000002D,
391 VK_FORMAT_R16_SSCALED = 0x0000002E,
392 VK_FORMAT_R16_UINT = 0x0000002F,
393 VK_FORMAT_R16_SINT = 0x00000030,
394 VK_FORMAT_R16_SFLOAT = 0x00000031,
395 VK_FORMAT_R16G16_UNORM = 0x00000032,
396 VK_FORMAT_R16G16_SNORM = 0x00000033,
397 VK_FORMAT_R16G16_USCALED = 0x00000034,
398 VK_FORMAT_R16G16_SSCALED = 0x00000035,
399 VK_FORMAT_R16G16_UINT = 0x00000036,
400 VK_FORMAT_R16G16_SINT = 0x00000037,
401 VK_FORMAT_R16G16_SFLOAT = 0x00000038,
402 VK_FORMAT_R16G16B16_UNORM = 0x00000039,
403 VK_FORMAT_R16G16B16_SNORM = 0x0000003A,
404 VK_FORMAT_R16G16B16_USCALED = 0x0000003B,
405 VK_FORMAT_R16G16B16_SSCALED = 0x0000003C,
406 VK_FORMAT_R16G16B16_UINT = 0x0000003D,
407 VK_FORMAT_R16G16B16_SINT = 0x0000003E,
408 VK_FORMAT_R16G16B16_SFLOAT = 0x0000003F,
409 VK_FORMAT_R16G16B16A16_UNORM = 0x00000040,
410 VK_FORMAT_R16G16B16A16_SNORM = 0x00000041,
411 VK_FORMAT_R16G16B16A16_USCALED = 0x00000042,
412 VK_FORMAT_R16G16B16A16_SSCALED = 0x00000043,
413 VK_FORMAT_R16G16B16A16_UINT = 0x00000044,
414 VK_FORMAT_R16G16B16A16_SINT = 0x00000045,
415 VK_FORMAT_R16G16B16A16_SFLOAT = 0x00000046,
416 VK_FORMAT_R32_UINT = 0x00000047,
417 VK_FORMAT_R32_SINT = 0x00000048,
418 VK_FORMAT_R32_SFLOAT = 0x00000049,
419 VK_FORMAT_R32G32_UINT = 0x0000004A,
420 VK_FORMAT_R32G32_SINT = 0x0000004B,
421 VK_FORMAT_R32G32_SFLOAT = 0x0000004C,
422 VK_FORMAT_R32G32B32_UINT = 0x0000004D,
423 VK_FORMAT_R32G32B32_SINT = 0x0000004E,
424 VK_FORMAT_R32G32B32_SFLOAT = 0x0000004F,
425 VK_FORMAT_R32G32B32A32_UINT = 0x00000050,
426 VK_FORMAT_R32G32B32A32_SINT = 0x00000051,
427 VK_FORMAT_R32G32B32A32_SFLOAT = 0x00000052,
428 VK_FORMAT_R64_SFLOAT = 0x00000053,
429 VK_FORMAT_R64G64_SFLOAT = 0x00000054,
430 VK_FORMAT_R64G64B64_SFLOAT = 0x00000055,
431 VK_FORMAT_R64G64B64A64_SFLOAT = 0x00000056,
432 VK_FORMAT_R11G11B10_UFLOAT = 0x00000057,
433 VK_FORMAT_R9G9B9E5_UFLOAT = 0x00000058,
434 VK_FORMAT_D16_UNORM = 0x00000059,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700435 VK_FORMAT_D24_UNORM_X8 = 0x0000005A,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700436 VK_FORMAT_D32_SFLOAT = 0x0000005B,
437 VK_FORMAT_S8_UINT = 0x0000005C,
438 VK_FORMAT_D16_UNORM_S8_UINT = 0x0000005D,
439 VK_FORMAT_D24_UNORM_S8_UINT = 0x0000005E,
440 VK_FORMAT_D32_SFLOAT_S8_UINT = 0x0000005F,
441 VK_FORMAT_BC1_RGB_UNORM = 0x00000060,
442 VK_FORMAT_BC1_RGB_SRGB = 0x00000061,
443 VK_FORMAT_BC1_RGBA_UNORM = 0x00000062,
444 VK_FORMAT_BC1_RGBA_SRGB = 0x00000063,
445 VK_FORMAT_BC2_UNORM = 0x00000064,
446 VK_FORMAT_BC2_SRGB = 0x00000065,
447 VK_FORMAT_BC3_UNORM = 0x00000066,
448 VK_FORMAT_BC3_SRGB = 0x00000067,
449 VK_FORMAT_BC4_UNORM = 0x00000068,
450 VK_FORMAT_BC4_SNORM = 0x00000069,
451 VK_FORMAT_BC5_UNORM = 0x0000006A,
452 VK_FORMAT_BC5_SNORM = 0x0000006B,
453 VK_FORMAT_BC6H_UFLOAT = 0x0000006C,
454 VK_FORMAT_BC6H_SFLOAT = 0x0000006D,
455 VK_FORMAT_BC7_UNORM = 0x0000006E,
456 VK_FORMAT_BC7_SRGB = 0x0000006F,
457 VK_FORMAT_ETC2_R8G8B8_UNORM = 0x00000070,
458 VK_FORMAT_ETC2_R8G8B8_SRGB = 0x00000071,
459 VK_FORMAT_ETC2_R8G8B8A1_UNORM = 0x00000072,
460 VK_FORMAT_ETC2_R8G8B8A1_SRGB = 0x00000073,
461 VK_FORMAT_ETC2_R8G8B8A8_UNORM = 0x00000074,
462 VK_FORMAT_ETC2_R8G8B8A8_SRGB = 0x00000075,
463 VK_FORMAT_EAC_R11_UNORM = 0x00000076,
464 VK_FORMAT_EAC_R11_SNORM = 0x00000077,
465 VK_FORMAT_EAC_R11G11_UNORM = 0x00000078,
466 VK_FORMAT_EAC_R11G11_SNORM = 0x00000079,
467 VK_FORMAT_ASTC_4x4_UNORM = 0x0000007A,
468 VK_FORMAT_ASTC_4x4_SRGB = 0x0000007B,
469 VK_FORMAT_ASTC_5x4_UNORM = 0x0000007C,
470 VK_FORMAT_ASTC_5x4_SRGB = 0x0000007D,
471 VK_FORMAT_ASTC_5x5_UNORM = 0x0000007E,
472 VK_FORMAT_ASTC_5x5_SRGB = 0x0000007F,
473 VK_FORMAT_ASTC_6x5_UNORM = 0x00000080,
474 VK_FORMAT_ASTC_6x5_SRGB = 0x00000081,
475 VK_FORMAT_ASTC_6x6_UNORM = 0x00000082,
476 VK_FORMAT_ASTC_6x6_SRGB = 0x00000083,
477 VK_FORMAT_ASTC_8x5_UNORM = 0x00000084,
478 VK_FORMAT_ASTC_8x5_SRGB = 0x00000085,
479 VK_FORMAT_ASTC_8x6_UNORM = 0x00000086,
480 VK_FORMAT_ASTC_8x6_SRGB = 0x00000087,
481 VK_FORMAT_ASTC_8x8_UNORM = 0x00000088,
482 VK_FORMAT_ASTC_8x8_SRGB = 0x00000089,
483 VK_FORMAT_ASTC_10x5_UNORM = 0x0000008A,
484 VK_FORMAT_ASTC_10x5_SRGB = 0x0000008B,
485 VK_FORMAT_ASTC_10x6_UNORM = 0x0000008C,
486 VK_FORMAT_ASTC_10x6_SRGB = 0x0000008D,
487 VK_FORMAT_ASTC_10x8_UNORM = 0x0000008E,
488 VK_FORMAT_ASTC_10x8_SRGB = 0x0000008F,
489 VK_FORMAT_ASTC_10x10_UNORM = 0x00000090,
490 VK_FORMAT_ASTC_10x10_SRGB = 0x00000091,
491 VK_FORMAT_ASTC_12x10_UNORM = 0x00000092,
492 VK_FORMAT_ASTC_12x10_SRGB = 0x00000093,
493 VK_FORMAT_ASTC_12x12_UNORM = 0x00000094,
494 VK_FORMAT_ASTC_12x12_SRGB = 0x00000095,
495 VK_FORMAT_B4G4R4A4_UNORM = 0x00000096,
496 VK_FORMAT_B5G5R5A1_UNORM = 0x00000097,
497 VK_FORMAT_B5G6R5_UNORM = 0x00000098,
498 VK_FORMAT_B5G6R5_USCALED = 0x00000099,
499 VK_FORMAT_B8G8R8_UNORM = 0x0000009A,
500 VK_FORMAT_B8G8R8_SNORM = 0x0000009B,
501 VK_FORMAT_B8G8R8_USCALED = 0x0000009C,
502 VK_FORMAT_B8G8R8_SSCALED = 0x0000009D,
503 VK_FORMAT_B8G8R8_UINT = 0x0000009E,
504 VK_FORMAT_B8G8R8_SINT = 0x0000009F,
505 VK_FORMAT_B8G8R8_SRGB = 0x000000A0,
506 VK_FORMAT_B8G8R8A8_UNORM = 0x000000A1,
507 VK_FORMAT_B8G8R8A8_SNORM = 0x000000A2,
508 VK_FORMAT_B8G8R8A8_USCALED = 0x000000A3,
509 VK_FORMAT_B8G8R8A8_SSCALED = 0x000000A4,
510 VK_FORMAT_B8G8R8A8_UINT = 0x000000A5,
511 VK_FORMAT_B8G8R8A8_SINT = 0x000000A6,
512 VK_FORMAT_B8G8R8A8_SRGB = 0x000000A7,
513 VK_FORMAT_B10G10R10A2_UNORM = 0x000000A8,
514 VK_FORMAT_B10G10R10A2_SNORM = 0x000000A9,
515 VK_FORMAT_B10G10R10A2_USCALED = 0x000000AA,
516 VK_FORMAT_B10G10R10A2_SSCALED = 0x000000AB,
517 VK_FORMAT_B10G10R10A2_UINT = 0x000000AC,
518 VK_FORMAT_B10G10R10A2_SINT = 0x000000AD,
519}
520
Jesse Halld27f6aa2015-08-15 17:58:48 -0700521/// Structure type enumerant
522enum VkStructureType {
523 VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
524 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1,
525 VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2,
526 VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 3,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700527 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 4,
528 VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 5,
529 VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6,
530 VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7,
531 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8,
Jesse Hallfbf97b02015-11-20 14:17:03 -0800532 VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 9,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700533 VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
534 VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11,
535 VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12,
536 VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 13,
537 VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 14,
538 VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 15,
539 VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 16,
540 VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17,
541 VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 18,
542 VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 19,
543 VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 20,
544 VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 21,
545 VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 22,
546 VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 23,
547 VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 24,
548 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 25,
549 VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 26,
550 VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 27,
551 VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 28,
552 VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 29,
553 VK_STRUCTURE_TYPE_MEMORY_BARRIER = 30,
554 VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 31,
555 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 32,
556 VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
557 VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 34,
558 VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 35,
559 VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 36,
560 VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 37,
561 VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 38,
562 VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 39,
563 VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 40,
564 VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 41,
565 VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 42,
566 VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
567 VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44,
568 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
569 VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
Jesse Hallfbf97b02015-11-20 14:17:03 -0800570 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 47,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700571}
572
573enum VkRenderPassContents {
574 VK_RENDER_PASS_CONTENTS_INLINE = 0x00000000,
575 VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS = 0x00000001,
576}
577
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700578@lastUnused(-8)
Jesse Halld27f6aa2015-08-15 17:58:48 -0700579/// Error and return codes
580enum VkResult {
581 // Return codes for successful operation execution (positive values)
582 VK_SUCCESS = 0x00000000,
Jesse Halla15a4bf2015-11-19 22:48:02 -0800583 VK_NOT_READY = 0x00000001,
584 VK_TIMEOUT = 0x00000002,
585 VK_EVENT_SET = 0x00000003,
586 VK_EVENT_RESET = 0x00000004,
587 VK_INCOMPLETE = 0x00000005,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700588
589 // Error codes (negative values)
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700590 VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF,
591 VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700592 VK_ERROR_INITIALIZATION_FAILED = 0xFFFFFFFD,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700593 VK_ERROR_DEVICE_LOST = 0xFFFFFFFC,
594 VK_ERROR_MEMORY_MAP_FAILED = 0xFFFFFFFB,
595 VK_ERROR_LAYER_NOT_PRESENT = 0xFFFFFFFA,
596 VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9,
Jesse Hall606a54e2015-11-19 22:17:28 -0800597 VK_ERROR_FEATURE_NOT_PRESENT = 0xFFFFFFF8,
598 VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF7,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700599}
600
601enum VkDynamicState {
602 VK_DYNAMIC_STATE_VIEWPORT = 0x00000000,
603 VK_DYNAMIC_STATE_SCISSOR = 0x00000001,
604 VK_DYNAMIC_STATE_LINE_WIDTH = 0x00000002,
605 VK_DYNAMIC_STATE_DEPTH_BIAS = 0x00000003,
606 VK_DYNAMIC_STATE_BLEND_CONSTANTS = 0x00000004,
607 VK_DYNAMIC_STATE_DEPTH_BOUNDS = 0x00000005,
608 VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 0x00000006,
609 VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 0x00000007,
610 VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700611}
612
Michael Lentine88594d72015-11-12 12:49:45 -0800613//////////////////
614// Extensions //
615//////////////////
616
617@extension("VK_EXT_KHR_swapchain")
618enum VkSurfaceTransformKHR {
619 VK_SURFACE_TRANSFORM_NONE_KHR = 0x00000000,
620 VK_SURFACE_TRANSFORM_ROT90_KHR = 0x00000001,
621 VK_SURFACE_TRANSFORM_ROT180_KHR = 0x00000002,
622 VK_SURFACE_TRANSFORM_ROT270_KHR = 0x00000003,
623 VK_SURFACE_TRANSFORM_HMIRROR_KHR = 0x00000004,
624 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 0x00000005,
625 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 0x00000006,
626 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 0x00000007,
627 VK_SURFACE_TRANSFORM_INHERIT_KHR = 0x00000008,
628}
629
630@extension("VK_EXT_KHR_swapchain")
631enum VkPlatformKHR {
632 VK_PLATFORM_WIN32_KHR = 0x00000000,
633 VK_PLATFORM_X11_KHR = 0x00000001,
634 VK_PLATFORM_XCB_KHR = 0x00000002,
635 VK_PLATFORM_ANDROID_KHR = 0x00000003,
636 VK_PLATFORM_WAYLAND_KHR = 0x00000004,
637 VK_PLATFORM_MIR_KHR = 0x00000005,
638}
639
640@extension("VK_EXT_KHR_device_swapchain")
641enum VkPresentModeKHR {
642 VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000,
643 VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001,
644 VK_PRESENT_MODE_FIFO_KHR = 0x00000002,
645}
646
647@extension("VK_EXT_KHR_device_swapchain")
648enum VkColorSpaceKHR {
649 VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
650}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700651
652/////////////////
653// Bitfields //
654/////////////////
655
Jesse Halld27f6aa2015-08-15 17:58:48 -0700656/// Queue capabilities
657bitfield VkQueueFlags {
658 VK_QUEUE_GRAPHICS_BIT = 0x00000001, /// Queue supports graphics operations
659 VK_QUEUE_COMPUTE_BIT = 0x00000002, /// Queue supports compute operations
660 VK_QUEUE_DMA_BIT = 0x00000004, /// Queue supports DMA operations
661 VK_QUEUE_SPARSE_MEMMGR_BIT = 0x00000008, /// Queue supports sparse resource memory management operations
662 VK_QUEUE_EXTENDED_BIT = 0x40000000, /// Extended queue
663}
664
665/// Memory properties passed into vkAllocMemory().
666bitfield VkMemoryPropertyFlags {
667 VK_MEMORY_PROPERTY_DEVICE_ONLY = 0x00000000, /// If otherwise stated, then allocate memory on device
668 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000001, /// Memory should be mappable by host
669 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
670 /// vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
671 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT = 0x00000004, /// Memory should not be cached by the host
Jesse Hallacfa5342015-11-19 21:51:33 -0800672 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 -0700673}
674
675/// Memory heap flags
676bitfield VkMemoryHeapFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700677 VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001, /// If set, heap represents host memory
Jesse Halld27f6aa2015-08-15 17:58:48 -0700678}
679
680/// Memory output flags passed to resource transition commands
681bitfield VkMemoryOutputFlags {
682 VK_MEMORY_OUTPUT_HOST_WRITE_BIT = 0x00000001, /// Controls output coherency of host writes
683 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT = 0x00000002, /// Controls output coherency of generic shader writes
684 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT = 0x00000004, /// Controls output coherency of color attachment writes
685 VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000008, /// Controls output coherency of depth/stencil attachment writes
686 VK_MEMORY_OUTPUT_TRANSFER_BIT = 0x00000010, /// Controls output coherency of transfer operations
687}
688
689/// Memory input flags passed to resource transition commands
690bitfield VkMemoryInputFlags {
691 VK_MEMORY_INPUT_HOST_READ_BIT = 0x00000001, /// Controls input coherency of host reads
692 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT = 0x00000002, /// Controls input coherency of indirect command reads
693 VK_MEMORY_INPUT_INDEX_FETCH_BIT = 0x00000004, /// Controls input coherency of index fetches
694 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT = 0x00000008, /// Controls input coherency of vertex attribute fetches
695 VK_MEMORY_INPUT_UNIFORM_READ_BIT = 0x00000010, /// Controls input coherency of uniform buffer reads
696 VK_MEMORY_INPUT_SHADER_READ_BIT = 0x00000020, /// Controls input coherency of generic shader reads
697 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT = 0x00000040, /// Controls input coherency of color attachment reads
698 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000080, /// Controls input coherency of depth/stencil attachment reads
699 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT = 0x00000100, /// Controls input coherency of input attachment reads
700 VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200, /// Controls input coherency of transfer operations
701}
702
703/// Buffer usage flags
704bitfield VkBufferUsageFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700705 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001, /// Can be used as a source of transfer operations
706 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002, /// Can be used as a destination of transfer operations
707 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, /// Can be used as TBO
708 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, /// Can be used as IBO
709 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, /// Can be used as UBO
710 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, /// Can be used as SSBO
711 VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, /// Can be used as source of fixed function index fetch (index buffer)
712 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, /// Can be used as source of fixed function vertex fetch (VBO)
713 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
714}
715
716/// Buffer creation flags
717bitfield VkBufferCreateFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700718 VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Buffer should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700719 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Buffer should support sparse backing with partial residency
720 VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
721}
722
723/// Shader stage flags
724bitfield VkShaderStageFlags {
725 VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
Jesse Hallae38f732015-11-19 21:32:50 -0800726 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
727 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700728 VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
729 VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
730 VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
731
732 VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
733}
734
Jesse Hallfbf97b02015-11-20 14:17:03 -0800735/// Descriptor pool create flags
736bitfield VkDescriptorPoolCreateFlags {
737 VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
738}
739
740/// Descriptor pool reset flags
741bitfield VkDescriptorPoolResetFlags {
742}
743
Jesse Halld27f6aa2015-08-15 17:58:48 -0700744/// 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
Jesse Halla15a4bf2015-11-19 22:48:02 -0800837/// Command buffer usage flags
838bitfield VkCmdBufferUsageFlags {
839 VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
840 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
841 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700842}
843
844/// Pipeline statistics flags
845bitfield VkQueryPipelineStatisticFlags {
Jesse Hallae38f732015-11-19 21:32:50 -0800846 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, /// Optional
847 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, /// Optional
848 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, /// Optional
849 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, /// Optional
850 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, /// Optional
851 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, /// Optional
852 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, /// Optional
853 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, /// Optional
854 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, /// Optional
855 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, /// Optional
856 VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, /// Optional
Jesse Halld27f6aa2015-08-15 17:58:48 -0700857}
858
859/// Memory mapping flags
860bitfield VkMemoryMapFlags {
861}
862
863/// Bitfield of image aspects
864bitfield VkImageAspectFlags {
865 VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
866 VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
867 VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
868 VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
869}
870
871/// Sparse memory bind flags
872bitfield VkSparseMemoryBindFlags {
873 VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT = 0x00000001, /// Replicate the first 64 KiB memory block to the entire bind rage
874}
875
876/// Sparse image memory requirements flags
877bitfield VkSparseImageFormatFlags {
878 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT = 0x00000001, /// Image uses a single miptail region for all array slices
879 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.
880 VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT = 0x00000004, /// Image uses a non-standard sparse block size
881}
882
883/// Pipeline stages
884bitfield VkPipelineStageFlags {
885 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, /// Before subsequent commands are processed
886 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, /// Draw/DispatchIndirect command fetch
887 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, /// Vertex/index fetch
888 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, /// Vertex shading
Jesse Hallae38f732015-11-19 21:32:50 -0800889 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, /// Tessellation control shading
890 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, /// Tessellation evaluation shading
Jesse Halld27f6aa2015-08-15 17:58:48 -0700891 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, /// Geometry shading
892 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, /// Fragment shading
893 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, /// Early fragment (depth/stencil) tests
894 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, /// Late fragment (depth/stencil) tests
895 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, /// Color attachment writes
896 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, /// Compute shading
897 VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, /// Transfer/copy operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700898 VK_PIPELINE_STAGE_HOST_BIT = 0x00002000, /// Indicates host (CPU) is a source/sink of the dependency
Jesse Halld27f6aa2015-08-15 17:58:48 -0700899
900 VK_PIPELINE_STAGE_ALL_GRAPHICS = 0x000007FF, /// All stages of the graphics pipeline
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700901 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00001FFF, /// All graphics, compute, copy, and transition commands
902}
903
904/// Render pass attachment description flags
905bitfield VkAttachmentDescriptionFlags {
906 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 -0700907}
908
909/// Subpass description flags
910bitfield VkSubpassDescriptionFlags {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700911}
912
913/// Command pool creation flags
914bitfield VkCmdPoolCreateFlags {
915 VK_CMD_POOL_CREATE_TRANSIENT_BIT = 0x00000001, /// Command buffers have a short lifetime
916 VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, /// Command buffers may release their memory individually
917}
918
919/// Command pool reset flags
920bitfield VkCmdPoolResetFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700921 VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the pool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700922}
923
924bitfield VkCmdBufferResetFlags {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700925 VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the buffer
926}
927
928bitfield VkSampleCountFlags {
929 VK_SAMPLE_COUNT_1_BIT = 0x00000001,
930 VK_SAMPLE_COUNT_2_BIT = 0x00000002,
931 VK_SAMPLE_COUNT_4_BIT = 0x00000004,
932 VK_SAMPLE_COUNT_8_BIT = 0x00000008,
933 VK_SAMPLE_COUNT_16_BIT = 0x00000010,
934 VK_SAMPLE_COUNT_32_BIT = 0x00000020,
935 VK_SAMPLE_COUNT_64_BIT = 0x00000040,
936}
937
938bitfield VkStencilFaceFlags {
939 VK_STENCIL_FACE_NONE = 0x00000000, /// No faces
940 VK_STENCIL_FACE_FRONT_BIT = 0x00000001, /// Front face
941 VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face
Jesse Halld27f6aa2015-08-15 17:58:48 -0700942}
943
Michael Lentine88594d72015-11-12 12:49:45 -0800944//////////////////
945// Extensions //
946//////////////////
947
948@extension("VK_EXT_KHR_swapchain")
949bitfield VkSurfaceTransformFlagsKHR {
950 VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
951 VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
952 VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
953 VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
954 VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
955 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
956 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
957 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
958 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
959}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700960
961//////////////////
962// Structures //
963//////////////////
964
965class VkOffset2D {
966 s32 x
967 s32 y
968}
969
970class VkOffset3D {
971 s32 x
972 s32 y
973 s32 z
974}
975
976class VkExtent2D {
977 s32 width
978 s32 height
979}
980
981class VkExtent3D {
982 s32 width
983 s32 height
984 s32 depth
985}
986
987class VkViewport {
988 f32 originX
989 f32 originY
990 f32 width
991 f32 height
992 f32 minDepth
993 f32 maxDepth
994}
995
996class VkRect2D {
997 VkOffset2D offset
998 VkExtent2D extent
999}
1000
Jesse Halla15a4bf2015-11-19 22:48:02 -08001001class VkClearRect {
1002 VkRect2D rect
1003 u32 baseArrayLayer
1004 u32 numLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001005}
1006
1007class VkChannelMapping {
1008 VkChannelSwizzle r
1009 VkChannelSwizzle g
1010 VkChannelSwizzle b
1011 VkChannelSwizzle a
1012}
1013
1014class VkPhysicalDeviceProperties {
1015 u32 apiVersion
1016 u32 driverVersion
1017 u32 vendorId
1018 u32 deviceId
1019 VkPhysicalDeviceType deviceType
1020 char[VK_MAX_PHYSICAL_DEVICE_NAME] deviceName
1021 u8[VK_UUID_LENGTH] pipelineCacheUUID
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001022 VkPhysicalDeviceLimits limits
1023 VkPhysicalDeviceSparseProperties sparseProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07001024}
1025
1026class VkExtensionProperties {
1027 char[VK_MAX_EXTENSION_NAME] extName /// extension name
1028 u32 specVersion /// version of the extension specification implemented
1029}
1030
1031class VkLayerProperties {
1032 char[VK_MAX_EXTENSION_NAME] layerName /// layer name
1033 u32 specVersion /// version of the layer specification implemented
1034 u32 implVersion /// build or release version of the layer's library
Jesse Hallf09c6b12015-08-15 19:54:28 -07001035 char[VK_MAX_DESCRIPTION] description /// Free-form description of the layer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001036}
1037
Jesse Halla366a512015-11-19 22:30:07 -08001038class VkSubmitInfo {
1039 u32 waitSemCount
1040 const VkSemaphore* pWaitSemaphores
1041 u32 cmdBufferCount
1042 const VkCmdBuffer* pCommandBuffers
1043 u32 signalSemCount
1044 const VkSemaphore* pSignalSemaphores
1045}
1046
Jesse Halld27f6aa2015-08-15 17:58:48 -07001047class VkApplicationInfo {
1048 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1049 const void* pNext /// Next structure in chain
1050 const char* pAppName
1051 u32 appVersion
1052 const char* pEngineName
1053 u32 engineVersion
1054 u32 apiVersion
1055}
1056
1057class VkAllocCallbacks {
1058 void* pUserData
1059 PFN_vkAllocFunction pfnAlloc
1060 PFN_vkFreeFunction pfnFree
1061}
1062
1063class VkDeviceQueueCreateInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001064 VkStructureType sStype /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
1065 const void* pNext /// Pointer to next structure
Jesse Halld27f6aa2015-08-15 17:58:48 -07001066 u32 queueFamilyIndex
1067 u32 queueCount
Jesse Hallfbf97b02015-11-20 14:17:03 -08001068 const f32* pQueuePriorities
Jesse Halld27f6aa2015-08-15 17:58:48 -07001069}
1070
1071class VkDeviceCreateInfo {
1072 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1073 const void* pNext /// Pointer to next structure
Jesse Hallae38f732015-11-19 21:32:50 -08001074 u32 requestedQueueRecordCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001075 const VkDeviceQueueCreateInfo* pRequestedQueues
1076 u32 layerCount
1077 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
1078 u32 extensionCount
1079 const char* const* ppEnabledExtensionNames
1080 const VkPhysicalDeviceFeatures* pEnabledFeatures
Jesse Halld27f6aa2015-08-15 17:58:48 -07001081}
1082
1083class VkInstanceCreateInfo {
1084 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1085 const void* pNext /// Pointer to next structure
1086 const VkApplicationInfo* pAppInfo
1087 const VkAllocCallbacks* pAllocCb
1088 u32 layerCount
1089 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
1090 u32 extensionCount
1091 const char* const* ppEnabledExtensionNames /// Extension names to be enabled
1092}
1093
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001094class VkQueueFamilyProperties {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001095 VkQueueFlags queueFlags /// Queue flags
1096 u32 queueCount
Jesse Hallacfa5342015-11-19 21:51:33 -08001097 u32 timestampValidBits
Jesse Halld27f6aa2015-08-15 17:58:48 -07001098}
1099
1100class VkPhysicalDeviceMemoryProperties {
1101 u32 memoryTypeCount
1102 VkMemoryType[VK_MAX_MEMORY_TYPES] memoryTypes
1103 u32 memoryHeapCount
1104 VkMemoryHeap[VK_MAX_MEMORY_HEAPS] memoryHeaps
1105}
1106
1107class VkMemoryAllocInfo {
1108 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1109 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001110 VkDeviceSize allocationSize /// Size of memory allocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001111 u32 memoryTypeIndex /// Index of the of the memory type to allocate from
1112}
1113
1114class VkMemoryRequirements {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001115 VkDeviceSize size /// Specified in bytes
1116 VkDeviceSize alignment /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001117 u32 memoryTypeBits /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1118}
1119
1120class VkSparseImageFormatProperties {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001121 VkImageAspectFlags aspect
Jesse Halld27f6aa2015-08-15 17:58:48 -07001122 VkExtent3D imageGranularity
1123 VkSparseImageFormatFlags flags
1124}
1125
1126class VkSparseImageMemoryRequirements {
1127 VkSparseImageFormatProperties formatProps
1128 u32 imageMipTailStartLOD
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001129 VkDeviceSize imageMipTailSize /// Specified in bytes, must be a multiple of image block size / alignment
1130 VkDeviceSize imageMipTailOffset /// Specified in bytes, must be a multiple of image block size / alignment
1131 VkDeviceSize imageMipTailStride /// Specified in bytes, must be a multiple of image block size / alignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07001132}
1133
1134class VkMemoryType {
1135 VkMemoryPropertyFlags propertyFlags /// Memory properties of this memory type
1136 u32 heapIndex /// Index of the memory heap allocations of this memory type are taken from
1137}
1138
1139class VkMemoryHeap {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001140 VkDeviceSize size /// Available memory in the heap
Jesse Halld27f6aa2015-08-15 17:58:48 -07001141 VkMemoryHeapFlags flags /// Flags for the heap
1142}
1143
1144class VkMappedMemoryRange {
1145 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1146 const void* pNext /// Pointer to next structure
1147 VkDeviceMemory mem /// Mapped memory object
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001148 VkDeviceSize offset /// Offset within the mapped memory the range starts from
1149 VkDeviceSize size /// Size of the range within the mapped memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07001150}
1151
1152class VkFormatProperties {
1153 VkFormatFeatureFlags linearTilingFeatures /// Format features in case of linear tiling
1154 VkFormatFeatureFlags optimalTilingFeatures /// Format features in case of optimal tiling
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001155 VkFormatFeatureFlags bufferFeatures /// Format features supported by buffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001156}
1157
1158class VkImageFormatProperties {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001159 VkExtent3D maxExtent /// max image dimensions for this resource type
1160 u32 maxMipLevels /// max number of mipmap levels for this resource type
Jesse Halla15a4bf2015-11-19 22:48:02 -08001161 u32 maxArrayLayers /// max array layers for this resource type
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001162 VkSampleCountFlags sampleCounts /// supported sample counts for this resource type
1163 VkDeviceSize maxResourceSize /// max size (in bytes) of this resource type
1164}
1165
Jesse Halla15a4bf2015-11-19 22:48:02 -08001166class VkDescriptorImageInfo {
1167 VkSampler sampler
1168 VkImageView imageView
1169 VkImageLayout imageLayout
1170}
1171
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001172class VkDescriptorBufferInfo {
1173 VkBuffer buffer /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
1174 VkDeviceSize offset /// Base offset from buffer start in bytes to update in the descriptor set.
1175 VkDeviceSize range /// Size in bytes of the buffer resource for this descriptor update.
Jesse Halld27f6aa2015-08-15 17:58:48 -07001176}
1177
Jesse Halld27f6aa2015-08-15 17:58:48 -07001178class VkWriteDescriptorSet {
1179 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1180 const void* pNext /// Pointer to next structure
1181 VkDescriptorSet destSet /// Destination descriptor set
1182 u32 destBinding /// Binding within the destination descriptor set to write
1183 u32 destArrayElement /// Array element within the destination binding to write
1184 u32 count /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
1185 VkDescriptorType descriptorType /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
Jesse Hallfbf97b02015-11-20 14:17:03 -08001186 const VkDescriptorImageInfo* pImageInfo
1187 const VkDescriptorBufferInfo* pBufferInfo
1188 const VkBufferView* pTexelBufferView
Jesse Halld27f6aa2015-08-15 17:58:48 -07001189}
1190
1191class VkCopyDescriptorSet {
1192 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1193 const void* pNext /// Pointer to next structure
1194 VkDescriptorSet srcSet /// Source descriptor set
1195 u32 srcBinding /// Binding within the source descriptor set to copy from
1196 u32 srcArrayElement /// Array element within the source binding to copy from
1197 VkDescriptorSet destSet /// Destination descriptor set
1198 u32 destBinding /// Binding within the destination descriptor set to copy to
1199 u32 destArrayElement /// Array element within the destination binding to copy to
1200 u32 count /// Number of descriptors to copy
1201}
1202
1203class VkBufferCreateInfo {
1204 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1205 const void* pNext /// Pointer to next structure.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001206 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001207 VkBufferUsageFlags usage /// Buffer usage flags
1208 VkBufferCreateFlags flags /// Buffer creation flags
1209 VkSharingMode sharingMode
1210 u32 queueFamilyCount
1211 const u32* pQueueFamilyIndices
1212}
1213
1214class VkBufferViewCreateInfo {
1215 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1216 const void* pNext /// Pointer to next structure.
1217 VkBuffer buffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001218 VkFormat format /// Optionally specifies format of elements
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001219 VkDeviceSize offset /// Specified in bytes
1220 VkDeviceSize range /// View size specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001221}
1222
1223class VkImageSubresource {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001224 VkImageAspectFlags aspect
Jesse Halld27f6aa2015-08-15 17:58:48 -07001225 u32 mipLevel
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001226 u32 arrayLayer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001227}
1228
1229class VkImageSubresourceRange {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001230 VkImageAspectFlags aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001231 u32 baseMipLevel
Jesse Halla15a4bf2015-11-19 22:48:02 -08001232 u32 numLevels
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001233 u32 baseArrayLayer
Jesse Halla15a4bf2015-11-19 22:48:02 -08001234 u32 numLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001235}
1236
1237class VkMemoryBarrier {
1238 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1239 const void* pNext /// Pointer to next structure.
1240 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1241 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1242}
1243
1244class VkBufferMemoryBarrier {
1245 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1246 const void* pNext /// Pointer to next structure.
1247 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1248 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1249 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
1250 u32 destQueueFamilyIndex /// Queue family to transition ownership to
1251 VkBuffer buffer /// Buffer to sync
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001252 VkDeviceSize offset /// Offset within the buffer to sync
1253 VkDeviceSize size /// Amount of bytes to sync
Jesse Halld27f6aa2015-08-15 17:58:48 -07001254}
1255
1256class VkImageMemoryBarrier {
1257 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1258 const void* pNext /// Pointer to next structure.
1259 VkMemoryOutputFlags outputMask /// Outputs the barrier should sync
1260 VkMemoryInputFlags inputMask /// Inputs the barrier should sync to
1261 VkImageLayout oldLayout /// Current layout of the image
1262 VkImageLayout newLayout /// New layout to transition the image to
1263 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
1264 u32 destQueueFamilyIndex /// Queue family to transition ownership to
1265 VkImage image /// Image to sync
1266 VkImageSubresourceRange subresourceRange /// Subresource range to sync
1267}
1268
1269class VkImageCreateInfo {
1270 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1271 const void* pNext /// Pointer to next structure.
1272 VkImageType imageType
1273 VkFormat format
1274 VkExtent3D extent
1275 u32 mipLevels
Jesse Halla15a4bf2015-11-19 22:48:02 -08001276 u32 arrayLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001277 u32 samples
1278 VkImageTiling tiling
1279 VkImageUsageFlags usage /// Image usage flags
1280 VkImageCreateFlags flags /// Image creation flags
1281 VkSharingMode sharingMode /// Cross-queue-family sharing mode
1282 u32 queueFamilyCount /// Number of queue families to share across
1283 const u32* pQueueFamilyIndices /// Array of queue family indices to share across
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001284 VkImageLayout initialLayout /// Initial image layout for all subresources
Jesse Halld27f6aa2015-08-15 17:58:48 -07001285}
1286
1287class VkSubresourceLayout {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001288 VkDeviceSize offset /// Specified in bytes
1289 VkDeviceSize size /// Specified in bytes
1290 VkDeviceSize rowPitch /// Specified in bytes
1291 VkDeviceSize depthPitch /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001292}
1293
1294class VkImageViewCreateInfo {
1295 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1296 const void* pNext /// Pointer to next structure
1297 VkImage image
1298 VkImageViewType viewType
1299 VkFormat format
1300 VkChannelMapping channels
1301 VkImageSubresourceRange subresourceRange
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001302 VkImageViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001303}
1304
1305class VkBufferCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001306 VkDeviceSize srcOffset /// Specified in bytes
1307 VkDeviceSize destOffset /// Specified in bytes
1308 VkDeviceSize copySize /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001309}
1310
1311class VkSparseMemoryBindInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001312 VkDeviceSize rangeOffset /// Specified in bytes
1313 VkDeviceSize rangeSize /// Specified in bytes
1314 VkDeviceSize memOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001315 VkDeviceMemory mem
1316 VkSparseMemoryBindFlags flags
1317}
1318
1319class VkSparseImageMemoryBindInfo {
1320 VkImageSubresource subresource
1321 VkOffset3D offset
1322 VkExtent3D extent
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001323 VkDeviceSize memOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001324 VkDeviceMemory mem
1325 VkSparseMemoryBindFlags flags
1326}
1327
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001328class VkImageSubresourceCopy {
Jesse Halla15a4bf2015-11-19 22:48:02 -08001329 VkImageAspectFlags aspect
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001330 u32 mipLevel
Jesse Halla15a4bf2015-11-19 22:48:02 -08001331 u32 baseArrayLayer
1332 u32 numLayers
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001333}
1334
Jesse Halld27f6aa2015-08-15 17:58:48 -07001335class VkImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001336 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001337 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001338 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001339 VkOffset3D destOffset /// Specified in pixels for both compressed and uncompressed images
1340 VkExtent3D extent /// Specified in pixels for both compressed and uncompressed images
1341}
1342
1343class VkImageBlit {
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
1346 VkExtent3D srcExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001347 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001348 VkOffset3D destOffset /// Specified in pixels for both compressed and uncompressed images
1349 VkExtent3D destExtent /// Specified in pixels for both compressed and uncompressed images
1350}
1351
1352class VkBufferImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001353 VkDeviceSize bufferOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001354 u32 bufferRowLength /// Specified in texels
1355 u32 bufferImageHeight
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001356 VkImageSubresourceCopy imageSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001357 VkOffset3D imageOffset /// Specified in pixels for both compressed and uncompressed images
1358 VkExtent3D imageExtent /// Specified in pixels for both compressed and uncompressed images
1359}
1360
1361class VkImageResolve {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001362 VkImageSubresourceCopy srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001363 VkOffset3D srcOffset
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001364 VkImageSubresourceCopy destSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001365 VkOffset3D destOffset
1366 VkExtent3D extent
1367}
1368
1369class VkShaderModuleCreateInfo {
1370 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1371 const void* pNext /// Pointer to next structure
1372 platform.size_t codeSize /// Specified in bytes
1373 const void* pCode /// Binary code of size codeSize
1374 VkShaderModuleCreateFlags flags /// Reserved
1375}
1376
1377class VkShaderCreateInfo {
1378 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
1379 const void* pNext /// Pointer to next structure
1380 VkShaderModule module /// Module containing entry point
1381 const char* pName /// Null-terminated entry point name
1382 VkShaderCreateFlags flags /// Reserved
Jesse Halla15a4bf2015-11-19 22:48:02 -08001383 VkShaderStageFlags stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001384}
1385
1386class VkDescriptorSetLayoutBinding {
1387 VkDescriptorType descriptorType /// Type of the descriptors in this binding
1388 u32 arraySize /// Number of descriptors in this binding
1389 VkShaderStageFlags stageFlags /// Shader stages this binding is visible to
1390 const VkSampler* pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
1391}
1392
1393class VkDescriptorSetLayoutCreateInfo {
1394 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1395 const void* pNext /// Pointer to next structure
1396 u32 count /// Number of bindings in the descriptor set layout
1397 const VkDescriptorSetLayoutBinding* pBinding /// Array of descriptor set layout bindings
1398}
1399
1400class VkDescriptorTypeCount {
1401 VkDescriptorType type
1402 u32 count
1403}
1404
1405class VkDescriptorPoolCreateInfo {
1406 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1407 const void* pNext /// Pointer to next structure
Jesse Hallfbf97b02015-11-20 14:17:03 -08001408 VkDescriptorPoolCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001409 u32 maxSets
Jesse Halld27f6aa2015-08-15 17:58:48 -07001410 u32 count
1411 const VkDescriptorTypeCount* pTypeCount
1412}
1413
Jesse Hallfbf97b02015-11-20 14:17:03 -08001414class VkDescriptorSetAllocInfo {
1415 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
1416 const void* pNext /// Pointer to next structure
1417 VkDescriptorPool descriptorPool
1418 u32 count
1419 const VkDescriptorSetLayout* pSetLayouts
1420}
1421
Jesse Halld27f6aa2015-08-15 17:58:48 -07001422class 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
Jesse Hallfbf97b02015-11-20 14:17:03 -08001646class VkCmdBufferAllocInfo {
1647 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001648 const void* pNext /// Pointer to next structure
1649 VkCmdPool cmdPool
1650 VkCmdBufferLevel level
Jesse Hallfbf97b02015-11-20 14:17:03 -08001651 u32 count
Jesse Halld27f6aa2015-08-15 17:58:48 -07001652}
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
Jesse Hallfbf97b02015-11-20 14:17:03 -08001785 VkBool32 alphaToOne /// The fragment alpha channel can be forced to maximum representable alpha value
1786 VkBool32 multiViewport
1787 VkBool32 samplerAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001788 VkBool32 textureCompressionETC2 /// ETC texture compression formats
1789 VkBool32 textureCompressionASTC_LDR /// ASTC LDR texture compression formats
1790 VkBool32 textureCompressionBC /// BC1-7 texture compressed formats
1791 VkBool32 occlusionQueryNonConservative /// non-conservative (exact) occlusion queries
1792 VkBool32 pipelineStatisticsQuery /// pipeline statistics query
1793 VkBool32 vertexSideEffects /// storage buffers and images in vertex stage
1794 VkBool32 tessellationSideEffects /// storage buffers and images in tessellation stage
1795 VkBool32 geometrySideEffects /// storage buffers and images in geometry stage
1796 VkBool32 fragmentSideEffects /// storage buffers and images in fragment stage
1797 VkBool32 shaderTessellationPointSize /// tessellation stage can export point size
1798 VkBool32 shaderGeometryPointSize /// geometry stage can export point size
1799 VkBool32 shaderImageGatherExtended /// texture gather with run-time values and independent offsets
1800 VkBool32 shaderStorageImageExtendedFormats /// the extended set of formats can be used for storage images
1801 VkBool32 shaderStorageImageMultisample /// multisample images can be used for storage images
1802 VkBool32 shaderUniformBufferArrayDynamicIndexing /// arrays of uniform buffers can be accessed with dynamically uniform indices
1803 VkBool32 shaderSampledImageArrayDynamicIndexing /// arrays of sampled images can be accessed with dynamically uniform indices
1804 VkBool32 shaderStorageBufferArrayDynamicIndexing /// arrays of storage buffers can be accessed with dynamically uniform indices
1805 VkBool32 shaderStorageImageArrayDynamicIndexing /// arrays of storage images can be accessed with dynamically uniform indices
1806 VkBool32 shaderClipDistance /// clip distance in shaders
1807 VkBool32 shaderCullDistance /// cull distance in shaders
1808 VkBool32 shaderFloat64 /// 64-bit floats (doubles) in shaders
1809 VkBool32 shaderInt64 /// 64-bit integers in shaders
1810 VkBool32 shaderInt16 /// 16-bit integers in shaders
1811 VkBool32 shaderResourceResidency /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
1812 VkBool32 shaderResourceMinLOD /// shader can use texture operations that specify minimum resource LOD
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001813 VkBool32 sparseBinding /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
1814 VkBool32 sparseResidencyBuffer /// Sparse resources support: GPU can access partially resident buffers
1815 VkBool32 sparseResidencyImage2D /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
1816 VkBool32 sparseResidencyImage3D /// Sparse resources support: GPU can access partially resident 3D images
1817 VkBool32 sparseResidency2Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
1818 VkBool32 sparseResidency4Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
1819 VkBool32 sparseResidency8Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
1820 VkBool32 sparseResidency16Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
1821 VkBool32 sparseResidencyAliased /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001822}
1823
1824class VkPhysicalDeviceLimits {
1825 /// resource maximum sizes
1826 u32 maxImageDimension1D /// max 1D image dimension
1827 u32 maxImageDimension2D /// max 2D image dimension
1828 u32 maxImageDimension3D /// max 3D image dimension
1829 u32 maxImageDimensionCube /// max cubemap image dimension
1830 u32 maxImageArrayLayers /// max layers for image arrays
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001831 VkSampleCountFlags sampleCounts /// sample counts supported for all images supporting rendering and sampling
Jesse Halld27f6aa2015-08-15 17:58:48 -07001832 u32 maxTexelBufferSize /// max texel buffer size (bytes)
Jesse Hallfbf97b02015-11-20 14:17:03 -08001833 u32 maxUniformBufferRange /// max uniform buffer size (bytes)
1834 u32 maxStorageBufferRange /// max storage buffer size (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001835 u32 maxPushConstantsSize /// max size of the push constants pool (bytes)
1836 /// memory limits
1837 u32 maxMemoryAllocationCount /// max number of device memory allocations supported
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001838 VkDeviceSize bufferImageGranularity /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
1839 VkDeviceSize sparseAddressSpaceSize /// Total address space available for sparse allocations (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001840 /// descriptor set limits
1841 u32 maxBoundDescriptorSets /// max number of descriptors sets that can be bound to a pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07001842 u32 maxPerStageDescriptorSamplers /// max num of samplers allowed per-stage in a descriptor set
1843 u32 maxPerStageDescriptorUniformBuffers /// max num of uniform buffers allowed per-stage in a descriptor set
1844 u32 maxPerStageDescriptorStorageBuffers /// max num of storage buffers allowed per-stage in a descriptor set
1845 u32 maxPerStageDescriptorSampledImages /// max num of sampled images allowed per-stage in a descriptor set
1846 u32 maxPerStageDescriptorStorageImages /// max num of storage images allowed per-stage in a descriptor set
1847 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set
1848 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001849 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07001850 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001851 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07001852 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set
1853 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set
1854 /// vertex stage limits
1855 u32 maxVertexInputAttributes /// max num of vertex input attribute slots
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001856 u32 maxVertexInputBindings /// max num of vertex input binding slots
Jesse Halld27f6aa2015-08-15 17:58:48 -07001857 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset
1858 u32 maxVertexInputBindingStride /// max vertex input binding stride
1859 u32 maxVertexOutputComponents /// max num of output components written by vertex shader
1860 /// tessellation control stage limits
Jesse Hallae38f732015-11-19 21:32:50 -08001861 u32 maxTessellationGenLevel /// max level supported by tess primitive generator
1862 u32 maxTessellationPatchSize /// max patch size (vertices)
1863 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS
1864 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
1865 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS
1866 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS
1867 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES
1868 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES
Jesse Halld27f6aa2015-08-15 17:58:48 -07001869 /// geometry stage limits
1870 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader
1871 u32 maxGeometryInputComponents /// max num of input components read in geometry stage
1872 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage
1873 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage
1874 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage
1875 /// fragment stage limits
1876 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage
Jesse Hallfbf97b02015-11-20 14:17:03 -08001877 u32 maxFragmentOutputAttachments /// max num of output attachments written in fragment stage
1878 u32 maxFragmentDualSourceAttachments /// max num of output attachments written when using dual source blending
Jesse Halld27f6aa2015-08-15 17:58:48 -07001879 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers
1880 /// compute stage limits
1881 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes)
1882 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z)
1883 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group
1884 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z)
1885
1886 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y
1887 u32 subTexelPrecisionBits /// num bits of subtexel precision
1888 u32 mipmapPrecisionBits /// num bits of mipmap precision
1889
1890 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices)
1891 u32 maxDrawIndirectInstanceCount /// max instance count for indirect draw calls
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001892 VkBool32 primitiveRestartForPatches /// is primitive restart supported for PATCHES
Jesse Halld27f6aa2015-08-15 17:58:48 -07001893
1894 f32 maxSamplerLodBias /// max absolute sampler level of detail bias
1895 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy
1896
1897 u32 maxViewports /// max number of active viewports
Jesse Halld27f6aa2015-08-15 17:58:48 -07001898 u32[2] maxViewportDimensions /// max viewport dimensions (x,y)
1899 f32[2] viewportBoundsRange /// viewport bounds range (min,max)
1900 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport
1901
1902 u32 minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes)
Jesse Hallf09c6b12015-08-15 19:54:28 -07001903 u32 minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001904 u32 minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes)
1905 u32 minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes)
1906
Jesse Hallfbf97b02015-11-20 14:17:03 -08001907 s32 minTexelOffset /// min texel offset for OpTextureSampleOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07001908 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset
Jesse Hallfbf97b02015-11-20 14:17:03 -08001909 s32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07001910 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset
1911 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset
1912 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset
1913 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset
1914
1915 u32 maxFramebufferWidth /// max width for a framebuffer
1916 u32 maxFramebufferHeight /// max height for a framebuffer
1917 u32 maxFramebufferLayers /// max layer count for a layered framebuffer
1918 u32 maxFramebufferColorSamples /// max color sample count for a framebuffer
1919 u32 maxFramebufferDepthSamples /// max depth sample count for a framebuffer
1920 u32 maxFramebufferStencilSamples /// max stencil sample count for a framebuffer
1921 u32 maxColorAttachments /// max num of framebuffer color attachments
1922
1923 u32 maxSampledImageColorSamples /// max num of color samples for a non-integer sampled image
1924 u32 maxSampledImageDepthSamples /// max num of depth/stencil samples for a sampled image
1925 u32 maxSampledImageIntegerSamples /// max num of samples supported for an integer image
1926 u32 maxStorageImageSamples /// max num of samples for a storage image
1927 u32 maxSampleMaskWords /// max num of sample mask words
1928
1929 u64 timestampFrequency /// 1/clock_tick_granularity for timestamp queries
1930
1931 u32 maxClipDistances /// max number of clip distances
1932 u32 maxCullDistances /// max number of cull distances
1933 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping
1934
Jesse Hallfbf97b02015-11-20 14:17:03 -08001935 u32 discreteQueuePriorities
1936
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001937 f32[2] pointSizeRange /// range (min,max) of supported point sizes
1938 f32[2] lineWidthRange /// range (min,max) of supported line widths
Jesse Halld27f6aa2015-08-15 17:58:48 -07001939 f32 pointSizeGranularity /// granularity of supported point sizes
1940 f32 lineWidthGranularity /// granularity of supported line widths
1941}
1942
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001943class VkPhysicalDeviceSparseProperties {
1944 VkBool32 residencyStandard2DBlockShape /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
1945 VkBool32 residencyStandard2DMSBlockShape /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
1946 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
1947 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
1948 VkBool32 residencyNonResident /// Sparse resources support: GPU can safely access non-resident regions of a resource, read values from read-write resources are undefined
1949 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
1950}
1951
Jesse Halld27f6aa2015-08-15 17:58:48 -07001952class VkSemaphoreCreateInfo {
1953 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
1954 const void* pNext /// Pointer to next structure
1955 VkSemaphoreCreateFlags flags /// Semaphore creation flags
1956}
1957
1958class VkQueryPoolCreateInfo {
1959 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
1960 const void* pNext /// Pointer to next structure
1961 VkQueryType queryType
1962 u32 slots
1963 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional
1964}
1965
1966class VkFramebufferCreateInfo {
1967 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
1968 const void* pNext /// Pointer to next structure
1969 VkRenderPass renderPass
1970 u32 attachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001971 const VkImageView* pAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001972 u32 width
1973 u32 height
1974 u32 layers
1975}
1976
1977class VkDrawIndirectCmd {
1978 u32 vertexCount
1979 u32 instanceCount
1980 u32 firstVertex
1981 u32 firstInstance
1982}
1983
1984class VkDrawIndexedIndirectCmd {
1985 u32 indexCount
1986 u32 instanceCount
1987 u32 firstIndex
1988 s32 vertexOffset
1989 u32 firstInstance
1990}
1991
1992class VkDispatchIndirectCmd {
1993 u32 x
1994 u32 y
1995 u32 z
1996}
1997
Michael Lentine88594d72015-11-12 12:49:45 -08001998//////////////////
1999// Extensions //
2000//////////////////
2001
2002@extension("VK_EXT_KHR_device_swapchain")
2003class VkSurfacePropertiesKHR {
2004 u32 minImageCount
2005 u32 maxImageCount
2006 VkExtent2D currentExtent
2007 VkExtent2D minImageExtent
2008 VkExtent2D maxImageExtent
2009 VkSurfaceTransformFlagsKHR supportedTransforms
2010 VkSurfaceTransformKHR currentTransform
2011 u32 maxImageArraySize
2012 VkImageUsageFlags supportedUsageFlags
2013}
2014
2015@extension("VK_EXT_KHR_device_swapchain")
2016class VkSurfaceFormatKHR {
2017 VkFormat format
2018 VkColorSpaceKHR colorSpace
2019}
2020
2021@extension("VK_EXT_KHR_device_swapchain")
2022class VkSwapchainCreateInfoKHR {
2023 VkStructureType sType
2024 const void* pNext
2025 const VkSurfaceDescriptionKHR* pSurfaceDescription
2026 u32 minImageCount
2027 VkFormat imageFormat
2028 VkColorSpaceKHR imageColorSpace
2029 VkExtent2D imageExtent
2030 VkImageUsageFlags imageUsageFlags
2031 VkSurfaceTransformKHR preTransform
2032 u32 imageArraySize
2033 VkSharingMode sharingMode
2034 u32 queueFamilyCount
2035 const u32* pQueueFamilyIndices
2036 VkPresentModeKHR presentMode
2037 VkSwapchainKHR oldSwapchain
2038 VkBool32 clipped
2039}
2040
2041@extension("VK_EXT_KHR_device_swapchain")
2042class VkPresentInfoKHR {
2043 VkStructureType sType
2044 const void* pNext
2045 u32 swapchainCount
2046 const VkSwapchainKHR* swapchains
2047 const u32* imageIndices
2048}
2049
2050@extension("VK_EXT_KHR_swapchain")
2051class VkSurfaceDescriptionKHR {
2052 VkStructureType sType
2053 const void* pNext
2054}
2055
2056@extension("VK_EXT_KHR_swapchain")
2057class VkSurfaceDescriptionWindowKHR {
2058 VkStructureType sType
2059 const void* pNext
2060 VkPlatformKHR platform
2061 void* pPlatformHandle
2062 void* pPlatformWindow
2063}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002064
2065////////////////
2066// Commands //
2067////////////////
2068
2069// Function pointers. TODO: add support for function pointers.
2070
2071@external type void* PFN_vkVoidFunction
2072@pfn cmd void vkVoidFunction() {
2073}
2074
2075@external type void* PFN_vkAllocFunction
2076@pfn cmd void* vkAllocFunction(
2077 void* pUserData,
2078 platform.size_t size,
2079 platform.size_t alignment,
2080 VkSystemAllocType allocType) {
2081 return ?
2082}
2083
2084@external type void* PFN_vkFreeFunction
2085@pfn cmd void vkFreeFunction(
2086 void* pUserData,
2087 void* pMem) {
2088}
2089
2090
2091// Global functions
2092
2093@threadSafety("system")
2094cmd VkResult vkCreateInstance(
2095 const VkInstanceCreateInfo* pCreateInfo,
2096 VkInstance* pInstance) {
2097 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2098
2099 instance := ?
2100 pInstance[0] = instance
2101 State.Instances[instance] = new!InstanceObject()
2102
2103 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.layerCount]
2104 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.extensionCount]
2105
2106 return ?
2107}
2108
2109@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002110cmd void vkDestroyInstance(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002111 VkInstance instance) {
2112 instanceObject := GetInstance(instance)
2113
2114 State.Instances[instance] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002115}
2116
2117@threadSafety("system")
2118cmd VkResult vkEnumeratePhysicalDevices(
2119 VkInstance instance,
2120 u32* pPhysicalDeviceCount,
2121 VkPhysicalDevice* pPhysicalDevices) {
2122 instanceObject := GetInstance(instance)
2123
2124 physicalDeviceCount := as!u32(?)
2125 pPhysicalDeviceCount[0] = physicalDeviceCount
2126 physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2127
2128 for i in (0 .. physicalDeviceCount) {
2129 physicalDevice := ?
2130 physicalDevices[i] = physicalDevice
2131 if !(physicalDevice in State.PhysicalDevices) {
2132 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2133 }
2134 }
2135
2136 return ?
2137}
2138
2139cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2140 VkDevice device,
2141 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002142 if device != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002143 device := GetDevice(device)
2144 }
2145
2146 return ?
2147}
2148
2149cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2150 VkInstance instance,
2151 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002152 if instance != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002153 instanceObject := GetInstance(instance)
2154 }
2155
2156 return ?
2157}
2158
Jesse Hall606a54e2015-11-19 22:17:28 -08002159cmd void vkGetPhysicalDeviceProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002160 VkPhysicalDevice physicalDevice,
2161 VkPhysicalDeviceProperties* pProperties) {
2162 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2163
2164 properties := ?
2165 pProperties[0] = properties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002166}
2167
Jesse Hall606a54e2015-11-19 22:17:28 -08002168cmd void vkGetPhysicalDeviceQueueFamilyProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002169 VkPhysicalDevice physicalDevice,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002170 u32* pCount,
2171 VkQueueFamilyProperties* pQueueFamilyProperties) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002172 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002173 // TODO: Figure out how to express fetch-count-or-properties
2174 // This version fails 'apic validate' with 'fence not allowed in
2175 // *semantic.Branch'. Other attempts have failed with the same or other
2176 // errors.
2177 // if pQueueFamilyProperties != null {
2178 // queuesProperties := pQueueFamilyProperties[0:pCount[0]]
2179 // for i in (0 .. pCount[0]) {
2180 // queueProperties := as!VkQueueFamilyProperties(?)
2181 // queuesProperties[i] = queueProperties
2182 // }
2183 // } else {
2184 // count := ?
2185 // pCount[0] = count
2186 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002187}
2188
Jesse Hall606a54e2015-11-19 22:17:28 -08002189cmd void vkGetPhysicalDeviceMemoryProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002190 VkPhysicalDevice physicalDevice,
2191 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
2192 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2193
2194 memoryProperties := ?
2195 pMemoryProperties[0] = memoryProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002196}
2197
Jesse Hall606a54e2015-11-19 22:17:28 -08002198cmd void vkGetPhysicalDeviceFeatures(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002199 VkPhysicalDevice physicalDevice,
2200 VkPhysicalDeviceFeatures* pFeatures) {
2201 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2202
2203 features := ?
2204 pFeatures[0] = features
Jesse Halld27f6aa2015-08-15 17:58:48 -07002205}
2206
Jesse Hall606a54e2015-11-19 22:17:28 -08002207cmd void vkGetPhysicalDeviceFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002208 VkPhysicalDevice physicalDevice,
2209 VkFormat format,
2210 VkFormatProperties* pFormatProperties) {
2211 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2212
2213 formatProperties := ?
2214 pFormatProperties[0] = formatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002215}
2216
Jesse Hall606a54e2015-11-19 22:17:28 -08002217cmd void vkGetPhysicalDeviceImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002218 VkPhysicalDevice physicalDevice,
2219 VkFormat format,
2220 VkImageType type,
2221 VkImageTiling tiling,
2222 VkImageUsageFlags usage,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002223 VkImageCreateFlags flags,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002224 VkImageFormatProperties* pImageFormatProperties) {
2225 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2226
2227 imageFormatProperties := ?
2228 pImageFormatProperties[0] = imageFormatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002229}
2230
Jesse Halld27f6aa2015-08-15 17:58:48 -07002231
2232// Device functions
2233
2234@threadSafety("system")
2235cmd VkResult vkCreateDevice(
2236 VkPhysicalDevice physicalDevice,
2237 const VkDeviceCreateInfo* pCreateInfo,
2238 VkDevice* pDevice) {
2239 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2240 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2241
2242 device := ?
2243 pDevice[0] = device
2244 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2245
2246 return ?
2247}
2248
2249@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002250cmd void vkDestroyDevice(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002251 VkDevice device) {
2252 deviceObject := GetDevice(device)
2253
2254 State.Devices[device] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002255}
2256
2257
2258// Extension discovery functions
2259
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002260cmd VkResult vkEnumerateInstanceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002261 u32* pCount,
2262 VkLayerProperties* pProperties) {
2263 count := as!u32(?)
2264 pCount[0] = count
2265
2266 properties := pProperties[0:count]
2267 for i in (0 .. count) {
2268 property := ?
2269 properties[i] = property
2270 }
2271
2272 return ?
2273}
2274
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002275cmd VkResult vkEnumerateInstanceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002276 const char* pLayerName,
2277 u32* pCount,
2278 VkExtensionProperties* pProperties) {
2279 count := as!u32(?)
2280 pCount[0] = count
2281
2282 properties := pProperties[0:count]
2283 for i in (0 .. count) {
2284 property := ?
2285 properties[i] = property
2286 }
2287
2288 return ?
2289}
2290
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002291cmd VkResult vkEnumerateDeviceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002292 VkPhysicalDevice physicalDevice,
2293 u32* pCount,
2294 VkLayerProperties* pProperties) {
2295 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2296 count := as!u32(?)
2297 pCount[0] = count
2298
2299 properties := pProperties[0:count]
2300 for i in (0 .. count) {
2301 property := ?
2302 properties[i] = property
2303 }
2304
2305 return ?
2306}
2307
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002308cmd VkResult vkEnumerateDeviceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002309 VkPhysicalDevice physicalDevice,
2310 const char* pLayerName,
2311 u32* pCount,
2312 VkExtensionProperties* pProperties) {
2313 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2314
2315 count := as!u32(?)
2316 pCount[0] = count
2317
2318 properties := pProperties[0:count]
2319 for i in (0 .. count) {
2320 property := ?
2321 properties[i] = property
2322 }
2323
2324 return ?
2325}
2326
2327
2328// Queue functions
2329
2330@threadSafety("system")
Jesse Hall606a54e2015-11-19 22:17:28 -08002331cmd void vkGetDeviceQueue(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002332 VkDevice device,
2333 u32 queueFamilyIndex,
2334 u32 queueIndex,
2335 VkQueue* pQueue) {
2336 deviceObject := GetDevice(device)
2337
2338 queue := ?
2339 pQueue[0] = queue
2340
2341 if !(queue in State.Queues) {
2342 State.Queues[queue] = new!QueueObject(device: device)
2343 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002344}
2345
2346@threadSafety("app")
2347cmd VkResult vkQueueSubmit(
2348 VkQueue queue,
Jesse Halla366a512015-11-19 22:30:07 -08002349 u32 submitCount,
2350 const VkSubmitInfo* pSubmitInfo,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002351 VkFence fence) {
2352 queueObject := GetQueue(queue)
2353
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002354 if fence != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002355 fenceObject := GetFence(fence)
2356 assert(fenceObject.device == queueObject.device)
2357 }
2358
Jesse Halla366a512015-11-19 22:30:07 -08002359 // cmdBuffers := pCmdBuffers[0:cmdBufferCount]
2360 // for i in (0 .. cmdBufferCount) {
2361 // cmdBuffer := cmdBuffers[i]
2362 // cmdBufferObject := GetCmdBuffer(cmdBuffer)
2363 // assert(cmdBufferObject.device == queueObject.device)
2364 //
2365 // validate("QueueCheck", cmdBufferObject.queueFlags in queueObject.flags,
2366 // "vkQueueSubmit: enqueued cmdBuffer requires missing queue capabilities.")
2367 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002368
2369 return ?
2370}
2371
2372@threadSafety("system")
2373cmd VkResult vkQueueWaitIdle(
2374 VkQueue queue) {
2375 queueObject := GetQueue(queue)
2376
2377 return ?
2378}
2379
2380@threadSafety("system")
2381cmd VkResult vkDeviceWaitIdle(
2382 VkDevice device) {
2383 deviceObject := GetDevice(device)
2384
2385 return ?
2386}
2387
2388
2389// Memory functions
2390
2391@threadSafety("system")
2392cmd VkResult vkAllocMemory(
2393 VkDevice device,
2394 const VkMemoryAllocInfo* pAllocInfo,
2395 VkDeviceMemory* pMem) {
2396 assert(pAllocInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
2397 deviceObject := GetDevice(device)
2398
2399 mem := ?
2400 pMem[0] = mem
2401 State.DeviceMemories[mem] = new!DeviceMemoryObject(
2402 device: device,
2403 allocationSize: pAllocInfo[0].allocationSize)
2404
2405 return ?
2406}
2407
2408@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002409cmd void vkFreeMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002410 VkDevice device,
2411 VkDeviceMemory mem) {
2412 deviceObject := GetDevice(device)
2413 memObject := GetDeviceMemory(mem)
2414 assert(memObject.device == device)
2415
2416 // Check that no objects are still bound before freeing.
2417 validate("MemoryCheck", len(memObject.boundObjects) == 0,
2418 "vkFreeMemory: objects still bound")
2419 validate("MemoryCheck", len(memObject.boundCommandBuffers) == 0,
2420 "vkFreeMemory: cmdBuffers still bound")
2421 State.DeviceMemories[mem] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002422}
2423
2424@threadSafety("app")
2425cmd VkResult vkMapMemory(
2426 VkDevice device,
2427 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002428 VkDeviceSize offset,
2429 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002430 VkMemoryMapFlags flags,
2431 void** ppData) {
2432 deviceObject := GetDevice(device)
2433 memObject := GetDeviceMemory(mem)
2434 assert(memObject.device == device)
2435
2436 assert(flags == as!VkMemoryMapFlags(0))
2437 assert((offset + size) <= memObject.allocationSize)
2438
2439 return ?
2440}
2441
2442@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002443cmd void vkUnmapMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002444 VkDevice device,
2445 VkDeviceMemory mem) {
2446 deviceObject := GetDevice(device)
2447 memObject := GetDeviceMemory(mem)
2448 assert(memObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002449}
2450
2451cmd VkResult vkFlushMappedMemoryRanges(
2452 VkDevice device,
2453 u32 memRangeCount
2454 const VkMappedMemoryRange* pMemRanges) {
2455 deviceObject := GetDevice(device)
2456
2457 memRanges := pMemRanges[0:memRangeCount]
2458 for i in (0 .. memRangeCount) {
2459 memRange := memRanges[i]
2460 memObject := GetDeviceMemory(memRange.mem)
2461 assert(memObject.device == device)
2462 assert((memRange.offset + memRange.size) <= memObject.allocationSize)
2463 }
2464
2465 return ?
2466}
2467
2468cmd VkResult vkInvalidateMappedMemoryRanges(
2469 VkDevice device,
2470 u32 memRangeCount,
2471 const VkMappedMemoryRange* pMemRanges) {
2472 deviceObject := GetDevice(device)
2473
2474 memRanges := pMemRanges[0:memRangeCount]
2475 for i in (0 .. memRangeCount) {
2476 memRange := memRanges[i]
2477 memObject := GetDeviceMemory(memRange.mem)
2478 assert(memObject.device == device)
2479 assert((memRange.offset + memRange.size) <= memObject.allocationSize)
2480 }
2481
2482 return ?
2483}
2484
2485
2486// Memory management API functions
2487
Jesse Hall606a54e2015-11-19 22:17:28 -08002488cmd void vkGetDeviceMemoryCommitment(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002489 VkDevice device,
2490 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002491 VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002492 deviceObject := GetDevice(device)
2493
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002494 if memory != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002495 memoryObject := GetDeviceMemory(memory)
2496 assert(memoryObject.device == device)
2497 }
2498
2499 committedMemoryInBytes := ?
2500 pCommittedMemoryInBytes[0] = committedMemoryInBytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07002501}
2502
Jesse Hall606a54e2015-11-19 22:17:28 -08002503cmd void vkGetBufferMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002504 VkDevice device,
2505 VkBuffer buffer,
2506 VkMemoryRequirements* pMemoryRequirements) {
2507 deviceObject := GetDevice(device)
2508 bufferObject := GetBuffer(buffer)
2509 assert(bufferObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002510}
2511
2512cmd VkResult vkBindBufferMemory(
2513 VkDevice device,
2514 VkBuffer buffer,
2515 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002516 VkDeviceSize memOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002517 deviceObject := GetDevice(device)
2518 bufferObject := GetBuffer(buffer)
2519 assert(bufferObject.device == device)
2520
2521 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002522 if bufferObject.mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002523 memObject := GetDeviceMemory(bufferObject.mem)
2524 memObject.boundObjects[as!u64(buffer)] = null
2525 }
2526
2527 // Bind buffer to given memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002528 if mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002529 memObject := GetDeviceMemory(mem)
2530 assert(memObject.device == device)
2531 memObject.boundObjects[as!u64(buffer)] = memOffset
2532 }
2533 bufferObject.mem = mem
2534 bufferObject.memOffset = memOffset
2535
2536 return ?
2537}
2538
Jesse Hall606a54e2015-11-19 22:17:28 -08002539cmd void vkGetImageMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002540 VkDevice device,
2541 VkImage image,
2542 VkMemoryRequirements* pMemoryRequirements) {
2543 deviceObject := GetDevice(device)
2544 imageObject := GetImage(image)
2545 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002546}
2547
2548cmd VkResult vkBindImageMemory(
2549 VkDevice device,
2550 VkImage image,
2551 VkDeviceMemory mem,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002552 VkDeviceSize memOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002553 deviceObject := GetDevice(device)
2554 imageObject := GetImage(image)
2555 assert(imageObject.device == device)
2556
2557 // Unbind image from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002558 if imageObject.mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002559 memObject := GetDeviceMemory(imageObject.mem)
2560 memObject.boundObjects[as!u64(image)] = null
2561 }
2562
2563 // Bind image to given memory object, if not VK_NULL_HANDLE.
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002564 if mem != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002565 memObject := GetDeviceMemory(mem)
2566 assert(memObject.device == device)
2567 memObject.boundObjects[as!u64(image)] = memOffset
2568 }
2569 imageObject.mem = mem
2570 imageObject.memOffset = memOffset
2571
2572 return ?
2573}
2574
Jesse Hall606a54e2015-11-19 22:17:28 -08002575cmd void vkGetImageSparseMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002576 VkDevice device,
2577 VkImage image,
2578 u32* pNumRequirements,
2579 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
2580 deviceObject := GetDevice(device)
2581 imageObject := GetImage(image)
2582 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002583}
2584
Jesse Hall606a54e2015-11-19 22:17:28 -08002585cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002586 VkPhysicalDevice physicalDevice,
2587 VkFormat format,
2588 VkImageType type,
2589 u32 samples,
2590 VkImageUsageFlags usage,
2591 VkImageTiling tiling,
2592 u32* pNumProperties,
2593 VkSparseImageFormatProperties* pProperties) {
2594 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002595}
2596
2597cmd VkResult vkQueueBindSparseBufferMemory(
2598 VkQueue queue,
2599 VkBuffer buffer,
2600 u32 numBindings,
2601 const VkSparseMemoryBindInfo* pBindInfo) {
2602 queueObject := GetQueue(queue)
2603 bufferObject := GetBuffer(buffer)
2604 assert(bufferObject.device == queueObject.device)
2605
2606 return ?
2607}
2608
2609cmd VkResult vkQueueBindSparseImageOpaqueMemory(
2610 VkQueue queue,
2611 VkImage image,
2612 u32 numBindings,
2613 const VkSparseMemoryBindInfo* pBindInfo) {
2614 queueObject := GetQueue(queue)
2615 imageObject := GetImage(image)
2616 assert(imageObject.device == queueObject.device)
2617
2618 return ?
2619}
2620
2621
2622cmd VkResult vkQueueBindSparseImageMemory(
2623 VkQueue queue,
2624 VkImage image,
2625 u32 numBindings,
2626 const VkSparseImageMemoryBindInfo* pBindInfo) {
2627 queueObject := GetQueue(queue)
2628 imageObject := GetImage(image)
2629
2630 return ?
2631}
2632
2633
2634// Fence functions
2635
2636@threadSafety("system")
2637cmd VkResult vkCreateFence(
2638 VkDevice device,
2639 const VkFenceCreateInfo* pCreateInfo,
2640 VkFence* pFence) {
2641 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2642 deviceObject := GetDevice(device)
2643
2644 fence := ?
2645 pFence[0] = fence
2646 State.Fences[fence] = new!FenceObject(
2647 device: device, signaled: (pCreateInfo.flags == VK_FENCE_CREATE_SIGNALED_BIT))
2648
2649 return ?
2650}
2651
2652@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002653cmd void vkDestroyFence(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002654 VkDevice device,
2655 VkFence fence) {
2656 deviceObject := GetDevice(device)
2657 fenceObject := GetFence(fence)
2658 assert(fenceObject.device == device)
2659
2660 State.Fences[fence] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002661}
2662
2663@threadSafety("system")
2664cmd VkResult vkResetFences(
2665 VkDevice device,
2666 u32 fenceCount,
2667 const VkFence* pFences) {
2668 deviceObject := GetDevice(device)
2669
2670 fences := pFences[0:fenceCount]
2671 for i in (0 .. fenceCount) {
2672 fence := fences[i]
2673 fenceObject := GetFence(fence)
2674 assert(fenceObject.device == device)
2675 fenceObject.signaled = false
2676 }
2677
2678 return ?
2679}
2680
2681@threadSafety("system")
2682cmd VkResult vkGetFenceStatus(
2683 VkDevice device,
2684 VkFence fence) {
2685 deviceObject := GetDevice(device)
2686 fenceObject := GetFence(fence)
2687 assert(fenceObject.device == device)
2688
2689 return ?
2690}
2691
2692@threadSafety("system")
2693cmd VkResult vkWaitForFences(
2694 VkDevice device,
2695 u32 fenceCount,
2696 const VkFence* pFences,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002697 VkBool32 waitAll,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002698 u64 timeout) { /// timeout in nanoseconds
2699 deviceObject := GetDevice(device)
2700
2701 fences := pFences[0:fenceCount]
2702 for i in (0 .. fenceCount) {
2703 fence := fences[i]
2704 fenceObject := GetFence(fence)
2705 assert(fenceObject.device == device)
2706 }
2707
2708 return ?
2709}
2710
2711
2712// Queue semaphore functions
2713
2714@threadSafety("system")
2715cmd VkResult vkCreateSemaphore(
2716 VkDevice device,
2717 const VkSemaphoreCreateInfo* pCreateInfo,
2718 VkSemaphore* pSemaphore) {
2719 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
2720 deviceObject := GetDevice(device)
2721
2722 semaphore := ?
2723 pSemaphore[0] = semaphore
2724 State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
2725
2726 return ?
2727}
2728
2729@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002730cmd void vkDestroySemaphore(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002731 VkDevice device,
2732 VkSemaphore semaphore) {
2733 deviceObject := GetDevice(device)
2734 semaphoreObject := GetSemaphore(semaphore)
2735 assert(semaphoreObject.device == device)
2736
2737 State.Semaphores[semaphore] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002738}
2739
2740@threadSafety("app")
2741cmd VkResult vkQueueSignalSemaphore(
2742 VkQueue queue,
2743 VkSemaphore semaphore) {
2744 queueObject := GetQueue(queue)
2745 semaphoreObject := GetSemaphore(semaphore)
2746 assert(queueObject.device == semaphoreObject.device)
2747
2748 return ?
2749}
2750
2751@threadSafety("system")
2752cmd VkResult vkQueueWaitSemaphore(
2753 VkQueue queue,
2754 VkSemaphore semaphore) {
2755 queueObject := GetQueue(queue)
2756 semaphoreObject := GetSemaphore(semaphore)
2757 assert(queueObject.device == semaphoreObject.device)
2758
2759 return ?
2760}
2761
2762
2763// Event functions
2764
2765@threadSafety("system")
2766cmd VkResult vkCreateEvent(
2767 VkDevice device,
2768 const VkEventCreateInfo* pCreateInfo,
2769 VkEvent* pEvent) {
2770 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
2771 deviceObject := GetDevice(device)
2772
2773 event := ?
2774 pEvent[0] = event
2775 State.Events[event] = new!EventObject(device: device)
2776
2777 return ?
2778}
2779
2780@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002781cmd void vkDestroyEvent(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002782 VkDevice device,
2783 VkEvent event) {
2784 deviceObject := GetDevice(device)
2785 eventObject := GetEvent(event)
2786 assert(eventObject.device == device)
2787
2788 State.Events[event] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002789}
2790
2791@threadSafety("system")
2792cmd VkResult vkGetEventStatus(
2793 VkDevice device,
2794 VkEvent event) {
2795 deviceObject := GetDevice(device)
2796 eventObject := GetEvent(event)
2797 assert(eventObject.device == device)
2798
2799 return ?
2800}
2801
2802@threadSafety("system")
2803cmd VkResult vkSetEvent(
2804 VkDevice device,
2805 VkEvent event) {
2806 deviceObject := GetDevice(device)
2807 eventObject := GetEvent(event)
2808 assert(eventObject.device == device)
2809
2810 return ?
2811}
2812
2813@threadSafety("system")
2814cmd VkResult vkResetEvent(
2815 VkDevice device,
2816 VkEvent event) {
2817 deviceObject := GetDevice(device)
2818 eventObject := GetEvent(event)
2819 assert(eventObject.device == device)
2820
2821 return ?
2822}
2823
2824
2825// Query functions
2826
2827@threadSafety("system")
2828cmd VkResult vkCreateQueryPool(
2829 VkDevice device,
2830 const VkQueryPoolCreateInfo* pCreateInfo,
2831 VkQueryPool* pQueryPool) {
2832 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
2833 deviceObject := GetDevice(device)
2834
2835 queryPool := ?
2836 pQueryPool[0] = queryPool
2837 State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
2838
2839 return ?
2840}
2841
2842@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002843cmd void vkDestroyQueryPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002844 VkDevice device,
2845 VkQueryPool queryPool) {
2846 deviceObject := GetDevice(device)
2847 queryPoolObject := GetQueryPool(queryPool)
2848 assert(queryPoolObject.device == device)
2849
2850 State.QueryPools[queryPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002851}
2852
2853@threadSafety("system")
2854cmd VkResult vkGetQueryPoolResults(
2855 VkDevice device,
2856 VkQueryPool queryPool,
2857 u32 startQuery,
2858 u32 queryCount,
2859 platform.size_t* pDataSize,
2860 void* pData,
2861 VkQueryResultFlags flags) {
2862 deviceObject := GetDevice(device)
2863 queryPoolObject := GetQueryPool(queryPool)
2864 assert(queryPoolObject.device == device)
2865
2866 dataSize := ?
2867 pDataSize[0] = dataSize
2868 data := pData[0:dataSize]
2869
2870 return ?
2871}
2872
2873// Buffer functions
2874
2875@threadSafety("system")
2876cmd VkResult vkCreateBuffer(
2877 VkDevice device,
2878 const VkBufferCreateInfo* pCreateInfo,
2879 VkBuffer* pBuffer) {
2880 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
2881 deviceObject := GetDevice(device)
2882
2883 buffer := ?
2884 pBuffer[0] = buffer
2885 State.Buffers[buffer] = new!BufferObject(device: device)
2886
2887 return ?
2888}
2889
2890@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002891cmd void vkDestroyBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002892 VkDevice device,
2893 VkBuffer buffer) {
2894 deviceObject := GetDevice(device)
2895 bufferObject := GetBuffer(buffer)
2896 assert(bufferObject.device == device)
2897
2898 assert(bufferObject.mem == 0)
2899 State.Buffers[buffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002900}
2901
2902
2903// Buffer view functions
2904
2905@threadSafety("system")
2906cmd VkResult vkCreateBufferView(
2907 VkDevice device,
2908 const VkBufferViewCreateInfo* pCreateInfo,
2909 VkBufferView* pView) {
2910 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
2911 deviceObject := GetDevice(device)
2912
2913 bufferObject := GetBuffer(pCreateInfo.buffer)
2914 assert(bufferObject.device == device)
2915
2916 view := ?
2917 pView[0] = view
2918 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
2919
2920 return ?
2921}
2922
2923@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002924cmd void vkDestroyBufferView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002925 VkDevice device,
2926 VkBufferView bufferView) {
2927 deviceObject := GetDevice(device)
2928 bufferViewObject := GetBufferView(bufferView)
2929 assert(bufferViewObject.device == device)
2930
2931 State.BufferViews[bufferView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002932}
2933
2934
2935// Image functions
2936
2937@threadSafety("system")
2938cmd VkResult vkCreateImage(
2939 VkDevice device,
2940 const VkImageCreateInfo* pCreateInfo,
2941 VkImage* pImage) {
2942 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
2943 deviceObject := GetDevice(device)
2944
2945 image := ?
2946 pImage[0] = image
2947 State.Images[image] = new!ImageObject(device: device)
2948
2949 return ?
2950}
2951
2952@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002953cmd void vkDestroyImage(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002954 VkDevice device,
2955 VkImage image) {
2956 deviceObject := GetDevice(device)
2957 imageObject := GetImage(image)
2958 assert(imageObject.device == device)
2959
2960 assert(imageObject.mem == 0)
2961 State.Images[image] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002962}
2963
Jesse Hall606a54e2015-11-19 22:17:28 -08002964cmd void vkGetImageSubresourceLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002965 VkDevice device,
2966 VkImage image,
2967 const VkImageSubresource* pSubresource,
2968 VkSubresourceLayout* pLayout) {
2969 deviceObject := GetDevice(device)
2970 imageObject := GetImage(image)
2971 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002972}
2973
2974
2975// Image view functions
2976
2977@threadSafety("system")
2978cmd VkResult vkCreateImageView(
2979 VkDevice device,
2980 const VkImageViewCreateInfo* pCreateInfo,
2981 VkImageView* pView) {
2982 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
2983 deviceObject := GetDevice(device)
2984
2985 imageObject := GetImage(pCreateInfo.image)
2986 assert(imageObject.device == device)
2987
2988 view := ?
2989 pView[0] = view
2990 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
2991
2992 return ?
2993}
2994
2995@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002996cmd void vkDestroyImageView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002997 VkDevice device,
2998 VkImageView imageView) {
2999 deviceObject := GetDevice(device)
3000 imageViewObject := GetImageView(imageView)
3001 assert(imageViewObject.device == device)
3002
3003 State.ImageViews[imageView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003004}
3005
3006
3007// Shader functions
3008
3009cmd VkResult vkCreateShaderModule(
3010 VkDevice device,
3011 const VkShaderModuleCreateInfo* pCreateInfo,
3012 VkShaderModule* pShaderModule) {
3013 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3014 deviceObject := GetDevice(device)
3015
3016 shaderModule := ?
3017 pShaderModule[0] = shaderModule
3018 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3019
3020 return ?
3021}
3022
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003023cmd void vkDestroyShaderModule(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003024 VkDevice device,
3025 VkShaderModule shaderModule) {
3026 deviceObject := GetDevice(device)
3027 shaderModuleObject := GetShaderModule(shaderModule)
3028 assert(shaderModuleObject.device == device)
3029
3030 State.ShaderModules[shaderModule] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003031}
3032
3033@threadSafety("system")
3034cmd VkResult vkCreateShader(
3035 VkDevice device,
3036 const VkShaderCreateInfo* pCreateInfo,
3037 VkShader* pShader) {
3038 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
3039 deviceObject := GetDevice(device)
3040
3041 shader := ?
3042 pShader[0] = shader
3043 State.Shaders[shader] = new!ShaderObject(device: device)
3044
3045 return ?
3046}
3047
3048@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003049cmd void vkDestroyShader(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003050 VkDevice device,
3051 VkShader shader) {
3052 deviceObject := GetDevice(device)
3053 shaderObject := GetShader(shader)
3054 assert(shaderObject.device == device)
3055
3056 State.Shaders[shader] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003057}
3058
3059
3060// Pipeline functions
3061
3062cmd VkResult vkCreatePipelineCache(
3063 VkDevice device,
3064 const VkPipelineCacheCreateInfo* pCreateInfo,
3065 VkPipelineCache* pPipelineCache) {
3066 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3067 deviceObject := GetDevice(device)
3068
3069 pipelineCache := ?
3070 pPipelineCache[0] = pipelineCache
3071 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3072
3073 return ?
3074}
3075
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003076cmd void vkDestroyPipelineCache(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003077 VkDevice device,
3078 VkPipelineCache pipelineCache) {
3079 deviceObject := GetDevice(device)
3080 pipelineCacheObject := GetPipelineCache(pipelineCache)
3081 assert(pipelineCacheObject.device == device)
3082
3083 State.PipelineCaches[pipelineCache] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003084}
3085
3086cmd platform.size_t vkGetPipelineCacheSize(
3087 VkDevice device,
3088 VkPipelineCache pipelineCache) {
3089 deviceObject := GetDevice(device)
3090 pipelineCacheObject := GetPipelineCache(pipelineCache)
3091 assert(pipelineCacheObject.device == device)
3092
3093 return ?
3094}
3095
3096cmd VkResult vkGetPipelineCacheData(
3097 VkDevice device,
3098 VkPipelineCache pipelineCache,
Jesse Hall606a54e2015-11-19 22:17:28 -08003099 platform.size_t dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003100 void* pData) {
3101 deviceObject := GetDevice(device)
3102 pipelineCacheObject := GetPipelineCache(pipelineCache)
3103 assert(pipelineCacheObject.device == device)
3104
3105 return ?
3106}
3107
3108cmd VkResult vkMergePipelineCaches(
3109 VkDevice device,
3110 VkPipelineCache destCache,
3111 u32 srcCacheCount,
3112 const VkPipelineCache* pSrcCaches) {
3113 deviceObject := GetDevice(device)
3114 destCacheObject := GetPipelineCache(destCache)
3115 assert(destCacheObject.device == device)
3116
3117 srcCaches := pSrcCaches[0:srcCacheCount]
3118 for i in (0 .. srcCacheCount) {
3119 srcCache := srcCaches[i]
3120 srcCacheObject := GetPipelineCache(srcCache)
3121 assert(srcCacheObject.device == device)
3122 }
3123
3124 return ?
3125}
3126
3127cmd VkResult vkCreateGraphicsPipelines(
3128 VkDevice device,
3129 VkPipelineCache pipelineCache,
3130 u32 count,
3131 const VkGraphicsPipelineCreateInfo* pCreateInfos,
3132 VkPipeline* pPipelines) {
3133 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003134 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003135 pipelineCacheObject := GetPipelineCache(pipelineCache)
3136 assert(pipelineCacheObject.device == device)
3137 }
3138
3139 createInfos := pCreateInfos[0:count]
3140 pipelines := pPipelines[0:count]
3141 for i in (0 .. count) {
3142 pipeline := ?
3143 pipelines[i] = pipeline
3144 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3145 }
3146
3147 return ?
3148}
3149
3150cmd VkResult vkCreateComputePipelines(
3151 VkDevice device,
3152 VkPipelineCache pipelineCache,
3153 u32 count,
3154 const VkComputePipelineCreateInfo* pCreateInfos,
3155 VkPipeline* pPipelines) {
3156 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003157 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003158 pipelineCacheObject := GetPipelineCache(pipelineCache)
3159 assert(pipelineCacheObject.device == device)
3160 }
3161
3162 createInfos := pCreateInfos[0:count]
3163 pipelines := pPipelines[0:count]
3164 for i in (0 .. count) {
3165 pipeline := ?
3166 pipelines[i] = pipeline
3167 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3168 }
3169
3170 return ?
3171}
3172
3173@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003174cmd void vkDestroyPipeline(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003175 VkDevice device,
3176 VkPipeline pipeline) {
3177 deviceObject := GetDevice(device)
3178 pipelineObjects := GetPipeline(pipeline)
3179 assert(pipelineObjects.device == device)
3180
3181 State.Pipelines[pipeline] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003182}
3183
3184
3185// Pipeline layout functions
3186
3187@threadSafety("system")
3188cmd VkResult vkCreatePipelineLayout(
3189 VkDevice device,
3190 const VkPipelineLayoutCreateInfo* pCreateInfo,
3191 VkPipelineLayout* pPipelineLayout) {
3192 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3193 deviceObject := GetDevice(device)
3194
3195 pipelineLayout := ?
3196 pPipelineLayout[0] = pipelineLayout
3197 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3198
3199 return ?
3200}
3201
3202@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003203cmd void vkDestroyPipelineLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003204 VkDevice device,
3205 VkPipelineLayout pipelineLayout) {
3206 deviceObject := GetDevice(device)
3207 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3208 assert(pipelineLayoutObjects.device == device)
3209
3210 State.PipelineLayouts[pipelineLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003211}
3212
3213
3214// Sampler functions
3215
3216@threadSafety("system")
3217cmd VkResult vkCreateSampler(
3218 VkDevice device,
3219 const VkSamplerCreateInfo* pCreateInfo,
3220 VkSampler* pSampler) {
3221 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3222 deviceObject := GetDevice(device)
3223
3224 sampler := ?
3225 pSampler[0] = sampler
3226 State.Samplers[sampler] = new!SamplerObject(device: device)
3227
3228 return ?
3229}
3230
3231@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003232cmd void vkDestroySampler(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003233 VkDevice device,
3234 VkSampler sampler) {
3235 deviceObject := GetDevice(device)
3236 samplerObject := GetSampler(sampler)
3237 assert(samplerObject.device == device)
3238
3239 State.Samplers[sampler] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003240}
3241
3242
3243// Descriptor set functions
3244
3245@threadSafety("system")
3246cmd VkResult vkCreateDescriptorSetLayout(
3247 VkDevice device,
3248 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
3249 VkDescriptorSetLayout* pSetLayout) {
3250 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3251 deviceObject := GetDevice(device)
3252
3253 setLayout := ?
3254 pSetLayout[0] = setLayout
3255 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3256
3257 return ?
3258}
3259
3260@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003261cmd void vkDestroyDescriptorSetLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003262 VkDevice device,
3263 VkDescriptorSetLayout descriptorSetLayout) {
3264 deviceObject := GetDevice(device)
3265 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3266 assert(descriptorSetLayoutObject.device == device)
3267
3268 State.DescriptorSetLayouts[descriptorSetLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003269}
3270
3271@threadSafety("system")
3272cmd VkResult vkCreateDescriptorPool(
3273 VkDevice device,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003274 const VkDescriptorPoolCreateInfo* pCreateInfo
Jesse Halld27f6aa2015-08-15 17:58:48 -07003275 VkDescriptorPool* pDescriptorPool) {
3276 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3277 deviceObject := GetDevice(device)
3278
3279 descriptorPool := ?
3280 pDescriptorPool[0] = descriptorPool
3281 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3282
3283 return ?
3284}
3285
3286@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003287cmd void vkDestroyDescriptorPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003288 VkDevice device,
3289 VkDescriptorPool descriptorPool) {
3290 deviceObject := GetDevice(device)
3291 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3292 assert(descriptorPoolObject.device == device)
3293
3294 State.DescriptorPools[descriptorPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003295}
3296
3297@threadSafety("app")
3298cmd VkResult vkResetDescriptorPool(
3299 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003300 VkDescriptorPool descriptorPool,
3301 VkDescriptorPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003302 deviceObject := GetDevice(device)
3303 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3304 assert(descriptorPoolObject.device == device)
3305
3306 return ?
3307}
3308
3309@threadSafety("app")
3310cmd VkResult vkAllocDescriptorSets(
3311 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003312 const VkDescriptorSetAllocInfo* pAllocInfo,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003313 VkDescriptorSet* pDescriptorSets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003314 deviceObject := GetDevice(device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003315 allocInfo := pAllocInfo[0]
3316 descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003317
Jesse Hallfbf97b02015-11-20 14:17:03 -08003318 setLayouts := allocInfo.pSetLayouts[0:allocInfo.count]
3319 for i in (0 .. allocInfo.count) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003320 setLayout := setLayouts[i]
3321 setLayoutObject := GetDescriptorSetLayout(setLayout)
3322 assert(setLayoutObject.device == device)
3323 }
3324
Jesse Hallfbf97b02015-11-20 14:17:03 -08003325 descriptorSets := pDescriptorSets[0:allocInfo.count]
3326 for i in (0 .. allocInfo.count) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003327 descriptorSet := ?
3328 descriptorSets[i] = descriptorSet
3329 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3330 }
3331
3332 return ?
3333}
3334
Jesse Hallf09c6b12015-08-15 19:54:28 -07003335cmd VkResult vkFreeDescriptorSets(
3336 VkDevice device,
3337 VkDescriptorPool descriptorPool,
3338 u32 count,
3339 const VkDescriptorSet* pDescriptorSets) {
3340 deviceObject := GetDevice(device)
3341 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3342
3343 descriptorSets := pDescriptorSets[0:count]
3344 for i in (0 .. count) {
3345 descriptorSet := descriptorSets[i]
3346 descriptorSetObject := GetDescriptorSet(descriptorSet)
3347 assert(descriptorSetObject.device == device)
3348 State.DescriptorSets[descriptorSet] = null
3349 }
3350
3351 return ?
3352}
3353
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003354cmd void vkUpdateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003355 VkDevice device,
3356 u32 writeCount,
3357 const VkWriteDescriptorSet* pDescriptorWrites,
3358 u32 copyCount,
3359 const VkCopyDescriptorSet* pDescriptorCopies) {
3360 deviceObject := GetDevice(device)
3361
3362 descriptorWrites := pDescriptorWrites[0:writeCount]
3363 for i in (0 .. writeCount) {
3364 descriptorWrite := descriptorWrites[i]
3365 descriptorWriteObject := GetDescriptorSet(descriptorWrite.destSet)
3366 assert(descriptorWriteObject.device == device)
3367 }
3368
3369 descriptorCopies := pDescriptorCopies[0:copyCount]
3370 for i in (0 .. copyCount) {
3371 descriptorCopy := descriptorCopies[i]
3372 descriptorCopyObject := GetDescriptorSet(descriptorCopy.destSet)
3373 assert(descriptorCopyObject.device == device)
3374 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003375}
3376
3377
3378// Framebuffer functions
3379
3380@threadSafety("system")
3381cmd VkResult vkCreateFramebuffer(
3382 VkDevice device,
3383 const VkFramebufferCreateInfo* pCreateInfo,
3384 VkFramebuffer* pFramebuffer) {
3385 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3386 deviceObject := GetDevice(device)
3387
3388 framebuffer := ?
3389 pFramebuffer[0] = framebuffer
3390 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3391
3392 return ?
3393}
3394
3395@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003396cmd void vkDestroyFramebuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003397 VkDevice device,
3398 VkFramebuffer framebuffer) {
3399 deviceObject := GetDevice(device)
3400 framebufferObject := GetFramebuffer(framebuffer)
3401 assert(framebufferObject.device == device)
3402
3403 State.Framebuffers[framebuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003404}
3405
3406
3407// Renderpass functions
3408
3409@threadSafety("system")
3410cmd VkResult vkCreateRenderPass(
3411 VkDevice device,
3412 const VkRenderPassCreateInfo* pCreateInfo,
3413 VkRenderPass* pRenderPass) {
3414 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3415 deviceObject := GetDevice(device)
3416
3417 renderpass := ?
3418 pRenderPass[0] = renderpass
3419 State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3420
3421 return ?
3422}
3423
3424@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003425cmd void vkDestroyRenderPass(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003426 VkDevice device,
3427 VkRenderPass renderPass) {
3428 deviceObject := GetDevice(device)
3429 renderPassObject := GetRenderPass(renderPass)
3430 assert(renderPassObject.device == device)
3431
3432 State.RenderPasses[renderPass] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003433}
3434
Jesse Hall606a54e2015-11-19 22:17:28 -08003435cmd void vkGetRenderAreaGranularity(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003436 VkDevice device,
3437 VkRenderPass renderPass,
3438 VkExtent2D* pGranularity) {
3439 deviceObject := GetDevice(device)
3440 renderPassObject := GetRenderPass(renderPass)
3441
3442 granularity := ?
3443 pGranularity[0] = granularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07003444}
3445
3446// Command pool functions
3447
3448cmd VkResult vkCreateCommandPool(
3449 VkDevice device,
3450 const VkCmdPoolCreateInfo* pCreateInfo,
3451 VkCmdPool* pCmdPool) {
3452 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
3453 deviceObject := GetDevice(device)
3454
3455 cmdPool := ?
3456 pCmdPool[0] = cmdPool
3457 State.CmdPools[cmdPool] = new!CmdPoolObject(device: device)
3458
3459 return ?
3460}
3461
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003462cmd void vkDestroyCommandPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003463 VkDevice device,
3464 VkCmdPool cmdPool) {
3465 deviceObject := GetDevice(device)
3466 cmdPoolObject := GetCmdPool(cmdPool)
3467 assert(cmdPoolObject.device == device)
3468
3469 State.CmdPools[cmdPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003470}
3471
3472cmd VkResult vkResetCommandPool(
3473 VkDevice device,
3474 VkCmdPool cmdPool,
3475 VkCmdPoolResetFlags flags) {
3476 deviceObject := GetDevice(device)
3477 cmdPoolObject := GetCmdPool(cmdPool)
3478 assert(cmdPoolObject.device == device)
3479
3480 return ?
3481}
3482
3483// Command buffer functions
3484
3485macro void bindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
3486 memoryObject := GetDeviceMemory(mem)
3487 memoryObject.boundCommandBuffers[cmdBuffer] = cmdBuffer
3488
3489 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3490 cmdBufferObject.boundObjects[as!u64(obj)] = mem
3491}
3492
3493macro void unbindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
3494 memoryObject := GetDeviceMemory(mem)
3495 memoryObject.boundCommandBuffers[cmdBuffer] = null
3496
3497 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3498 cmdBufferObject.boundObjects[as!u64(obj)] = null
3499}
3500
3501@threadSafety("system")
Jesse Hallfbf97b02015-11-20 14:17:03 -08003502cmd VkResult vkAllocCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003503 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003504 const VkCmdBufferAllocInfo* pAllocInfo,
3505 VkCmdBuffer* pCmdBuffers) {
3506 assert(pAllocInfo[0].sType == VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003507
Jesse Hallfbf97b02015-11-20 14:17:03 -08003508 count := pAllocInfo[0].count
3509 cmdBuffers := pCmdBuffers[0:count]
3510 for i in (0 .. count) {
3511 cmdBuffer := ?
3512 cmdBuffers[i] = cmdBuffer
3513 State.CmdBuffers[cmdBuffer] = new!CmdBufferObject(device: device)
3514 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003515
3516 return ?
3517}
3518
3519@threadSafety("system")
Jesse Hallfbf97b02015-11-20 14:17:03 -08003520cmd void vkFreeCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003521 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003522 VkCmdPool cmdPool,
3523 u32 count,
3524 const VkCmdBuffer* pCommandBuffers) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003525 deviceObject := GetDevice(device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003526
Jesse Hallfbf97b02015-11-20 14:17:03 -08003527 cmdBuffers := pCommandBuffers[0:count]
3528 for i in (0 .. count) {
3529 cmdBufferObject := GetCmdBuffer(cmdBuffers[i])
3530 assert(cmdBufferObject.device == device)
3531 // TODO: iterate over boundObjects and clear memory bindings
3532 State.CmdBuffers[cmdBuffers[i]] = null
3533 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003534}
3535
3536@threadSafety("app")
3537cmd VkResult vkBeginCommandBuffer(
3538 VkCmdBuffer cmdBuffer,
3539 const VkCmdBufferBeginInfo* pBeginInfo) {
3540 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
3541 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3542
3543 // TODO: iterate over boundObjects and clear memory bindings
3544
3545 return ?
3546}
3547
3548@threadSafety("app")
3549cmd VkResult vkEndCommandBuffer(
3550 VkCmdBuffer cmdBuffer) {
3551 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3552
3553 return ?
3554}
3555
3556@threadSafety("app")
3557cmd VkResult vkResetCommandBuffer(
3558 VkCmdBuffer cmdBuffer,
3559 VkCmdBufferResetFlags flags) {
3560 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3561
3562 // TODO: iterate over boundObjects and clear memory bindings
3563
3564 return ?
3565}
3566
3567
3568// Command buffer building functions
3569
3570@threadSafety("app")
3571cmd void vkCmdBindPipeline(
3572 VkCmdBuffer cmdBuffer,
3573 VkPipelineBindPoint pipelineBindPoint,
3574 VkPipeline pipeline) {
3575 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3576 pipelineObject := GetPipeline(pipeline)
3577 assert(cmdBufferObject.device == pipelineObject.device)
3578
3579 queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
3580 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3581 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3582 }
3583 cmdBufferObject.queueFlags = queueFlags
3584}
3585
3586@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003587cmd void vkCmdSetViewport(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003588 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003589 u32 viewportCount,
3590 const VkViewport* pViewports) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003591 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003592 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3593 cmdBufferObject.queueFlags = queueFlags
3594}
3595
3596@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003597cmd void vkCmdSetScissor(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003598 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003599 u32 scissorCount,
3600 const VkRect2D* pScissors) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003601 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003602 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3603 cmdBufferObject.queueFlags = queueFlags
3604}
3605
3606@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003607cmd void vkCmdSetLineWidth(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003608 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003609 f32 lineWidth) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003610 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003611 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3612 cmdBufferObject.queueFlags = queueFlags
3613}
3614
3615@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003616cmd void vkCmdSetDepthBias(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003617 VkCmdBuffer cmdBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003618 f32 depthBias,
3619 f32 depthBiasClamp,
3620 f32 slopeScaledDepthBias) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003621 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003622 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3623 cmdBufferObject.queueFlags = queueFlags
3624}
Jesse Halld27f6aa2015-08-15 17:58:48 -07003625
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003626@threadSafety("app")
3627cmd void vkCmdSetBlendConstants(
3628 VkCmdBuffer cmdBuffer,
3629 // TODO(jessehall): apic only supports 'const' on pointer types. Using
3630 // an annotation as a quick hack to pass this to the template without
3631 // having to modify the AST and semantic model.
3632 @readonly f32[4] blendConst) {
3633 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3634 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3635 cmdBufferObject.queueFlags = queueFlags
3636}
3637
3638@threadSafety("app")
3639cmd void vkCmdSetDepthBounds(
3640 VkCmdBuffer cmdBuffer,
3641 f32 minDepthBounds,
3642 f32 maxDepthBounds) {
3643 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3644 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3645 cmdBufferObject.queueFlags = queueFlags
3646}
3647
3648@threadSafety("app")
3649cmd void vkCmdSetStencilCompareMask(
3650 VkCmdBuffer cmdBuffer,
3651 VkStencilFaceFlags faceMask,
3652 u32 stencilCompareMask) {
3653 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3654 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3655 cmdBufferObject.queueFlags = queueFlags
3656}
3657
3658@threadSafety("app")
3659cmd void vkCmdSetStencilWriteMask(
3660 VkCmdBuffer cmdBuffer,
3661 VkStencilFaceFlags faceMask,
3662 u32 stencilWriteMask) {
3663 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3664 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3665 cmdBufferObject.queueFlags = queueFlags
3666}
3667
3668@threadSafety("app")
3669cmd void vkCmdSetStencilReference(
3670 VkCmdBuffer cmdBuffer,
3671 VkStencilFaceFlags faceMask,
3672 u32 stencilReference) {
3673 cmdBufferObject := GetCmdBuffer(cmdBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003674 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3675 cmdBufferObject.queueFlags = queueFlags
3676}
3677
3678@threadSafety("app")
3679cmd void vkCmdBindDescriptorSets(
3680 VkCmdBuffer cmdBuffer,
3681 VkPipelineBindPoint pipelineBindPoint,
3682 VkPipelineLayout layout,
3683 u32 firstSet,
3684 u32 setCount,
3685 const VkDescriptorSet* pDescriptorSets,
3686 u32 dynamicOffsetCount,
3687 const u32* pDynamicOffsets) {
3688 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3689
3690 descriptorSets := pDescriptorSets[0:setCount]
3691 for i in (0 .. setCount) {
3692 descriptorSet := descriptorSets[i]
3693 descriptorSetObject := GetDescriptorSet(descriptorSet)
3694 assert(cmdBufferObject.device == descriptorSetObject.device)
3695 }
3696
3697 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
3698 for i in (0 .. dynamicOffsetCount) {
3699 dynamicOffset := dynamicOffsets[i]
3700 }
3701
3702 queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
3703 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3704 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3705 }
3706 cmdBufferObject.queueFlags = queueFlags
3707}
3708
3709@threadSafety("app")
3710cmd void vkCmdBindIndexBuffer(
3711 VkCmdBuffer cmdBuffer,
3712 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003713 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003714 VkIndexType indexType) {
3715 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3716 bufferObject := GetBuffer(buffer)
3717 assert(cmdBufferObject.device == bufferObject.device)
3718
3719 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3720
3721 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3722 cmdBufferObject.queueFlags = queueFlags
3723}
3724
3725@threadSafety("app")
3726cmd void vkCmdBindVertexBuffers(
3727 VkCmdBuffer cmdBuffer,
3728 u32 startBinding,
3729 u32 bindingCount,
3730 const VkBuffer* pBuffers,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003731 const VkDeviceSize* pOffsets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003732 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3733
3734 // TODO: check if not [startBinding:startBinding+bindingCount]
3735 buffers := pBuffers[0:bindingCount]
3736 offsets := pOffsets[0:bindingCount]
3737 for i in (0 .. bindingCount) {
3738 buffer := buffers[i]
3739 offset := offsets[i]
3740 bufferObject := GetBuffer(buffer)
3741 assert(cmdBufferObject.device == bufferObject.device)
3742
3743 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3744 }
3745
3746 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3747 cmdBufferObject.queueFlags = queueFlags
3748}
3749
3750@threadSafety("app")
3751cmd void vkCmdDraw(
3752 VkCmdBuffer cmdBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003753 u32 vertexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003754 u32 instanceCount,
3755 u32 firstVertex,
3756 u32 firstInstance) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003757 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3758
3759 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3760 cmdBufferObject.queueFlags = queueFlags
3761}
3762
3763@threadSafety("app")
3764cmd void vkCmdDrawIndexed(
3765 VkCmdBuffer cmdBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003766 u32 indexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003767 u32 instanceCount,
3768 u32 firstIndex,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003769 s32 vertexOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003770 u32 firstInstance) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003771 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3772
3773 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3774 cmdBufferObject.queueFlags = queueFlags
3775}
3776
3777@threadSafety("app")
3778cmd void vkCmdDrawIndirect(
3779 VkCmdBuffer cmdBuffer,
3780 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003781 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003782 u32 count,
3783 u32 stride) {
3784 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3785 bufferObject := GetBuffer(buffer)
3786 assert(cmdBufferObject.device == bufferObject.device)
3787
3788 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3789
3790 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3791 cmdBufferObject.queueFlags = queueFlags
3792}
3793
3794@threadSafety("app")
3795cmd void vkCmdDrawIndexedIndirect(
3796 VkCmdBuffer cmdBuffer,
3797 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003798 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003799 u32 count,
3800 u32 stride) {
3801 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3802 bufferObject := GetBuffer(buffer)
3803 assert(cmdBufferObject.device == bufferObject.device)
3804
3805 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3806
3807 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3808 cmdBufferObject.queueFlags = queueFlags
3809}
3810
3811@threadSafety("app")
3812cmd void vkCmdDispatch(
3813 VkCmdBuffer cmdBuffer,
3814 u32 x,
3815 u32 y,
3816 u32 z) {
3817 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3818
3819 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
3820 cmdBufferObject.queueFlags = queueFlags
3821}
3822
3823@threadSafety("app")
3824cmd void vkCmdDispatchIndirect(
3825 VkCmdBuffer cmdBuffer,
3826 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003827 VkDeviceSize offset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003828 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3829 bufferObject := GetBuffer(buffer)
3830 assert(cmdBufferObject.device == bufferObject.device)
3831
3832 bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
3833
3834 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
3835 cmdBufferObject.queueFlags = queueFlags
3836}
3837
3838@threadSafety("app")
3839cmd void vkCmdCopyBuffer(
3840 VkCmdBuffer cmdBuffer,
3841 VkBuffer srcBuffer,
3842 VkBuffer destBuffer,
3843 u32 regionCount,
3844 const VkBufferCopy* pRegions) {
3845 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3846 srcBufferObject := GetBuffer(srcBuffer)
3847 destBufferObject := GetBuffer(destBuffer)
3848 assert(cmdBufferObject.device == srcBufferObject.device)
3849 assert(cmdBufferObject.device == destBufferObject.device)
3850
3851 regions := pRegions[0:regionCount]
3852 for i in (0 .. regionCount) {
3853 region := regions[i]
3854 }
3855
3856 bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
3857 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3858
3859 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3860 cmdBufferObject.queueFlags = queueFlags
3861}
3862
3863@threadSafety("app")
3864cmd void vkCmdCopyImage(
3865 VkCmdBuffer cmdBuffer,
3866 VkImage srcImage,
3867 VkImageLayout srcImageLayout,
3868 VkImage destImage,
3869 VkImageLayout destImageLayout,
3870 u32 regionCount,
3871 const VkImageCopy* pRegions) {
3872 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3873 srcImageObject := GetImage(srcImage)
3874 destImageObject := GetImage(destImage)
3875 assert(cmdBufferObject.device == srcImageObject.device)
3876 assert(cmdBufferObject.device == destImageObject.device)
3877
3878 regions := pRegions[0:regionCount]
3879 for i in (0 .. regionCount) {
3880 region := regions[i]
3881 }
3882
3883 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3884 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3885
3886 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3887 cmdBufferObject.queueFlags = queueFlags
3888}
3889
3890@threadSafety("app")
3891cmd void vkCmdBlitImage(
3892 VkCmdBuffer cmdBuffer,
3893 VkImage srcImage,
3894 VkImageLayout srcImageLayout,
3895 VkImage destImage,
3896 VkImageLayout destImageLayout,
3897 u32 regionCount,
3898 const VkImageBlit* pRegions,
3899 VkTexFilter filter) {
3900 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3901 srcImageObject := GetImage(srcImage)
3902 destImageObject := GetImage(destImage)
3903 assert(cmdBufferObject.device == srcImageObject.device)
3904 assert(cmdBufferObject.device == destImageObject.device)
3905
3906 regions := pRegions[0:regionCount]
3907 for i in (0 .. regionCount) {
3908 region := regions[i]
3909 }
3910
3911 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3912 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3913
3914 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
3915 cmdBufferObject.queueFlags = queueFlags
3916}
3917
3918@threadSafety("app")
3919cmd void vkCmdCopyBufferToImage(
3920 VkCmdBuffer cmdBuffer,
3921 VkBuffer srcBuffer,
3922 VkImage destImage,
3923 VkImageLayout destImageLayout,
3924 u32 regionCount,
3925 const VkBufferImageCopy* pRegions) {
3926 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3927 srcBufferObject := GetBuffer(srcBuffer)
3928 destImageObject := GetImage(destImage)
3929 assert(cmdBufferObject.device == srcBufferObject.device)
3930 assert(cmdBufferObject.device == destImageObject.device)
3931
3932 regions := pRegions[0:regionCount]
3933 for i in (0 .. regionCount) {
3934 region := regions[i]
3935 }
3936
3937 bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
3938 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
3939
3940 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3941 cmdBufferObject.queueFlags = queueFlags
3942}
3943
3944@threadSafety("app")
3945cmd void vkCmdCopyImageToBuffer(
3946 VkCmdBuffer cmdBuffer,
3947 VkImage srcImage,
3948 VkImageLayout srcImageLayout,
3949 VkBuffer destBuffer,
3950 u32 regionCount,
3951 const VkBufferImageCopy* pRegions) {
3952 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3953 srcImageObject := GetImage(srcImage)
3954 destBufferObject := GetBuffer(destBuffer)
3955 assert(cmdBufferObject.device == srcImageObject.device)
3956 assert(cmdBufferObject.device == destBufferObject.device)
3957
3958 regions := pRegions[0:regionCount]
3959 for i in (0 .. regionCount) {
3960 region := regions[i]
3961 }
3962
3963 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
3964 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3965
3966 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3967 cmdBufferObject.queueFlags = queueFlags
3968}
3969
3970@threadSafety("app")
3971cmd void vkCmdUpdateBuffer(
3972 VkCmdBuffer cmdBuffer,
3973 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003974 VkDeviceSize destOffset,
3975 VkDeviceSize dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003976 const u32* pData) {
3977 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3978 destBufferObject := GetBuffer(destBuffer)
3979 assert(cmdBufferObject.device == destBufferObject.device)
3980
3981 data := pData[0:dataSize]
3982
3983 bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
3984
3985 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
3986 cmdBufferObject.queueFlags = queueFlags
3987}
3988
3989@threadSafety("app")
3990cmd void vkCmdFillBuffer(
3991 VkCmdBuffer cmdBuffer,
3992 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003993 VkDeviceSize destOffset,
3994 VkDeviceSize fillSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003995 u32 data) {
3996 cmdBufferObject := GetCmdBuffer(cmdBuffer)
3997 destBufferObject := GetBuffer(destBuffer)
3998 assert(cmdBufferObject.device == destBufferObject.device)
3999
4000 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
4001 cmdBufferObject.queueFlags = queueFlags
4002}
4003
4004@threadSafety("app")
4005cmd void vkCmdClearColorImage(
4006 VkCmdBuffer cmdBuffer,
4007 VkImage image,
4008 VkImageLayout imageLayout,
4009 const VkClearColorValue* pColor,
4010 u32 rangeCount,
4011 const VkImageSubresourceRange* pRanges) {
4012 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4013 imageObject := GetImage(image)
4014 assert(cmdBufferObject.device == imageObject.device)
4015
4016 ranges := pRanges[0:rangeCount]
4017 for i in (0 .. rangeCount) {
4018 range := ranges[i]
4019 }
4020
4021 bindCmdBuffer(cmdBuffer, image, imageObject.mem)
4022
4023 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4024 cmdBufferObject.queueFlags = queueFlags
4025}
4026
4027@threadSafety("app")
4028cmd void vkCmdClearDepthStencilImage(
4029 VkCmdBuffer cmdBuffer,
4030 VkImage image,
4031 VkImageLayout imageLayout,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004032 const VkClearDepthStencilValue* pDepthStencil,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004033 u32 rangeCount,
4034 const VkImageSubresourceRange* pRanges) {
4035 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4036 imageObject := GetImage(image)
4037 assert(cmdBufferObject.device == imageObject.device)
4038
4039 ranges := pRanges[0:rangeCount]
4040 for i in (0 .. rangeCount) {
4041 range := ranges[i]
4042 }
4043
4044 bindCmdBuffer(cmdBuffer, image, imageObject.mem)
4045
4046 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4047 cmdBufferObject.queueFlags = queueFlags
4048}
4049
4050@threadSafety("app")
Jesse Hallae38f732015-11-19 21:32:50 -08004051cmd void vkCmdClearAttachments(
Jesse Halld27f6aa2015-08-15 17:58:48 -07004052 VkCmdBuffer cmdBuffer,
Jesse Hallae38f732015-11-19 21:32:50 -08004053 u32 attachmentCount,
4054 const VkClearAttachment* pAttachments,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004055 u32 rectCount,
Jesse Halla15a4bf2015-11-19 22:48:02 -08004056 const VkClearRect* pRects) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004057 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4058
4059 rects := pRects[0:rectCount]
4060 for i in (0 .. rectCount) {
4061 rect := rects[i]
4062 }
4063
4064 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4065 cmdBufferObject.queueFlags = queueFlags
4066}
4067
4068@threadSafety("app")
4069cmd void vkCmdResolveImage(
4070 VkCmdBuffer cmdBuffer,
4071 VkImage srcImage,
4072 VkImageLayout srcImageLayout,
4073 VkImage destImage,
4074 VkImageLayout destImageLayout,
4075 u32 regionCount,
4076 const VkImageResolve* pRegions) {
4077 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4078 srcImageObject := GetImage(srcImage)
4079 destImageObject := GetImage(destImage)
4080 assert(cmdBufferObject.device == srcImageObject.device)
4081 assert(cmdBufferObject.device == destImageObject.device)
4082
4083 regions := pRegions[0:regionCount]
4084 for i in (0 .. regionCount) {
4085 region := regions[i]
4086 }
4087
4088 bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
4089 bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
4090
4091 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4092 cmdBufferObject.queueFlags = queueFlags
4093}
4094
4095@threadSafety("app")
4096cmd void vkCmdSetEvent(
4097 VkCmdBuffer cmdBuffer,
4098 VkEvent event,
4099 VkPipelineStageFlags stageMask) {
4100 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4101 eventObject := GetEvent(event)
4102 assert(cmdBufferObject.device == eventObject.device)
4103}
4104
4105@threadSafety("app")
4106cmd void vkCmdResetEvent(
4107 VkCmdBuffer cmdBuffer,
4108 VkEvent event,
4109 VkPipelineStageFlags stageMask) {
4110 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4111 eventObject := GetEvent(event)
4112 assert(cmdBufferObject.device == eventObject.device)
4113}
4114
4115@threadSafety("app")
4116cmd void vkCmdWaitEvents(
4117 VkCmdBuffer cmdBuffer,
4118 u32 eventCount,
4119 const VkEvent* pEvents,
4120 VkPipelineStageFlags srcStageMask,
4121 VkPipelineStageFlags destStageMask,
4122 u32 memBarrierCount,
4123 const void* const* ppMemBarriers) {
4124 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4125
4126 events := pEvents[0:eventCount]
4127 for i in (0 .. eventCount) {
4128 event := events[i]
4129 eventObject := GetEvent(event)
4130 assert(cmdBufferObject.device == eventObject.device)
4131 }
4132
4133 pMemBarriers := ppMemBarriers[0:memBarrierCount]
4134 for i in (0 .. memBarrierCount) {
4135 switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
4136 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
4137 memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
4138 }
4139 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
4140 imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
4141 imageObject := GetImage(imageMemBarrier.image)
4142 assert(imageObject.device == cmdBufferObject.device)
4143 }
4144 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
4145 bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
4146 bufferObject := GetBuffer(bufferMemBarrier.buffer)
4147 assert(bufferObject.device == cmdBufferObject.device)
4148 }
4149 }
4150 }
4151}
4152
4153@threadSafety("app")
4154cmd void vkCmdPipelineBarrier(
4155 VkCmdBuffer cmdBuffer,
4156 VkPipelineStageFlags srcStageMask,
4157 VkPipelineStageFlags destStageMask,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004158 VkBool32 byRegion,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004159 u32 memBarrierCount,
4160 const void* const* ppMemBarriers) {
4161 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4162
4163 pMemBarriers := ppMemBarriers[0:memBarrierCount]
4164 for i in (0 .. memBarrierCount) {
4165 switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
4166 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
4167 memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
4168 }
4169 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
4170 imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
4171 imageObject := GetImage(imageMemBarrier.image)
4172 assert(imageObject.device == cmdBufferObject.device)
4173 }
4174 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
4175 bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
4176 bufferObject := GetBuffer(bufferMemBarrier.buffer)
4177 assert(bufferObject.device == cmdBufferObject.device)
4178 }
4179 }
4180 }
4181}
4182
4183@threadSafety("app")
4184cmd void vkCmdBeginQuery(
4185 VkCmdBuffer cmdBuffer,
4186 VkQueryPool queryPool,
4187 u32 slot,
4188 VkQueryControlFlags flags) {
4189 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4190 queryPoolObject := GetQueryPool(queryPool)
4191 assert(cmdBufferObject.device == queryPoolObject.device)
4192}
4193
4194@threadSafety("app")
4195cmd void vkCmdEndQuery(
4196 VkCmdBuffer cmdBuffer,
4197 VkQueryPool queryPool,
4198 u32 slot) {
4199 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4200 queryPoolObject := GetQueryPool(queryPool)
4201 assert(cmdBufferObject.device == queryPoolObject.device)
4202}
4203
4204@threadSafety("app")
4205cmd void vkCmdResetQueryPool(
4206 VkCmdBuffer cmdBuffer,
4207 VkQueryPool queryPool,
4208 u32 startQuery,
4209 u32 queryCount) {
4210 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4211 queryPoolObject := GetQueryPool(queryPool)
4212 assert(cmdBufferObject.device == queryPoolObject.device)
4213}
4214
4215@threadSafety("app")
4216cmd void vkCmdWriteTimestamp(
4217 VkCmdBuffer cmdBuffer,
4218 VkTimestampType timestampType,
4219 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004220 VkDeviceSize destOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004221 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4222 destBufferObject := GetBuffer(destBuffer)
4223 assert(cmdBufferObject.device == destBufferObject.device)
4224}
4225
4226@threadSafety("app")
4227cmd void vkCmdCopyQueryPoolResults(
4228 VkCmdBuffer cmdBuffer,
4229 VkQueryPool queryPool,
4230 u32 startQuery,
4231 u32 queryCount,
4232 VkBuffer destBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004233 VkDeviceSize destOffset,
4234 VkDeviceSize destStride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004235 VkQueryResultFlags flags) {
4236 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4237 queryPoolObject := GetQueryPool(queryPool)
4238 destBufferObject := GetBuffer(destBuffer)
4239 assert(cmdBufferObject.device == queryPoolObject.device)
4240 assert(cmdBufferObject.device == destBufferObject.device)
4241}
4242
4243cmd void vkCmdPushConstants(
4244 VkCmdBuffer cmdBuffer,
4245 VkPipelineLayout layout,
4246 VkShaderStageFlags stageFlags,
4247 u32 start,
4248 u32 length,
4249 const void* values) {
4250 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4251 layoutObject := GetPipelineLayout(layout)
4252 assert(cmdBufferObject.device == layoutObject.device)
4253}
4254
4255@threadSafety("app")
4256cmd void vkCmdBeginRenderPass(
4257 VkCmdBuffer cmdBuffer,
4258 const VkRenderPassBeginInfo* pRenderPassBegin,
4259 VkRenderPassContents contents) {
4260 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4261 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4262 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
4263 assert(cmdBufferObject.device == renderPassObject.device)
4264 assert(cmdBufferObject.device == framebufferObject.device)
4265
4266 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4267 cmdBufferObject.queueFlags = queueFlags
4268}
4269
4270cmd void vkCmdNextSubpass(
4271 VkCmdBuffer cmdBuffer,
4272 VkRenderPassContents contents) {
4273 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4274}
4275
4276@threadSafety("app")
4277cmd void vkCmdEndRenderPass(
4278 VkCmdBuffer cmdBuffer) {
4279 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4280
4281 queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
4282 cmdBufferObject.queueFlags = queueFlags
4283}
4284
4285cmd void vkCmdExecuteCommands(
4286 VkCmdBuffer cmdBuffer,
4287 u32 cmdBuffersCount,
4288 const VkCmdBuffer* pCmdBuffers) {
4289 cmdBufferObject := GetCmdBuffer(cmdBuffer)
4290
4291 cmdBuffers := pCmdBuffers[0:cmdBuffersCount]
4292 for i in (0 .. cmdBuffersCount) {
4293 secondaryCmdBuffer := cmdBuffers[i]
4294 secondaryCmdBufferObject := GetCmdBuffer(secondaryCmdBuffer)
4295 assert(cmdBufferObject.device == secondaryCmdBufferObject.device)
4296 }
4297}
4298
Michael Lentine88594d72015-11-12 12:49:45 -08004299////////////////
4300// Extensions //
4301////////////////
4302
Jesse Hall2818f932015-11-19 21:19:17 -08004303@extension("VK_EXT_KHR_swapchain")
4304cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
4305 VkPhysicalDevice physicalDevice,
4306 u32 queueFamilyIndex,
4307 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4308 VkBool32* pSupported) {
4309 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4310
4311 supported := ?
4312 pSupported[0] = supported
4313
4314 return ?
4315}
4316
Michael Lentine88594d72015-11-12 12:49:45 -08004317@extension("VK_EXT_KHR_device_swapchain")
4318cmd VkResult vkGetSurfacePropertiesKHR(
4319 VkDevice device,
4320 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4321 VkSurfacePropertiesKHR* pSurfaceProperties) {
4322 deviceObject := GetDevice(device)
4323
4324 surfaceProperties := ?
4325 pSurfaceProperties[0] = surfaceProperties
4326
4327 return ?
4328}
4329
4330@extension("VK_EXT_KHR_device_swapchain")
4331cmd VkResult vkGetSurfaceFormatsKHR(
4332 VkDevice device,
4333 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4334 u32* pCount,
4335 VkSurfaceFormatKHR* pSurfaceFormats) {
4336 deviceObject := GetDevice(device)
4337
4338 count := as!u32(?)
4339 pCount[0] = count
4340 surfaceFormats := pSurfaceFormats[0:count]
4341
4342 for i in (0 .. count) {
4343 surfaceFormat := ?
4344 surfaceFormats[i] = surfaceFormat
4345 }
4346
4347 return ?
4348}
4349
4350@extension("VK_EXT_KHR_device_swapchain")
4351cmd VkResult vkGetSurfacePresentModesKHR(
4352 VkDevice device,
4353 const VkSurfaceDescriptionKHR* pSurfaceDescription,
4354 u32* pCount,
4355 VkPresentModeKHR* pPresentModes) {
4356 deviceObject := GetDevice(device)
4357
4358 count := as!u32(?)
4359 pCount[0] = count
4360 presentModes := pPresentModes[0:count]
4361
4362 for i in (0 .. count) {
4363 presentMode := ?
4364 presentModes[i] = presentMode
4365 }
4366
4367 return ?
4368}
4369
4370@extension("VK_EXT_KHR_device_swapchain")
4371cmd VkResult vkCreateSwapchainKHR(
4372 VkDevice device,
4373 const VkSwapchainCreateInfoKHR* pCreateInfo,
4374 VkSwapchainKHR* pSwapchain) {
4375 //assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
4376 deviceObject := GetDevice(device)
4377
4378 swapchain := ?
4379 pSwapchain[0] = swapchain
4380 State.Swapchains[swapchain] = new!SwapchainObject(device: device)
4381
4382 return ?
4383}
4384
4385@extension("VK_EXT_KHR_device_swapchain")
4386cmd VkResult vkDestroySwapchainKHR(
4387 VkDevice device,
4388 VkSwapchainKHR swapchain) {
4389 deviceObject := GetDevice(device)
4390 swapchainObject := GetSwapchain(swapchain)
4391 assert(swapchainObject.device == device)
4392
4393 State.Swapchains[swapchain] = null
4394
4395 return ?
4396}
4397
4398@extension("VK_EXT_KHR_device_swapchain")
4399cmd VkResult vkGetSwapchainImagesKHR(
4400 VkDevice device,
4401 VkSwapchainKHR swapchain,
4402 u32* pCount,
4403 VkImage* pSwapchainImages) {
4404 deviceObject := GetDevice(device)
4405
4406 count := as!u32(?)
4407 pCount[0] = count
4408 swapchainImages := pSwapchainImages[0:count]
4409
4410 for i in (0 .. count) {
4411 swapchainImage := ?
4412 swapchainImages[i] = swapchainImage
4413 if !(swapchainImage in State.Images) {
4414 State.Images[swapchainImage] = new!ImageObject(device: device)
4415 }
4416 }
4417
4418 return ?
4419}
4420
4421@extension("VK_EXT_KHR_device_swapchain")
4422cmd VkResult vkAcquireNextImageKHR(
4423 VkDevice device,
4424 VkSwapchainKHR swapchain,
4425 u64 timeout,
4426 VkSemaphore semaphore,
4427 u32* pImageIndex) {
4428 deviceObject := GetDevice(device)
4429 swapchainObject := GetSwapchain(swapchain)
4430
4431 imageIndex := ?
4432 pImageIndex[0] = imageIndex
4433
4434 return ?
4435}
4436
4437@extension("VK_EXT_KHR_device_swapchain")
4438cmd VkResult vkQueuePresentKHR(
4439 VkQueue queue,
4440 VkPresentInfoKHR* pPresentInfo) {
4441 queueObject := GetQueue(queue)
4442
4443 presentInfo := ?
4444 pPresentInfo[0] = presentInfo
4445
4446 return ?
4447}
4448
Jesse Halld27f6aa2015-08-15 17:58:48 -07004449
4450////////////////
4451// Validation //
4452////////////////
4453
4454extern void validate(string layerName, bool condition, string message)
4455
4456
4457/////////////////////////////
4458// Internal State Tracking //
4459/////////////////////////////
4460
4461StateObject State
4462
4463@internal class StateObject {
4464 // Dispatchable objects.
4465 map!(VkInstance, ref!InstanceObject) Instances
4466 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4467 map!(VkDevice, ref!DeviceObject) Devices
4468 map!(VkQueue, ref!QueueObject) Queues
4469 map!(VkCmdBuffer, ref!CmdBufferObject) CmdBuffers
4470
4471 // Non-dispatchable objects.
4472 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories
4473 map!(VkBuffer, ref!BufferObject) Buffers
4474 map!(VkBufferView, ref!BufferViewObject) BufferViews
4475 map!(VkImage, ref!ImageObject) Images
4476 map!(VkImageView, ref!ImageViewObject) ImageViews
Jesse Halld27f6aa2015-08-15 17:58:48 -07004477 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules
4478 map!(VkShader, ref!ShaderObject) Shaders
4479 map!(VkPipeline, ref!PipelineObject) Pipelines
4480 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts
4481 map!(VkSampler, ref!SamplerObject) Samplers
4482 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets
4483 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts
4484 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools
Jesse Halld27f6aa2015-08-15 17:58:48 -07004485 map!(VkFence, ref!FenceObject) Fences
4486 map!(VkSemaphore, ref!SemaphoreObject) Semaphores
4487 map!(VkEvent, ref!EventObject) Events
4488 map!(VkQueryPool, ref!QueryPoolObject) QueryPools
4489 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers
4490 map!(VkRenderPass, ref!RenderPassObject) RenderPasses
4491 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
4492 map!(VkCmdPool, ref!CmdPoolObject) CmdPools
Michael Lentine88594d72015-11-12 12:49:45 -08004493 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
Jesse Halld27f6aa2015-08-15 17:58:48 -07004494}
4495
4496@internal class InstanceObject {
4497}
4498
4499@internal class PhysicalDeviceObject {
4500 VkInstance instance
4501}
4502
4503@internal class DeviceObject {
4504 VkPhysicalDevice physicalDevice
4505}
4506
4507@internal class QueueObject {
4508 VkDevice device
4509 VkQueueFlags flags
4510}
4511
4512@internal class CmdBufferObject {
4513 VkDevice device
4514 map!(u64, VkDeviceMemory) boundObjects
4515 VkQueueFlags queueFlags
4516}
4517
4518@internal class DeviceMemoryObject {
4519 VkDevice device
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004520 VkDeviceSize allocationSize
4521 map!(u64, VkDeviceSize ) boundObjects
Jesse Halld27f6aa2015-08-15 17:58:48 -07004522 map!(VkCmdBuffer, VkCmdBuffer) boundCommandBuffers
4523}
4524
4525@internal class BufferObject {
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 BufferViewObject {
4532 VkDevice device
4533 VkBuffer buffer
4534}
4535
4536@internal class ImageObject {
4537 VkDevice device
4538 VkDeviceMemory mem
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004539 VkDeviceSize memOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004540}
4541
4542@internal class ImageViewObject {
4543 VkDevice device
4544 VkImage image
4545}
4546
Jesse Halld27f6aa2015-08-15 17:58:48 -07004547@internal class ShaderObject {
4548 VkDevice device
4549}
4550
4551@internal class ShaderModuleObject {
4552 VkDevice device
4553}
4554
4555@internal class PipelineObject {
4556 VkDevice device
4557}
4558
4559@internal class PipelineLayoutObject {
4560 VkDevice device
4561}
4562
4563@internal class SamplerObject {
4564 VkDevice device
4565}
4566
4567@internal class DescriptorSetObject {
4568 VkDevice device
4569}
4570
4571@internal class DescriptorSetLayoutObject {
4572 VkDevice device
4573}
4574
4575@internal class DescriptorPoolObject {
4576 VkDevice device
4577}
4578
Jesse Halld27f6aa2015-08-15 17:58:48 -07004579@internal class FenceObject {
4580 VkDevice device
4581 bool signaled
4582}
4583
4584@internal class SemaphoreObject {
4585 VkDevice device
4586}
4587
4588@internal class EventObject {
4589 VkDevice device
4590}
4591
4592@internal class QueryPoolObject {
4593 VkDevice device
4594}
4595
4596@internal class FramebufferObject {
4597 VkDevice device
4598}
4599
4600@internal class RenderPassObject {
4601 VkDevice device
4602}
4603
4604@internal class PipelineCacheObject {
4605 VkDevice device
4606}
4607
4608@internal class CmdPoolObject {
4609 VkDevice device
4610}
4611
Michael Lentine88594d72015-11-12 12:49:45 -08004612@internal class SwapchainObject {
4613 VkDevice device
4614}
4615
Jesse Halld27f6aa2015-08-15 17:58:48 -07004616macro ref!InstanceObject GetInstance(VkInstance instance) {
4617 assert(instance in State.Instances)
4618 return State.Instances[instance]
4619}
4620
4621macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
4622 assert(physicalDevice in State.PhysicalDevices)
4623 return State.PhysicalDevices[physicalDevice]
4624}
4625
4626macro ref!DeviceObject GetDevice(VkDevice device) {
4627 assert(device in State.Devices)
4628 return State.Devices[device]
4629}
4630
4631macro ref!QueueObject GetQueue(VkQueue queue) {
4632 assert(queue in State.Queues)
4633 return State.Queues[queue]
4634}
4635
4636macro ref!CmdBufferObject GetCmdBuffer(VkCmdBuffer cmdBuffer) {
4637 assert(cmdBuffer in State.CmdBuffers)
4638 return State.CmdBuffers[cmdBuffer]
4639}
4640
4641macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory mem) {
4642 assert(mem in State.DeviceMemories)
4643 return State.DeviceMemories[mem]
4644}
4645
4646macro ref!BufferObject GetBuffer(VkBuffer buffer) {
4647 assert(buffer in State.Buffers)
4648 return State.Buffers[buffer]
4649}
4650
4651macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
4652 assert(bufferView in State.BufferViews)
4653 return State.BufferViews[bufferView]
4654}
4655
4656macro ref!ImageObject GetImage(VkImage image) {
4657 assert(image in State.Images)
4658 return State.Images[image]
4659}
4660
4661macro ref!ImageViewObject GetImageView(VkImageView imageView) {
4662 assert(imageView in State.ImageViews)
4663 return State.ImageViews[imageView]
4664}
4665
Jesse Halld27f6aa2015-08-15 17:58:48 -07004666macro ref!ShaderObject GetShader(VkShader shader) {
4667 assert(shader in State.Shaders)
4668 return State.Shaders[shader]
4669}
4670
4671macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
4672 assert(shaderModule in State.ShaderModules)
4673 return State.ShaderModules[shaderModule]
4674}
4675
4676macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
4677 assert(pipeline in State.Pipelines)
4678 return State.Pipelines[pipeline]
4679}
4680
4681macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
4682 assert(pipelineLayout in State.PipelineLayouts)
4683 return State.PipelineLayouts[pipelineLayout]
4684}
4685
4686macro ref!SamplerObject GetSampler(VkSampler sampler) {
4687 assert(sampler in State.Samplers)
4688 return State.Samplers[sampler]
4689}
4690
4691macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
4692 assert(descriptorSet in State.DescriptorSets)
4693 return State.DescriptorSets[descriptorSet]
4694}
4695
4696macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
4697 assert(descriptorSetLayout in State.DescriptorSetLayouts)
4698 return State.DescriptorSetLayouts[descriptorSetLayout]
4699}
4700
4701macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
4702 assert(descriptorPool in State.DescriptorPools)
4703 return State.DescriptorPools[descriptorPool]
4704}
4705
Jesse Halld27f6aa2015-08-15 17:58:48 -07004706macro ref!FenceObject GetFence(VkFence fence) {
4707 assert(fence in State.Fences)
4708 return State.Fences[fence]
4709}
4710
4711macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
4712 assert(semaphore in State.Semaphores)
4713 return State.Semaphores[semaphore]
4714}
4715
4716macro ref!EventObject GetEvent(VkEvent event) {
4717 assert(event in State.Events)
4718 return State.Events[event]
4719}
4720
4721macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
4722 assert(queryPool in State.QueryPools)
4723 return State.QueryPools[queryPool]
4724}
4725
4726macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
4727 assert(framebuffer in State.Framebuffers)
4728 return State.Framebuffers[framebuffer]
4729}
4730
4731macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
4732 assert(renderPass in State.RenderPasses)
4733 return State.RenderPasses[renderPass]
4734}
4735
4736macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
4737 assert(pipelineCache in State.PipelineCaches)
4738 return State.PipelineCaches[pipelineCache]
4739}
4740
4741macro ref!CmdPoolObject GetCmdPool(VkCmdPool cmdPool) {
4742 assert(cmdPool in State.CmdPools)
4743 return State.CmdPools[cmdPool]
Jesse Hallf09c6b12015-08-15 19:54:28 -07004744}
Michael Lentine88594d72015-11-12 12:49:45 -08004745
4746macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
4747 assert(swapchain in State.Swapchains)
4748 return State.Swapchains[swapchain]
4749}