blob: 0296b0f862afff29536ec7489df1292977f86973 [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 Hall3e0dc8f2015-11-30 00:42:57 -080030define VERSION_MINOR 200
Jesse Hallae38f732015-11-19 21:32:50 -080031define VERSION_PATCH 0
Jesse Halld27f6aa2015-08-15 17:58:48 -070032
33// API limits
Jesse Hall65ab5522015-11-30 00:07:16 -080034define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
35define VK_UUID_SIZE 16
36define VK_MAX_EXTENSION_NAME_SIZE 256
37define VK_MAX_DESCRIPTION_SIZE 256
38define VK_MAX_MEMORY_TYPES 32
39define VK_MAX_MEMORY_HEAPS 16 /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
Jesse Halld27f6aa2015-08-15 17:58:48 -070040
41// API keywords
42define VK_TRUE 1
43define VK_FALSE 0
Jesse Hall5ae3abb2015-10-08 14:00:22 -070044
45// API keyword, but needs special handling by some templates
46define NULL_HANDLE 0
Jesse Halld27f6aa2015-08-15 17:58:48 -070047
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080048@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION 22
49@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER 1
50@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080051
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080052@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION 64
53@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
54@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
Jesse Hall1356b0d2015-11-23 17:24:58 -080055
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080056@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION 18
57@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER 3
58@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display"
Jesse Hall1356b0d2015-11-23 17:24:58 -080059
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080060@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_REVISION 7
61@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NUMBER 4
62@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display_swapchain"
Jesse Hall1356b0d2015-11-23 17:24:58 -080063
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080064@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION 4
65@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NUMBER 5
66@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME "VK_KHR_xlib_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080067
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080068@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION 4
69@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NUMBER 6
70@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME "VK_KHR_xcb_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080071
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080072@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION 3
73@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NUMBER 7
74@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME "VK_KHR_wayland_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080075
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080076@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION 3
77@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NUMBER 8
78@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME "VK_KHR_mir_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080079
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080080@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION 2
81@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NUMBER 8
82@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME "VK_KHR_android_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080083
Jesse Hall3e0dc8f2015-11-30 00:42:57 -080084@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION 3
85@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NUMBER 9
86@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME "VK_KHR_win32_surface"
Jesse Hall1356b0d2015-11-23 17:24:58 -080087
Jesse Halld27f6aa2015-08-15 17:58:48 -070088
89/////////////
90// Types //
91/////////////
92
Jesse Hall5ae3abb2015-10-08 14:00:22 -070093type u32 VkBool32
94type u32 VkFlags
95type u64 VkDeviceSize
96type u32 VkSampleMask
97
Jesse Halld27f6aa2015-08-15 17:58:48 -070098/// Dispatchable handle types.
99@dispatchHandle type u64 VkInstance
100@dispatchHandle type u64 VkPhysicalDevice
101@dispatchHandle type u64 VkDevice
102@dispatchHandle type u64 VkQueue
Jesse Hall3fbc8562015-11-29 22:10:52 -0800103@dispatchHandle type u64 VkCommandBuffer
Jesse Halld27f6aa2015-08-15 17:58:48 -0700104
105/// Non dispatchable handle types.
106@nonDispatchHandle type u64 VkDeviceMemory
Jesse Hall3fbc8562015-11-29 22:10:52 -0800107@nonDispatchHandle type u64 VkCommandPool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700108@nonDispatchHandle type u64 VkBuffer
109@nonDispatchHandle type u64 VkBufferView
110@nonDispatchHandle type u64 VkImage
111@nonDispatchHandle type u64 VkImageView
Jesse Halld27f6aa2015-08-15 17:58:48 -0700112@nonDispatchHandle type u64 VkShaderModule
Jesse Halld27f6aa2015-08-15 17:58:48 -0700113@nonDispatchHandle type u64 VkPipeline
114@nonDispatchHandle type u64 VkPipelineLayout
115@nonDispatchHandle type u64 VkSampler
116@nonDispatchHandle type u64 VkDescriptorSet
117@nonDispatchHandle type u64 VkDescriptorSetLayout
118@nonDispatchHandle type u64 VkDescriptorPool
Jesse Halld27f6aa2015-08-15 17:58:48 -0700119@nonDispatchHandle type u64 VkFence
120@nonDispatchHandle type u64 VkSemaphore
121@nonDispatchHandle type u64 VkEvent
122@nonDispatchHandle type u64 VkQueryPool
123@nonDispatchHandle type u64 VkFramebuffer
124@nonDispatchHandle type u64 VkRenderPass
125@nonDispatchHandle type u64 VkPipelineCache
Jesse Hall1356b0d2015-11-23 17:24:58 -0800126
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800127@extension("VK_KHR_surface") @nonDispatchHandle type u64 VkSurfaceKHR
Jesse Hall1356b0d2015-11-23 17:24:58 -0800128
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800129@extension("VK_KHR_swapchain") @nonDispatchHandle type u64 VkSwapchainKHR
Jesse Hall1356b0d2015-11-23 17:24:58 -0800130
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800131@extension("VK_KHR_display") @nonDispatchHandle type u64 VkDisplayKHR
132@extension("VK_KHR_display") @nonDispatchHandle type u64 VkDisplayModeKHR
Jesse Halld27f6aa2015-08-15 17:58:48 -0700133
134
135/////////////
136// Enums //
137/////////////
138
139enum VkImageLayout {
140 VK_IMAGE_LAYOUT_UNDEFINED = 0x00000000, /// Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
141 VK_IMAGE_LAYOUT_GENERAL = 0x00000001, /// General layout when image can be used for any kind of access
142 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 0x00000002, /// Optimal layout when image is only used for color attachment read/write
143 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 0x00000003, /// Optimal layout when image is only used for depth/stencil attachment read/write
144 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 0x00000004, /// Optimal layout when image is used for read only depth/stencil attachment and shader access
145 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 0x00000005, /// Optimal layout when image is used for read only shader access
Jesse Hall3fbc8562015-11-29 22:10:52 -0800146 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 0x00000006, /// Optimal layout when image is used only as source of transfer operations
147 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 0x00000007, /// Optimal layout when image is used only as destination of transfer operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700148 VK_IMAGE_LAYOUT_PREINITIALIZED = 0x00000008, /// Initial layout used when the data is populated by the CPU
Jesse Hall1356b0d2015-11-23 17:24:58 -0800149
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800150 //@extension("VK_KHR_swapchain")
Jesse Hall3fbc8562015-11-29 22:10:52 -0800151 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 0xc0000802,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700152}
153
154enum VkAttachmentLoadOp {
155 VK_ATTACHMENT_LOAD_OP_LOAD = 0x00000000,
156 VK_ATTACHMENT_LOAD_OP_CLEAR = 0x00000001,
157 VK_ATTACHMENT_LOAD_OP_DONT_CARE = 0x00000002,
158}
159
160enum VkAttachmentStoreOp {
161 VK_ATTACHMENT_STORE_OP_STORE = 0x00000000,
162 VK_ATTACHMENT_STORE_OP_DONT_CARE = 0x00000001,
163}
164
165enum VkImageType {
166 VK_IMAGE_TYPE_1D = 0x00000000,
167 VK_IMAGE_TYPE_2D = 0x00000001,
168 VK_IMAGE_TYPE_3D = 0x00000002,
169}
170
171enum VkImageTiling {
Jesse Hallc7467b72015-11-29 21:05:26 -0800172 VK_IMAGE_TILING_OPTIMAL = 0x00000000,
173 VK_IMAGE_TILING_LINEAR = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700174}
175
176enum VkImageViewType {
177 VK_IMAGE_VIEW_TYPE_1D = 0x00000000,
178 VK_IMAGE_VIEW_TYPE_2D = 0x00000001,
179 VK_IMAGE_VIEW_TYPE_3D = 0x00000002,
180 VK_IMAGE_VIEW_TYPE_CUBE = 0x00000003,
181 VK_IMAGE_VIEW_TYPE_1D_ARRAY = 0x00000004,
182 VK_IMAGE_VIEW_TYPE_2D_ARRAY = 0x00000005,
183 VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 0x00000006,
184}
185
Jesse Hall3fbc8562015-11-29 22:10:52 -0800186enum VkCommandBufferLevel {
187 VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0x00000000,
188 VK_COMMAND_BUFFER_LEVEL_SECONDARY = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700189}
190
Jesse Hall65ab5522015-11-30 00:07:16 -0800191enum VkComponentSwizzle {
192 VK_COMPONENT_SWIZZLE_IDENTITY = 0x00000000,
193 VK_COMPONENT_SWIZZLE_ZERO = 0x00000001,
194 VK_COMPONENT_SWIZZLE_ONE = 0x00000002,
195 VK_COMPONENT_SWIZZLE_R = 0x00000003,
196 VK_COMPONENT_SWIZZLE_G = 0x00000004,
197 VK_COMPONENT_SWIZZLE_B = 0x00000005,
198 VK_COMPONENT_SWIZZLE_A = 0x00000006,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700199}
200
201enum VkDescriptorType {
202 VK_DESCRIPTOR_TYPE_SAMPLER = 0x00000000,
203 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 0x00000001,
204 VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 0x00000002,
205 VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 0x00000003,
206 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 0x00000004,
207 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 0x00000005,
208 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 0x00000006,
209 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 0x00000007,
210 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 0x00000008,
211 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 0x00000009,
212 VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 0x0000000a,
213}
214
Jesse Halld27f6aa2015-08-15 17:58:48 -0700215enum VkQueryType {
216 VK_QUERY_TYPE_OCCLUSION = 0x00000000,
217 VK_QUERY_TYPE_PIPELINE_STATISTICS = 0x00000001, /// Optional
Jesse Halla3a7a1d2015-11-24 11:37:23 -0800218 VK_QUERY_TYPE_TIMESTAMP = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700219}
220
Jesse Halld27f6aa2015-08-15 17:58:48 -0700221enum VkBorderColor {
222 VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000,
223 VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 0x00000001,
224 VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 0x00000002,
225 VK_BORDER_COLOR_INT_OPAQUE_BLACK = 0x00000003,
226 VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 0x00000004,
227 VK_BORDER_COLOR_INT_OPAQUE_WHITE = 0x00000005,
228}
229
230enum VkPipelineBindPoint {
Jesse Hallc7467b72015-11-29 21:05:26 -0800231 VK_PIPELINE_BIND_POINT_GRAPHICS = 0x00000000,
232 VK_PIPELINE_BIND_POINT_COMPUTE = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700233}
234
235enum VkPrimitiveTopology {
236 VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0x00000000,
237 VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 0x00000001,
238 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 0x00000002,
239 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
240 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
241 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 0x00000005,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800242 VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 0x00000006,
243 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 0x00000007,
244 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 0x00000008,
245 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 0x00000009,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700246 VK_PRIMITIVE_TOPOLOGY_PATCH = 0x0000000a,
247}
248
249enum VkSharingMode {
250 VK_SHARING_MODE_EXCLUSIVE = 0x00000000,
251 VK_SHARING_MODE_CONCURRENT = 0x00000001,
252}
253
254enum VkIndexType {
255 VK_INDEX_TYPE_UINT16 = 0x00000000,
256 VK_INDEX_TYPE_UINT32 = 0x00000001,
257}
258
Jesse Hall23ff73f2015-11-29 14:36:39 -0800259enum VkFilter {
260 VK_FILTER_NEAREST = 0x00000000,
261 VK_FILTER_LINEAR = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700262}
263
Jesse Hall23ff73f2015-11-29 14:36:39 -0800264enum VkSamplerMipmapMode {
265 VK_SAMPLER_MIPMAP_MODE_BASE = 0x00000000, /// Always choose base level
266 VK_SAMPLER_MIPMAP_MODE_NEAREST = 0x00000001, /// Choose nearest mip level
267 VK_SAMPLER_MIPMAP_MODE_LINEAR = 0x00000002, /// Linear filter between mip levels
Jesse Halld27f6aa2015-08-15 17:58:48 -0700268}
269
Jesse Hall23ff73f2015-11-29 14:36:39 -0800270enum VkSamplerAddressMode {
Jesse Hallc7467b72015-11-29 21:05:26 -0800271 VK_SAMPLER_ADDRESS_MODE_REPEAT = 0x00000000,
272 VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 0x00000001,
273 VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 0x00000002,
274 VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 0x00000003,
275 VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700276}
277
278enum VkCompareOp {
279 VK_COMPARE_OP_NEVER = 0x00000000,
280 VK_COMPARE_OP_LESS = 0x00000001,
281 VK_COMPARE_OP_EQUAL = 0x00000002,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800282 VK_COMPARE_OP_LESS_OR_EQUAL = 0x00000003,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700283 VK_COMPARE_OP_GREATER = 0x00000004,
284 VK_COMPARE_OP_NOT_EQUAL = 0x00000005,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800285 VK_COMPARE_OP_GREATER_OR_EQUAL = 0x00000006,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700286 VK_COMPARE_OP_ALWAYS = 0x00000007,
287}
288
Jesse Hall65ab5522015-11-30 00:07:16 -0800289enum VkPolygonMode {
290 VK_POLYGON_MODE_FILL = 0x00000000,
291 VK_POLYGON_MODE_LINE = 0x00000001,
292 VK_POLYGON_MODE_POINT = 0x00000002,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700293}
294
295enum VkFrontFace {
Jesse Hall3fbc8562015-11-29 22:10:52 -0800296 VK_FRONT_FACE_COUNTER_CLOCKWISE = 0x00000000,
297 VK_FRONT_FACE_CLOCKWISE = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700298}
299
Jesse Hall65ab5522015-11-30 00:07:16 -0800300enum VkBlendFactor {
301 VK_BLEND_FACTOR_ZERO = 0x00000000,
302 VK_BLEND_FACTOR_ONE = 0x00000001,
303 VK_BLEND_FACTOR_SRC_COLOR = 0x00000002,
304 VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 0x00000003,
305 VK_BLEND_FACTOR_DST_COLOR = 0x00000004,
306 VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 0x00000005,
307 VK_BLEND_FACTOR_SRC_ALPHA = 0x00000006,
308 VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 0x00000007,
309 VK_BLEND_FACTOR_DST_ALPHA = 0x00000008,
310 VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 0x00000009,
311 VK_BLEND_FACTOR_CONSTANT_COLOR = 0x0000000a,
312 VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
313 VK_BLEND_FACTOR_CONSTANT_ALPHA = 0x0000000c,
314 VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
315 VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 0x0000000e,
316 VK_BLEND_FACTOR_SRC1_COLOR = 0x0000000f,
317 VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 0x00000010,
318 VK_BLEND_FACTOR_SRC1_ALPHA = 0x00000011,
319 VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 0x00000012,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700320}
321
322enum VkBlendOp {
323 VK_BLEND_OP_ADD = 0x00000000,
324 VK_BLEND_OP_SUBTRACT = 0x00000001,
325 VK_BLEND_OP_REVERSE_SUBTRACT = 0x00000002,
326 VK_BLEND_OP_MIN = 0x00000003,
327 VK_BLEND_OP_MAX = 0x00000004,
328}
329
330enum VkStencilOp {
331 VK_STENCIL_OP_KEEP = 0x00000000,
332 VK_STENCIL_OP_ZERO = 0x00000001,
333 VK_STENCIL_OP_REPLACE = 0x00000002,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800334 VK_STENCIL_OP_INCREMENT_AND_CLAMP = 0x00000003,
335 VK_STENCIL_OP_DECREMENT_AND_CLAMP = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700336 VK_STENCIL_OP_INVERT = 0x00000005,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800337 VK_STENCIL_OP_INCREMENT_AND_WRAP = 0x00000006,
338 VK_STENCIL_OP_DECREMENT_AND_WRAP = 0x00000007,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700339}
340
341enum VkLogicOp {
342 VK_LOGIC_OP_CLEAR = 0x00000000,
343 VK_LOGIC_OP_AND = 0x00000001,
344 VK_LOGIC_OP_AND_REVERSE = 0x00000002,
345 VK_LOGIC_OP_COPY = 0x00000003,
346 VK_LOGIC_OP_AND_INVERTED = 0x00000004,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800347 VK_LOGIC_OP_NO_OP = 0x00000005,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700348 VK_LOGIC_OP_XOR = 0x00000006,
349 VK_LOGIC_OP_OR = 0x00000007,
350 VK_LOGIC_OP_NOR = 0x00000008,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800351 VK_LOGIC_OP_EQUIVALENT = 0x00000009,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700352 VK_LOGIC_OP_INVERT = 0x0000000a,
353 VK_LOGIC_OP_OR_REVERSE = 0x0000000b,
354 VK_LOGIC_OP_COPY_INVERTED = 0x0000000c,
355 VK_LOGIC_OP_OR_INVERTED = 0x0000000d,
356 VK_LOGIC_OP_NAND = 0x0000000e,
357 VK_LOGIC_OP_SET = 0x0000000f,
358}
359
Jesse Hall3fbc8562015-11-29 22:10:52 -0800360enum VkSystemAllocationScope {
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800361 VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0x00000000,
Jesse Hall3fbc8562015-11-29 22:10:52 -0800362 VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 0x00000001,
363 VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 0x00000002,
364 VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 0x00000003,
365 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 0x00000004,
Jesse Hall03b6fe12015-11-24 12:44:21 -0800366}
367
Jesse Hall3fbc8562015-11-29 22:10:52 -0800368enum VkInternalAllocationType {
369 VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0x00000000,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700370}
371
372enum VkPhysicalDeviceType {
373 VK_PHYSICAL_DEVICE_TYPE_OTHER = 0x00000000,
374 VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 0x00000001,
375 VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 0x00000002,
376 VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 0x00000003,
377 VK_PHYSICAL_DEVICE_TYPE_CPU = 0x00000004,
378}
379
Jesse Hall65ab5522015-11-30 00:07:16 -0800380enum VkVertexInputRate {
381 VK_VERTEX_INPUT_RATE_VERTEX = 0x00000000,
382 VK_VERTEX_INPUT_RATE_INSTANCE = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700383}
384
385/// Vulkan format definitions
386enum VkFormat {
387 VK_FORMAT_UNDEFINED = 0x00000000,
388 VK_FORMAT_R4G4_UNORM = 0x00000001,
389 VK_FORMAT_R4G4_USCALED = 0x00000002,
390 VK_FORMAT_R4G4B4A4_UNORM = 0x00000003,
391 VK_FORMAT_R4G4B4A4_USCALED = 0x00000004,
392 VK_FORMAT_R5G6B5_UNORM = 0x00000005,
393 VK_FORMAT_R5G6B5_USCALED = 0x00000006,
394 VK_FORMAT_R5G5B5A1_UNORM = 0x00000007,
395 VK_FORMAT_R5G5B5A1_USCALED = 0x00000008,
396 VK_FORMAT_R8_UNORM = 0x00000009,
397 VK_FORMAT_R8_SNORM = 0x0000000A,
398 VK_FORMAT_R8_USCALED = 0x0000000B,
399 VK_FORMAT_R8_SSCALED = 0x0000000C,
400 VK_FORMAT_R8_UINT = 0x0000000D,
401 VK_FORMAT_R8_SINT = 0x0000000E,
402 VK_FORMAT_R8_SRGB = 0x0000000F,
403 VK_FORMAT_R8G8_UNORM = 0x00000010,
404 VK_FORMAT_R8G8_SNORM = 0x00000011,
405 VK_FORMAT_R8G8_USCALED = 0x00000012,
406 VK_FORMAT_R8G8_SSCALED = 0x00000013,
407 VK_FORMAT_R8G8_UINT = 0x00000014,
408 VK_FORMAT_R8G8_SINT = 0x00000015,
409 VK_FORMAT_R8G8_SRGB = 0x00000016,
410 VK_FORMAT_R8G8B8_UNORM = 0x00000017,
411 VK_FORMAT_R8G8B8_SNORM = 0x00000018,
412 VK_FORMAT_R8G8B8_USCALED = 0x00000019,
413 VK_FORMAT_R8G8B8_SSCALED = 0x0000001A,
414 VK_FORMAT_R8G8B8_UINT = 0x0000001B,
415 VK_FORMAT_R8G8B8_SINT = 0x0000001C,
416 VK_FORMAT_R8G8B8_SRGB = 0x0000001D,
417 VK_FORMAT_R8G8B8A8_UNORM = 0x0000001E,
418 VK_FORMAT_R8G8B8A8_SNORM = 0x0000001F,
419 VK_FORMAT_R8G8B8A8_USCALED = 0x00000020,
420 VK_FORMAT_R8G8B8A8_SSCALED = 0x00000021,
421 VK_FORMAT_R8G8B8A8_UINT = 0x00000022,
422 VK_FORMAT_R8G8B8A8_SINT = 0x00000023,
423 VK_FORMAT_R8G8B8A8_SRGB = 0x00000024,
424 VK_FORMAT_R10G10B10A2_UNORM = 0x00000025,
425 VK_FORMAT_R10G10B10A2_SNORM = 0x00000026,
426 VK_FORMAT_R10G10B10A2_USCALED = 0x00000027,
427 VK_FORMAT_R10G10B10A2_SSCALED = 0x00000028,
428 VK_FORMAT_R10G10B10A2_UINT = 0x00000029,
429 VK_FORMAT_R10G10B10A2_SINT = 0x0000002A,
430 VK_FORMAT_R16_UNORM = 0x0000002B,
431 VK_FORMAT_R16_SNORM = 0x0000002C,
432 VK_FORMAT_R16_USCALED = 0x0000002D,
433 VK_FORMAT_R16_SSCALED = 0x0000002E,
434 VK_FORMAT_R16_UINT = 0x0000002F,
435 VK_FORMAT_R16_SINT = 0x00000030,
436 VK_FORMAT_R16_SFLOAT = 0x00000031,
437 VK_FORMAT_R16G16_UNORM = 0x00000032,
438 VK_FORMAT_R16G16_SNORM = 0x00000033,
439 VK_FORMAT_R16G16_USCALED = 0x00000034,
440 VK_FORMAT_R16G16_SSCALED = 0x00000035,
441 VK_FORMAT_R16G16_UINT = 0x00000036,
442 VK_FORMAT_R16G16_SINT = 0x00000037,
443 VK_FORMAT_R16G16_SFLOAT = 0x00000038,
444 VK_FORMAT_R16G16B16_UNORM = 0x00000039,
445 VK_FORMAT_R16G16B16_SNORM = 0x0000003A,
446 VK_FORMAT_R16G16B16_USCALED = 0x0000003B,
447 VK_FORMAT_R16G16B16_SSCALED = 0x0000003C,
448 VK_FORMAT_R16G16B16_UINT = 0x0000003D,
449 VK_FORMAT_R16G16B16_SINT = 0x0000003E,
450 VK_FORMAT_R16G16B16_SFLOAT = 0x0000003F,
451 VK_FORMAT_R16G16B16A16_UNORM = 0x00000040,
452 VK_FORMAT_R16G16B16A16_SNORM = 0x00000041,
453 VK_FORMAT_R16G16B16A16_USCALED = 0x00000042,
454 VK_FORMAT_R16G16B16A16_SSCALED = 0x00000043,
455 VK_FORMAT_R16G16B16A16_UINT = 0x00000044,
456 VK_FORMAT_R16G16B16A16_SINT = 0x00000045,
457 VK_FORMAT_R16G16B16A16_SFLOAT = 0x00000046,
458 VK_FORMAT_R32_UINT = 0x00000047,
459 VK_FORMAT_R32_SINT = 0x00000048,
460 VK_FORMAT_R32_SFLOAT = 0x00000049,
461 VK_FORMAT_R32G32_UINT = 0x0000004A,
462 VK_FORMAT_R32G32_SINT = 0x0000004B,
463 VK_FORMAT_R32G32_SFLOAT = 0x0000004C,
464 VK_FORMAT_R32G32B32_UINT = 0x0000004D,
465 VK_FORMAT_R32G32B32_SINT = 0x0000004E,
466 VK_FORMAT_R32G32B32_SFLOAT = 0x0000004F,
467 VK_FORMAT_R32G32B32A32_UINT = 0x00000050,
468 VK_FORMAT_R32G32B32A32_SINT = 0x00000051,
469 VK_FORMAT_R32G32B32A32_SFLOAT = 0x00000052,
470 VK_FORMAT_R64_SFLOAT = 0x00000053,
471 VK_FORMAT_R64G64_SFLOAT = 0x00000054,
472 VK_FORMAT_R64G64B64_SFLOAT = 0x00000055,
473 VK_FORMAT_R64G64B64A64_SFLOAT = 0x00000056,
474 VK_FORMAT_R11G11B10_UFLOAT = 0x00000057,
475 VK_FORMAT_R9G9B9E5_UFLOAT = 0x00000058,
476 VK_FORMAT_D16_UNORM = 0x00000059,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700477 VK_FORMAT_D24_UNORM_X8 = 0x0000005A,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700478 VK_FORMAT_D32_SFLOAT = 0x0000005B,
479 VK_FORMAT_S8_UINT = 0x0000005C,
480 VK_FORMAT_D16_UNORM_S8_UINT = 0x0000005D,
481 VK_FORMAT_D24_UNORM_S8_UINT = 0x0000005E,
482 VK_FORMAT_D32_SFLOAT_S8_UINT = 0x0000005F,
483 VK_FORMAT_BC1_RGB_UNORM = 0x00000060,
484 VK_FORMAT_BC1_RGB_SRGB = 0x00000061,
485 VK_FORMAT_BC1_RGBA_UNORM = 0x00000062,
486 VK_FORMAT_BC1_RGBA_SRGB = 0x00000063,
487 VK_FORMAT_BC2_UNORM = 0x00000064,
488 VK_FORMAT_BC2_SRGB = 0x00000065,
489 VK_FORMAT_BC3_UNORM = 0x00000066,
490 VK_FORMAT_BC3_SRGB = 0x00000067,
491 VK_FORMAT_BC4_UNORM = 0x00000068,
492 VK_FORMAT_BC4_SNORM = 0x00000069,
493 VK_FORMAT_BC5_UNORM = 0x0000006A,
494 VK_FORMAT_BC5_SNORM = 0x0000006B,
495 VK_FORMAT_BC6H_UFLOAT = 0x0000006C,
496 VK_FORMAT_BC6H_SFLOAT = 0x0000006D,
497 VK_FORMAT_BC7_UNORM = 0x0000006E,
498 VK_FORMAT_BC7_SRGB = 0x0000006F,
499 VK_FORMAT_ETC2_R8G8B8_UNORM = 0x00000070,
500 VK_FORMAT_ETC2_R8G8B8_SRGB = 0x00000071,
501 VK_FORMAT_ETC2_R8G8B8A1_UNORM = 0x00000072,
502 VK_FORMAT_ETC2_R8G8B8A1_SRGB = 0x00000073,
503 VK_FORMAT_ETC2_R8G8B8A8_UNORM = 0x00000074,
504 VK_FORMAT_ETC2_R8G8B8A8_SRGB = 0x00000075,
505 VK_FORMAT_EAC_R11_UNORM = 0x00000076,
506 VK_FORMAT_EAC_R11_SNORM = 0x00000077,
507 VK_FORMAT_EAC_R11G11_UNORM = 0x00000078,
508 VK_FORMAT_EAC_R11G11_SNORM = 0x00000079,
509 VK_FORMAT_ASTC_4x4_UNORM = 0x0000007A,
510 VK_FORMAT_ASTC_4x4_SRGB = 0x0000007B,
511 VK_FORMAT_ASTC_5x4_UNORM = 0x0000007C,
512 VK_FORMAT_ASTC_5x4_SRGB = 0x0000007D,
513 VK_FORMAT_ASTC_5x5_UNORM = 0x0000007E,
514 VK_FORMAT_ASTC_5x5_SRGB = 0x0000007F,
515 VK_FORMAT_ASTC_6x5_UNORM = 0x00000080,
516 VK_FORMAT_ASTC_6x5_SRGB = 0x00000081,
517 VK_FORMAT_ASTC_6x6_UNORM = 0x00000082,
518 VK_FORMAT_ASTC_6x6_SRGB = 0x00000083,
519 VK_FORMAT_ASTC_8x5_UNORM = 0x00000084,
520 VK_FORMAT_ASTC_8x5_SRGB = 0x00000085,
521 VK_FORMAT_ASTC_8x6_UNORM = 0x00000086,
522 VK_FORMAT_ASTC_8x6_SRGB = 0x00000087,
523 VK_FORMAT_ASTC_8x8_UNORM = 0x00000088,
524 VK_FORMAT_ASTC_8x8_SRGB = 0x00000089,
525 VK_FORMAT_ASTC_10x5_UNORM = 0x0000008A,
526 VK_FORMAT_ASTC_10x5_SRGB = 0x0000008B,
527 VK_FORMAT_ASTC_10x6_UNORM = 0x0000008C,
528 VK_FORMAT_ASTC_10x6_SRGB = 0x0000008D,
529 VK_FORMAT_ASTC_10x8_UNORM = 0x0000008E,
530 VK_FORMAT_ASTC_10x8_SRGB = 0x0000008F,
531 VK_FORMAT_ASTC_10x10_UNORM = 0x00000090,
532 VK_FORMAT_ASTC_10x10_SRGB = 0x00000091,
533 VK_FORMAT_ASTC_12x10_UNORM = 0x00000092,
534 VK_FORMAT_ASTC_12x10_SRGB = 0x00000093,
535 VK_FORMAT_ASTC_12x12_UNORM = 0x00000094,
536 VK_FORMAT_ASTC_12x12_SRGB = 0x00000095,
537 VK_FORMAT_B4G4R4A4_UNORM = 0x00000096,
538 VK_FORMAT_B5G5R5A1_UNORM = 0x00000097,
539 VK_FORMAT_B5G6R5_UNORM = 0x00000098,
540 VK_FORMAT_B5G6R5_USCALED = 0x00000099,
541 VK_FORMAT_B8G8R8_UNORM = 0x0000009A,
542 VK_FORMAT_B8G8R8_SNORM = 0x0000009B,
543 VK_FORMAT_B8G8R8_USCALED = 0x0000009C,
544 VK_FORMAT_B8G8R8_SSCALED = 0x0000009D,
545 VK_FORMAT_B8G8R8_UINT = 0x0000009E,
546 VK_FORMAT_B8G8R8_SINT = 0x0000009F,
547 VK_FORMAT_B8G8R8_SRGB = 0x000000A0,
548 VK_FORMAT_B8G8R8A8_UNORM = 0x000000A1,
549 VK_FORMAT_B8G8R8A8_SNORM = 0x000000A2,
550 VK_FORMAT_B8G8R8A8_USCALED = 0x000000A3,
551 VK_FORMAT_B8G8R8A8_SSCALED = 0x000000A4,
552 VK_FORMAT_B8G8R8A8_UINT = 0x000000A5,
553 VK_FORMAT_B8G8R8A8_SINT = 0x000000A6,
554 VK_FORMAT_B8G8R8A8_SRGB = 0x000000A7,
555 VK_FORMAT_B10G10R10A2_UNORM = 0x000000A8,
556 VK_FORMAT_B10G10R10A2_SNORM = 0x000000A9,
557 VK_FORMAT_B10G10R10A2_USCALED = 0x000000AA,
558 VK_FORMAT_B10G10R10A2_SSCALED = 0x000000AB,
559 VK_FORMAT_B10G10R10A2_UINT = 0x000000AC,
560 VK_FORMAT_B10G10R10A2_SINT = 0x000000AD,
561}
562
Jesse Halld27f6aa2015-08-15 17:58:48 -0700563/// Structure type enumerant
564enum VkStructureType {
565 VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
Jesse Hallc7467b72015-11-29 21:05:26 -0800566 VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
567 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
568 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
569 VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
570 VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 5,
571 VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
572 VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
573 VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
574 VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700575 VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
Jesse Hallc7467b72015-11-29 21:05:26 -0800576 VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
577 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
578 VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
579 VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
580 VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
581 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800582 VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
583 VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
584 VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
585 VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
586 VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
587 VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
588 VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
589 VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
590 VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
591 VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
592 VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
593 VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
594 VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
595 VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
596 VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
597 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
598 VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
599 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 34,
600 VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
601 VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
602 VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
603 VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
604 VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
605 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO = 40,
606 VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 41,
607 VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 42,
608 VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 43,
609 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 44,
610 VK_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
611 VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 46,
612 VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 47,
Jesse Hall1356b0d2015-11-23 17:24:58 -0800613
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800614 //@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800615 VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0xc0000801,
616
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800617 //@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800618 VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xc0000c00,
Jesse Halla6429252015-11-29 18:59:42 -0800619 VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 0xc0000c01,
Jesse Hall1356b0d2015-11-23 17:24:58 -0800620
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800621 //@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800622 VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR = 0xc0001000,
623 VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR = 0xc0001001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700624}
625
Jesse Hall65ab5522015-11-30 00:07:16 -0800626enum VkSubpassContents {
627 VK_SUBPASS_CONTENTS_INLINE = 0x00000000,
628 VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700629}
630
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700631@lastUnused(-8)
Jesse Halld27f6aa2015-08-15 17:58:48 -0700632/// Error and return codes
633enum VkResult {
634 // Return codes for successful operation execution (positive values)
635 VK_SUCCESS = 0x00000000,
Jesse Halla15a4bf2015-11-19 22:48:02 -0800636 VK_NOT_READY = 0x00000001,
637 VK_TIMEOUT = 0x00000002,
638 VK_EVENT_SET = 0x00000003,
639 VK_EVENT_RESET = 0x00000004,
640 VK_INCOMPLETE = 0x00000005,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700641
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800642 //@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800643 VK_SUBOPTIMAL_KHR = 0x40000403,
644
Jesse Halld27f6aa2015-08-15 17:58:48 -0700645 // Error codes (negative values)
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700646 VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF,
647 VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700648 VK_ERROR_INITIALIZATION_FAILED = 0xFFFFFFFD,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700649 VK_ERROR_DEVICE_LOST = 0xFFFFFFFC,
650 VK_ERROR_MEMORY_MAP_FAILED = 0xFFFFFFFB,
651 VK_ERROR_LAYER_NOT_PRESENT = 0xFFFFFFFA,
652 VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9,
Jesse Hall606a54e2015-11-19 22:17:28 -0800653 VK_ERROR_FEATURE_NOT_PRESENT = 0xFFFFFFF8,
654 VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF7,
Jesse Hall1356b0d2015-11-23 17:24:58 -0800655
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800656 //@extension("VK_KHR_surface")
Jesse Halla6429252015-11-29 18:59:42 -0800657 VK_ERROR_SURFACE_LOST_KHR = 0xC0000400,
658
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800659 //@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800660 VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
661
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800662 //@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800663 VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001002,
664
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800665 //@extension("VK_KHR_android_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -0800666 VK_ERROR_INVALID_ANDROID_WINDOW_KHR = 0xC002400,
667 VK_ERROR_ANDROID_WINDOW_IN_USE_KHR = 0xC002401,
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700668}
669
670enum VkDynamicState {
671 VK_DYNAMIC_STATE_VIEWPORT = 0x00000000,
672 VK_DYNAMIC_STATE_SCISSOR = 0x00000001,
673 VK_DYNAMIC_STATE_LINE_WIDTH = 0x00000002,
674 VK_DYNAMIC_STATE_DEPTH_BIAS = 0x00000003,
675 VK_DYNAMIC_STATE_BLEND_CONSTANTS = 0x00000004,
676 VK_DYNAMIC_STATE_DEPTH_BOUNDS = 0x00000005,
677 VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 0x00000006,
678 VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 0x00000007,
679 VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700680}
681
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800682@extension("VK_KHR_surface")
Michael Lentine88594d72015-11-12 12:49:45 -0800683enum VkSurfaceTransformKHR {
684 VK_SURFACE_TRANSFORM_NONE_KHR = 0x00000000,
685 VK_SURFACE_TRANSFORM_ROT90_KHR = 0x00000001,
686 VK_SURFACE_TRANSFORM_ROT180_KHR = 0x00000002,
687 VK_SURFACE_TRANSFORM_ROT270_KHR = 0x00000003,
688 VK_SURFACE_TRANSFORM_HMIRROR_KHR = 0x00000004,
689 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 0x00000005,
690 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 0x00000006,
691 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 0x00000007,
692 VK_SURFACE_TRANSFORM_INHERIT_KHR = 0x00000008,
693}
694
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800695@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -0800696enum VkPresentModeKHR {
697 VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000,
698 VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001,
699 VK_PRESENT_MODE_FIFO_KHR = 0x00000002,
Jesse Hall03b6fe12015-11-24 12:44:21 -0800700 VK_PRESENT_MODE_FIFO_RELAXED_KHR = 0x00000003,
Michael Lentine88594d72015-11-12 12:49:45 -0800701}
702
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800703@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -0800704enum VkColorSpaceKHR {
705 VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
706}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700707
708/////////////////
709// Bitfields //
710/////////////////
711
Jesse Halld27f6aa2015-08-15 17:58:48 -0700712/// Queue capabilities
Jesse Halld8bade02015-11-24 10:24:18 -0800713type VkFlags VkQueueFlags
714bitfield VkQueueFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700715 VK_QUEUE_GRAPHICS_BIT = 0x00000001, /// Queue supports graphics operations
716 VK_QUEUE_COMPUTE_BIT = 0x00000002, /// Queue supports compute operations
Jesse Hall65ab5522015-11-30 00:07:16 -0800717 VK_QUEUE_TRANSFER_BIT = 0x00000004, /// Queue supports transfer operations
Jesse Hallb00daad2015-11-29 19:46:20 -0800718 VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, /// Queue supports sparse resource memory management operations
Jesse Halld27f6aa2015-08-15 17:58:48 -0700719}
720
721/// Memory properties passed into vkAllocMemory().
Jesse Halld8bade02015-11-24 10:24:18 -0800722type VkFlags VkMemoryPropertyFlags
723bitfield VkMemoryPropertyFlagBits {
Jesse Halld1af8122015-11-29 23:50:38 -0800724 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
725 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
726 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
727 VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
728 VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700729}
730
731/// Memory heap flags
Jesse Halld8bade02015-11-24 10:24:18 -0800732type VkFlags VkMemoryHeapFlags
733bitfield VkMemoryHeapFlagBits {
Jesse Halld1af8122015-11-29 23:50:38 -0800734 VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700735}
736
Jesse Hall3e0dc8f2015-11-30 00:42:57 -0800737/// Access flags
738type VkFlags VkAccessFlags
739bitfield VkAccessFlagBits {
740 VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
741 VK_ACCESS_INDEX_READ_BIT = 0x00000002,
742 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
743 VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
744 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
745 VK_ACCESS_SHADER_READ_BIT = 0x00000020,
746 VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
747 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
748 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
749 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
750 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
751 VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
752 VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
753 VK_ACCESS_HOST_READ_BIT = 0x00002000,
754 VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
755 VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
756 VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700757}
758
759/// Buffer usage flags
Jesse Halld8bade02015-11-24 10:24:18 -0800760type VkFlags VkBufferUsageFlags
761bitfield VkBufferUsageFlagBits {
Jesse Hall3fbc8562015-11-29 22:10:52 -0800762 VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001, /// Can be used as a source of transfer operations
763 VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002, /// Can be used as a destination of transfer operations
Jesse Halld27f6aa2015-08-15 17:58:48 -0700764 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, /// Can be used as TBO
765 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, /// Can be used as IBO
766 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, /// Can be used as UBO
767 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, /// Can be used as SSBO
768 VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, /// Can be used as source of fixed function index fetch (index buffer)
769 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, /// Can be used as source of fixed function vertex fetch (VBO)
770 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
771}
772
773/// Buffer creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800774type VkFlags VkBufferCreateFlags
775bitfield VkBufferCreateFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700776 VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Buffer should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700777 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Buffer should support sparse backing with partial residency
778 VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
779}
780
781/// Shader stage flags
Jesse Halld8bade02015-11-24 10:24:18 -0800782type VkFlags VkShaderStageFlags
783bitfield VkShaderStageFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700784 VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
Jesse Hallae38f732015-11-19 21:32:50 -0800785 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
786 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700787 VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
788 VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
789 VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
Jesse Hallc7467b72015-11-29 21:05:26 -0800790 VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700791
792 VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
793}
794
Jesse Hallfbf97b02015-11-20 14:17:03 -0800795/// Descriptor pool create flags
Jesse Halld8bade02015-11-24 10:24:18 -0800796type VkFlags VkDescriptorPoolCreateFlags
797bitfield VkDescriptorPoolCreateFlagBits {
Jesse Hallfbf97b02015-11-20 14:17:03 -0800798 VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
799}
800
801/// Descriptor pool reset flags
Jesse Halld8bade02015-11-24 10:24:18 -0800802type VkFlags VkDescriptorPoolResetFlags
Jesse Halla6429252015-11-29 18:59:42 -0800803//bitfield VkDescriptorPoolResetFlagBits {
804//}
Jesse Hallfbf97b02015-11-20 14:17:03 -0800805
Jesse Halld27f6aa2015-08-15 17:58:48 -0700806/// Image usage flags
Jesse Halld8bade02015-11-24 10:24:18 -0800807type VkFlags VkImageUsageFlags
808bitfield VkImageUsageFlagBits {
Jesse Hall3fbc8562015-11-29 22:10:52 -0800809 VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001, /// Can be used as a source of transfer operations
810 VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002, /// Can be used as a destination of transfer operations
Jesse Halld27f6aa2015-08-15 17:58:48 -0700811 VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
812 VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, /// Can be used as storage image (STORAGE_IMAGE descriptor type)
813 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, /// Can be used as framebuffer color attachment
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700814 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, /// Can be used as framebuffer depth/stencil attachment
Jesse Halld27f6aa2015-08-15 17:58:48 -0700815 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, /// Image data not needed outside of rendering
816 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, /// Can be used as framebuffer input attachment
817}
818
819/// Image creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800820type VkFlags VkImageCreateFlags
821bitfield VkImageCreateFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700822 VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Image should support sparse backing
Jesse Halld27f6aa2015-08-15 17:58:48 -0700823 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Image should support sparse backing with partial residency
824 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 -0700825 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, /// Allows image views to have different format than the base image
826 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 -0700827}
828
Jesse Hallb00daad2015-11-29 19:46:20 -0800829/// Image view creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800830type VkFlags VkImageViewCreateFlags
Jesse Hallb00daad2015-11-29 19:46:20 -0800831//bitfield VkImageViewCreateFlagBits {
832//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700833
834/// Pipeline creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800835type VkFlags VkPipelineCreateFlags
836bitfield VkPipelineCreateFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700837 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
838 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
839 VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
840}
841
Jesse Hall65ab5522015-11-30 00:07:16 -0800842/// Color component flags
843type VkFlags VkColorComponentFlags
844bitfield VkColorComponentFlagBits {
845 VK_COLOR_COMPONENT_R_BIT = 0x00000001,
846 VK_COLOR_COMPONENT_G_BIT = 0x00000002,
847 VK_COLOR_COMPONENT_B_BIT = 0x00000004,
848 VK_COLOR_COMPONENT_A_BIT = 0x00000008,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700849}
850
851/// Fence creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800852type VkFlags VkFenceCreateFlags
853bitfield VkFenceCreateFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700854 VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
855}
856
857/// Semaphore creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800858type VkFlags VkSemaphoreCreateFlags
Jesse Halla6429252015-11-29 18:59:42 -0800859//bitfield VkSemaphoreCreateFlagBits {
860//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700861
862/// Format capability flags
Jesse Halld8bade02015-11-24 10:24:18 -0800863type VkFlags VkFormatFeatureFlags
864bitfield VkFormatFeatureFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700865 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
866 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
867 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, /// Format supports atomic operations in case it's used for storage images
868 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, /// Format can be used for uniform texel buffers (TBOs)
869 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, /// Format can be used for storage texel buffers (IBOs)
870 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, /// Format supports atomic operations in case it's used for storage texel buffers
871 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, /// Format can be used for vertex buffers (VBOs)
872 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, /// Format can be used for color attachment images
873 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, /// Format supports blending in case it's used for color attachment images
874 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, /// Format can be used for depth/stencil attachment images
Jesse Hall3fbc8562015-11-29 22:10:52 -0800875 VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, /// Format can be used as the source image of blits with vkCommandBlitImage
876 VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, /// Format can be used as the destination image of blits with vkCommandBlitImage
Jesse Halld27f6aa2015-08-15 17:58:48 -0700877}
878
879/// Query control flags
Jesse Halld8bade02015-11-24 10:24:18 -0800880type VkFlags VkQueryControlFlags
881bitfield VkQueryControlFlagBits {
Jesse Hall65ab5522015-11-30 00:07:16 -0800882 VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700883}
884
885/// Query result flags
Jesse Halld8bade02015-11-24 10:24:18 -0800886type VkFlags VkQueryResultFlags
887bitfield VkQueryResultFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700888 VK_QUERY_RESULT_DEFAULT = 0x00000000, /// Results of the queries are immediately written to the destination buffer as 32-bit values
889 VK_QUERY_RESULT_64_BIT = 0x00000001, /// Results of the queries are written to the destination buffer as 64-bit values
890 VK_QUERY_RESULT_WAIT_BIT = 0x00000002, /// Results of the queries are waited on before proceeding with the result copy
891 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, /// Besides the results of the query, the availability of the results is also written
892 VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, /// Copy the partial results of the query even if the final results aren't available
893}
894
895/// Shader module creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800896type VkFlags VkShaderModuleCreateFlags
Jesse Halla6429252015-11-29 18:59:42 -0800897//bitfield VkShaderModuleCreateFlagBits {
898//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700899
Jesse Halld27f6aa2015-08-15 17:58:48 -0700900/// Event creation flags
Jesse Halld8bade02015-11-24 10:24:18 -0800901type VkFlags VkEventCreateFlags
Jesse Halla6429252015-11-29 18:59:42 -0800902//bitfield VkEventCreateFlagBits {
903//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700904
Jesse Halla15a4bf2015-11-19 22:48:02 -0800905/// Command buffer usage flags
Jesse Hall3fbc8562015-11-29 22:10:52 -0800906type VkFlags VkCommandBufferUsageFlags
907bitfield VkCommandBufferUsageFlagBits {
908 VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
909 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
910 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
Jesse Halld27f6aa2015-08-15 17:58:48 -0700911}
912
913/// Pipeline statistics flags
Jesse Halld8bade02015-11-24 10:24:18 -0800914type VkFlags VkQueryPipelineStatisticFlags
915bitfield VkQueryPipelineStatisticFlagBits {
Jesse Hallae38f732015-11-19 21:32:50 -0800916 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, /// Optional
917 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, /// Optional
918 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, /// Optional
919 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, /// Optional
920 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, /// Optional
921 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, /// Optional
922 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, /// Optional
923 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, /// Optional
924 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, /// Optional
925 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, /// Optional
926 VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, /// Optional
Jesse Halld27f6aa2015-08-15 17:58:48 -0700927}
928
929/// Memory mapping flags
Jesse Halld8bade02015-11-24 10:24:18 -0800930type VkFlags VkMemoryMapFlags
Jesse Halla6429252015-11-29 18:59:42 -0800931//bitfield VkMemoryMapFlagBits {
932//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700933
934/// Bitfield of image aspects
Jesse Halld8bade02015-11-24 10:24:18 -0800935type VkFlags VkImageAspectFlags
936bitfield VkImageAspectFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700937 VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
938 VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
939 VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
940 VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
941}
942
943/// Sparse memory bind flags
Jesse Halld8bade02015-11-24 10:24:18 -0800944type VkFlags VkSparseMemoryBindFlags
Jesse Halld1af8122015-11-29 23:50:38 -0800945//bitfield VkSparseMemoryBindFlagBits {
946//}
Jesse Halld27f6aa2015-08-15 17:58:48 -0700947
948/// Sparse image memory requirements flags
Jesse Halld8bade02015-11-24 10:24:18 -0800949type VkFlags VkSparseImageFormatFlags
950bitfield VkSparseImageFormatFlagBits {
Jesse Hallb00daad2015-11-29 19:46:20 -0800951 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001, /// Image uses a single miptail region for all array slices
952 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002, /// Image requires mip levels to be an exact multiple of the sparse iamge block size for non-mip-tail levels.
953 VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004, /// Image uses a non-standard sparse block size
Jesse Halld27f6aa2015-08-15 17:58:48 -0700954}
955
956/// Pipeline stages
Jesse Halld8bade02015-11-24 10:24:18 -0800957type VkFlags VkPipelineStageFlags
958bitfield VkPipelineStageFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700959 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, /// Before subsequent commands are processed
960 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, /// Draw/DispatchIndirect command fetch
961 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, /// Vertex/index fetch
962 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, /// Vertex shading
Jesse Hallae38f732015-11-19 21:32:50 -0800963 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, /// Tessellation control shading
964 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, /// Tessellation evaluation shading
Jesse Halld27f6aa2015-08-15 17:58:48 -0700965 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, /// Geometry shading
966 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, /// Fragment shading
967 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, /// Early fragment (depth/stencil) tests
968 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, /// Late fragment (depth/stencil) tests
969 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, /// Color attachment writes
970 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, /// Compute shading
971 VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, /// Transfer/copy operations
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700972 VK_PIPELINE_STAGE_HOST_BIT = 0x00002000, /// Indicates host (CPU) is a source/sink of the dependency
Jesse Halld27f6aa2015-08-15 17:58:48 -0700973
974 VK_PIPELINE_STAGE_ALL_GRAPHICS = 0x000007FF, /// All stages of the graphics pipeline
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700975 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00001FFF, /// All graphics, compute, copy, and transition commands
976}
977
978/// Render pass attachment description flags
Jesse Halld8bade02015-11-24 10:24:18 -0800979type VkFlags VkAttachmentDescriptionFlags
980bitfield VkAttachmentDescriptionFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700981 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 -0700982}
983
984/// Subpass description flags
Jesse Halld8bade02015-11-24 10:24:18 -0800985type VkFlags VkSubpassDescriptionFlags
986bitfield VkSubpassDescriptionFlagBits {
Jesse Halld27f6aa2015-08-15 17:58:48 -0700987}
988
989/// Command pool creation flags
Jesse Hall3fbc8562015-11-29 22:10:52 -0800990type VkFlags VkCommandPoolCreateFlags
991bitfield VkCommandPoolCreateFlagBits {
992 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001, /// Command buffers have a short lifetime
993 VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, /// Command buffers may release their memory individually
Jesse Halld27f6aa2015-08-15 17:58:48 -0700994}
995
996/// Command pool reset flags
Jesse Hall3fbc8562015-11-29 22:10:52 -0800997type VkFlags VkCommandPoolResetFlags
998bitfield VkCommandPoolResetFlagBits {
999 VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the pool
Jesse Halld27f6aa2015-08-15 17:58:48 -07001000}
1001
Jesse Hall3fbc8562015-11-29 22:10:52 -08001002type VkFlags VkCommandBufferResetFlags
1003bitfield VkCommandBufferResetFlagBits {
1004 VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the buffer
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001005}
1006
Jesse Halld8bade02015-11-24 10:24:18 -08001007type VkFlags VkSampleCountFlags
1008bitfield VkSampleCountFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001009 VK_SAMPLE_COUNT_1_BIT = 0x00000001,
1010 VK_SAMPLE_COUNT_2_BIT = 0x00000002,
1011 VK_SAMPLE_COUNT_4_BIT = 0x00000004,
1012 VK_SAMPLE_COUNT_8_BIT = 0x00000008,
1013 VK_SAMPLE_COUNT_16_BIT = 0x00000010,
1014 VK_SAMPLE_COUNT_32_BIT = 0x00000020,
1015 VK_SAMPLE_COUNT_64_BIT = 0x00000040,
1016}
1017
Jesse Halld8bade02015-11-24 10:24:18 -08001018type VkFlags VkStencilFaceFlags
1019bitfield VkStencilFaceFlagBits {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001020 VK_STENCIL_FACE_NONE = 0x00000000, /// No faces
1021 VK_STENCIL_FACE_FRONT_BIT = 0x00000001, /// Front face
1022 VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face
Jesse Hallc7467b72015-11-29 21:05:26 -08001023 VK_STENCIL_FRONT_AND_BACK = 0x00000003,
Jesse Halld27f6aa2015-08-15 17:58:48 -07001024}
1025
Jesse Halla6429252015-11-29 18:59:42 -08001026/// Instance creation flags
1027type VkFlags VkInstanceCreateFlags
1028//bitfield VkInstanceCreateFlagBits {
1029//}
1030
1031/// Device creation flags
1032type VkFlags VkDeviceCreateFlags
1033//bitfield VkDeviceCreateFlagBits {
1034//}
1035
1036/// Device queue creation flags
1037type VkFlags VkDeviceQueueCreateFlags
1038//bitfield VkDeviceQueueCreateFlagBits {
1039//}
1040
1041/// Query pool creation flags
1042type VkFlags VkQueryPoolCreateFlags
1043//bitfield VkQueryPoolCreateFlagBits {
1044//}
1045
1046/// Buffer view creation flags
1047type VkFlags VkBufferViewCreateFlags
1048//bitfield VkBufferViewCreateFlagBits {
1049//}
1050
1051/// Pipeline cache creation flags
1052type VkFlags VkPipelineCacheCreateFlags
1053//bitfield VkPipelineCacheCreateFlagBits {
1054//}
1055
1056/// Pipeline shader stage creation flags
1057type VkFlags VkPipelineShaderStageCreateFlags
1058//bitfield VkPipelineShaderStageCreateFlagBits {
1059//}
1060
1061/// Descriptor set layout creation flags
1062type VkFlags VkDescriptorSetLayoutCreateFlags
1063//bitfield VkDescriptorSetLayoutCreateFlagBits {
1064//}
1065
1066/// Pipeline vertex input state creation flags
1067type VkFlags VkPipelineVertexInputStateCreateFlags
1068//bitfield VkPipelineVertexInputStateCreateFlagBits {
1069//}
1070
1071/// Pipeline input assembly state creation flags
1072type VkFlags VkPipelineInputAssemblyStateCreateFlags
1073//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
1074//}
1075
1076/// Tessellation state creation flags
1077type VkFlags VkPipelineTessellationStateCreateFlags
1078//bitfield VkPipelineTessellationStateCreateFlagBits {
1079//}
1080
1081/// Viewport state creation flags
1082type VkFlags VkPipelineViewportStateCreateFlags
1083//bitfield VkPipelineViewportStateCreateFlagBits {
1084//}
1085
Jesse Hall3fbc8562015-11-29 22:10:52 -08001086/// Rasterization state creation flags
1087type VkFlags VkPipelineRasterizationStateCreateFlags
1088//bitfield VkPipelineRasterizationStateCreateFlagBits {
Jesse Halla6429252015-11-29 18:59:42 -08001089//}
1090
1091/// Multisample state creation flags
1092type VkFlags VkPipelineMultisampleStateCreateFlags
1093//bitfield VkPipelineMultisampleStateCreateFlagBits {
1094//}
1095
1096/// Color blend state creation flags
1097type VkFlags VkPipelineColorBlendStateCreateFlags
1098//bitfield VkPipelineColorBlendStateCreateFlagBits {
1099//}
1100
1101/// Depth/stencil state creation flags
1102type VkFlags VkPipelineDepthStencilStateCreateFlags
1103//bitfield VkPipelineDepthStencilStateCreateFlagBits {
1104//}
1105
1106/// Dynamic state creation flags
1107type VkFlags VkPipelineDynamicStateCreateFlags
1108//bitfield VkPipelineDynamicStateCreateFlagBits {
1109//}
1110
1111/// Pipeline layout creation flags
1112type VkFlags VkPipelineLayoutCreateFlags
1113//bitfield VkPipelineLayoutCreateFlagBits {
1114//}
1115
1116/// Sampler creation flags
1117type VkFlags VkSamplerCreateFlags
1118//bitfield VkSamplerCreateFlagBits {
1119//}
1120
1121/// Render pass creation flags
1122type VkFlags VkRenderPassCreateFlags
1123//bitfield VkRenderPassCreateFlagBits {
1124//}
1125
1126/// Framebuffer creation flags
1127type VkFlags VkFramebufferCreateFlags
1128//bitfield VkFramebufferCreateFlagBits {
1129//}
1130
Jesse Halldc6d36c2015-11-29 19:12:15 -08001131/// Dependency flags
1132type VkFlags VkDependencyFlags
1133bitfield VkDependencyFlagBits {
1134 VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
1135}
1136
Jesse Hallc7467b72015-11-29 21:05:26 -08001137/// Cull mode flags
1138type VkFlags VkCullModeFlags
1139bitfield VkCullModeFlagBits {
1140 VK_CULL_MODE_NONE = 0x00000000,
1141 VK_CULL_MODE_FRONT_BIT = 0x00000001,
1142 VK_CULL_MODE_BACK_BIT = 0x00000002,
1143 VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
1144}
1145
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001146@extension("VK_KHR_swapchain")
Jesse Halld8bade02015-11-24 10:24:18 -08001147type VkFlags VkSurfaceTransformFlagsKHR
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001148@extension("VK_KHR_swapchain")
Jesse Halld8bade02015-11-24 10:24:18 -08001149bitfield VkSurfaceTransformFlagBitsKHR {
Michael Lentine88594d72015-11-12 12:49:45 -08001150 VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
1151 VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
1152 VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
1153 VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
1154 VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
1155 VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
1156 VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
1157 VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
1158 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
1159}
Jesse Halld27f6aa2015-08-15 17:58:48 -07001160
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001161@extension("VK_KHR_swapchain")
Jesse Halla6429252015-11-29 18:59:42 -08001162type VkFlags VkCompositeAlphaFlagsKHR
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001163@extension("VK_KHR_swapchain")
Jesse Halla6429252015-11-29 18:59:42 -08001164bitfield VkCompositeAlphaFlagBitsKHR {
1165 VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
1166 VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
1167 VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
1168 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
1169}
1170
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001171@extension("VK_KHR_display")
Jesse Halld8bade02015-11-24 10:24:18 -08001172type VkFlags VkDisplayPlaneAlphaFlagsKHR
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001173@extension("VK_KHR_display")
Jesse Halld8bade02015-11-24 10:24:18 -08001174bitfield VkDisplayPlaneAlphaFlagBitsKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08001175 VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000001,
1176 VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000002,
1177 VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000004,
1178}
1179
1180
Jesse Halld27f6aa2015-08-15 17:58:48 -07001181//////////////////
1182// Structures //
1183//////////////////
1184
1185class VkOffset2D {
1186 s32 x
1187 s32 y
1188}
1189
1190class VkOffset3D {
1191 s32 x
1192 s32 y
1193 s32 z
1194}
1195
1196class VkExtent2D {
1197 s32 width
1198 s32 height
1199}
1200
1201class VkExtent3D {
1202 s32 width
1203 s32 height
1204 s32 depth
1205}
1206
1207class VkViewport {
Jesse Hall65ab5522015-11-30 00:07:16 -08001208 f32 x
1209 f32 y
Jesse Halld27f6aa2015-08-15 17:58:48 -07001210 f32 width
1211 f32 height
1212 f32 minDepth
1213 f32 maxDepth
1214}
1215
1216class VkRect2D {
1217 VkOffset2D offset
1218 VkExtent2D extent
1219}
1220
Jesse Halla15a4bf2015-11-19 22:48:02 -08001221class VkClearRect {
1222 VkRect2D rect
1223 u32 baseArrayLayer
Jesse Hall3fbc8562015-11-29 22:10:52 -08001224 u32 layerCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001225}
1226
Jesse Hall65ab5522015-11-30 00:07:16 -08001227class VkComponentMapping {
1228 VkComponentSwizzle r
1229 VkComponentSwizzle g
1230 VkComponentSwizzle b
1231 VkComponentSwizzle a
Jesse Halld27f6aa2015-08-15 17:58:48 -07001232}
1233
1234class VkPhysicalDeviceProperties {
1235 u32 apiVersion
1236 u32 driverVersion
Jesse Hall65ab5522015-11-30 00:07:16 -08001237 u32 vendorID
1238 u32 deviceID
Jesse Halld27f6aa2015-08-15 17:58:48 -07001239 VkPhysicalDeviceType deviceType
Jesse Hall65ab5522015-11-30 00:07:16 -08001240 char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] deviceName
1241 u8[VK_UUID_SIZE] pipelineCacheUUID
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001242 VkPhysicalDeviceLimits limits
1243 VkPhysicalDeviceSparseProperties sparseProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07001244}
1245
1246class VkExtensionProperties {
Jesse Hall65ab5522015-11-30 00:07:16 -08001247 char[VK_MAX_EXTENSION_NAME_SIZE] extensionName /// extension name
Jesse Halld27f6aa2015-08-15 17:58:48 -07001248 u32 specVersion /// version of the extension specification implemented
1249}
1250
1251class VkLayerProperties {
Jesse Hall65ab5522015-11-30 00:07:16 -08001252 char[VK_MAX_EXTENSION_NAME_SIZE] layerName /// layer name
Jesse Hall3fbc8562015-11-29 22:10:52 -08001253 u32 specVersion /// version of the layer specification implemented
1254 u32 implementationVersion /// build or release version of the layer's library
Jesse Hall65ab5522015-11-30 00:07:16 -08001255 char[VK_MAX_DESCRIPTION_SIZE] description /// Free-form description of the layer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001256}
1257
Jesse Halla366a512015-11-19 22:30:07 -08001258class VkSubmitInfo {
Jesse Hall03b6fe12015-11-24 12:44:21 -08001259 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO
1260 const void* pNext /// Next structure in chain
1261 u32 waitSemaphoreCount
Jesse Halla366a512015-11-19 22:30:07 -08001262 const VkSemaphore* pWaitSemaphores
Jesse Hall03b6fe12015-11-24 12:44:21 -08001263 u32 commandBufferCount
Jesse Hall3fbc8562015-11-29 22:10:52 -08001264 const VkCommandBuffer* pCommandBuffers
Jesse Hall03b6fe12015-11-24 12:44:21 -08001265 u32 signalSemaphoreCount
Jesse Halla366a512015-11-19 22:30:07 -08001266 const VkSemaphore* pSignalSemaphores
1267}
1268
Jesse Halld27f6aa2015-08-15 17:58:48 -07001269class VkApplicationInfo {
1270 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
1271 const void* pNext /// Next structure in chain
Jesse Hall3fbc8562015-11-29 22:10:52 -08001272 const char* pApplicationName
1273 u32 applicationVersion
Jesse Halld27f6aa2015-08-15 17:58:48 -07001274 const char* pEngineName
1275 u32 engineVersion
1276 u32 apiVersion
1277}
1278
Jesse Hall3fbc8562015-11-29 22:10:52 -08001279class VkAllocationCallbacks {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001280 void* pUserData
Jesse Hall3fbc8562015-11-29 22:10:52 -08001281 PFN_vkAllocationFunction pfnAllocation
1282 PFN_vkReallocationFunction pfnReallocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001283 PFN_vkFreeFunction pfnFree
Jesse Hall3fbc8562015-11-29 22:10:52 -08001284 PFN_vkInternalAllocationNotification pfnInternalAllocation
Jesse Hall03b6fe12015-11-24 12:44:21 -08001285 PFN_vkInternalFreeNotification pfnInternalFree
Jesse Halld27f6aa2015-08-15 17:58:48 -07001286}
1287
1288class VkDeviceQueueCreateInfo {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001289 VkStructureType sStype /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
1290 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001291 VkDeviceQueueCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001292 u32 queueFamilyIndex
Jesse Hall03b6fe12015-11-24 12:44:21 -08001293 u32 queuePriorityCount
Jesse Hallfbf97b02015-11-20 14:17:03 -08001294 const f32* pQueuePriorities
Jesse Halld27f6aa2015-08-15 17:58:48 -07001295}
1296
1297class VkDeviceCreateInfo {
1298 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1299 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001300 VkDeviceCreateFlags flags
Jesse Hallae38f732015-11-19 21:32:50 -08001301 u32 requestedQueueRecordCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001302 const VkDeviceQueueCreateInfo* pRequestedQueues
Jesse Hall03b6fe12015-11-24 12:44:21 -08001303 u32 enabledLayerNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001304 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
Jesse Hall03b6fe12015-11-24 12:44:21 -08001305 u32 enabledExtensionNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001306 const char* const* ppEnabledExtensionNames
1307 const VkPhysicalDeviceFeatures* pEnabledFeatures
Jesse Halld27f6aa2015-08-15 17:58:48 -07001308}
1309
1310class VkInstanceCreateInfo {
1311 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
1312 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001313 VkInstanceCreateFlags flags
Jesse Hall3fbc8562015-11-29 22:10:52 -08001314 const VkApplicationInfo* pApplicationInfo
Jesse Hall03b6fe12015-11-24 12:44:21 -08001315 u32 enabledLayerNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001316 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled
Jesse Hall03b6fe12015-11-24 12:44:21 -08001317 u32 enabledExtensionNameCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001318 const char* const* ppEnabledExtensionNames /// Extension names to be enabled
1319}
1320
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001321class VkQueueFamilyProperties {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001322 VkQueueFlags queueFlags /// Queue flags
1323 u32 queueCount
Jesse Hallacfa5342015-11-19 21:51:33 -08001324 u32 timestampValidBits
Jesse Hall65ab5522015-11-30 00:07:16 -08001325 VkExtent3D minImageTransferGranularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07001326}
1327
1328class VkPhysicalDeviceMemoryProperties {
1329 u32 memoryTypeCount
1330 VkMemoryType[VK_MAX_MEMORY_TYPES] memoryTypes
1331 u32 memoryHeapCount
1332 VkMemoryHeap[VK_MAX_MEMORY_HEAPS] memoryHeaps
1333}
1334
Jesse Hall3fbc8562015-11-29 22:10:52 -08001335class VkMemoryAllocateInfo {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001336 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1337 const void* pNext /// Pointer to next structure
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001338 VkDeviceSize allocationSize /// Size of memory allocation
Jesse Halld27f6aa2015-08-15 17:58:48 -07001339 u32 memoryTypeIndex /// Index of the of the memory type to allocate from
1340}
1341
1342class VkMemoryRequirements {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001343 VkDeviceSize size /// Specified in bytes
1344 VkDeviceSize alignment /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001345 u32 memoryTypeBits /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
1346}
1347
1348class VkSparseImageFormatProperties {
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001349 VkImageAspectFlagBits aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001350 VkExtent3D imageGranularity
1351 VkSparseImageFormatFlags flags
1352}
1353
1354class VkSparseImageMemoryRequirements {
Jesse Hallb00daad2015-11-29 19:46:20 -08001355 VkSparseImageFormatProperties formatProperties
Jesse Hall65ab5522015-11-30 00:07:16 -08001356 u32 imageMipTailStartLod
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001357 VkDeviceSize imageMipTailSize /// Specified in bytes, must be a multiple of image block size / alignment
1358 VkDeviceSize imageMipTailOffset /// Specified in bytes, must be a multiple of image block size / alignment
1359 VkDeviceSize imageMipTailStride /// Specified in bytes, must be a multiple of image block size / alignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07001360}
1361
1362class VkMemoryType {
1363 VkMemoryPropertyFlags propertyFlags /// Memory properties of this memory type
1364 u32 heapIndex /// Index of the memory heap allocations of this memory type are taken from
1365}
1366
1367class VkMemoryHeap {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001368 VkDeviceSize size /// Available memory in the heap
Jesse Halld27f6aa2015-08-15 17:58:48 -07001369 VkMemoryHeapFlags flags /// Flags for the heap
1370}
1371
1372class VkMappedMemoryRange {
1373 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
1374 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001375 VkDeviceMemory memory /// Mapped memory object
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001376 VkDeviceSize offset /// Offset within the mapped memory the range starts from
1377 VkDeviceSize size /// Size of the range within the mapped memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07001378}
1379
1380class VkFormatProperties {
1381 VkFormatFeatureFlags linearTilingFeatures /// Format features in case of linear tiling
1382 VkFormatFeatureFlags optimalTilingFeatures /// Format features in case of optimal tiling
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001383 VkFormatFeatureFlags bufferFeatures /// Format features supported by buffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001384}
1385
1386class VkImageFormatProperties {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001387 VkExtent3D maxExtent /// max image dimensions for this resource type
1388 u32 maxMipLevels /// max number of mipmap levels for this resource type
Jesse Halla15a4bf2015-11-19 22:48:02 -08001389 u32 maxArrayLayers /// max array layers for this resource type
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001390 VkSampleCountFlags sampleCounts /// supported sample counts for this resource type
1391 VkDeviceSize maxResourceSize /// max size (in bytes) of this resource type
1392}
1393
Jesse Halla15a4bf2015-11-19 22:48:02 -08001394class VkDescriptorImageInfo {
1395 VkSampler sampler
1396 VkImageView imageView
1397 VkImageLayout imageLayout
1398}
1399
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001400class VkDescriptorBufferInfo {
1401 VkBuffer buffer /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
1402 VkDeviceSize offset /// Base offset from buffer start in bytes to update in the descriptor set.
1403 VkDeviceSize range /// Size in bytes of the buffer resource for this descriptor update.
Jesse Halld27f6aa2015-08-15 17:58:48 -07001404}
1405
Jesse Halld27f6aa2015-08-15 17:58:48 -07001406class VkWriteDescriptorSet {
1407 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
1408 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001409 VkDescriptorSet dstSet /// Destination descriptor set
1410 u32 dstBinding /// Binding within the destination descriptor set to write
1411 u32 dstArrayElement /// Array element within the destination binding to write
Jesse Hall03b6fe12015-11-24 12:44:21 -08001412 u32 descriptorCount /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001413 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 -08001414 const VkDescriptorImageInfo* pImageInfo
1415 const VkDescriptorBufferInfo* pBufferInfo
1416 const VkBufferView* pTexelBufferView
Jesse Halld27f6aa2015-08-15 17:58:48 -07001417}
1418
1419class VkCopyDescriptorSet {
1420 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
1421 const void* pNext /// Pointer to next structure
1422 VkDescriptorSet srcSet /// Source descriptor set
1423 u32 srcBinding /// Binding within the source descriptor set to copy from
1424 u32 srcArrayElement /// Array element within the source binding to copy from
Jesse Hall3fbc8562015-11-29 22:10:52 -08001425 VkDescriptorSet dstSet /// Destination descriptor set
1426 u32 dstBinding /// Binding within the destination descriptor set to copy to
1427 u32 dstArrayElement /// Array element within the destination binding to copy to
Jesse Hall03b6fe12015-11-24 12:44:21 -08001428 u32 descriptorCount /// Number of descriptors to copy
Jesse Halld27f6aa2015-08-15 17:58:48 -07001429}
1430
1431class VkBufferCreateInfo {
1432 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
1433 const void* pNext /// Pointer to next structure.
Jesse Halla6429252015-11-29 18:59:42 -08001434 VkBufferCreateFlags flags /// Buffer creation flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001435 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001436 VkBufferUsageFlags usage /// Buffer usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001437 VkSharingMode sharingMode
Jesse Hall03b6fe12015-11-24 12:44:21 -08001438 u32 queueFamilyIndexCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001439 const u32* pQueueFamilyIndices
1440}
1441
1442class VkBufferViewCreateInfo {
1443 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
1444 const void* pNext /// Pointer to next structure.
Jesse Halla6429252015-11-29 18:59:42 -08001445 VkBufferViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001446 VkBuffer buffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001447 VkFormat format /// Optionally specifies format of elements
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001448 VkDeviceSize offset /// Specified in bytes
1449 VkDeviceSize range /// View size specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001450}
1451
1452class VkImageSubresource {
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001453 VkImageAspectFlagBits aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001454 u32 mipLevel
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001455 u32 arrayLayer
Jesse Halld27f6aa2015-08-15 17:58:48 -07001456}
1457
1458class VkImageSubresourceRange {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001459 VkImageAspectFlags aspectMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001460 u32 baseMipLevel
Jesse Hall3fbc8562015-11-29 22:10:52 -08001461 u32 levelCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001462 u32 baseArrayLayer
Jesse Hall3fbc8562015-11-29 22:10:52 -08001463 u32 layerCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001464}
1465
1466class VkMemoryBarrier {
1467 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
1468 const void* pNext /// Pointer to next structure.
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001469 VkAccessFlags srcAccessMask
1470 VkAccessFlags dstAccessMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001471}
1472
1473class VkBufferMemoryBarrier {
1474 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
1475 const void* pNext /// Pointer to next structure.
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001476 VkAccessFlags srcAccessMask
1477 VkAccessFlags dstAccessMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001478 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
Jesse Hall3fbc8562015-11-29 22:10:52 -08001479 u32 dstQueueFamilyIndex /// Queue family to transition ownership to
Jesse Halld27f6aa2015-08-15 17:58:48 -07001480 VkBuffer buffer /// Buffer to sync
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001481 VkDeviceSize offset /// Offset within the buffer to sync
1482 VkDeviceSize size /// Amount of bytes to sync
Jesse Halld27f6aa2015-08-15 17:58:48 -07001483}
1484
1485class VkImageMemoryBarrier {
1486 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
1487 const void* pNext /// Pointer to next structure.
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001488 VkAccessFlags srcAccessMask
1489 VkAccessFlags dstAccessMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001490 VkImageLayout oldLayout /// Current layout of the image
1491 VkImageLayout newLayout /// New layout to transition the image to
1492 u32 srcQueueFamilyIndex /// Queue family to transition ownership from
Jesse Hall3fbc8562015-11-29 22:10:52 -08001493 u32 dstQueueFamilyIndex /// Queue family to transition ownership to
Jesse Halld27f6aa2015-08-15 17:58:48 -07001494 VkImage image /// Image to sync
1495 VkImageSubresourceRange subresourceRange /// Subresource range to sync
1496}
1497
1498class VkImageCreateInfo {
1499 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1500 const void* pNext /// Pointer to next structure.
Jesse Halla6429252015-11-29 18:59:42 -08001501 VkImageCreateFlags flags /// Image creation flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001502 VkImageType imageType
1503 VkFormat format
1504 VkExtent3D extent
1505 u32 mipLevels
Jesse Halla15a4bf2015-11-19 22:48:02 -08001506 u32 arrayLayers
Jesse Halld27f6aa2015-08-15 17:58:48 -07001507 u32 samples
1508 VkImageTiling tiling
1509 VkImageUsageFlags usage /// Image usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001510 VkSharingMode sharingMode /// Cross-queue-family sharing mode
Jesse Hall03b6fe12015-11-24 12:44:21 -08001511 u32 queueFamilyIndexCount /// Number of queue families to share across
Jesse Halld27f6aa2015-08-15 17:58:48 -07001512 const u32* pQueueFamilyIndices /// Array of queue family indices to share across
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001513 VkImageLayout initialLayout /// Initial image layout for all subresources
Jesse Halld27f6aa2015-08-15 17:58:48 -07001514}
1515
1516class VkSubresourceLayout {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001517 VkDeviceSize offset /// Specified in bytes
1518 VkDeviceSize size /// Specified in bytes
1519 VkDeviceSize rowPitch /// Specified in bytes
1520 VkDeviceSize depthPitch /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001521}
1522
1523class VkImageViewCreateInfo {
1524 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1525 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001526 VkImageViewCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001527 VkImage image
1528 VkImageViewType viewType
1529 VkFormat format
Jesse Hall65ab5522015-11-30 00:07:16 -08001530 VkComponentMapping components
Jesse Halld27f6aa2015-08-15 17:58:48 -07001531 VkImageSubresourceRange subresourceRange
Jesse Halld27f6aa2015-08-15 17:58:48 -07001532}
1533
1534class VkBufferCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001535 VkDeviceSize srcOffset /// Specified in bytes
Jesse Hall3fbc8562015-11-29 22:10:52 -08001536 VkDeviceSize dstOffset /// Specified in bytes
Jesse Hallb00daad2015-11-29 19:46:20 -08001537 VkDeviceSize size /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001538}
1539
Jesse Halla6429252015-11-29 18:59:42 -08001540class VkSparseMemoryBind {
Jesse Hallb00daad2015-11-29 19:46:20 -08001541 VkDeviceSize resourceOffset /// Specified in bytes
1542 VkDeviceSize size /// Specified in bytes
Jesse Hall3fbc8562015-11-29 22:10:52 -08001543 VkDeviceMemory memory
1544 VkDeviceSize memoryOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001545 VkSparseMemoryBindFlags flags
1546}
1547
Jesse Halla6429252015-11-29 18:59:42 -08001548class VkSparseImageMemoryBind {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001549 VkImageSubresource subresource
1550 VkOffset3D offset
1551 VkExtent3D extent
Jesse Hall3fbc8562015-11-29 22:10:52 -08001552 VkDeviceMemory memory
1553 VkDeviceSize memoryOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001554 VkSparseMemoryBindFlags flags
1555}
1556
Jesse Halla6429252015-11-29 18:59:42 -08001557class VkSparseBufferMemoryBindInfo {
1558 VkBuffer buffer
1559 u32 bindCount
1560 const VkSparseMemoryBind* pBinds
1561}
1562
1563class VkSparseImageOpaqueMemoryBindInfo {
1564 VkImage image
1565 u32 bindCount
1566 const VkSparseMemoryBind* pBinds
1567}
1568
1569class VkSparseImageMemoryBindInfo {
1570 VkImage image
1571 u32 bindCount
1572 const VkSparseMemoryBind* pBinds
1573}
1574
1575class VkBindSparseInfo {
1576 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
1577 const void* pNext
1578 u32 waitSemaphoreCount
1579 const VkSemaphore* pWaitSemaphores
1580 u32 numBufferBinds
1581 const VkSparseBufferMemoryBindInfo* pBufferBinds
1582 u32 numImageOpaqueBinds
1583 const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds
1584 u32 numImageBinds
1585 const VkSparseImageMemoryBindInfo* pImageBinds
1586 u32 signalSemaphoreCount
1587 const VkSemaphore* pSignalSemaphores
1588}
1589
Jesse Hall65ab5522015-11-30 00:07:16 -08001590class VkImageSubresourceLayers {
1591 VkImageAspectFlags aspectMask
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001592 u32 mipLevel
Jesse Halla15a4bf2015-11-19 22:48:02 -08001593 u32 baseArrayLayer
Jesse Hall3fbc8562015-11-29 22:10:52 -08001594 u32 layerCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001595}
1596
Jesse Halld27f6aa2015-08-15 17:58:48 -07001597class VkImageCopy {
Jesse Hall65ab5522015-11-30 00:07:16 -08001598 VkImageSubresourceLayers srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001599 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Hall65ab5522015-11-30 00:07:16 -08001600 VkImageSubresourceLayers dstSubresource
Jesse Hall3fbc8562015-11-29 22:10:52 -08001601 VkOffset3D dstOffset /// Specified in pixels for both compressed and uncompressed images
Jesse Halld27f6aa2015-08-15 17:58:48 -07001602 VkExtent3D extent /// Specified in pixels for both compressed and uncompressed images
1603}
1604
1605class VkImageBlit {
Jesse Hall65ab5522015-11-30 00:07:16 -08001606 VkImageSubresourceLayers srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001607 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images
1608 VkExtent3D srcExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Hall65ab5522015-11-30 00:07:16 -08001609 VkImageSubresourceLayers dstSubresource
Jesse Hall3fbc8562015-11-29 22:10:52 -08001610 VkOffset3D dstOffset /// Specified in pixels for both compressed and uncompressed images
1611 VkExtent3D dstExtent /// Specified in pixels for both compressed and uncompressed images
Jesse Halld27f6aa2015-08-15 17:58:48 -07001612}
1613
1614class VkBufferImageCopy {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001615 VkDeviceSize bufferOffset /// Specified in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001616 u32 bufferRowLength /// Specified in texels
1617 u32 bufferImageHeight
Jesse Hall65ab5522015-11-30 00:07:16 -08001618 VkImageSubresourceLayers imageSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001619 VkOffset3D imageOffset /// Specified in pixels for both compressed and uncompressed images
1620 VkExtent3D imageExtent /// Specified in pixels for both compressed and uncompressed images
1621}
1622
1623class VkImageResolve {
Jesse Hall65ab5522015-11-30 00:07:16 -08001624 VkImageSubresourceLayers srcSubresource
Jesse Halld27f6aa2015-08-15 17:58:48 -07001625 VkOffset3D srcOffset
Jesse Hall65ab5522015-11-30 00:07:16 -08001626 VkImageSubresourceLayers dstSubresource
Jesse Hall3fbc8562015-11-29 22:10:52 -08001627 VkOffset3D dstOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07001628 VkExtent3D extent
1629}
1630
1631class VkShaderModuleCreateInfo {
1632 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
1633 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001634 VkShaderModuleCreateFlags flags /// Reserved
Jesse Halld27f6aa2015-08-15 17:58:48 -07001635 platform.size_t codeSize /// Specified in bytes
Jesse Halla9bb62b2015-11-21 19:31:56 -08001636 const u32* pCode /// Binary code of size codeSize
Jesse Halld27f6aa2015-08-15 17:58:48 -07001637}
1638
Jesse Halld27f6aa2015-08-15 17:58:48 -07001639class VkDescriptorSetLayoutBinding {
1640 VkDescriptorType descriptorType /// Type of the descriptors in this binding
1641 u32 arraySize /// Number of descriptors in this binding
1642 VkShaderStageFlags stageFlags /// Shader stages this binding is visible to
1643 const VkSampler* pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
1644}
1645
1646class VkDescriptorSetLayoutCreateInfo {
1647 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1648 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001649 VkDescriptorSetLayoutCreateFlags flags
Jesse Hall03b6fe12015-11-24 12:44:21 -08001650 u32 bindingCount /// Number of bindings in the descriptor set layout
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001651 const VkDescriptorSetLayoutBinding* pBinding /// Array of descriptor set layout bindings
Jesse Halld27f6aa2015-08-15 17:58:48 -07001652}
1653
Jesse Hall65ab5522015-11-30 00:07:16 -08001654class VkDescriptorPoolSize {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001655 VkDescriptorType type
Jesse Hall03b6fe12015-11-24 12:44:21 -08001656 u32 descriptorCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001657}
1658
1659class VkDescriptorPoolCreateInfo {
1660 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
1661 const void* pNext /// Pointer to next structure
Jesse Hallfbf97b02015-11-20 14:17:03 -08001662 VkDescriptorPoolCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001663 u32 maxSets
Jesse Hall65ab5522015-11-30 00:07:16 -08001664 u32 poolSizeCount
1665 const VkDescriptorPoolSize* pPoolSizes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001666}
1667
Jesse Hall3fbc8562015-11-29 22:10:52 -08001668class VkDescriptorSetAllocateInfo {
Jesse Hallfbf97b02015-11-20 14:17:03 -08001669 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
1670 const void* pNext /// Pointer to next structure
1671 VkDescriptorPool descriptorPool
Jesse Hall03b6fe12015-11-24 12:44:21 -08001672 u32 setCount
Jesse Hallfbf97b02015-11-20 14:17:03 -08001673 const VkDescriptorSetLayout* pSetLayouts
1674}
1675
Jesse Halld27f6aa2015-08-15 17:58:48 -07001676class VkSpecializationMapEntry {
Jesse Hall65ab5522015-11-30 00:07:16 -08001677 u32 constantID /// The SpecConstant ID specified in the BIL
Jesse Halld27f6aa2015-08-15 17:58:48 -07001678 u32 offset /// Offset of the value in the data block
Jesse Hallb00daad2015-11-29 19:46:20 -08001679 platform.size_t size /// Size in bytes of the SpecConstant
Jesse Halld27f6aa2015-08-15 17:58:48 -07001680}
1681
1682class VkSpecializationInfo {
1683 u32 mapEntryCount /// Number of entries in the map
Jesse Hallb00daad2015-11-29 19:46:20 -08001684 const VkSpecializationMapEntry* pMapEntries /// Array of map entries
Jesse Halld27f6aa2015-08-15 17:58:48 -07001685 platform.size_t dataSize /// Size in bytes of pData
1686 const void* pData /// Pointer to SpecConstant data
1687}
1688
1689class VkPipelineShaderStageCreateInfo {
1690 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1691 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001692 VkPipelineShaderStageCreateFlags flags
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08001693 VkShaderStageFlagBits stage
1694 VkShaderModule module
1695 const char* pName
Jesse Halld27f6aa2015-08-15 17:58:48 -07001696 const VkSpecializationInfo* pSpecializationInfo
1697}
1698
1699class VkComputePipelineCreateInfo {
1700 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1701 const void* pNext /// Pointer to next structure
Jesse Halld27f6aa2015-08-15 17:58:48 -07001702 VkPipelineCreateFlags flags /// Pipeline creation flags
Jesse Halla6429252015-11-29 18:59:42 -08001703 VkPipelineShaderStageCreateInfo stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001704 VkPipelineLayout layout /// Interface layout of the pipeline
1705 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
1706 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
1707}
1708
1709class VkVertexInputBindingDescription {
Jesse Hallb00daad2015-11-29 19:46:20 -08001710 u32 binding /// Vertex buffer binding id
1711 u32 stride /// Distance between vertices in bytes (0 = no advancement)
Jesse Hall65ab5522015-11-30 00:07:16 -08001712 VkVertexInputRate inputRate /// Rate at which binding is incremented
Jesse Halld27f6aa2015-08-15 17:58:48 -07001713}
1714
1715class VkVertexInputAttributeDescription {
Jesse Hallb00daad2015-11-29 19:46:20 -08001716 u32 location /// location of the shader vertex attrib
1717 u32 binding /// Vertex buffer binding id
1718 VkFormat format /// format of source data
1719 u32 offset /// Offset of first element in bytes from base of vertex
Jesse Halld27f6aa2015-08-15 17:58:48 -07001720}
1721
1722class VkPipelineVertexInputStateCreateInfo {
Jesse Hall03b6fe12015-11-24 12:44:21 -08001723 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
1724 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001725 VkPipelineVertexInputStateCreateFlags flags
Jesse Hall03b6fe12015-11-24 12:44:21 -08001726 u32 vertexBindingDescriptionCount /// number of bindings
Jesse Halld27f6aa2015-08-15 17:58:48 -07001727 const VkVertexInputBindingDescription* pVertexBindingDescriptions
Jesse Hall03b6fe12015-11-24 12:44:21 -08001728 u32 vertexAttributeDescriptionCount /// number of attributes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001729 const VkVertexInputAttributeDescription* pVertexAttributeDescriptions
1730}
1731
1732class VkPipelineInputAssemblyStateCreateInfo {
1733 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
1734 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001735 VkPipelineInputAssemblyStateCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001736 VkPrimitiveTopology topology
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001737 VkBool32 primitiveRestartEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001738}
1739
1740class VkPipelineTessellationStateCreateInfo {
1741 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
1742 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001743 VkPipelineTessellationStateCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001744 u32 patchControlPoints
1745}
1746
1747class VkPipelineViewportStateCreateInfo {
1748 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
1749 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001750 VkPipelineViewportStateCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001751 u32 viewportCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001752 const VkViewport* pViewports
1753 u32 scissorCount
1754 const VkRect2D* pScissors
Jesse Halld27f6aa2015-08-15 17:58:48 -07001755}
1756
Jesse Hall3fbc8562015-11-29 22:10:52 -08001757class VkPipelineRasterizationStateCreateInfo {
Jesse Hall65ab5522015-11-30 00:07:16 -08001758 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001759 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001760 VkPipelineRasterizationStateCreateFlags flags
Jesse Hallae38f732015-11-19 21:32:50 -08001761 VkBool32 depthClampEnable
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001762 VkBool32 rasterizerDiscardEnable
Jesse Hall65ab5522015-11-30 00:07:16 -08001763 VkPolygonMode polygonMode /// optional (GL45)
Jesse Hallc7467b72015-11-29 21:05:26 -08001764 VkCullModeFlags cullMode
Jesse Halld27f6aa2015-08-15 17:58:48 -07001765 VkFrontFace frontFace
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001766 VkBool32 depthBiasEnable
Jesse Halla9bb62b2015-11-21 19:31:56 -08001767 f32 depthBiasConstantFactor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001768 f32 depthBiasClamp
Jesse Halla9bb62b2015-11-21 19:31:56 -08001769 f32 depthBiasSlopeFactor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001770 f32 lineWidth
Jesse Halld27f6aa2015-08-15 17:58:48 -07001771}
1772
1773class VkPipelineMultisampleStateCreateInfo {
1774 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
1775 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001776 VkPipelineMultisampleStateCreateFlags flags
Jesse Hall3fbc8562015-11-29 22:10:52 -08001777 u32 rasterizationSamples /// Number of samples used for rasterization
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001778 VkBool32 sampleShadingEnable /// optional (GL45)
Jesse Halld27f6aa2015-08-15 17:58:48 -07001779 f32 minSampleShading /// optional (GL45)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001780 const VkSampleMask* pSampleMask
Jesse Hallacfa5342015-11-19 21:51:33 -08001781 VkBool32 alphaToCoverageEnable
1782 VkBool32 alphaToOneEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001783}
1784
1785class VkPipelineColorBlendAttachmentState {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001786 VkBool32 blendEnable
Jesse Hall65ab5522015-11-30 00:07:16 -08001787 VkBlendFactor srcColorBlendFactor
1788 VkBlendFactor dstColorBlendFactor
1789 VkBlendOp colorBlendOp
1790 VkBlendFactor srcAlphaBlendFactor
1791 VkBlendFactor dstAlphaBlendFactor
1792 VkBlendOp alphaBlendOp
1793 VkColorComponentFlags colorWriteMask
Jesse Halld27f6aa2015-08-15 17:58:48 -07001794}
1795
1796class VkPipelineColorBlendStateCreateInfo {
1797 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
1798 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001799 VkPipelineColorBlendStateCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001800 VkBool32 logicOpEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001801 VkLogicOp logicOp
1802 u32 attachmentCount /// # of pAttachments
1803 const VkPipelineColorBlendAttachmentState* pAttachments
Jesse Hallb00daad2015-11-29 19:46:20 -08001804 f32[4] blendConstants
Jesse Halld27f6aa2015-08-15 17:58:48 -07001805}
1806
1807class VkStencilOpState {
Jesse Hall65ab5522015-11-30 00:07:16 -08001808 VkStencilOp failOp
1809 VkStencilOp passOp
1810 VkStencilOp depthFailOp
1811 VkCompareOp compareOp
1812 u32 compareMask
1813 u32 writeMask
1814 u32 reference
Jesse Halld27f6aa2015-08-15 17:58:48 -07001815}
1816
1817class VkPipelineDepthStencilStateCreateInfo {
1818 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
1819 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001820 VkPipelineDepthStencilStateCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001821 VkBool32 depthTestEnable
1822 VkBool32 depthWriteEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001823 VkCompareOp depthCompareOp
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001824 VkBool32 depthBoundsTestEnable /// optional (depth_bounds_test)
1825 VkBool32 stencilTestEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001826 VkStencilOpState front
1827 VkStencilOpState back
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001828 f32 minDepthBounds
1829 f32 maxDepthBounds
1830}
1831
1832class VkPipelineDynamicStateCreateInfo {
1833 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
1834 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001835 VkPipelineDynamicStateCreateFlags flags
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001836 u32 dynamicStateCount
1837 const VkDynamicState* pDynamicStates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001838}
1839
1840class VkGraphicsPipelineCreateInfo {
Jesse Halla6429252015-11-29 18:59:42 -08001841 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
1842 const void* pNext /// Pointer to next structure
1843 VkPipelineCreateFlags flags /// Pipeline creation flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001844 u32 stageCount
Jesse Halla6429252015-11-29 18:59:42 -08001845 const VkPipelineShaderStageCreateInfo* pStages /// One entry for each active shader stage
Jesse Halld27f6aa2015-08-15 17:58:48 -07001846 const VkPipelineVertexInputStateCreateInfo* pVertexInputState
1847 const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState
1848 const VkPipelineTessellationStateCreateInfo* pTessellationState
1849 const VkPipelineViewportStateCreateInfo* pViewportState
Jesse Hall3fbc8562015-11-29 22:10:52 -08001850 const VkPipelineRasterizationStateCreateInfo* pRasterizationState
Jesse Halld27f6aa2015-08-15 17:58:48 -07001851 const VkPipelineMultisampleStateCreateInfo* pMultisampleState
1852 const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState
1853 const VkPipelineColorBlendStateCreateInfo* pColorBlendState
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001854 const VkPipelineDynamicStateCreateInfo* pDynamicState
Jesse Halla6429252015-11-29 18:59:42 -08001855 VkPipelineLayout layout /// Interface layout of the pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07001856 VkRenderPass renderPass
1857 u32 subpass
Jesse Halla6429252015-11-29 18:59:42 -08001858 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
1859 s32 basePipelineIndex /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
Jesse Halld27f6aa2015-08-15 17:58:48 -07001860}
1861
1862class VkPipelineCacheCreateInfo {
Jesse Hallb00daad2015-11-29 19:46:20 -08001863 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
1864 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001865 VkPipelineCacheCreateFlags flags
Jesse Hallb00daad2015-11-29 19:46:20 -08001866 platform.size_t initialDataSize /// Size of initial data to populate cache, in bytes
1867 const void* pInitialData /// Initial data to populate cache
Jesse Halld27f6aa2015-08-15 17:58:48 -07001868}
1869
1870class VkPushConstantRange {
1871 VkShaderStageFlags stageFlags /// Which stages use the range
Jesse Hall03b6fe12015-11-24 12:44:21 -08001872 u32 offset /// Start of the range, in bytes
1873 u32 size /// Length of the range, in bytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07001874}
1875
1876class VkPipelineLayoutCreateInfo {
1877 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
1878 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001879 VkPipelineLayoutCreateFlags flags
Jesse Hall03b6fe12015-11-24 12:44:21 -08001880 u32 setLayoutCount /// Number of descriptor sets interfaced by the pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07001881 const VkDescriptorSetLayout* pSetLayouts /// Array of <setCount> number of descriptor set layout objects defining the layout of the
1882 u32 pushConstantRangeCount /// Number of push-constant ranges used by the pipeline
1883 const VkPushConstantRange* pPushConstantRanges /// Array of pushConstantRangeCount number of ranges used by various shader stages
1884}
1885
1886class VkSamplerCreateInfo {
1887 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
1888 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08001889 VkSamplerCreateFlags flags
Jesse Hall23ff73f2015-11-29 14:36:39 -08001890 VkFilter magFilter /// Filter mode for magnification
1891 VkFilter minFilter /// Filter mode for minifiation
1892 VkSamplerMipmapMode mipmapMode /// Mipmap selection mode
1893 VkSamplerAddressMode addressModeU
1894 VkSamplerAddressMode addressModeV
1895 VkSamplerAddressMode addressModeW
Jesse Halld27f6aa2015-08-15 17:58:48 -07001896 f32 mipLodBias
1897 f32 maxAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001898 VkBool32 compareEnable
Jesse Halld27f6aa2015-08-15 17:58:48 -07001899 VkCompareOp compareOp
1900 f32 minLod
1901 f32 maxLod
1902 VkBorderColor borderColor
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001903 VkBool32 unnormalizedCoordinates
Jesse Halld27f6aa2015-08-15 17:58:48 -07001904}
1905
Jesse Hall3fbc8562015-11-29 22:10:52 -08001906class VkCommandPoolCreateInfo {
1907 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001908 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001909 VkCommandPoolCreateFlags flags /// Command pool creation flags
Jesse Halla6429252015-11-29 18:59:42 -08001910 u32 queueFamilyIndex
Jesse Halld27f6aa2015-08-15 17:58:48 -07001911}
1912
Jesse Hall3fbc8562015-11-29 22:10:52 -08001913class VkCommandBufferAllocateInfo {
1914 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001915 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001916 VkCommandPool commandPool
1917 VkCommandBufferLevel level
Jesse Hall03b6fe12015-11-24 12:44:21 -08001918 u32 bufferCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07001919}
1920
Jesse Hall3fbc8562015-11-29 22:10:52 -08001921class VkCommandBufferBeginInfo {
1922 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
Jesse Halld27f6aa2015-08-15 17:58:48 -07001923 const void* pNext /// Pointer to next structure
Jesse Hall3fbc8562015-11-29 22:10:52 -08001924 VkCommandBufferUsageFlags flags /// Command buffer usage flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001925 VkRenderPass renderPass /// Render pass for secondary command buffers
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001926 u32 subpass
Jesse Halld27f6aa2015-08-15 17:58:48 -07001927 VkFramebuffer framebuffer /// Framebuffer for secondary command buffers
1928}
1929
1930class VkRenderPassBeginInfo {
1931 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
1932 const void* pNext /// Pointer to next structure
1933 VkRenderPass renderPass
1934 VkFramebuffer framebuffer
1935 VkRect2D renderArea
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001936 u32 clearValueCount
1937 const VkClearValue* pClearValues
Jesse Halld27f6aa2015-08-15 17:58:48 -07001938}
1939
1940@union
1941/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
1942class VkClearColorValue {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001943 f32[4] float32
1944 s32[4] int32
1945 u32[4] uint32
Jesse Halld27f6aa2015-08-15 17:58:48 -07001946}
1947
1948class VkClearDepthStencilValue {
1949 f32 depth
1950 u32 stencil
1951}
1952
1953@union
1954/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
1955class VkClearValue {
1956 VkClearColorValue color
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001957 VkClearDepthStencilValue depthStencil
Jesse Halld27f6aa2015-08-15 17:58:48 -07001958}
1959
Jesse Hallae38f732015-11-19 21:32:50 -08001960class VkClearAttachment {
1961 VkImageAspectFlags aspectMask
1962 u32 colorAttachment
1963 VkClearValue clearValue
1964}
1965
Jesse Halld27f6aa2015-08-15 17:58:48 -07001966class VkAttachmentDescription {
Jesse Halla6429252015-11-29 18:59:42 -08001967 VkAttachmentDescriptionFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07001968 VkFormat format
1969 u32 samples
1970 VkAttachmentLoadOp loadOp /// Load op for color or depth data
1971 VkAttachmentStoreOp storeOp /// Store op for color or depth data
1972 VkAttachmentLoadOp stencilLoadOp /// Load op for stencil data
1973 VkAttachmentStoreOp stencilStoreOp /// Store op for stencil data
1974 VkImageLayout initialLayout
1975 VkImageLayout finalLayout
1976}
1977
1978class VkAttachmentReference {
1979 u32 attachment
1980 VkImageLayout layout
1981}
1982
1983class VkSubpassDescription {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001984 VkSubpassDescriptionFlags flags
Jesse Halla6429252015-11-29 18:59:42 -08001985 VkPipelineBindPoint pipelineBindPoint /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
Jesse Hall03b6fe12015-11-24 12:44:21 -08001986 u32 inputAttachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001987 const VkAttachmentReference* pInputAttachments
Jesse Hall03b6fe12015-11-24 12:44:21 -08001988 u32 colorAttachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001989 const VkAttachmentReference* pColorAttachments
1990 const VkAttachmentReference* pResolveAttachments
Jesse Hallc7467b72015-11-29 21:05:26 -08001991 const VkAttachmentReference* pDepthStencilAttachment
Jesse Hall03b6fe12015-11-24 12:44:21 -08001992 u32 preserveAttachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07001993 const VkAttachmentReference* pPreserveAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07001994}
1995
1996class VkSubpassDependency {
Jesse Halld27f6aa2015-08-15 17:58:48 -07001997 u32 srcSubpass
Jesse Hall3fbc8562015-11-29 22:10:52 -08001998 u32 dstSubpass
Jesse Halld27f6aa2015-08-15 17:58:48 -07001999 VkPipelineStageFlags srcStageMask
Jesse Hall3fbc8562015-11-29 22:10:52 -08002000 VkPipelineStageFlags dstStageMask
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002001 VkAccessFlags srcAccessMask
2002 VkAccessFlags dstAccessMask
Jesse Halldc6d36c2015-11-29 19:12:15 -08002003 VkDependencyFlags dependencyFlags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002004}
2005
2006class VkRenderPassCreateInfo {
2007 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
2008 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002009 VkRenderPassCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002010 u32 attachmentCount
2011 const VkAttachmentDescription* pAttachments
2012 u32 subpassCount
2013 const VkSubpassDescription* pSubpasses
2014 u32 dependencyCount
2015 const VkSubpassDependency* pDependencies
2016}
2017
2018class VkEventCreateInfo {
2019 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
2020 const void* pNext /// Pointer to next structure
2021 VkEventCreateFlags flags /// Event creation flags
2022}
2023
2024class VkFenceCreateInfo {
2025 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
2026 const void* pNext /// Pointer to next structure
2027 VkFenceCreateFlags flags /// Fence creation flags
2028}
2029
2030class VkPhysicalDeviceFeatures {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002031 VkBool32 robustBufferAccess /// out of bounds buffer accesses are well defined
2032 VkBool32 fullDrawIndexUint32 /// full 32-bit range of indices for indexed draw calls
2033 VkBool32 imageCubeArray /// image views which are arrays of cube maps
2034 VkBool32 independentBlend /// blending operations are controlled per-attachment
2035 VkBool32 geometryShader /// geometry stage
2036 VkBool32 tessellationShader /// tessellation control and evaluation stage
2037 VkBool32 sampleRateShading /// per-sample shading and interpolation
Jesse Hall3fbc8562015-11-29 22:10:52 -08002038 VkBool32 dualSrcBlend /// blend operations which take two sources
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002039 VkBool32 logicOp /// logic operations
2040 VkBool32 multiDrawIndirect /// multi draw indirect
Jesse Hallae38f732015-11-19 21:32:50 -08002041 VkBool32 depthClamp /// depth clamping
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002042 VkBool32 depthBiasClamp /// depth bias clamping
2043 VkBool32 fillModeNonSolid /// point and wireframe fill modes
2044 VkBool32 depthBounds /// depth bounds test
2045 VkBool32 wideLines /// lines with width greater than 1
2046 VkBool32 largePoints /// points with size greater than 1
Jesse Hallfbf97b02015-11-20 14:17:03 -08002047 VkBool32 alphaToOne /// The fragment alpha channel can be forced to maximum representable alpha value
2048 VkBool32 multiViewport
2049 VkBool32 samplerAnisotropy
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002050 VkBool32 textureCompressionETC2 /// ETC texture compression formats
2051 VkBool32 textureCompressionASTC_LDR /// ASTC LDR texture compression formats
2052 VkBool32 textureCompressionBC /// BC1-7 texture compressed formats
Jesse Hall65ab5522015-11-30 00:07:16 -08002053 VkBool32 occlusionQueryPrecise
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002054 VkBool32 pipelineStatisticsQuery /// pipeline statistics query
Jesse Halldc6d36c2015-11-29 19:12:15 -08002055 VkBool32 vertexPipelineStoresAndAtomics
2056 VkBool32 fragmentStoresAndAtomics
2057 VkBool32 shaderTessellationAndGeometryPointSize
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002058 VkBool32 shaderImageGatherExtended /// texture gather with run-time values and independent offsets
2059 VkBool32 shaderStorageImageExtendedFormats /// the extended set of formats can be used for storage images
2060 VkBool32 shaderStorageImageMultisample /// multisample images can be used for storage images
Jesse Halld1af8122015-11-29 23:50:38 -08002061 VkBool32 shaderStorageImageReadWithoutFormat
2062 VkBool32 shaderStorageImageWriteWithoutFormat
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002063 VkBool32 shaderUniformBufferArrayDynamicIndexing /// arrays of uniform buffers can be accessed with dynamically uniform indices
2064 VkBool32 shaderSampledImageArrayDynamicIndexing /// arrays of sampled images can be accessed with dynamically uniform indices
2065 VkBool32 shaderStorageBufferArrayDynamicIndexing /// arrays of storage buffers can be accessed with dynamically uniform indices
2066 VkBool32 shaderStorageImageArrayDynamicIndexing /// arrays of storage images can be accessed with dynamically uniform indices
2067 VkBool32 shaderClipDistance /// clip distance in shaders
2068 VkBool32 shaderCullDistance /// cull distance in shaders
2069 VkBool32 shaderFloat64 /// 64-bit floats (doubles) in shaders
2070 VkBool32 shaderInt64 /// 64-bit integers in shaders
2071 VkBool32 shaderInt16 /// 16-bit integers in shaders
2072 VkBool32 shaderResourceResidency /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
Jesse Hall65ab5522015-11-30 00:07:16 -08002073 VkBool32 shaderResourceMinLod /// shader can use texture operations that specify minimum resource LOD
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002074 VkBool32 sparseBinding /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
2075 VkBool32 sparseResidencyBuffer /// Sparse resources support: GPU can access partially resident buffers
2076 VkBool32 sparseResidencyImage2D /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
2077 VkBool32 sparseResidencyImage3D /// Sparse resources support: GPU can access partially resident 3D images
2078 VkBool32 sparseResidency2Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
2079 VkBool32 sparseResidency4Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
2080 VkBool32 sparseResidency8Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
2081 VkBool32 sparseResidency16Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
2082 VkBool32 sparseResidencyAliased /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
Jesse Halld1af8122015-11-29 23:50:38 -08002083 VkBool32 variableMultisampleRate
Jesse Halld27f6aa2015-08-15 17:58:48 -07002084}
2085
2086class VkPhysicalDeviceLimits {
2087 /// resource maximum sizes
2088 u32 maxImageDimension1D /// max 1D image dimension
2089 u32 maxImageDimension2D /// max 2D image dimension
2090 u32 maxImageDimension3D /// max 3D image dimension
2091 u32 maxImageDimensionCube /// max cubemap image dimension
2092 u32 maxImageArrayLayers /// max layers for image arrays
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002093 VkSampleCountFlags sampleCounts /// sample counts supported for all images supporting rendering and sampling
Jesse Hallb00daad2015-11-29 19:46:20 -08002094 u32 maxTexelBufferElements
Jesse Hallfbf97b02015-11-20 14:17:03 -08002095 u32 maxUniformBufferRange /// max uniform buffer size (bytes)
2096 u32 maxStorageBufferRange /// max storage buffer size (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002097 u32 maxPushConstantsSize /// max size of the push constants pool (bytes)
2098 /// memory limits
2099 u32 maxMemoryAllocationCount /// max number of device memory allocations supported
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002100 VkDeviceSize bufferImageGranularity /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
2101 VkDeviceSize sparseAddressSpaceSize /// Total address space available for sparse allocations (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002102 /// descriptor set limits
2103 u32 maxBoundDescriptorSets /// max number of descriptors sets that can be bound to a pipeline
Jesse Halld27f6aa2015-08-15 17:58:48 -07002104 u32 maxPerStageDescriptorSamplers /// max num of samplers allowed per-stage in a descriptor set
2105 u32 maxPerStageDescriptorUniformBuffers /// max num of uniform buffers allowed per-stage in a descriptor set
2106 u32 maxPerStageDescriptorStorageBuffers /// max num of storage buffers allowed per-stage in a descriptor set
2107 u32 maxPerStageDescriptorSampledImages /// max num of sampled images allowed per-stage in a descriptor set
2108 u32 maxPerStageDescriptorStorageImages /// max num of storage images allowed per-stage in a descriptor set
2109 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set
2110 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002111 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07002112 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002113 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set
Jesse Halld27f6aa2015-08-15 17:58:48 -07002114 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set
2115 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set
2116 /// vertex stage limits
2117 u32 maxVertexInputAttributes /// max num of vertex input attribute slots
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002118 u32 maxVertexInputBindings /// max num of vertex input binding slots
Jesse Halld27f6aa2015-08-15 17:58:48 -07002119 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset
2120 u32 maxVertexInputBindingStride /// max vertex input binding stride
2121 u32 maxVertexOutputComponents /// max num of output components written by vertex shader
2122 /// tessellation control stage limits
Jesse Hall3fbc8562015-11-29 22:10:52 -08002123 u32 maxTessellationGenerationLevel /// max level supported by tess primitive generator
Jesse Hallae38f732015-11-19 21:32:50 -08002124 u32 maxTessellationPatchSize /// max patch size (vertices)
2125 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS
2126 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
2127 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS
2128 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS
2129 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES
2130 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES
Jesse Halld27f6aa2015-08-15 17:58:48 -07002131 /// geometry stage limits
2132 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader
2133 u32 maxGeometryInputComponents /// max num of input components read in geometry stage
2134 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage
2135 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage
2136 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage
2137 /// fragment stage limits
2138 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage
Jesse Hallfbf97b02015-11-20 14:17:03 -08002139 u32 maxFragmentOutputAttachments /// max num of output attachments written in fragment stage
Jesse Hall3fbc8562015-11-29 22:10:52 -08002140 u32 maxFragmentDualSrcAttachments /// max num of output attachments written when using dual source blending
Jesse Halld27f6aa2015-08-15 17:58:48 -07002141 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers
2142 /// compute stage limits
2143 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes)
2144 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z)
2145 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group
2146 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z)
2147
2148 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y
2149 u32 subTexelPrecisionBits /// num bits of subtexel precision
2150 u32 mipmapPrecisionBits /// num bits of mipmap precision
2151
2152 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices)
2153 u32 maxDrawIndirectInstanceCount /// max instance count for indirect draw calls
Jesse Halld27f6aa2015-08-15 17:58:48 -07002154
2155 f32 maxSamplerLodBias /// max absolute sampler level of detail bias
2156 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy
2157
2158 u32 maxViewports /// max number of active viewports
Jesse Halld27f6aa2015-08-15 17:58:48 -07002159 u32[2] maxViewportDimensions /// max viewport dimensions (x,y)
2160 f32[2] viewportBoundsRange /// viewport bounds range (min,max)
2161 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport
2162
Jesse Halldc6d36c2015-11-29 19:12:15 -08002163 platform.size_t minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes)
2164 VkDeviceSize minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes)
2165 VkDeviceSize minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes)
2166 VkDeviceSize minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002167
Jesse Hallfbf97b02015-11-20 14:17:03 -08002168 s32 minTexelOffset /// min texel offset for OpTextureSampleOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002169 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset
Jesse Hallfbf97b02015-11-20 14:17:03 -08002170 s32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002171 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset
2172 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset
2173 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset
2174 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset
2175
2176 u32 maxFramebufferWidth /// max width for a framebuffer
2177 u32 maxFramebufferHeight /// max height for a framebuffer
2178 u32 maxFramebufferLayers /// max layer count for a layered framebuffer
2179 u32 maxFramebufferColorSamples /// max color sample count for a framebuffer
2180 u32 maxFramebufferDepthSamples /// max depth sample count for a framebuffer
2181 u32 maxFramebufferStencilSamples /// max stencil sample count for a framebuffer
2182 u32 maxColorAttachments /// max num of framebuffer color attachments
2183
2184 u32 maxSampledImageColorSamples /// max num of color samples for a non-integer sampled image
Jesse Hallc7467b72015-11-29 21:05:26 -08002185 u32 maxSampledImageDepthSamples /// max num of depth samples for a sampled image
2186 u32 maxSampledImageStencilSamples /// max num of stencil samples for a sampled image
Jesse Halld27f6aa2015-08-15 17:58:48 -07002187 u32 maxSampledImageIntegerSamples /// max num of samples supported for an integer image
2188 u32 maxStorageImageSamples /// max num of samples for a storage image
2189 u32 maxSampleMaskWords /// max num of sample mask words
2190
Jesse Halla9bb62b2015-11-21 19:31:56 -08002191 f32 timestampPeriod
Jesse Halld27f6aa2015-08-15 17:58:48 -07002192
2193 u32 maxClipDistances /// max number of clip distances
2194 u32 maxCullDistances /// max number of cull distances
2195 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping
2196
Jesse Hallfbf97b02015-11-20 14:17:03 -08002197 u32 discreteQueuePriorities
2198
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002199 f32[2] pointSizeRange /// range (min,max) of supported point sizes
2200 f32[2] lineWidthRange /// range (min,max) of supported line widths
Jesse Halld27f6aa2015-08-15 17:58:48 -07002201 f32 pointSizeGranularity /// granularity of supported point sizes
2202 f32 lineWidthGranularity /// granularity of supported line widths
Jesse Hall03b6fe12015-11-24 12:44:21 -08002203 VkBool32 strictLines
Jesse Halla9bb62b2015-11-21 19:31:56 -08002204
Jesse Hall65ab5522015-11-30 00:07:16 -08002205 VkDeviceSize optimalBufferCopyOffsetAlignment
2206 VkDeviceSize optimalBufferCopyRowPitchAlignment
Jesse Halld27f6aa2015-08-15 17:58:48 -07002207}
2208
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002209class VkPhysicalDeviceSparseProperties {
2210 VkBool32 residencyStandard2DBlockShape /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
Jesse Hallb00daad2015-11-29 19:46:20 -08002211 VkBool32 residencyStandard2DMultisampleBlockShape /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002212 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
2213 VkBool32 residencyAlignedMipSize /// Sparse resources support: Images with mip-level dimensions that are NOT a multiple of the block size will be placed in the mip tail
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002214 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
2215}
2216
Jesse Halld27f6aa2015-08-15 17:58:48 -07002217class VkSemaphoreCreateInfo {
2218 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
2219 const void* pNext /// Pointer to next structure
2220 VkSemaphoreCreateFlags flags /// Semaphore creation flags
2221}
2222
2223class VkQueryPoolCreateInfo {
2224 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
2225 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002226 VkQueryPoolCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002227 VkQueryType queryType
Jesse Hall65ab5522015-11-30 00:07:16 -08002228 u32 entryCount
Jesse Halld27f6aa2015-08-15 17:58:48 -07002229 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional
2230}
2231
2232class VkFramebufferCreateInfo {
2233 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
2234 const void* pNext /// Pointer to next structure
Jesse Halla6429252015-11-29 18:59:42 -08002235 VkFramebufferCreateFlags flags
Jesse Halld27f6aa2015-08-15 17:58:48 -07002236 VkRenderPass renderPass
2237 u32 attachmentCount
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002238 const VkImageView* pAttachments
Jesse Halld27f6aa2015-08-15 17:58:48 -07002239 u32 width
2240 u32 height
2241 u32 layers
2242}
2243
Jesse Hall3fbc8562015-11-29 22:10:52 -08002244class VkDrawIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002245 u32 vertexCount
2246 u32 instanceCount
2247 u32 firstVertex
2248 u32 firstInstance
2249}
2250
Jesse Hall3fbc8562015-11-29 22:10:52 -08002251class VkDrawIndexedIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002252 u32 indexCount
2253 u32 instanceCount
2254 u32 firstIndex
2255 s32 vertexOffset
2256 u32 firstInstance
2257}
2258
Jesse Hall3fbc8562015-11-29 22:10:52 -08002259class VkDispatchIndirectCommand {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002260 u32 x
2261 u32 y
2262 u32 z
2263}
2264
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002265@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08002266class VkSurfaceCapabilitiesKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002267 u32 minImageCount
2268 u32 maxImageCount
2269 VkExtent2D currentExtent
2270 VkExtent2D minImageExtent
2271 VkExtent2D maxImageExtent
2272 VkSurfaceTransformFlagsKHR supportedTransforms
2273 VkSurfaceTransformKHR currentTransform
Jesse Halla6429252015-11-29 18:59:42 -08002274 VkCompositeAlphaFlagsKHR supportedCompositeAlpha
Jesse Hall1356b0d2015-11-23 17:24:58 -08002275 u32 maxImageArraySize
2276 VkImageUsageFlags supportedUsageFlags
Michael Lentine88594d72015-11-12 12:49:45 -08002277}
2278
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002279@extension("VK_KHR_surface")
Michael Lentine88594d72015-11-12 12:49:45 -08002280class VkSurfaceFormatKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002281 VkFormat format
2282 VkColorSpaceKHR colorSpace
Michael Lentine88594d72015-11-12 12:49:45 -08002283}
2284
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002285@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08002286class VkSwapchainCreateInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002287 VkStructureType sType
2288 const void* pNext
2289 VkSurfaceKHR surface
2290 u32 minImageCount
2291 VkFormat imageFormat
2292 VkColorSpaceKHR imageColorSpace
2293 VkExtent2D imageExtent
2294 VkImageUsageFlags imageUsageFlags
2295 VkSurfaceTransformKHR preTransform
Jesse Halla6429252015-11-29 18:59:42 -08002296 VkCompositeAlphaFlagBitsKHR compositeAlpha
Jesse Hall1356b0d2015-11-23 17:24:58 -08002297 u32 imageArraySize
2298 VkSharingMode sharingMode
Jesse Hall03b6fe12015-11-24 12:44:21 -08002299 u32 queueFamilyIndexCount
Jesse Hall1356b0d2015-11-23 17:24:58 -08002300 const u32* pQueueFamilyIndices
2301 VkPresentModeKHR presentMode
2302 VkSwapchainKHR oldSwapchain
2303 VkBool32 clipped
Michael Lentine88594d72015-11-12 12:49:45 -08002304}
2305
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002306@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08002307class VkPresentInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002308 VkStructureType sType
2309 const void* pNext
Jesse Hallb00daad2015-11-29 19:46:20 -08002310 u32 waitSemaphoreCount
2311 const VkSemaphore* pWaitSemaphores
Jesse Hall1356b0d2015-11-23 17:24:58 -08002312 u32 swapchainCount
Jesse Hall03b6fe12015-11-24 12:44:21 -08002313 const VkSwapchainKHR* pSwapchains
Jesse Hall1356b0d2015-11-23 17:24:58 -08002314 const u32* imageIndices
Michael Lentine88594d72015-11-12 12:49:45 -08002315}
2316
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002317@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002318class VkDisplayPropertiesKHR {
2319 VkDisplayKHR display
2320 const char* displayName
2321 VkExtent2D physicalDimensions
2322 VkExtent2D physicalResolution
2323 VkSurfaceTransformFlagsKHR supportedTransforms
Jesse Hall1356b0d2015-11-23 17:24:58 -08002324 VkBool32 planeReorderPossible
Jesse Halla6429252015-11-29 18:59:42 -08002325 VkBool32 persistentContent
Michael Lentine88594d72015-11-12 12:49:45 -08002326}
2327
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002328@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002329class VkDisplayModeParametersKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002330 VkExtent2D visibleRegion
Jesse Halla6429252015-11-29 18:59:42 -08002331 u32 refreshRate
Michael Lentine88594d72015-11-12 12:49:45 -08002332}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002333
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002334@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002335class VkDisplayModePropertiesKHR {
2336 VkDisplayModeKHR displayMode
Jesse Halla6429252015-11-29 18:59:42 -08002337 VkDisplayModeParametersKHR parameters
Jesse Hall1356b0d2015-11-23 17:24:58 -08002338}
2339
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002340@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002341class VkDisplayModeCreateInfoKHR {
2342 VkStructureType sType
2343 const void* pNext
Jesse Halla6429252015-11-29 18:59:42 -08002344 VkDisplayModeParametersKHR parameters
Jesse Hall1356b0d2015-11-23 17:24:58 -08002345}
2346
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002347@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002348class VkDisplayPlanePropertiesKHR {
Jesse Halla6429252015-11-29 18:59:42 -08002349 VkDisplayKHR currentDisplay
2350 u32 currentStackIndex
2351}
2352
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002353@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002354class VkDisplayPlaneCapabilitiesKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002355 VkDisplayPlaneAlphaFlagsKHR supportedAlpha
2356 VkOffset2D minSrcPosition
2357 VkOffset2D maxSrcPosition
2358 VkExtent2D minSrcExtent
2359 VkExtent2D maxSrcExtent
2360 VkOffset2D minDstPosition
2361 VkOffset2D maxDstPosition
2362 VkExtent2D minDstExtent
2363 VkExtent2D maxDstExtent
2364}
2365
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002366@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08002367class VkDisplaySurfaceCreateInfoKHR {
Jesse Hall1356b0d2015-11-23 17:24:58 -08002368 VkStructureType sType
2369 const void* pNext
2370 VkDisplayModeKHR displayMode
2371 u32 planeIndex
2372 u32 planeStackIndex
2373 VkSurfaceTransformKHR transform
2374 f32 globalAlpha
2375 VkDisplayPlaneAlphaFlagsKHR alphaMode
2376 VkExtent2D imageSize
2377}
2378
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002379@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002380class VkDisplaySwapchainCreateInfoKHR {
2381 VkStructureType sType
2382 const void* pNext
2383 const VkSwapchainCreateInfoKHR* pNextSwapchainCreateInfo
2384}
2385
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08002386@extension("VK_KHR_display_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08002387class VkDisplayPresentInfoKHR {
2388 VkStructureType sType
2389 const void* pNext
2390 VkRect2D srcRect
2391 VkRect2D dstRect
Jesse Halla6429252015-11-29 18:59:42 -08002392 VkBool32 persistent
Jesse Hall1356b0d2015-11-23 17:24:58 -08002393}
2394
2395
Jesse Halld27f6aa2015-08-15 17:58:48 -07002396////////////////
2397// Commands //
2398////////////////
2399
2400// Function pointers. TODO: add support for function pointers.
2401
2402@external type void* PFN_vkVoidFunction
2403@pfn cmd void vkVoidFunction() {
2404}
2405
Jesse Hall3fbc8562015-11-29 22:10:52 -08002406@external type void* PFN_vkAllocationFunction
2407@pfn cmd void* vkAllocationFunction(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002408 void* pUserData,
2409 platform.size_t size,
2410 platform.size_t alignment,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002411 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002412 return ?
2413}
2414
Jesse Hall3fbc8562015-11-29 22:10:52 -08002415@external type void* PFN_vkReallocationFunction
2416@pfn cmd void* vkReallocationFunction(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002417 void* pUserData,
2418 void* pOriginal,
2419 platform.size_t size,
2420 platform.size_t alignment,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002421 VkSystemAllocationScope allocationScope) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002422 return ?
2423}
2424
2425@external type void* PFN_vkFreeFunction
2426@pfn cmd void vkFreeFunction(
2427 void* pUserData,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002428 void* pMemory) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002429}
2430
Jesse Hall3fbc8562015-11-29 22:10:52 -08002431@external type void* PFN_vkInternalAllocationNotification
2432@pfn cmd void vkInternalAllocationNotification(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002433 void* pUserData,
2434 platform.size_t size,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002435 VkInternalAllocationType allocationType,
2436 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002437}
2438
2439@external type void* PFN_vkInternalFreeNotification
2440@pfn cmd void vkInternalFreeNotification(
2441 void* pUserData,
2442 platform.size_t size,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002443 VkInternalAllocationType allocationType,
2444 VkSystemAllocationScope allocationScope) {
Jesse Hall03b6fe12015-11-24 12:44:21 -08002445}
Jesse Halld27f6aa2015-08-15 17:58:48 -07002446
2447// Global functions
2448
2449@threadSafety("system")
2450cmd VkResult vkCreateInstance(
2451 const VkInstanceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002452 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002453 VkInstance* pInstance) {
2454 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
2455
2456 instance := ?
2457 pInstance[0] = instance
2458 State.Instances[instance] = new!InstanceObject()
2459
Jesse Hall03b6fe12015-11-24 12:44:21 -08002460 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerNameCount]
2461 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionNameCount]
Jesse Halld27f6aa2015-08-15 17:58:48 -07002462
2463 return ?
2464}
2465
2466@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002467cmd void vkDestroyInstance(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002468 VkInstance instance,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002469 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002470 instanceObject := GetInstance(instance)
2471
2472 State.Instances[instance] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002473}
2474
2475@threadSafety("system")
2476cmd VkResult vkEnumeratePhysicalDevices(
2477 VkInstance instance,
2478 u32* pPhysicalDeviceCount,
2479 VkPhysicalDevice* pPhysicalDevices) {
2480 instanceObject := GetInstance(instance)
2481
2482 physicalDeviceCount := as!u32(?)
2483 pPhysicalDeviceCount[0] = physicalDeviceCount
2484 physicalDevices := pPhysicalDevices[0:physicalDeviceCount]
2485
2486 for i in (0 .. physicalDeviceCount) {
2487 physicalDevice := ?
2488 physicalDevices[i] = physicalDevice
2489 if !(physicalDevice in State.PhysicalDevices) {
2490 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance)
2491 }
2492 }
2493
2494 return ?
2495}
2496
2497cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
2498 VkDevice device,
2499 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002500 if device != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002501 device := GetDevice(device)
2502 }
2503
2504 return ?
2505}
2506
2507cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
2508 VkInstance instance,
2509 const char* pName) {
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002510 if instance != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002511 instanceObject := GetInstance(instance)
2512 }
2513
2514 return ?
2515}
2516
Jesse Hall606a54e2015-11-19 22:17:28 -08002517cmd void vkGetPhysicalDeviceProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002518 VkPhysicalDevice physicalDevice,
2519 VkPhysicalDeviceProperties* pProperties) {
2520 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2521
2522 properties := ?
2523 pProperties[0] = properties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002524}
2525
Jesse Hall606a54e2015-11-19 22:17:28 -08002526cmd void vkGetPhysicalDeviceQueueFamilyProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002527 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002528 u32* pQueueFamilyPropertyCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002529 VkQueueFamilyProperties* pQueueFamilyProperties) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002530 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002531 // TODO: Figure out how to express fetch-count-or-properties
2532 // This version fails 'apic validate' with 'fence not allowed in
2533 // *semantic.Branch'. Other attempts have failed with the same or other
2534 // errors.
2535 // if pQueueFamilyProperties != null {
2536 // queuesProperties := pQueueFamilyProperties[0:pCount[0]]
2537 // for i in (0 .. pCount[0]) {
2538 // queueProperties := as!VkQueueFamilyProperties(?)
2539 // queuesProperties[i] = queueProperties
2540 // }
2541 // } else {
2542 // count := ?
2543 // pCount[0] = count
2544 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002545}
2546
Jesse Hall606a54e2015-11-19 22:17:28 -08002547cmd void vkGetPhysicalDeviceMemoryProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002548 VkPhysicalDevice physicalDevice,
2549 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
2550 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2551
2552 memoryProperties := ?
2553 pMemoryProperties[0] = memoryProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002554}
2555
Jesse Hall606a54e2015-11-19 22:17:28 -08002556cmd void vkGetPhysicalDeviceFeatures(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002557 VkPhysicalDevice physicalDevice,
2558 VkPhysicalDeviceFeatures* pFeatures) {
2559 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2560
2561 features := ?
2562 pFeatures[0] = features
Jesse Halld27f6aa2015-08-15 17:58:48 -07002563}
2564
Jesse Hall606a54e2015-11-19 22:17:28 -08002565cmd void vkGetPhysicalDeviceFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002566 VkPhysicalDevice physicalDevice,
2567 VkFormat format,
2568 VkFormatProperties* pFormatProperties) {
2569 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2570
2571 formatProperties := ?
2572 pFormatProperties[0] = formatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002573}
2574
Jesse Hall606a54e2015-11-19 22:17:28 -08002575cmd void vkGetPhysicalDeviceImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002576 VkPhysicalDevice physicalDevice,
2577 VkFormat format,
2578 VkImageType type,
2579 VkImageTiling tiling,
2580 VkImageUsageFlags usage,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002581 VkImageCreateFlags flags,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002582 VkImageFormatProperties* pImageFormatProperties) {
2583 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2584
2585 imageFormatProperties := ?
2586 pImageFormatProperties[0] = imageFormatProperties
Jesse Halld27f6aa2015-08-15 17:58:48 -07002587}
2588
Jesse Halld27f6aa2015-08-15 17:58:48 -07002589
2590// Device functions
2591
2592@threadSafety("system")
2593cmd VkResult vkCreateDevice(
2594 VkPhysicalDevice physicalDevice,
2595 const VkDeviceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002596 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002597 VkDevice* pDevice) {
2598 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
2599 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2600
2601 device := ?
2602 pDevice[0] = device
2603 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice)
2604
2605 return ?
2606}
2607
2608@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002609cmd void vkDestroyDevice(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002610 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002611 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002612 deviceObject := GetDevice(device)
2613
2614 State.Devices[device] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002615}
2616
2617
2618// Extension discovery functions
2619
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002620cmd VkResult vkEnumerateInstanceLayerProperties(
Jesse Hall03b6fe12015-11-24 12:44:21 -08002621 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002622 VkLayerProperties* pProperties) {
2623 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002624 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002625
2626 properties := pProperties[0:count]
2627 for i in (0 .. count) {
2628 property := ?
2629 properties[i] = property
2630 }
2631
2632 return ?
2633}
2634
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002635cmd VkResult vkEnumerateInstanceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002636 const char* pLayerName,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002637 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002638 VkExtensionProperties* pProperties) {
2639 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002640 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002641
2642 properties := pProperties[0:count]
2643 for i in (0 .. count) {
2644 property := ?
2645 properties[i] = property
2646 }
2647
2648 return ?
2649}
2650
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002651cmd VkResult vkEnumerateDeviceLayerProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002652 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002653 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002654 VkLayerProperties* pProperties) {
2655 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2656 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002657 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002658
2659 properties := pProperties[0:count]
2660 for i in (0 .. count) {
2661 property := ?
2662 properties[i] = property
2663 }
2664
2665 return ?
2666}
2667
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002668cmd VkResult vkEnumerateDeviceExtensionProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002669 VkPhysicalDevice physicalDevice,
2670 const char* pLayerName,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002671 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002672 VkExtensionProperties* pProperties) {
2673 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
2674
2675 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08002676 pPropertyCount[0] = count
Jesse Halld27f6aa2015-08-15 17:58:48 -07002677
2678 properties := pProperties[0:count]
2679 for i in (0 .. count) {
2680 property := ?
2681 properties[i] = property
2682 }
2683
2684 return ?
2685}
2686
2687
2688// Queue functions
2689
2690@threadSafety("system")
Jesse Hall606a54e2015-11-19 22:17:28 -08002691cmd void vkGetDeviceQueue(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002692 VkDevice device,
2693 u32 queueFamilyIndex,
2694 u32 queueIndex,
2695 VkQueue* pQueue) {
2696 deviceObject := GetDevice(device)
2697
2698 queue := ?
2699 pQueue[0] = queue
2700
2701 if !(queue in State.Queues) {
2702 State.Queues[queue] = new!QueueObject(device: device)
2703 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002704}
2705
2706@threadSafety("app")
2707cmd VkResult vkQueueSubmit(
2708 VkQueue queue,
Jesse Halla366a512015-11-19 22:30:07 -08002709 u32 submitCount,
Jesse Hallb00daad2015-11-29 19:46:20 -08002710 const VkSubmitInfo* pSubmits,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002711 VkFence fence) {
2712 queueObject := GetQueue(queue)
2713
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002714 if fence != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002715 fenceObject := GetFence(fence)
2716 assert(fenceObject.device == queueObject.device)
2717 }
2718
Jesse Hall3fbc8562015-11-29 22:10:52 -08002719 // commandBuffers := pcommandBuffers[0:commandBufferCount]
2720 // for i in (0 .. commandBufferCount) {
2721 // commandBuffer := commandBuffers[i]
2722 // commandBufferObject := GetCommandBuffer(commandBuffer)
2723 // assert(commandBufferObject.device == queueObject.device)
Jesse Halla366a512015-11-19 22:30:07 -08002724 //
Jesse Hall3fbc8562015-11-29 22:10:52 -08002725 // validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
2726 // "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
Jesse Halla366a512015-11-19 22:30:07 -08002727 // }
Jesse Halld27f6aa2015-08-15 17:58:48 -07002728
2729 return ?
2730}
2731
2732@threadSafety("system")
2733cmd VkResult vkQueueWaitIdle(
2734 VkQueue queue) {
2735 queueObject := GetQueue(queue)
2736
2737 return ?
2738}
2739
2740@threadSafety("system")
2741cmd VkResult vkDeviceWaitIdle(
2742 VkDevice device) {
2743 deviceObject := GetDevice(device)
2744
2745 return ?
2746}
2747
2748
2749// Memory functions
2750
2751@threadSafety("system")
Jesse Hall3fbc8562015-11-29 22:10:52 -08002752cmd VkResult vkAllocateMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002753 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002754 const VkMemoryAllocateInfo* pAllocateInfo,
2755 const VkAllocationCallbacks* pAllocator,
2756 VkDeviceMemory* pMemory) {
2757 assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002758 deviceObject := GetDevice(device)
2759
Jesse Hall3fbc8562015-11-29 22:10:52 -08002760 memory := ?
2761 pMemory[0] = memory
2762 State.DeviceMemories[memory] = new!DeviceMemoryObject(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002763 device: device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002764 allocationSize: pAllocateInfo[0].allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002765
2766 return ?
2767}
2768
2769@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002770cmd void vkFreeMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002771 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002772 VkDeviceMemory memory,
2773 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002774 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002775 memoryObject := GetDeviceMemory(memory)
2776 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002777
2778 // Check that no objects are still bound before freeing.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002779 validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002780 "vkFreeMemory: objects still bound")
Jesse Hall3fbc8562015-11-29 22:10:52 -08002781 validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
2782 "vkFreeMemory: commandBuffers still bound")
2783 State.DeviceMemories[memory] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002784}
2785
2786@threadSafety("app")
2787cmd VkResult vkMapMemory(
2788 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002789 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002790 VkDeviceSize offset,
2791 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002792 VkMemoryMapFlags flags,
2793 void** ppData) {
2794 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002795 memoryObject := GetDeviceMemory(memory)
2796 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002797
2798 assert(flags == as!VkMemoryMapFlags(0))
Jesse Hall3fbc8562015-11-29 22:10:52 -08002799 assert((offset + size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002800
2801 return ?
2802}
2803
2804@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002805cmd void vkUnmapMemory(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002806 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002807 VkDeviceMemory memory) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002808 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08002809 memoryObject := GetDeviceMemory(memory)
2810 assert(memoryObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002811}
2812
2813cmd VkResult vkFlushMappedMemoryRanges(
2814 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002815 u32 memoryRangeCount
2816 const VkMappedMemoryRange* pMemoryRanges) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002817 deviceObject := GetDevice(device)
2818
Jesse Hall3fbc8562015-11-29 22:10:52 -08002819 memoryRanges := pMemoryRanges[0:memoryRangeCount]
2820 for i in (0 .. memoryRangeCount) {
2821 memoryRange := memoryRanges[i]
2822 memoryObject := GetDeviceMemory(memoryRange.memory)
2823 assert(memoryObject.device == device)
2824 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002825 }
2826
2827 return ?
2828}
2829
2830cmd VkResult vkInvalidateMappedMemoryRanges(
2831 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002832 u32 memoryRangeCount,
2833 const VkMappedMemoryRange* pMemoryRanges) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002834 deviceObject := GetDevice(device)
2835
Jesse Hall3fbc8562015-11-29 22:10:52 -08002836 memoryRanges := pMemoryRanges[0:memoryRangeCount]
2837 for i in (0 .. memoryRangeCount) {
2838 memoryRange := memoryRanges[i]
2839 memoryObject := GetDeviceMemory(memoryRange.memory)
2840 assert(memoryObject.device == device)
2841 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002842 }
2843
2844 return ?
2845}
2846
2847
2848// Memory management API functions
2849
Jesse Hall606a54e2015-11-19 22:17:28 -08002850cmd void vkGetDeviceMemoryCommitment(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002851 VkDevice device,
2852 VkDeviceMemory memory,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002853 VkDeviceSize* pCommittedMemoryInBytes) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002854 deviceObject := GetDevice(device)
2855
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002856 if memory != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002857 memoryObject := GetDeviceMemory(memory)
2858 assert(memoryObject.device == device)
2859 }
2860
2861 committedMemoryInBytes := ?
2862 pCommittedMemoryInBytes[0] = committedMemoryInBytes
Jesse Halld27f6aa2015-08-15 17:58:48 -07002863}
2864
Jesse Hall606a54e2015-11-19 22:17:28 -08002865cmd void vkGetBufferMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002866 VkDevice device,
2867 VkBuffer buffer,
2868 VkMemoryRequirements* pMemoryRequirements) {
2869 deviceObject := GetDevice(device)
2870 bufferObject := GetBuffer(buffer)
2871 assert(bufferObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002872}
2873
2874cmd VkResult vkBindBufferMemory(
2875 VkDevice device,
2876 VkBuffer buffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002877 VkDeviceMemory memory,
2878 VkDeviceSize memoryOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002879 deviceObject := GetDevice(device)
2880 bufferObject := GetBuffer(buffer)
2881 assert(bufferObject.device == device)
2882
2883 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002884 if bufferObject.memory != NULL_HANDLE {
2885 memoryObject := GetDeviceMemory(bufferObject.memory)
2886 memoryObject.boundObjects[as!u64(buffer)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002887 }
2888
2889 // Bind buffer to given memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002890 if memory != NULL_HANDLE {
2891 memoryObject := GetDeviceMemory(memory)
2892 assert(memoryObject.device == device)
2893 memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002894 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08002895 bufferObject.memory = memory
2896 bufferObject.memoryOffset = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002897
2898 return ?
2899}
2900
Jesse Hall606a54e2015-11-19 22:17:28 -08002901cmd void vkGetImageMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002902 VkDevice device,
2903 VkImage image,
2904 VkMemoryRequirements* pMemoryRequirements) {
2905 deviceObject := GetDevice(device)
2906 imageObject := GetImage(image)
2907 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002908}
2909
2910cmd VkResult vkBindImageMemory(
2911 VkDevice device,
2912 VkImage image,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002913 VkDeviceMemory memory,
2914 VkDeviceSize memoryOffset) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002915 deviceObject := GetDevice(device)
2916 imageObject := GetImage(image)
2917 assert(imageObject.device == device)
2918
2919 // Unbind image from previous memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002920 if imageObject.memory != NULL_HANDLE {
2921 memoryObject := GetDeviceMemory(imageObject.memory)
2922 memoryObject.boundObjects[as!u64(image)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002923 }
2924
2925 // Bind image to given memory object, if not VK_NULL_HANDLE.
Jesse Hall3fbc8562015-11-29 22:10:52 -08002926 if memory != NULL_HANDLE {
2927 memoryObject := GetDeviceMemory(memory)
2928 assert(memoryObject.device == device)
2929 memoryObject.boundObjects[as!u64(image)] = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002930 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08002931 imageObject.memory = memory
2932 imageObject.memoryOffset = memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07002933
2934 return ?
2935}
2936
Jesse Hall606a54e2015-11-19 22:17:28 -08002937cmd void vkGetImageSparseMemoryRequirements(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002938 VkDevice device,
2939 VkImage image,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002940 u32* pSparseMemoryRequirementCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002941 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
2942 deviceObject := GetDevice(device)
2943 imageObject := GetImage(image)
2944 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002945}
2946
Jesse Hall606a54e2015-11-19 22:17:28 -08002947cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002948 VkPhysicalDevice physicalDevice,
2949 VkFormat format,
2950 VkImageType type,
2951 u32 samples,
2952 VkImageUsageFlags usage,
2953 VkImageTiling tiling,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002954 u32* pPropertyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002955 VkSparseImageFormatProperties* pProperties) {
2956 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002957}
2958
Jesse Halla6429252015-11-29 18:59:42 -08002959cmd VkResult vkQueueBindSparse(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002960 VkQueue queue,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002961 u32 bindInfoCount,
Jesse Halla6429252015-11-29 18:59:42 -08002962 const VkBindSparseInfo* pBindInfo,
2963 VkFence fence) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002964 queueObject := GetQueue(queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07002965
2966 return ?
2967}
2968
2969
2970// Fence functions
2971
2972@threadSafety("system")
2973cmd VkResult vkCreateFence(
2974 VkDevice device,
2975 const VkFenceCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002976 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07002977 VkFence* pFence) {
2978 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2979 deviceObject := GetDevice(device)
2980
2981 fence := ?
2982 pFence[0] = fence
2983 State.Fences[fence] = new!FenceObject(
Jesse Halld8bade02015-11-24 10:24:18 -08002984 device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
Jesse Halld27f6aa2015-08-15 17:58:48 -07002985
2986 return ?
2987}
2988
2989@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07002990cmd void vkDestroyFence(
Jesse Halld27f6aa2015-08-15 17:58:48 -07002991 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08002992 VkFence fence,
Jesse Hall3fbc8562015-11-29 22:10:52 -08002993 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07002994 deviceObject := GetDevice(device)
2995 fenceObject := GetFence(fence)
2996 assert(fenceObject.device == device)
2997
2998 State.Fences[fence] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07002999}
3000
3001@threadSafety("system")
3002cmd VkResult vkResetFences(
3003 VkDevice device,
3004 u32 fenceCount,
3005 const VkFence* pFences) {
3006 deviceObject := GetDevice(device)
3007
3008 fences := pFences[0:fenceCount]
3009 for i in (0 .. fenceCount) {
3010 fence := fences[i]
3011 fenceObject := GetFence(fence)
3012 assert(fenceObject.device == device)
3013 fenceObject.signaled = false
3014 }
3015
3016 return ?
3017}
3018
3019@threadSafety("system")
3020cmd VkResult vkGetFenceStatus(
3021 VkDevice device,
3022 VkFence fence) {
3023 deviceObject := GetDevice(device)
3024 fenceObject := GetFence(fence)
3025 assert(fenceObject.device == device)
3026
3027 return ?
3028}
3029
3030@threadSafety("system")
3031cmd VkResult vkWaitForFences(
3032 VkDevice device,
3033 u32 fenceCount,
3034 const VkFence* pFences,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003035 VkBool32 waitAll,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003036 u64 timeout) { /// timeout in nanoseconds
3037 deviceObject := GetDevice(device)
3038
3039 fences := pFences[0:fenceCount]
3040 for i in (0 .. fenceCount) {
3041 fence := fences[i]
3042 fenceObject := GetFence(fence)
3043 assert(fenceObject.device == device)
3044 }
3045
3046 return ?
3047}
3048
3049
3050// Queue semaphore functions
3051
3052@threadSafety("system")
3053cmd VkResult vkCreateSemaphore(
3054 VkDevice device,
3055 const VkSemaphoreCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003056 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003057 VkSemaphore* pSemaphore) {
3058 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
3059 deviceObject := GetDevice(device)
3060
3061 semaphore := ?
3062 pSemaphore[0] = semaphore
3063 State.Semaphores[semaphore] = new!SemaphoreObject(device: device)
3064
3065 return ?
3066}
3067
3068@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003069cmd void vkDestroySemaphore(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003070 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003071 VkSemaphore semaphore,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003072 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003073 deviceObject := GetDevice(device)
3074 semaphoreObject := GetSemaphore(semaphore)
3075 assert(semaphoreObject.device == device)
3076
3077 State.Semaphores[semaphore] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003078}
3079
Jesse Halld27f6aa2015-08-15 17:58:48 -07003080
3081// Event functions
3082
3083@threadSafety("system")
3084cmd VkResult vkCreateEvent(
3085 VkDevice device,
3086 const VkEventCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003087 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003088 VkEvent* pEvent) {
3089 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
3090 deviceObject := GetDevice(device)
3091
3092 event := ?
3093 pEvent[0] = event
3094 State.Events[event] = new!EventObject(device: device)
3095
3096 return ?
3097}
3098
3099@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003100cmd void vkDestroyEvent(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003101 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003102 VkEvent event,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003103 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003104 deviceObject := GetDevice(device)
3105 eventObject := GetEvent(event)
3106 assert(eventObject.device == device)
3107
3108 State.Events[event] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003109}
3110
3111@threadSafety("system")
3112cmd VkResult vkGetEventStatus(
3113 VkDevice device,
3114 VkEvent event) {
3115 deviceObject := GetDevice(device)
3116 eventObject := GetEvent(event)
3117 assert(eventObject.device == device)
3118
3119 return ?
3120}
3121
3122@threadSafety("system")
3123cmd VkResult vkSetEvent(
3124 VkDevice device,
3125 VkEvent event) {
3126 deviceObject := GetDevice(device)
3127 eventObject := GetEvent(event)
3128 assert(eventObject.device == device)
3129
3130 return ?
3131}
3132
3133@threadSafety("system")
3134cmd VkResult vkResetEvent(
3135 VkDevice device,
3136 VkEvent event) {
3137 deviceObject := GetDevice(device)
3138 eventObject := GetEvent(event)
3139 assert(eventObject.device == device)
3140
3141 return ?
3142}
3143
3144
3145// Query functions
3146
3147@threadSafety("system")
3148cmd VkResult vkCreateQueryPool(
3149 VkDevice device,
3150 const VkQueryPoolCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003151 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003152 VkQueryPool* pQueryPool) {
3153 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
3154 deviceObject := GetDevice(device)
3155
3156 queryPool := ?
3157 pQueryPool[0] = queryPool
3158 State.QueryPools[queryPool] = new!QueryPoolObject(device: device)
3159
3160 return ?
3161}
3162
3163@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003164cmd void vkDestroyQueryPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003165 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003166 VkQueryPool queryPool,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003167 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003168 deviceObject := GetDevice(device)
3169 queryPoolObject := GetQueryPool(queryPool)
3170 assert(queryPoolObject.device == device)
3171
3172 State.QueryPools[queryPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003173}
3174
3175@threadSafety("system")
3176cmd VkResult vkGetQueryPoolResults(
3177 VkDevice device,
3178 VkQueryPool queryPool,
3179 u32 startQuery,
3180 u32 queryCount,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003181 platform.size_t dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003182 void* pData,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003183 VkDeviceSize stride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003184 VkQueryResultFlags flags) {
3185 deviceObject := GetDevice(device)
3186 queryPoolObject := GetQueryPool(queryPool)
3187 assert(queryPoolObject.device == device)
3188
Jesse Halld27f6aa2015-08-15 17:58:48 -07003189 data := pData[0:dataSize]
3190
3191 return ?
3192}
3193
3194// Buffer functions
3195
3196@threadSafety("system")
3197cmd VkResult vkCreateBuffer(
3198 VkDevice device,
3199 const VkBufferCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003200 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003201 VkBuffer* pBuffer) {
3202 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
3203 deviceObject := GetDevice(device)
3204
3205 buffer := ?
3206 pBuffer[0] = buffer
3207 State.Buffers[buffer] = new!BufferObject(device: device)
3208
3209 return ?
3210}
3211
3212@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003213cmd void vkDestroyBuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003214 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003215 VkBuffer buffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003216 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003217 deviceObject := GetDevice(device)
3218 bufferObject := GetBuffer(buffer)
3219 assert(bufferObject.device == device)
3220
Jesse Hall3fbc8562015-11-29 22:10:52 -08003221 assert(bufferObject.memory == 0)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003222 State.Buffers[buffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003223}
3224
3225
3226// Buffer view functions
3227
3228@threadSafety("system")
3229cmd VkResult vkCreateBufferView(
3230 VkDevice device,
3231 const VkBufferViewCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003232 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003233 VkBufferView* pView) {
3234 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
3235 deviceObject := GetDevice(device)
3236
3237 bufferObject := GetBuffer(pCreateInfo.buffer)
3238 assert(bufferObject.device == device)
3239
3240 view := ?
3241 pView[0] = view
3242 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer)
3243
3244 return ?
3245}
3246
3247@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003248cmd void vkDestroyBufferView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003249 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003250 VkBufferView bufferView,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003251 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003252 deviceObject := GetDevice(device)
3253 bufferViewObject := GetBufferView(bufferView)
3254 assert(bufferViewObject.device == device)
3255
3256 State.BufferViews[bufferView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003257}
3258
3259
3260// Image functions
3261
3262@threadSafety("system")
3263cmd VkResult vkCreateImage(
3264 VkDevice device,
3265 const VkImageCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003266 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003267 VkImage* pImage) {
3268 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
3269 deviceObject := GetDevice(device)
3270
3271 image := ?
3272 pImage[0] = image
3273 State.Images[image] = new!ImageObject(device: device)
3274
3275 return ?
3276}
3277
3278@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003279cmd void vkDestroyImage(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003280 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003281 VkImage image,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003282 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003283 deviceObject := GetDevice(device)
3284 imageObject := GetImage(image)
3285 assert(imageObject.device == device)
3286
Jesse Hall3fbc8562015-11-29 22:10:52 -08003287 assert(imageObject.memory == 0)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003288 State.Images[image] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003289}
3290
Jesse Hall606a54e2015-11-19 22:17:28 -08003291cmd void vkGetImageSubresourceLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003292 VkDevice device,
3293 VkImage image,
3294 const VkImageSubresource* pSubresource,
3295 VkSubresourceLayout* pLayout) {
3296 deviceObject := GetDevice(device)
3297 imageObject := GetImage(image)
3298 assert(imageObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003299}
3300
3301
3302// Image view functions
3303
3304@threadSafety("system")
3305cmd VkResult vkCreateImageView(
3306 VkDevice device,
3307 const VkImageViewCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003308 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003309 VkImageView* pView) {
3310 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3311 deviceObject := GetDevice(device)
3312
3313 imageObject := GetImage(pCreateInfo.image)
3314 assert(imageObject.device == device)
3315
3316 view := ?
3317 pView[0] = view
3318 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image)
3319
3320 return ?
3321}
3322
3323@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003324cmd void vkDestroyImageView(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003325 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003326 VkImageView imageView,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003327 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003328 deviceObject := GetDevice(device)
3329 imageViewObject := GetImageView(imageView)
3330 assert(imageViewObject.device == device)
3331
3332 State.ImageViews[imageView] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003333}
3334
3335
3336// Shader functions
3337
3338cmd VkResult vkCreateShaderModule(
3339 VkDevice device,
3340 const VkShaderModuleCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003341 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003342 VkShaderModule* pShaderModule) {
3343 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
3344 deviceObject := GetDevice(device)
3345
3346 shaderModule := ?
3347 pShaderModule[0] = shaderModule
3348 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device)
3349
3350 return ?
3351}
3352
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003353cmd void vkDestroyShaderModule(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003354 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003355 VkShaderModule shaderModule,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003356 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003357 deviceObject := GetDevice(device)
3358 shaderModuleObject := GetShaderModule(shaderModule)
3359 assert(shaderModuleObject.device == device)
3360
3361 State.ShaderModules[shaderModule] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003362}
3363
Jesse Halld27f6aa2015-08-15 17:58:48 -07003364
3365// Pipeline functions
3366
3367cmd VkResult vkCreatePipelineCache(
3368 VkDevice device,
3369 const VkPipelineCacheCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003370 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003371 VkPipelineCache* pPipelineCache) {
3372 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3373 deviceObject := GetDevice(device)
3374
3375 pipelineCache := ?
3376 pPipelineCache[0] = pipelineCache
3377 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device)
3378
3379 return ?
3380}
3381
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003382cmd void vkDestroyPipelineCache(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003383 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003384 VkPipelineCache pipelineCache,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003385 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003386 deviceObject := GetDevice(device)
3387 pipelineCacheObject := GetPipelineCache(pipelineCache)
3388 assert(pipelineCacheObject.device == device)
3389
3390 State.PipelineCaches[pipelineCache] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003391}
3392
Jesse Halld27f6aa2015-08-15 17:58:48 -07003393cmd VkResult vkGetPipelineCacheData(
3394 VkDevice device,
3395 VkPipelineCache pipelineCache,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003396 platform.size_t* pDataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003397 void* pData) {
3398 deviceObject := GetDevice(device)
3399 pipelineCacheObject := GetPipelineCache(pipelineCache)
3400 assert(pipelineCacheObject.device == device)
3401
3402 return ?
3403}
3404
3405cmd VkResult vkMergePipelineCaches(
3406 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003407 VkPipelineCache dstCache,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003408 u32 srcCacheCount,
3409 const VkPipelineCache* pSrcCaches) {
3410 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003411 dstCacheObject := GetPipelineCache(dstCache)
3412 assert(dstCacheObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003413
3414 srcCaches := pSrcCaches[0:srcCacheCount]
3415 for i in (0 .. srcCacheCount) {
3416 srcCache := srcCaches[i]
3417 srcCacheObject := GetPipelineCache(srcCache)
3418 assert(srcCacheObject.device == device)
3419 }
3420
3421 return ?
3422}
3423
3424cmd VkResult vkCreateGraphicsPipelines(
3425 VkDevice device,
3426 VkPipelineCache pipelineCache,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003427 u32 createInfoCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003428 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003429 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003430 VkPipeline* pPipelines) {
3431 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003432 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003433 pipelineCacheObject := GetPipelineCache(pipelineCache)
3434 assert(pipelineCacheObject.device == device)
3435 }
3436
Jesse Hall03b6fe12015-11-24 12:44:21 -08003437 createInfos := pCreateInfos[0:createInfoCount]
3438 pipelines := pPipelines[0:createInfoCount]
3439 for i in (0 .. createInfoCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003440 pipeline := ?
3441 pipelines[i] = pipeline
3442 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3443 }
3444
3445 return ?
3446}
3447
3448cmd VkResult vkCreateComputePipelines(
3449 VkDevice device,
3450 VkPipelineCache pipelineCache,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003451 u32 createInfoCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003452 const VkComputePipelineCreateInfo* pCreateInfos,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003453 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003454 VkPipeline* pPipelines) {
3455 deviceObject := GetDevice(device)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003456 if pipelineCache != NULL_HANDLE {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003457 pipelineCacheObject := GetPipelineCache(pipelineCache)
3458 assert(pipelineCacheObject.device == device)
3459 }
3460
Jesse Hall03b6fe12015-11-24 12:44:21 -08003461 createInfos := pCreateInfos[0:createInfoCount]
3462 pipelines := pPipelines[0:createInfoCount]
3463 for i in (0 .. createInfoCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003464 pipeline := ?
3465 pipelines[i] = pipeline
3466 State.Pipelines[pipeline] = new!PipelineObject(device: device)
3467 }
3468
3469 return ?
3470}
3471
3472@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003473cmd void vkDestroyPipeline(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003474 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003475 VkPipeline pipeline,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003476 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003477 deviceObject := GetDevice(device)
3478 pipelineObjects := GetPipeline(pipeline)
3479 assert(pipelineObjects.device == device)
3480
3481 State.Pipelines[pipeline] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003482}
3483
3484
3485// Pipeline layout functions
3486
3487@threadSafety("system")
3488cmd VkResult vkCreatePipelineLayout(
3489 VkDevice device,
3490 const VkPipelineLayoutCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003491 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003492 VkPipelineLayout* pPipelineLayout) {
3493 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
3494 deviceObject := GetDevice(device)
3495
3496 pipelineLayout := ?
3497 pPipelineLayout[0] = pipelineLayout
3498 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device)
3499
3500 return ?
3501}
3502
3503@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003504cmd void vkDestroyPipelineLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003505 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003506 VkPipelineLayout pipelineLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003507 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003508 deviceObject := GetDevice(device)
3509 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
3510 assert(pipelineLayoutObjects.device == device)
3511
3512 State.PipelineLayouts[pipelineLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003513}
3514
3515
3516// Sampler functions
3517
3518@threadSafety("system")
3519cmd VkResult vkCreateSampler(
3520 VkDevice device,
3521 const VkSamplerCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003522 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003523 VkSampler* pSampler) {
3524 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
3525 deviceObject := GetDevice(device)
3526
3527 sampler := ?
3528 pSampler[0] = sampler
3529 State.Samplers[sampler] = new!SamplerObject(device: device)
3530
3531 return ?
3532}
3533
3534@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003535cmd void vkDestroySampler(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003536 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003537 VkSampler sampler,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003538 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003539 deviceObject := GetDevice(device)
3540 samplerObject := GetSampler(sampler)
3541 assert(samplerObject.device == device)
3542
3543 State.Samplers[sampler] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003544}
3545
3546
3547// Descriptor set functions
3548
3549@threadSafety("system")
3550cmd VkResult vkCreateDescriptorSetLayout(
3551 VkDevice device,
3552 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003553 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003554 VkDescriptorSetLayout* pSetLayout) {
3555 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
3556 deviceObject := GetDevice(device)
3557
3558 setLayout := ?
3559 pSetLayout[0] = setLayout
3560 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device)
3561
3562 return ?
3563}
3564
3565@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003566cmd void vkDestroyDescriptorSetLayout(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003567 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003568 VkDescriptorSetLayout descriptorSetLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003569 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003570 deviceObject := GetDevice(device)
3571 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
3572 assert(descriptorSetLayoutObject.device == device)
3573
3574 State.DescriptorSetLayouts[descriptorSetLayout] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003575}
3576
3577@threadSafety("system")
3578cmd VkResult vkCreateDescriptorPool(
3579 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003580 const VkDescriptorPoolCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003581 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003582 VkDescriptorPool* pDescriptorPool) {
3583 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
3584 deviceObject := GetDevice(device)
3585
3586 descriptorPool := ?
3587 pDescriptorPool[0] = descriptorPool
3588 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device)
3589
3590 return ?
3591}
3592
3593@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003594cmd void vkDestroyDescriptorPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003595 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003596 VkDescriptorPool descriptorPool,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003597 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003598 deviceObject := GetDevice(device)
3599 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3600 assert(descriptorPoolObject.device == device)
3601
3602 State.DescriptorPools[descriptorPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003603}
3604
3605@threadSafety("app")
3606cmd VkResult vkResetDescriptorPool(
3607 VkDevice device,
Jesse Hallfbf97b02015-11-20 14:17:03 -08003608 VkDescriptorPool descriptorPool,
3609 VkDescriptorPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003610 deviceObject := GetDevice(device)
3611 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3612 assert(descriptorPoolObject.device == device)
3613
3614 return ?
3615}
3616
3617@threadSafety("app")
Jesse Hall3fbc8562015-11-29 22:10:52 -08003618cmd VkResult vkAllocateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003619 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003620 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003621 VkDescriptorSet* pDescriptorSets) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003622 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003623 allocInfo := pAllocateInfo[0]
Jesse Hallfbf97b02015-11-20 14:17:03 -08003624 descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003625
Jesse Hall03b6fe12015-11-24 12:44:21 -08003626 setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
3627 for i in (0 .. allocInfo.setCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003628 setLayout := setLayouts[i]
3629 setLayoutObject := GetDescriptorSetLayout(setLayout)
3630 assert(setLayoutObject.device == device)
3631 }
3632
Jesse Hall03b6fe12015-11-24 12:44:21 -08003633 descriptorSets := pDescriptorSets[0:allocInfo.setCount]
3634 for i in (0 .. allocInfo.setCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003635 descriptorSet := ?
3636 descriptorSets[i] = descriptorSet
3637 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
3638 }
3639
3640 return ?
3641}
3642
Jesse Hallf09c6b12015-08-15 19:54:28 -07003643cmd VkResult vkFreeDescriptorSets(
3644 VkDevice device,
3645 VkDescriptorPool descriptorPool,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003646 u32 descriptorSetCount,
Jesse Hallf09c6b12015-08-15 19:54:28 -07003647 const VkDescriptorSet* pDescriptorSets) {
3648 deviceObject := GetDevice(device)
3649 descriptorPoolObject := GetDescriptorPool(descriptorPool)
3650
Jesse Hall03b6fe12015-11-24 12:44:21 -08003651 descriptorSets := pDescriptorSets[0:descriptorSetCount]
3652 for i in (0 .. descriptorSetCount) {
Jesse Hallf09c6b12015-08-15 19:54:28 -07003653 descriptorSet := descriptorSets[i]
3654 descriptorSetObject := GetDescriptorSet(descriptorSet)
3655 assert(descriptorSetObject.device == device)
3656 State.DescriptorSets[descriptorSet] = null
3657 }
3658
3659 return ?
3660}
3661
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003662cmd void vkUpdateDescriptorSets(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003663 VkDevice device,
Jesse Hallb00daad2015-11-29 19:46:20 -08003664 u32 descriptorWriteCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003665 const VkWriteDescriptorSet* pDescriptorWrites,
Jesse Hallb00daad2015-11-29 19:46:20 -08003666 u32 descriptorCopyCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003667 const VkCopyDescriptorSet* pDescriptorCopies) {
3668 deviceObject := GetDevice(device)
3669
Jesse Hallb00daad2015-11-29 19:46:20 -08003670 descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
3671 for i in (0 .. descriptorWriteCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003672 descriptorWrite := descriptorWrites[i]
Jesse Hall3fbc8562015-11-29 22:10:52 -08003673 descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003674 assert(descriptorWriteObject.device == device)
3675 }
3676
Jesse Hallb00daad2015-11-29 19:46:20 -08003677 descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
3678 for i in (0 .. descriptorCopyCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003679 descriptorCopy := descriptorCopies[i]
Jesse Hall3fbc8562015-11-29 22:10:52 -08003680 descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003681 assert(descriptorCopyObject.device == device)
3682 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003683}
3684
3685
3686// Framebuffer functions
3687
3688@threadSafety("system")
3689cmd VkResult vkCreateFramebuffer(
3690 VkDevice device,
3691 const VkFramebufferCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003692 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003693 VkFramebuffer* pFramebuffer) {
3694 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
3695 deviceObject := GetDevice(device)
3696
3697 framebuffer := ?
3698 pFramebuffer[0] = framebuffer
3699 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device)
3700
3701 return ?
3702}
3703
3704@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003705cmd void vkDestroyFramebuffer(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003706 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003707 VkFramebuffer framebuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003708 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003709 deviceObject := GetDevice(device)
3710 framebufferObject := GetFramebuffer(framebuffer)
3711 assert(framebufferObject.device == device)
3712
3713 State.Framebuffers[framebuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003714}
3715
3716
3717// Renderpass functions
3718
3719@threadSafety("system")
3720cmd VkResult vkCreateRenderPass(
3721 VkDevice device,
3722 const VkRenderPassCreateInfo* pCreateInfo,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003723 const VkAllocationCallbacks* pAllocator,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003724 VkRenderPass* pRenderPass) {
3725 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
3726 deviceObject := GetDevice(device)
3727
3728 renderpass := ?
3729 pRenderPass[0] = renderpass
3730 State.RenderPasses[renderpass] = new!RenderPassObject(device: device)
3731
3732 return ?
3733}
3734
3735@threadSafety("system")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003736cmd void vkDestroyRenderPass(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003737 VkDevice device,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003738 VkRenderPass renderPass,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003739 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003740 deviceObject := GetDevice(device)
3741 renderPassObject := GetRenderPass(renderPass)
3742 assert(renderPassObject.device == device)
3743
3744 State.RenderPasses[renderPass] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003745}
3746
Jesse Hall606a54e2015-11-19 22:17:28 -08003747cmd void vkGetRenderAreaGranularity(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003748 VkDevice device,
3749 VkRenderPass renderPass,
3750 VkExtent2D* pGranularity) {
3751 deviceObject := GetDevice(device)
3752 renderPassObject := GetRenderPass(renderPass)
3753
3754 granularity := ?
3755 pGranularity[0] = granularity
Jesse Halld27f6aa2015-08-15 17:58:48 -07003756}
3757
3758// Command pool functions
3759
3760cmd VkResult vkCreateCommandPool(
3761 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003762 const VkCommandPoolCreateInfo* pCreateInfo,
3763 const VkAllocationCallbacks* pAllocator,
3764 VkCommandPool* pCommandPool) {
3765 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003766 deviceObject := GetDevice(device)
3767
Jesse Hall3fbc8562015-11-29 22:10:52 -08003768 commandPool := ?
3769 pCommandPool[0] = commandPool
3770 State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003771
3772 return ?
3773}
3774
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003775cmd void vkDestroyCommandPool(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003776 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003777 VkCommandPool commandPool,
3778 const VkAllocationCallbacks* pAllocator) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003779 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003780 commandPoolObject := GetCommandPool(commandPool)
3781 assert(commandPoolObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003782
Jesse Hall3fbc8562015-11-29 22:10:52 -08003783 State.CommandPools[commandPool] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003784}
3785
3786cmd VkResult vkResetCommandPool(
3787 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003788 VkCommandPool commandPool,
3789 VkCommandPoolResetFlags flags) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003790 deviceObject := GetDevice(device)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003791 commandPoolObject := GetCommandPool(commandPool)
3792 assert(commandPoolObject.device == device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003793
3794 return ?
3795}
3796
3797// Command buffer functions
3798
Jesse Hall3fbc8562015-11-29 22:10:52 -08003799macro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
3800 memoryObject := GetDeviceMemory(memory)
3801 memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
Jesse Halld27f6aa2015-08-15 17:58:48 -07003802
Jesse Hall3fbc8562015-11-29 22:10:52 -08003803 commandBufferObject := GetCommandBuffer(commandBuffer)
3804 commandBufferObject.boundObjects[as!u64(obj)] = memory
Jesse Halld27f6aa2015-08-15 17:58:48 -07003805}
3806
Jesse Hall3fbc8562015-11-29 22:10:52 -08003807macro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
3808 memoryObject := GetDeviceMemory(memory)
3809 memoryObject.boundCommandBuffers[commandBuffer] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003810
Jesse Hall3fbc8562015-11-29 22:10:52 -08003811 commandBufferObject := GetCommandBuffer(commandBuffer)
3812 commandBufferObject.boundObjects[as!u64(obj)] = null
Jesse Halld27f6aa2015-08-15 17:58:48 -07003813}
3814
3815@threadSafety("system")
Jesse Hall3fbc8562015-11-29 22:10:52 -08003816cmd VkResult vkAllocateCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003817 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003818 const VkCommandBufferAllocateInfo* pAllocateInfo,
3819 VkCommandBuffer* pCommandBuffers) {
3820 assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003821
Jesse Hall3fbc8562015-11-29 22:10:52 -08003822 count := pAllocateInfo[0].bufferCount
3823 commandBuffers := pCommandBuffers[0:count]
Jesse Hallfbf97b02015-11-20 14:17:03 -08003824 for i in (0 .. count) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003825 commandBuffer := ?
3826 commandBuffers[i] = commandBuffer
3827 State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003828 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003829
3830 return ?
3831}
3832
3833@threadSafety("system")
Jesse Hallfbf97b02015-11-20 14:17:03 -08003834cmd void vkFreeCommandBuffers(
Jesse Halld27f6aa2015-08-15 17:58:48 -07003835 VkDevice device,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003836 VkCommandPool commandPool,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003837 u32 commandBufferCount,
Jesse Hall3fbc8562015-11-29 22:10:52 -08003838 const VkCommandBuffer* pCommandBuffers) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003839 deviceObject := GetDevice(device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003840
Jesse Hall3fbc8562015-11-29 22:10:52 -08003841 commandBuffers := pCommandBuffers[0:commandBufferCount]
Jesse Hall03b6fe12015-11-24 12:44:21 -08003842 for i in (0 .. commandBufferCount) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003843 commandBufferObject := GetCommandBuffer(commandBuffers[i])
3844 assert(commandBufferObject.device == device)
Jesse Hallfbf97b02015-11-20 14:17:03 -08003845 // TODO: iterate over boundObjects and clear memory bindings
Jesse Hall3fbc8562015-11-29 22:10:52 -08003846 State.CommandBuffers[commandBuffers[i]] = null
Jesse Hallfbf97b02015-11-20 14:17:03 -08003847 }
Jesse Halld27f6aa2015-08-15 17:58:48 -07003848}
3849
3850@threadSafety("app")
3851cmd VkResult vkBeginCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003852 VkCommandBuffer commandBuffer,
3853 const VkCommandBufferBeginInfo* pBeginInfo) {
3854 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
3855 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003856
3857 // TODO: iterate over boundObjects and clear memory bindings
3858
3859 return ?
3860}
3861
3862@threadSafety("app")
3863cmd VkResult vkEndCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003864 VkCommandBuffer commandBuffer) {
3865 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003866
3867 return ?
3868}
3869
3870@threadSafety("app")
3871cmd VkResult vkResetCommandBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003872 VkCommandBuffer commandBuffer,
3873 VkCommandBufferResetFlags flags) {
3874 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003875
3876 // TODO: iterate over boundObjects and clear memory bindings
3877
3878 return ?
3879}
3880
3881
3882// Command buffer building functions
3883
3884@threadSafety("app")
3885cmd void vkCmdBindPipeline(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003886 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003887 VkPipelineBindPoint pipelineBindPoint,
3888 VkPipeline pipeline) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003889 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003890 pipelineObject := GetPipeline(pipeline)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003891 assert(commandBufferObject.device == pipelineObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003892
Jesse Halld8bade02015-11-24 10:24:18 -08003893 queue := switch (pipelineBindPoint) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003894 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
3895 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
3896 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08003897 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003898}
3899
3900@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003901cmd void vkCmdSetViewport(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003902 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003903 u32 viewportCount,
3904 const VkViewport* pViewports) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003905 commandBufferObject := GetCommandBuffer(commandBuffer)
3906 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003907}
3908
3909@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003910cmd void vkCmdSetScissor(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003911 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003912 u32 scissorCount,
3913 const VkRect2D* pScissors) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003914 commandBufferObject := GetCommandBuffer(commandBuffer)
3915 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003916}
3917
3918@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003919cmd void vkCmdSetLineWidth(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003920 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003921 f32 lineWidth) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003922 commandBufferObject := GetCommandBuffer(commandBuffer)
3923 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003924}
3925
3926@threadSafety("app")
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003927cmd void vkCmdSetDepthBias(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003928 VkCommandBuffer commandBuffer,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003929 f32 depthBiasConstantFactor,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003930 f32 depthBiasClamp,
Jesse Halla9bb62b2015-11-21 19:31:56 -08003931 f32 depthBiasSlopeFactor) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003932 commandBufferObject := GetCommandBuffer(commandBuffer)
3933 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003934}
Jesse Halld27f6aa2015-08-15 17:58:48 -07003935
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003936@threadSafety("app")
3937cmd void vkCmdSetBlendConstants(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003938 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003939 // TODO(jessehall): apic only supports 'const' on pointer types. Using
3940 // an annotation as a quick hack to pass this to the template without
3941 // having to modify the AST and semantic model.
Jesse Hallb00daad2015-11-29 19:46:20 -08003942 @readonly f32[4] blendConstants) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003943 commandBufferObject := GetCommandBuffer(commandBuffer)
3944 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003945}
3946
3947@threadSafety("app")
3948cmd void vkCmdSetDepthBounds(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003949 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003950 f32 minDepthBounds,
3951 f32 maxDepthBounds) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003952 commandBufferObject := GetCommandBuffer(commandBuffer)
3953 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003954}
3955
3956@threadSafety("app")
3957cmd void vkCmdSetStencilCompareMask(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003958 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003959 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003960 u32 compareMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003961 commandBufferObject := GetCommandBuffer(commandBuffer)
3962 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003963}
3964
3965@threadSafety("app")
3966cmd void vkCmdSetStencilWriteMask(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003967 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003968 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003969 u32 writeMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003970 commandBufferObject := GetCommandBuffer(commandBuffer)
3971 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003972}
3973
3974@threadSafety("app")
3975cmd void vkCmdSetStencilReference(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003976 VkCommandBuffer commandBuffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07003977 VkStencilFaceFlags faceMask,
Jesse Hall65ab5522015-11-30 00:07:16 -08003978 u32 reference) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003979 commandBufferObject := GetCommandBuffer(commandBuffer)
3980 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003981}
3982
3983@threadSafety("app")
3984cmd void vkCmdBindDescriptorSets(
Jesse Hall3fbc8562015-11-29 22:10:52 -08003985 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003986 VkPipelineBindPoint pipelineBindPoint,
3987 VkPipelineLayout layout,
3988 u32 firstSet,
Jesse Hall03b6fe12015-11-24 12:44:21 -08003989 u32 descriptorSetCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07003990 const VkDescriptorSet* pDescriptorSets,
3991 u32 dynamicOffsetCount,
3992 const u32* pDynamicOffsets) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08003993 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07003994
Jesse Hall03b6fe12015-11-24 12:44:21 -08003995 descriptorSets := pDescriptorSets[0:descriptorSetCount]
3996 for i in (0 .. descriptorSetCount) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07003997 descriptorSet := descriptorSets[i]
3998 descriptorSetObject := GetDescriptorSet(descriptorSet)
Jesse Hall3fbc8562015-11-29 22:10:52 -08003999 assert(commandBufferObject.device == descriptorSetObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004000 }
4001
4002 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
4003 for i in (0 .. dynamicOffsetCount) {
4004 dynamicOffset := dynamicOffsets[i]
4005 }
4006
Jesse Halld8bade02015-11-24 10:24:18 -08004007 queue := switch (pipelineBindPoint) {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004008 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT
4009 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
4010 }
Jesse Hall3fbc8562015-11-29 22:10:52 -08004011 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004012}
4013
4014@threadSafety("app")
4015cmd void vkCmdBindIndexBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004016 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004017 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004018 VkDeviceSize offset,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004019 VkIndexType indexType) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004020 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004021 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004022 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004023
Jesse Hall3fbc8562015-11-29 22:10:52 -08004024 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004025
Jesse Hall3fbc8562015-11-29 22:10:52 -08004026 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004027}
4028
4029@threadSafety("app")
4030cmd void vkCmdBindVertexBuffers(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004031 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004032 u32 startBinding,
4033 u32 bindingCount,
4034 const VkBuffer* pBuffers,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004035 const VkDeviceSize* pOffsets) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004036 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004037
4038 // TODO: check if not [startBinding:startBinding+bindingCount]
4039 buffers := pBuffers[0:bindingCount]
4040 offsets := pOffsets[0:bindingCount]
4041 for i in (0 .. bindingCount) {
4042 buffer := buffers[i]
4043 offset := offsets[i]
4044 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004045 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004046
Jesse Hall3fbc8562015-11-29 22:10:52 -08004047 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004048 }
4049
Jesse Hall3fbc8562015-11-29 22:10:52 -08004050 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004051}
4052
4053@threadSafety("app")
4054cmd void vkCmdDraw(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004055 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004056 u32 vertexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004057 u32 instanceCount,
4058 u32 firstVertex,
4059 u32 firstInstance) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004060 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004061
Jesse Hall3fbc8562015-11-29 22:10:52 -08004062 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004063}
4064
4065@threadSafety("app")
4066cmd void vkCmdDrawIndexed(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004067 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004068 u32 indexCount,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004069 u32 instanceCount,
4070 u32 firstIndex,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004071 s32 vertexOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004072 u32 firstInstance) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004073 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004074
Jesse Hall3fbc8562015-11-29 22:10:52 -08004075 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004076}
4077
4078@threadSafety("app")
4079cmd void vkCmdDrawIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004080 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004081 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004082 VkDeviceSize offset,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004083 u32 drawCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004084 u32 stride) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004085 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004086 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004087 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004088
Jesse Hall3fbc8562015-11-29 22:10:52 -08004089 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004090
Jesse Hall3fbc8562015-11-29 22:10:52 -08004091 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004092}
4093
4094@threadSafety("app")
4095cmd void vkCmdDrawIndexedIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004096 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004097 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004098 VkDeviceSize offset,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004099 u32 drawCount,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004100 u32 stride) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004101 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004102 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004103 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004104
Jesse Hall3fbc8562015-11-29 22:10:52 -08004105 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004106
Jesse Hall3fbc8562015-11-29 22:10:52 -08004107 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004108}
4109
4110@threadSafety("app")
4111cmd void vkCmdDispatch(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004112 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004113 u32 x,
4114 u32 y,
4115 u32 z) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004116 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004117
Jesse Hall3fbc8562015-11-29 22:10:52 -08004118 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004119}
4120
4121@threadSafety("app")
4122cmd void vkCmdDispatchIndirect(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004123 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004124 VkBuffer buffer,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004125 VkDeviceSize offset) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004126 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004127 bufferObject := GetBuffer(buffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004128 assert(commandBufferObject.device == bufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004129
Jesse Hall3fbc8562015-11-29 22:10:52 -08004130 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004131
Jesse Hall3fbc8562015-11-29 22:10:52 -08004132 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004133}
4134
4135@threadSafety("app")
4136cmd void vkCmdCopyBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004137 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004138 VkBuffer srcBuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004139 VkBuffer dstBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004140 u32 regionCount,
4141 const VkBufferCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004142 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004143 srcBufferObject := GetBuffer(srcBuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004144 dstBufferObject := GetBuffer(dstBuffer)
4145 assert(commandBufferObject.device == srcBufferObject.device)
4146 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004147
4148 regions := pRegions[0:regionCount]
4149 for i in (0 .. regionCount) {
4150 region := regions[i]
4151 }
4152
Jesse Hall3fbc8562015-11-29 22:10:52 -08004153 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
4154 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004155
Jesse Hall65ab5522015-11-30 00:07:16 -08004156 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004157}
4158
4159@threadSafety("app")
4160cmd void vkCmdCopyImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004161 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004162 VkImage srcImage,
4163 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004164 VkImage dstImage,
4165 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004166 u32 regionCount,
4167 const VkImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004168 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004169 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004170 dstImageObject := GetImage(dstImage)
4171 assert(commandBufferObject.device == srcImageObject.device)
4172 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004173
4174 regions := pRegions[0:regionCount]
4175 for i in (0 .. regionCount) {
4176 region := regions[i]
4177 }
4178
Jesse Hall3fbc8562015-11-29 22:10:52 -08004179 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4180 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004181
Jesse Hall65ab5522015-11-30 00:07:16 -08004182 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004183}
4184
4185@threadSafety("app")
4186cmd void vkCmdBlitImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004187 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004188 VkImage srcImage,
4189 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004190 VkImage dstImage,
4191 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004192 u32 regionCount,
4193 const VkImageBlit* pRegions,
Jesse Hall23ff73f2015-11-29 14:36:39 -08004194 VkFilter filter) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004195 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004196 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004197 dstImageObject := GetImage(dstImage)
4198 assert(commandBufferObject.device == srcImageObject.device)
4199 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004200
4201 regions := pRegions[0:regionCount]
4202 for i in (0 .. regionCount) {
4203 region := regions[i]
4204 }
4205
Jesse Hall3fbc8562015-11-29 22:10:52 -08004206 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4207 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004208
Jesse Hall3fbc8562015-11-29 22:10:52 -08004209 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004210}
4211
4212@threadSafety("app")
4213cmd void vkCmdCopyBufferToImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004214 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004215 VkBuffer srcBuffer,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004216 VkImage dstImage,
4217 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004218 u32 regionCount,
4219 const VkBufferImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004220 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004221 srcBufferObject := GetBuffer(srcBuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004222 dstImageObject := GetImage(dstImage)
4223 assert(commandBufferObject.device == srcBufferObject.device)
4224 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004225
4226 regions := pRegions[0:regionCount]
4227 for i in (0 .. regionCount) {
4228 region := regions[i]
4229 }
4230
Jesse Hall3fbc8562015-11-29 22:10:52 -08004231 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
4232 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004233
Jesse Hall65ab5522015-11-30 00:07:16 -08004234 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004235}
4236
4237@threadSafety("app")
4238cmd void vkCmdCopyImageToBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004239 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004240 VkImage srcImage,
4241 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004242 VkBuffer dstBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004243 u32 regionCount,
4244 const VkBufferImageCopy* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004245 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004246 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004247 dstBufferObject := GetBuffer(dstBuffer)
4248 assert(commandBufferObject.device == srcImageObject.device)
4249 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004250
4251 regions := pRegions[0:regionCount]
4252 for i in (0 .. regionCount) {
4253 region := regions[i]
4254 }
4255
Jesse Hall3fbc8562015-11-29 22:10:52 -08004256 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4257 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004258
Jesse Hall65ab5522015-11-30 00:07:16 -08004259 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004260}
4261
4262@threadSafety("app")
4263cmd void vkCmdUpdateBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004264 VkCommandBuffer commandBuffer,
4265 VkBuffer dstBuffer,
4266 VkDeviceSize dstOffset,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004267 VkDeviceSize dataSize,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004268 const u32* pData) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004269 commandBufferObject := GetCommandBuffer(commandBuffer)
4270 dstBufferObject := GetBuffer(dstBuffer)
4271 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004272
4273 data := pData[0:dataSize]
4274
Jesse Hall3fbc8562015-11-29 22:10:52 -08004275 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004276
Jesse Hall65ab5522015-11-30 00:07:16 -08004277 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004278}
4279
4280@threadSafety("app")
4281cmd void vkCmdFillBuffer(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004282 VkCommandBuffer commandBuffer,
4283 VkBuffer dstBuffer,
4284 VkDeviceSize dstOffset,
Jesse Hallb00daad2015-11-29 19:46:20 -08004285 VkDeviceSize size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004286 u32 data) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004287 commandBufferObject := GetCommandBuffer(commandBuffer)
4288 dstBufferObject := GetBuffer(dstBuffer)
4289 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004290
Jesse Hall65ab5522015-11-30 00:07:16 -08004291 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004292}
4293
4294@threadSafety("app")
4295cmd void vkCmdClearColorImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004296 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004297 VkImage image,
4298 VkImageLayout imageLayout,
4299 const VkClearColorValue* pColor,
4300 u32 rangeCount,
4301 const VkImageSubresourceRange* pRanges) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004302 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004303 imageObject := GetImage(image)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004304 assert(commandBufferObject.device == imageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004305
4306 ranges := pRanges[0:rangeCount]
4307 for i in (0 .. rangeCount) {
4308 range := ranges[i]
4309 }
4310
Jesse Hall3fbc8562015-11-29 22:10:52 -08004311 bindCommandBuffer(commandBuffer, image, imageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004312
Jesse Hall3fbc8562015-11-29 22:10:52 -08004313 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004314}
4315
4316@threadSafety("app")
4317cmd void vkCmdClearDepthStencilImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004318 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004319 VkImage image,
4320 VkImageLayout imageLayout,
Jesse Hall5ae3abb2015-10-08 14:00:22 -07004321 const VkClearDepthStencilValue* pDepthStencil,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004322 u32 rangeCount,
4323 const VkImageSubresourceRange* pRanges) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004324 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004325 imageObject := GetImage(image)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004326 assert(commandBufferObject.device == imageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004327
4328 ranges := pRanges[0:rangeCount]
4329 for i in (0 .. rangeCount) {
4330 range := ranges[i]
4331 }
4332
Jesse Hall3fbc8562015-11-29 22:10:52 -08004333 bindCommandBuffer(commandBuffer, image, imageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004334
Jesse Hall3fbc8562015-11-29 22:10:52 -08004335 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004336}
4337
4338@threadSafety("app")
Jesse Hallae38f732015-11-19 21:32:50 -08004339cmd void vkCmdClearAttachments(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004340 VkCommandBuffer commandBuffer,
Jesse Hallae38f732015-11-19 21:32:50 -08004341 u32 attachmentCount,
4342 const VkClearAttachment* pAttachments,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004343 u32 rectCount,
Jesse Halla15a4bf2015-11-19 22:48:02 -08004344 const VkClearRect* pRects) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004345 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004346
4347 rects := pRects[0:rectCount]
4348 for i in (0 .. rectCount) {
4349 rect := rects[i]
4350 }
4351
Jesse Hall3fbc8562015-11-29 22:10:52 -08004352 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004353}
4354
4355@threadSafety("app")
4356cmd void vkCmdResolveImage(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004357 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004358 VkImage srcImage,
4359 VkImageLayout srcImageLayout,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004360 VkImage dstImage,
4361 VkImageLayout dstImageLayout,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004362 u32 regionCount,
4363 const VkImageResolve* pRegions) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004364 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004365 srcImageObject := GetImage(srcImage)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004366 dstImageObject := GetImage(dstImage)
4367 assert(commandBufferObject.device == srcImageObject.device)
4368 assert(commandBufferObject.device == dstImageObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004369
4370 regions := pRegions[0:regionCount]
4371 for i in (0 .. regionCount) {
4372 region := regions[i]
4373 }
4374
Jesse Hall3fbc8562015-11-29 22:10:52 -08004375 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
4376 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004377
Jesse Hall3fbc8562015-11-29 22:10:52 -08004378 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004379}
4380
4381@threadSafety("app")
4382cmd void vkCmdSetEvent(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004383 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004384 VkEvent event,
4385 VkPipelineStageFlags stageMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004386 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004387 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004388 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004389}
4390
4391@threadSafety("app")
4392cmd void vkCmdResetEvent(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004393 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004394 VkEvent event,
4395 VkPipelineStageFlags stageMask) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004396 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004397 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004398 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004399}
4400
4401@threadSafety("app")
4402cmd void vkCmdWaitEvents(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004403 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004404 u32 eventCount,
4405 const VkEvent* pEvents,
4406 VkPipelineStageFlags srcStageMask,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004407 VkPipelineStageFlags dstStageMask,
4408 u32 memoryBarrierCount,
4409 const void* const* ppMemoryBarriers) {
4410 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004411
4412 events := pEvents[0:eventCount]
4413 for i in (0 .. eventCount) {
4414 event := events[i]
4415 eventObject := GetEvent(event)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004416 assert(commandBufferObject.device == eventObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004417 }
4418
Jesse Hall3fbc8562015-11-29 22:10:52 -08004419 pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
4420 for i in (0 .. memoryBarrierCount) {
4421 switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004422 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004423 memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
Jesse Halld27f6aa2015-08-15 17:58:48 -07004424 }
4425 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004426 imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
4427 imageObject := GetImage(imageMemoryBarrier.image)
4428 assert(imageObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004429 }
4430 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004431 bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
4432 bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
4433 assert(bufferObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004434 }
4435 }
4436 }
4437}
4438
4439@threadSafety("app")
4440cmd void vkCmdPipelineBarrier(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004441 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004442 VkPipelineStageFlags srcStageMask,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004443 VkPipelineStageFlags dstStageMask,
Jesse Halldc6d36c2015-11-29 19:12:15 -08004444 VkDependencyFlags dependencyFlags,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004445 u32 memoryBarrierCount,
4446 const void* const* ppMemoryBarriers) {
4447 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004448
Jesse Hall3fbc8562015-11-29 22:10:52 -08004449 pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
4450 for i in (0 .. memoryBarrierCount) {
4451 switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004452 case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004453 memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
Jesse Halld27f6aa2015-08-15 17:58:48 -07004454 }
4455 case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004456 imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
4457 imageObject := GetImage(imageMemoryBarrier.image)
4458 assert(imageObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004459 }
4460 case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004461 bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
4462 bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
4463 assert(bufferObject.device == commandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004464 }
4465 }
4466 }
4467}
4468
4469@threadSafety("app")
4470cmd void vkCmdBeginQuery(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004471 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004472 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004473 u32 entry,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004474 VkQueryControlFlags flags) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004475 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004476 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004477 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004478}
4479
4480@threadSafety("app")
4481cmd void vkCmdEndQuery(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004482 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004483 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004484 u32 entry) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004485 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004486 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004487 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004488}
4489
4490@threadSafety("app")
4491cmd void vkCmdResetQueryPool(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004492 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004493 VkQueryPool queryPool,
4494 u32 startQuery,
4495 u32 queryCount) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004496 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004497 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004498 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004499}
4500
4501@threadSafety("app")
4502cmd void vkCmdWriteTimestamp(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004503 VkCommandBuffer commandBuffer,
Jesse Hall6f39a6d2015-11-24 11:08:36 -08004504 VkPipelineStageFlagBits pipelineStage,
Jesse Halla3a7a1d2015-11-24 11:37:23 -08004505 VkQueryPool queryPool,
Jesse Hall65ab5522015-11-30 00:07:16 -08004506 u32 entry) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004507 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halla3a7a1d2015-11-24 11:37:23 -08004508 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004509 assert(commandBufferObject.device == queryPoolObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004510}
4511
4512@threadSafety("app")
4513cmd void vkCmdCopyQueryPoolResults(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004514 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004515 VkQueryPool queryPool,
4516 u32 startQuery,
4517 u32 queryCount,
Jesse Hall3fbc8562015-11-29 22:10:52 -08004518 VkBuffer dstBuffer,
4519 VkDeviceSize dstOffset,
Jesse Halla9bb62b2015-11-21 19:31:56 -08004520 VkDeviceSize stride,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004521 VkQueryResultFlags flags) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004522 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004523 queryPoolObject := GetQueryPool(queryPool)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004524 dstBufferObject := GetBuffer(dstBuffer)
4525 assert(commandBufferObject.device == queryPoolObject.device)
4526 assert(commandBufferObject.device == dstBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004527}
4528
4529cmd void vkCmdPushConstants(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004530 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004531 VkPipelineLayout layout,
4532 VkShaderStageFlags stageFlags,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004533 u32 offset,
4534 u32 size,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004535 const void* values) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004536 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004537 layoutObject := GetPipelineLayout(layout)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004538 assert(commandBufferObject.device == layoutObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004539}
4540
4541@threadSafety("app")
4542cmd void vkCmdBeginRenderPass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004543 VkCommandBuffer commandBuffer,
Jesse Halld27f6aa2015-08-15 17:58:48 -07004544 const VkRenderPassBeginInfo* pRenderPassBegin,
Jesse Hall65ab5522015-11-30 00:07:16 -08004545 VkSubpassContents contents) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004546 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004547 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
4548 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
Jesse Hall3fbc8562015-11-29 22:10:52 -08004549 assert(commandBufferObject.device == renderPassObject.device)
4550 assert(commandBufferObject.device == framebufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004551
Jesse Hall3fbc8562015-11-29 22:10:52 -08004552 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004553}
4554
4555cmd void vkCmdNextSubpass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004556 VkCommandBuffer commandBuffer,
Jesse Hall65ab5522015-11-30 00:07:16 -08004557 VkSubpassContents contents) {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004558 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004559}
4560
4561@threadSafety("app")
4562cmd void vkCmdEndRenderPass(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004563 VkCommandBuffer commandBuffer) {
4564 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004565
Jesse Hall3fbc8562015-11-29 22:10:52 -08004566 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004567}
4568
4569cmd void vkCmdExecuteCommands(
Jesse Hall3fbc8562015-11-29 22:10:52 -08004570 VkCommandBuffer commandBuffer,
4571 u32 commandBuffersCount,
4572 const VkCommandBuffer* pCommandBuffers) {
4573 commandBufferObject := GetCommandBuffer(commandBuffer)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004574
Jesse Hall3fbc8562015-11-29 22:10:52 -08004575 commandBuffers := pCommandBuffers[0:commandBuffersCount]
4576 for i in (0 .. commandBuffersCount) {
4577 secondaryCommandBuffer := commandBuffers[i]
4578 secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
4579 assert(commandBufferObject.device == secondaryCommandBufferObject.device)
Jesse Halld27f6aa2015-08-15 17:58:48 -07004580 }
4581}
4582
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004583@extension("VK_KHR_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004584cmd void vkDestroySurfaceKHR(
4585 VkInstance instance,
4586 VkSurfaceKHR surface) {
4587 instanceObject := GetInstance(instance)
4588 surfaceObject := GetSurface(surface)
4589 assert(surfaceObject.instance == instance)
Michael Lentine88594d72015-11-12 12:49:45 -08004590
Jesse Hall1356b0d2015-11-23 17:24:58 -08004591 State.Surfaces[surface] = null
Jesse Hall2818f932015-11-19 21:19:17 -08004592}
4593
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004594@extension("VK_KHR_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004595cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004596 VkPhysicalDevice physicalDevice,
4597 u32 queueFamilyIndex,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004598 VkSurfaceKHR surface,
Jesse Hallb00daad2015-11-29 19:46:20 -08004599 VkBool32* pSupported) {
4600 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004601
4602 return ?
4603}
4604
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004605@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004606cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
4607 VkPhysicalDevice physicalDevice,
4608 VkSurfaceKHR surface,
4609 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
4610 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4611
4612 surfaceCapabilities := ?
4613 pSurfaceCapabilities[0] = surfaceCapabilities
4614
4615 return ?
4616}
4617
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004618@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004619cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
4620 VkPhysicalDevice physicalDevice,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004621 VkSurfaceKHR surface,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004622 u32* pSurfaceFormatCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004623 VkSurfaceFormatKHR* pSurfaceFormats) {
Jesse Hallb00daad2015-11-29 19:46:20 -08004624 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004625
4626 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004627 pSurfaceFormatCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004628 surfaceFormats := pSurfaceFormats[0:count]
4629
4630 for i in (0 .. count) {
4631 surfaceFormat := ?
4632 surfaceFormats[i] = surfaceFormat
4633 }
4634
4635 return ?
4636}
4637
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004638@extension("VK_KHR_surface")
Jesse Hallb00daad2015-11-29 19:46:20 -08004639cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
4640 VkPhysicalDevice physicalDevice,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004641 VkSurfaceKHR surface,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004642 u32* pPresentModeCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004643 VkPresentModeKHR* pPresentModes) {
Jesse Hallb00daad2015-11-29 19:46:20 -08004644 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
Michael Lentine88594d72015-11-12 12:49:45 -08004645
4646 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004647 pPresentModeCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004648 presentModes := pPresentModes[0:count]
4649
4650 for i in (0 .. count) {
4651 presentMode := ?
4652 presentModes[i] = presentMode
4653 }
4654
4655 return ?
4656}
4657
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004658@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004659cmd VkResult vkCreateSwapchainKHR(
4660 VkDevice device,
4661 const VkSwapchainCreateInfoKHR* pCreateInfo,
4662 VkSwapchainKHR* pSwapchain) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004663 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
Michael Lentine88594d72015-11-12 12:49:45 -08004664 deviceObject := GetDevice(device)
4665
4666 swapchain := ?
4667 pSwapchain[0] = swapchain
4668 State.Swapchains[swapchain] = new!SwapchainObject(device: device)
4669
4670 return ?
4671}
4672
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004673@extension("VK_KHR_swapchain")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004674cmd void vkDestroySwapchainKHR(
Michael Lentine88594d72015-11-12 12:49:45 -08004675 VkDevice device,
4676 VkSwapchainKHR swapchain) {
4677 deviceObject := GetDevice(device)
4678 swapchainObject := GetSwapchain(swapchain)
4679 assert(swapchainObject.device == device)
4680
4681 State.Swapchains[swapchain] = null
Michael Lentine88594d72015-11-12 12:49:45 -08004682}
4683
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004684@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004685cmd VkResult vkGetSwapchainImagesKHR(
4686 VkDevice device,
4687 VkSwapchainKHR swapchain,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004688 u32* pSwapchainImageCount,
Michael Lentine88594d72015-11-12 12:49:45 -08004689 VkImage* pSwapchainImages) {
4690 deviceObject := GetDevice(device)
4691
4692 count := as!u32(?)
Jesse Hall03b6fe12015-11-24 12:44:21 -08004693 pSwapchainImageCount[0] = count
Michael Lentine88594d72015-11-12 12:49:45 -08004694 swapchainImages := pSwapchainImages[0:count]
4695
4696 for i in (0 .. count) {
4697 swapchainImage := ?
4698 swapchainImages[i] = swapchainImage
Jesse Hall1356b0d2015-11-23 17:24:58 -08004699 State.Images[swapchainImage] = new!ImageObject(device: device)
Michael Lentine88594d72015-11-12 12:49:45 -08004700 }
4701
4702 return ?
4703}
4704
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004705@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004706cmd VkResult vkAcquireNextImageKHR(
4707 VkDevice device,
4708 VkSwapchainKHR swapchain,
4709 u64 timeout,
4710 VkSemaphore semaphore,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004711 VkFence fence,
Michael Lentine88594d72015-11-12 12:49:45 -08004712 u32* pImageIndex) {
4713 deviceObject := GetDevice(device)
4714 swapchainObject := GetSwapchain(swapchain)
4715
4716 imageIndex := ?
4717 pImageIndex[0] = imageIndex
4718
4719 return ?
4720}
4721
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004722@extension("VK_KHR_swapchain")
Michael Lentine88594d72015-11-12 12:49:45 -08004723cmd VkResult vkQueuePresentKHR(
4724 VkQueue queue,
4725 VkPresentInfoKHR* pPresentInfo) {
4726 queueObject := GetQueue(queue)
4727
4728 presentInfo := ?
4729 pPresentInfo[0] = presentInfo
4730
4731 return ?
4732}
4733
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004734@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004735cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
4736 VkPhysicalDevice physicalDevice,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004737 u32* pPropertyCount,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004738 VkDisplayPropertiesKHR* pProperties) {
4739 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4740 return ?
4741}
4742
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004743@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004744cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
4745 VkPhysicalDevice physicalDevice,
4746 u32* pPropertyCount,
4747 VkDisplayPlanePropertiesKHR* pProperties) {
4748 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4749 return ?
4750}
4751
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004752@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004753cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
4754 VkPhysicalDevice physicalDevice,
4755 u32* pPropertyCount,
4756 VkDisplayKHR* pProperties) {
4757 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4758 return ?
4759}
4760
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004761@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004762cmd VkResult vkGetDisplayModePropertiesKHR(
4763 VkPhysicalDevice physicalDevice,
4764 VkDisplayKHR display,
Jesse Hall03b6fe12015-11-24 12:44:21 -08004765 u32* pPropertyCount,
4766 VkDisplayModePropertiesKHR* pProperties) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004767 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4768 return ?
4769}
4770
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004771@extension("VK_KHR_display")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004772cmd VkResult vkCreateDisplayModeKHR(
4773 VkPhysicalDevice physicalDevice,
4774 VkDisplayKHR display,
4775 const VkDisplayModeCreateInfoKHR* pCreateInfo,
4776 VkDisplayModeKHR* pMode) {
4777 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4778 return ?
4779}
4780
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004781@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004782cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004783 VkPhysicalDevice physicalDevice,
Jesse Halla6429252015-11-29 18:59:42 -08004784 VkDisplayModeCreateInfoKHR mode,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004785 u32 planeIndex,
Jesse Halla6429252015-11-29 18:59:42 -08004786 VkDisplayPlaneCapabilitiesKHR* pCapabilities) {
Jesse Hall1356b0d2015-11-23 17:24:58 -08004787 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4788 return ?
4789}
4790
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004791@extension("VK_KHR_display")
Jesse Halla6429252015-11-29 18:59:42 -08004792cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
4793 VkInstance instance,
4794 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
4795 VkSurfaceKHR* pSurface) {
4796 return ?
4797}
4798
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004799@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004800cmd VkResult vkCreateXlibSurfaceKHR(
Jesse Hall1356b0d2015-11-23 17:24:58 -08004801 VkInstance instance,
4802 platform.Display* dpy,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004803 platform.Window window,
4804 VkSurfaceKHR* pSurface) {
4805 instanceObject := GetInstance(instance)
4806 return ?
4807}
4808
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004809@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004810cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
4811 VkPhysicalDevice physicalDevice,
4812 u32 queueFamilyIndex,
4813 platform.Display* dpy,
Jesse Hall65ab5522015-11-30 00:07:16 -08004814 platform.VisualID visualID) {
Jesse Halla6429252015-11-29 18:59:42 -08004815 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4816 return ?
4817}
4818
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004819@extension("VK_KHR_xcb_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004820cmd VkResult vkCreateXCBSurfaceKHR(
4821 VkInstance instance,
4822 platform.xcb_connection_t* connection,
Jesse Hall1356b0d2015-11-23 17:24:58 -08004823 platform.xcb_window_t window,
4824 VkSurfaceKHR* pSurface) {
4825 instanceObject := GetInstance(instance)
4826 return ?
4827}
4828
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004829@extension("VK_KHR_xlib_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004830cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
4831 VkPhysicalDevice physicalDevice,
4832 u32 queueFamilyIndex,
4833 platform.xcb_connection_t* connection,
4834 platform.xcb_visualid_t visual_id) {
4835 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4836 return ?
4837}
4838
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004839@extension("VK_KHR_wayland_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004840cmd VkResult vkCreateWaylandSurfaceKHR(
4841 VkInstance instance,
4842 platform.wl_display* display,
4843 platform.wl_surface* surface,
4844 VkSurfaceKHR* pSurface) {
4845 instanceObject := GetInstance(instance)
4846 return ?
4847}
4848
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004849@extension("VK_KHR_wayland_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004850cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
4851 VkPhysicalDevice physicalDevice,
4852 u32 queueFamilyIndex,
4853 platform.wl_display* display) {
4854 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4855 return ?
4856}
4857
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004858@extension("VK_KHR_mir_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004859cmd VkResult vkCreateMirSurfaceKHR(
4860 VkInstance instance,
4861 platform.MirConnection* connection,
4862 platform.MirSurface* mirSurface,
4863 VkSurfaceKHR* pSurface) {
4864 instanceObject := GetInstance(instance)
4865 return ?
4866}
4867
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004868@extension("VK_KHR_mir_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004869cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
4870 VkPhysicalDevice physicalDevice,
4871 u32 queueFamilyIndex,
4872 platform.MirConnection* connection) {
4873 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4874 return ?
4875}
4876
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004877@extension("VK_KHR_android_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004878cmd VkResult vkCreateAndroidSurfaceKHR(
4879 VkInstance instance,
4880 platform.ANativeWindow* window
4881 VkSurfaceKHR* pSurface) {
4882 instanceObject := GetInstance(instance)
4883 return ?
4884}
4885
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004886@extension("VK_KHR_win32_surface")
Jesse Hall1356b0d2015-11-23 17:24:58 -08004887cmd VkResult vkCreateWin32SurfaceKHR(
4888 VkInstance instance,
4889 platform.HINSTANCE hinstance,
4890 platform.HWND hwnd,
4891 VkSurfaceKHR* pSurface) {
4892 instanceObject := GetInstance(instance)
4893 return ?
4894}
4895
Jesse Hall3e0dc8f2015-11-30 00:42:57 -08004896@extension("VK_KHR_win32_surface")
Jesse Halla6429252015-11-29 18:59:42 -08004897cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
4898 VkPhysicalDevice physicalDevice,
4899 u32 queueFamilyIndex) {
4900 physicalDeviceObject := GetPhysicalDevice(physicalDevice)
4901 return ?
4902}
4903
Jesse Halld27f6aa2015-08-15 17:58:48 -07004904
4905////////////////
4906// Validation //
4907////////////////
4908
4909extern void validate(string layerName, bool condition, string message)
4910
4911
4912/////////////////////////////
4913// Internal State Tracking //
4914/////////////////////////////
4915
4916StateObject State
4917
4918@internal class StateObject {
4919 // Dispatchable objects.
4920 map!(VkInstance, ref!InstanceObject) Instances
4921 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
4922 map!(VkDevice, ref!DeviceObject) Devices
4923 map!(VkQueue, ref!QueueObject) Queues
Jesse Hall3fbc8562015-11-29 22:10:52 -08004924 map!(VkCommandBuffer, ref!CommandBufferObject) CommandBuffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07004925
4926 // Non-dispatchable objects.
4927 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories
4928 map!(VkBuffer, ref!BufferObject) Buffers
4929 map!(VkBufferView, ref!BufferViewObject) BufferViews
4930 map!(VkImage, ref!ImageObject) Images
4931 map!(VkImageView, ref!ImageViewObject) ImageViews
Jesse Halld27f6aa2015-08-15 17:58:48 -07004932 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules
Jesse Halld27f6aa2015-08-15 17:58:48 -07004933 map!(VkPipeline, ref!PipelineObject) Pipelines
4934 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts
4935 map!(VkSampler, ref!SamplerObject) Samplers
4936 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets
4937 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts
4938 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools
Jesse Halld27f6aa2015-08-15 17:58:48 -07004939 map!(VkFence, ref!FenceObject) Fences
4940 map!(VkSemaphore, ref!SemaphoreObject) Semaphores
4941 map!(VkEvent, ref!EventObject) Events
4942 map!(VkQueryPool, ref!QueryPoolObject) QueryPools
4943 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers
4944 map!(VkRenderPass, ref!RenderPassObject) RenderPasses
4945 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches
Jesse Hall3fbc8562015-11-29 22:10:52 -08004946 map!(VkCommandPool, ref!CommandPoolObject) CommandPools
Jesse Hall1356b0d2015-11-23 17:24:58 -08004947 map!(VkSurfaceKHR, ref!SurfaceObject) Surfaces
Michael Lentine88594d72015-11-12 12:49:45 -08004948 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains
Jesse Halld27f6aa2015-08-15 17:58:48 -07004949}
4950
4951@internal class InstanceObject {
4952}
4953
4954@internal class PhysicalDeviceObject {
4955 VkInstance instance
4956}
4957
4958@internal class DeviceObject {
4959 VkPhysicalDevice physicalDevice
4960}
4961
4962@internal class QueueObject {
4963 VkDevice device
4964 VkQueueFlags flags
4965}
4966
Jesse Hall3fbc8562015-11-29 22:10:52 -08004967@internal class CommandBufferObject {
Jesse Halld27f6aa2015-08-15 17:58:48 -07004968 VkDevice device
4969 map!(u64, VkDeviceMemory) boundObjects
4970 VkQueueFlags queueFlags
4971}
4972
4973@internal class DeviceMemoryObject {
Jesse Hall3fbc8562015-11-29 22:10:52 -08004974 VkDevice device
4975 VkDeviceSize allocationSize
4976 map!(u64, VkDeviceSize) boundObjects
4977 map!(VkCommandBuffer, VkCommandBuffer) boundCommandBuffers
Jesse Halld27f6aa2015-08-15 17:58:48 -07004978}
4979
4980@internal class BufferObject {
4981 VkDevice device
Jesse Hall3fbc8562015-11-29 22:10:52 -08004982 VkDeviceMemory memory
4983 VkDeviceSize memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004984}
4985
4986@internal class BufferViewObject {
4987 VkDevice device
4988 VkBuffer buffer
4989}
4990
4991@internal class ImageObject {
4992 VkDevice device
Jesse Hall3fbc8562015-11-29 22:10:52 -08004993 VkDeviceMemory memory
4994 VkDeviceSize memoryOffset
Jesse Halld27f6aa2015-08-15 17:58:48 -07004995}
4996
4997@internal class ImageViewObject {
4998 VkDevice device
4999 VkImage image
5000}
5001
Jesse Halld27f6aa2015-08-15 17:58:48 -07005002@internal class ShaderObject {
5003 VkDevice device
5004}
5005
5006@internal class ShaderModuleObject {
5007 VkDevice device
5008}
5009
5010@internal class PipelineObject {
5011 VkDevice device
5012}
5013
5014@internal class PipelineLayoutObject {
5015 VkDevice device
5016}
5017
5018@internal class SamplerObject {
5019 VkDevice device
5020}
5021
5022@internal class DescriptorSetObject {
5023 VkDevice device
5024}
5025
5026@internal class DescriptorSetLayoutObject {
5027 VkDevice device
5028}
5029
5030@internal class DescriptorPoolObject {
5031 VkDevice device
5032}
5033
Jesse Halld27f6aa2015-08-15 17:58:48 -07005034@internal class FenceObject {
5035 VkDevice device
5036 bool signaled
5037}
5038
5039@internal class SemaphoreObject {
5040 VkDevice device
5041}
5042
5043@internal class EventObject {
5044 VkDevice device
5045}
5046
5047@internal class QueryPoolObject {
5048 VkDevice device
5049}
5050
5051@internal class FramebufferObject {
5052 VkDevice device
5053}
5054
5055@internal class RenderPassObject {
5056 VkDevice device
5057}
5058
5059@internal class PipelineCacheObject {
5060 VkDevice device
5061}
5062
Jesse Hall3fbc8562015-11-29 22:10:52 -08005063@internal class CommandPoolObject {
Jesse Halld27f6aa2015-08-15 17:58:48 -07005064 VkDevice device
5065}
5066
Jesse Hall1356b0d2015-11-23 17:24:58 -08005067@internal class SurfaceObject {
5068 VkInstance instance
5069}
5070
Michael Lentine88594d72015-11-12 12:49:45 -08005071@internal class SwapchainObject {
5072 VkDevice device
5073}
5074
Jesse Halld27f6aa2015-08-15 17:58:48 -07005075macro ref!InstanceObject GetInstance(VkInstance instance) {
5076 assert(instance in State.Instances)
5077 return State.Instances[instance]
5078}
5079
5080macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) {
5081 assert(physicalDevice in State.PhysicalDevices)
5082 return State.PhysicalDevices[physicalDevice]
5083}
5084
5085macro ref!DeviceObject GetDevice(VkDevice device) {
5086 assert(device in State.Devices)
5087 return State.Devices[device]
5088}
5089
5090macro ref!QueueObject GetQueue(VkQueue queue) {
5091 assert(queue in State.Queues)
5092 return State.Queues[queue]
5093}
5094
Jesse Hall3fbc8562015-11-29 22:10:52 -08005095macro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
5096 assert(commandBuffer in State.CommandBuffers)
5097 return State.CommandBuffers[commandBuffer]
Jesse Halld27f6aa2015-08-15 17:58:48 -07005098}
5099
Jesse Hall3fbc8562015-11-29 22:10:52 -08005100macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
5101 assert(memory in State.DeviceMemories)
5102 return State.DeviceMemories[memory]
Jesse Halld27f6aa2015-08-15 17:58:48 -07005103}
5104
5105macro ref!BufferObject GetBuffer(VkBuffer buffer) {
5106 assert(buffer in State.Buffers)
5107 return State.Buffers[buffer]
5108}
5109
5110macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) {
5111 assert(bufferView in State.BufferViews)
5112 return State.BufferViews[bufferView]
5113}
5114
5115macro ref!ImageObject GetImage(VkImage image) {
5116 assert(image in State.Images)
5117 return State.Images[image]
5118}
5119
5120macro ref!ImageViewObject GetImageView(VkImageView imageView) {
5121 assert(imageView in State.ImageViews)
5122 return State.ImageViews[imageView]
5123}
5124
Jesse Halld27f6aa2015-08-15 17:58:48 -07005125macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
5126 assert(shaderModule in State.ShaderModules)
5127 return State.ShaderModules[shaderModule]
5128}
5129
5130macro ref!PipelineObject GetPipeline(VkPipeline pipeline) {
5131 assert(pipeline in State.Pipelines)
5132 return State.Pipelines[pipeline]
5133}
5134
5135macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) {
5136 assert(pipelineLayout in State.PipelineLayouts)
5137 return State.PipelineLayouts[pipelineLayout]
5138}
5139
5140macro ref!SamplerObject GetSampler(VkSampler sampler) {
5141 assert(sampler in State.Samplers)
5142 return State.Samplers[sampler]
5143}
5144
5145macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) {
5146 assert(descriptorSet in State.DescriptorSets)
5147 return State.DescriptorSets[descriptorSet]
5148}
5149
5150macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) {
5151 assert(descriptorSetLayout in State.DescriptorSetLayouts)
5152 return State.DescriptorSetLayouts[descriptorSetLayout]
5153}
5154
5155macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) {
5156 assert(descriptorPool in State.DescriptorPools)
5157 return State.DescriptorPools[descriptorPool]
5158}
5159
Jesse Halld27f6aa2015-08-15 17:58:48 -07005160macro ref!FenceObject GetFence(VkFence fence) {
5161 assert(fence in State.Fences)
5162 return State.Fences[fence]
5163}
5164
5165macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) {
5166 assert(semaphore in State.Semaphores)
5167 return State.Semaphores[semaphore]
5168}
5169
5170macro ref!EventObject GetEvent(VkEvent event) {
5171 assert(event in State.Events)
5172 return State.Events[event]
5173}
5174
5175macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) {
5176 assert(queryPool in State.QueryPools)
5177 return State.QueryPools[queryPool]
5178}
5179
5180macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) {
5181 assert(framebuffer in State.Framebuffers)
5182 return State.Framebuffers[framebuffer]
5183}
5184
5185macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) {
5186 assert(renderPass in State.RenderPasses)
5187 return State.RenderPasses[renderPass]
5188}
5189
5190macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
5191 assert(pipelineCache in State.PipelineCaches)
5192 return State.PipelineCaches[pipelineCache]
5193}
5194
Jesse Hall3fbc8562015-11-29 22:10:52 -08005195macro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
5196 assert(commandPool in State.CommandPools)
5197 return State.CommandPools[commandPool]
Jesse Hallf09c6b12015-08-15 19:54:28 -07005198}
Michael Lentine88594d72015-11-12 12:49:45 -08005199
Jesse Hall1356b0d2015-11-23 17:24:58 -08005200macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
5201 assert(surface in State.Surfaces)
5202 return State.Surfaces[surface]
5203}
5204
Michael Lentine88594d72015-11-12 12:49:45 -08005205macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
5206 assert(swapchain in State.Swapchains)
5207 return State.Swapchains[swapchain]
5208}
Jesse Halld8bade02015-11-24 10:24:18 -08005209
5210macro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
5211 return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
5212}