1// 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 1 30define VERSION_MINOR 0 31define VERSION_PATCH 13 32 33// API limits 34define 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. 40 41// API keywords 42define VK_TRUE 1 43define VK_FALSE 0 44 45// API keyword, but needs special handling by some templates 46define NULL_HANDLE 0 47 48@extension("VK_KHR_surface") define VK_KHR_SURFACE_SPEC_VERSION 25 49@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" 50 51@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_SPEC_VERSION 68 52@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" 53 54@extension("VK_KHR_display") define VK_KHR_DISPLAY_SPEC_VERSION 21 55@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display" 56 57@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 9 58@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain" 59 60@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 61@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME "VK_KHR_xlib_surface" 62 63@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 64@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME "VK_KHR_xcb_surface" 65 66@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 5 67@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME "VK_KHR_wayland_surface" 68 69@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_SPEC_VERSION 4 70@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME "VK_KHR_mir_surface" 71 72@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 73@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME "VK_KHR_android_surface" 74 75@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_SPEC_VERSION 5 76@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME "VK_KHR_win32_surface" 77 78@extension("VK_ANDROID_native_buffer") define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 5 79@extension("VK_ANDROID_native_buffer") define VK_ANDROID_NATIVE_BUFFER_NAME "VK_ANDROID_native_buffer" 80 81@extension("VK_EXT_debug_report") define VK_EXT_DEBUG_REPORT_SPEC_VERSION 2 82@extension("VK_EXT_debug_report") define VK_EXT_DEBUG_REPORT_NAME "VK_EXT_debug_report" 83 84@extension("VK_NV_glsl_shader") define VK_NV_GLSL_SHADER_SPEC_VERSION 1 85@extension("VK_NV_glsl_shader") define VK_NV_GLSL_SHADER_NAME "VK_NV_glsl_shader" 86 87@extension("VK_KHR_sampler_mirror_clamp_to_edge") define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 1 88@extension("VK_KHR_sampler_mirror_clamp_to_edge") define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_NAME "VK_KHR_sampler_mirror_clamp_to_edge" 89 90@extension("VK_IMG_filter_cubic") define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 91@extension("VK_IMG_filter_cubic") define VK_IMG_FILTER_CUBIC_NAME "VK_IMG_filter_cubic" 92 93@extension("VK_AMD_rasterization_order") define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 94@extension("VK_AMD_rasterization_order") define VK_AMD_RASTERIZATION_ORDER_NAME "VK_AMD_rasterization_order" 95 96@extension("VK_EXT_debug_marker") define VK_EXT_DEBUG_MARKER_SPEC_VERSION 3 97@extension("VK_EXT_debug_marker") define VK_EXT_DEBUG_MARKER_NAME "VK_EXT_debug_marker" 98 99 100///////////// 101// Types // 102///////////// 103 104type u32 VkBool32 105type u32 VkFlags 106type u64 VkDeviceSize 107type u32 VkSampleMask 108 109/// Dispatchable handle types. 110@dispatchHandle type u64 VkInstance 111@dispatchHandle type u64 VkPhysicalDevice 112@dispatchHandle type u64 VkDevice 113@dispatchHandle type u64 VkQueue 114@dispatchHandle type u64 VkCommandBuffer 115 116/// Non dispatchable handle types. 117@nonDispatchHandle type u64 VkDeviceMemory 118@nonDispatchHandle type u64 VkCommandPool 119@nonDispatchHandle type u64 VkBuffer 120@nonDispatchHandle type u64 VkBufferView 121@nonDispatchHandle type u64 VkImage 122@nonDispatchHandle type u64 VkImageView 123@nonDispatchHandle type u64 VkShaderModule 124@nonDispatchHandle type u64 VkPipeline 125@nonDispatchHandle type u64 VkPipelineLayout 126@nonDispatchHandle type u64 VkSampler 127@nonDispatchHandle type u64 VkDescriptorSet 128@nonDispatchHandle type u64 VkDescriptorSetLayout 129@nonDispatchHandle type u64 VkDescriptorPool 130@nonDispatchHandle type u64 VkFence 131@nonDispatchHandle type u64 VkSemaphore 132@nonDispatchHandle type u64 VkEvent 133@nonDispatchHandle type u64 VkQueryPool 134@nonDispatchHandle type u64 VkFramebuffer 135@nonDispatchHandle type u64 VkRenderPass 136@nonDispatchHandle type u64 VkPipelineCache 137 138@extension("VK_KHR_surface") @nonDispatchHandle type u64 VkSurfaceKHR 139 140@extension("VK_KHR_swapchain") @nonDispatchHandle type u64 VkSwapchainKHR 141 142@extension("VK_KHR_display") @nonDispatchHandle type u64 VkDisplayKHR 143@extension("VK_KHR_display") @nonDispatchHandle type u64 VkDisplayModeKHR 144 145@extension("VK_EXT_debug_report") @nonDispatchHandle type u64 VkDebugReportCallbackEXT 146 147 148///////////// 149// Enums // 150///////////// 151 152enum VkImageLayout { 153 VK_IMAGE_LAYOUT_UNDEFINED = 0x00000000, /// Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation) 154 VK_IMAGE_LAYOUT_GENERAL = 0x00000001, /// General layout when image can be used for any kind of access 155 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 0x00000002, /// Optimal layout when image is only used for color attachment read/write 156 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 0x00000003, /// Optimal layout when image is only used for depth/stencil attachment read/write 157 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 0x00000004, /// Optimal layout when image is used for read only depth/stencil attachment and shader access 158 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 0x00000005, /// Optimal layout when image is used for read only shader access 159 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 0x00000006, /// Optimal layout when image is used only as source of transfer operations 160 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 0x00000007, /// Optimal layout when image is used only as destination of transfer operations 161 VK_IMAGE_LAYOUT_PREINITIALIZED = 0x00000008, /// Initial layout used when the data is populated by the CPU 162 163 //@extension("VK_KHR_swapchain") 164 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, 165} 166 167enum VkAttachmentLoadOp { 168 VK_ATTACHMENT_LOAD_OP_LOAD = 0x00000000, 169 VK_ATTACHMENT_LOAD_OP_CLEAR = 0x00000001, 170 VK_ATTACHMENT_LOAD_OP_DONT_CARE = 0x00000002, 171} 172 173enum VkAttachmentStoreOp { 174 VK_ATTACHMENT_STORE_OP_STORE = 0x00000000, 175 VK_ATTACHMENT_STORE_OP_DONT_CARE = 0x00000001, 176} 177 178enum VkImageType { 179 VK_IMAGE_TYPE_1D = 0x00000000, 180 VK_IMAGE_TYPE_2D = 0x00000001, 181 VK_IMAGE_TYPE_3D = 0x00000002, 182} 183 184enum VkImageTiling { 185 VK_IMAGE_TILING_OPTIMAL = 0x00000000, 186 VK_IMAGE_TILING_LINEAR = 0x00000001, 187} 188 189enum VkImageViewType { 190 VK_IMAGE_VIEW_TYPE_1D = 0x00000000, 191 VK_IMAGE_VIEW_TYPE_2D = 0x00000001, 192 VK_IMAGE_VIEW_TYPE_3D = 0x00000002, 193 VK_IMAGE_VIEW_TYPE_CUBE = 0x00000003, 194 VK_IMAGE_VIEW_TYPE_1D_ARRAY = 0x00000004, 195 VK_IMAGE_VIEW_TYPE_2D_ARRAY = 0x00000005, 196 VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 0x00000006, 197} 198 199enum VkCommandBufferLevel { 200 VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0x00000000, 201 VK_COMMAND_BUFFER_LEVEL_SECONDARY = 0x00000001, 202} 203 204enum VkComponentSwizzle { 205 VK_COMPONENT_SWIZZLE_IDENTITY = 0x00000000, 206 VK_COMPONENT_SWIZZLE_ZERO = 0x00000001, 207 VK_COMPONENT_SWIZZLE_ONE = 0x00000002, 208 VK_COMPONENT_SWIZZLE_R = 0x00000003, 209 VK_COMPONENT_SWIZZLE_G = 0x00000004, 210 VK_COMPONENT_SWIZZLE_B = 0x00000005, 211 VK_COMPONENT_SWIZZLE_A = 0x00000006, 212} 213 214enum VkDescriptorType { 215 VK_DESCRIPTOR_TYPE_SAMPLER = 0x00000000, 216 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 0x00000001, 217 VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 0x00000002, 218 VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 0x00000003, 219 VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 0x00000004, 220 VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 0x00000005, 221 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 0x00000006, 222 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 0x00000007, 223 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 0x00000008, 224 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 0x00000009, 225 VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 0x0000000a, 226} 227 228enum VkQueryType { 229 VK_QUERY_TYPE_OCCLUSION = 0x00000000, 230 VK_QUERY_TYPE_PIPELINE_STATISTICS = 0x00000001, /// Optional 231 VK_QUERY_TYPE_TIMESTAMP = 0x00000002, 232} 233 234enum VkBorderColor { 235 VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0x00000000, 236 VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 0x00000001, 237 VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 0x00000002, 238 VK_BORDER_COLOR_INT_OPAQUE_BLACK = 0x00000003, 239 VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 0x00000004, 240 VK_BORDER_COLOR_INT_OPAQUE_WHITE = 0x00000005, 241} 242 243enum VkPipelineBindPoint { 244 VK_PIPELINE_BIND_POINT_GRAPHICS = 0x00000000, 245 VK_PIPELINE_BIND_POINT_COMPUTE = 0x00000001, 246} 247 248enum VkPrimitiveTopology { 249 VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0x00000000, 250 VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 0x00000001, 251 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 0x00000002, 252 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 0x00000003, 253 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 0x00000004, 254 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 0x00000005, 255 VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 0x00000006, 256 VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 0x00000007, 257 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 0x00000008, 258 VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 0x00000009, 259 VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 0x0000000a, 260} 261 262enum VkSharingMode { 263 VK_SHARING_MODE_EXCLUSIVE = 0x00000000, 264 VK_SHARING_MODE_CONCURRENT = 0x00000001, 265} 266 267enum VkIndexType { 268 VK_INDEX_TYPE_UINT16 = 0x00000000, 269 VK_INDEX_TYPE_UINT32 = 0x00000001, 270} 271 272enum VkFilter { 273 VK_FILTER_NEAREST = 0x00000000, 274 VK_FILTER_LINEAR = 0x00000001, 275 276 //@extension("VK_IMG_filter_cubic") 277 VK_FILTER_CUBIC_IMG = 1000015000, 278} 279 280enum VkSamplerMipmapMode { 281 VK_SAMPLER_MIPMAP_MODE_NEAREST = 0x00000001, /// Choose nearest mip level 282 VK_SAMPLER_MIPMAP_MODE_LINEAR = 0x00000002, /// Linear filter between mip levels 283} 284 285enum VkSamplerAddressMode { 286 VK_SAMPLER_ADDRESS_MODE_REPEAT = 0x00000000, 287 VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 0x00000001, 288 VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 0x00000002, 289 VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 0x00000003, 290 VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 0x00000004, 291} 292 293enum VkCompareOp { 294 VK_COMPARE_OP_NEVER = 0x00000000, 295 VK_COMPARE_OP_LESS = 0x00000001, 296 VK_COMPARE_OP_EQUAL = 0x00000002, 297 VK_COMPARE_OP_LESS_OR_EQUAL = 0x00000003, 298 VK_COMPARE_OP_GREATER = 0x00000004, 299 VK_COMPARE_OP_NOT_EQUAL = 0x00000005, 300 VK_COMPARE_OP_GREATER_OR_EQUAL = 0x00000006, 301 VK_COMPARE_OP_ALWAYS = 0x00000007, 302} 303 304enum VkPolygonMode { 305 VK_POLYGON_MODE_FILL = 0x00000000, 306 VK_POLYGON_MODE_LINE = 0x00000001, 307 VK_POLYGON_MODE_POINT = 0x00000002, 308} 309 310enum VkFrontFace { 311 VK_FRONT_FACE_COUNTER_CLOCKWISE = 0x00000000, 312 VK_FRONT_FACE_CLOCKWISE = 0x00000001, 313} 314 315enum VkBlendFactor { 316 VK_BLEND_FACTOR_ZERO = 0x00000000, 317 VK_BLEND_FACTOR_ONE = 0x00000001, 318 VK_BLEND_FACTOR_SRC_COLOR = 0x00000002, 319 VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 0x00000003, 320 VK_BLEND_FACTOR_DST_COLOR = 0x00000004, 321 VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 0x00000005, 322 VK_BLEND_FACTOR_SRC_ALPHA = 0x00000006, 323 VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 0x00000007, 324 VK_BLEND_FACTOR_DST_ALPHA = 0x00000008, 325 VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 0x00000009, 326 VK_BLEND_FACTOR_CONSTANT_COLOR = 0x0000000a, 327 VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 0x0000000b, 328 VK_BLEND_FACTOR_CONSTANT_ALPHA = 0x0000000c, 329 VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d, 330 VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 0x0000000e, 331 VK_BLEND_FACTOR_SRC1_COLOR = 0x0000000f, 332 VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 0x00000010, 333 VK_BLEND_FACTOR_SRC1_ALPHA = 0x00000011, 334 VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 0x00000012, 335} 336 337enum VkBlendOp { 338 VK_BLEND_OP_ADD = 0x00000000, 339 VK_BLEND_OP_SUBTRACT = 0x00000001, 340 VK_BLEND_OP_REVERSE_SUBTRACT = 0x00000002, 341 VK_BLEND_OP_MIN = 0x00000003, 342 VK_BLEND_OP_MAX = 0x00000004, 343} 344 345enum VkStencilOp { 346 VK_STENCIL_OP_KEEP = 0x00000000, 347 VK_STENCIL_OP_ZERO = 0x00000001, 348 VK_STENCIL_OP_REPLACE = 0x00000002, 349 VK_STENCIL_OP_INCREMENT_AND_CLAMP = 0x00000003, 350 VK_STENCIL_OP_DECREMENT_AND_CLAMP = 0x00000004, 351 VK_STENCIL_OP_INVERT = 0x00000005, 352 VK_STENCIL_OP_INCREMENT_AND_WRAP = 0x00000006, 353 VK_STENCIL_OP_DECREMENT_AND_WRAP = 0x00000007, 354} 355 356enum VkLogicOp { 357 VK_LOGIC_OP_CLEAR = 0x00000000, 358 VK_LOGIC_OP_AND = 0x00000001, 359 VK_LOGIC_OP_AND_REVERSE = 0x00000002, 360 VK_LOGIC_OP_COPY = 0x00000003, 361 VK_LOGIC_OP_AND_INVERTED = 0x00000004, 362 VK_LOGIC_OP_NO_OP = 0x00000005, 363 VK_LOGIC_OP_XOR = 0x00000006, 364 VK_LOGIC_OP_OR = 0x00000007, 365 VK_LOGIC_OP_NOR = 0x00000008, 366 VK_LOGIC_OP_EQUIVALENT = 0x00000009, 367 VK_LOGIC_OP_INVERT = 0x0000000a, 368 VK_LOGIC_OP_OR_REVERSE = 0x0000000b, 369 VK_LOGIC_OP_COPY_INVERTED = 0x0000000c, 370 VK_LOGIC_OP_OR_INVERTED = 0x0000000d, 371 VK_LOGIC_OP_NAND = 0x0000000e, 372 VK_LOGIC_OP_SET = 0x0000000f, 373} 374 375enum VkSystemAllocationScope { 376 VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0x00000000, 377 VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 0x00000001, 378 VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 0x00000002, 379 VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 0x00000003, 380 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 0x00000004, 381} 382 383enum VkInternalAllocationType { 384 VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0x00000000, 385} 386 387enum VkPhysicalDeviceType { 388 VK_PHYSICAL_DEVICE_TYPE_OTHER = 0x00000000, 389 VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 0x00000001, 390 VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 0x00000002, 391 VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 0x00000003, 392 VK_PHYSICAL_DEVICE_TYPE_CPU = 0x00000004, 393} 394 395enum VkVertexInputRate { 396 VK_VERTEX_INPUT_RATE_VERTEX = 0x00000000, 397 VK_VERTEX_INPUT_RATE_INSTANCE = 0x00000001, 398} 399 400/// Vulkan format definitions 401enum VkFormat { 402 VK_FORMAT_UNDEFINED = 0, 403 VK_FORMAT_R4G4_UNORM_PACK8 = 1, 404 VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2, 405 VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3, 406 VK_FORMAT_R5G6B5_UNORM_PACK16 = 4, 407 VK_FORMAT_B5G6R5_UNORM_PACK16 = 5, 408 VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6, 409 VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7, 410 VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8, 411 VK_FORMAT_R8_UNORM = 9, 412 VK_FORMAT_R8_SNORM = 10, 413 VK_FORMAT_R8_USCALED = 11, 414 VK_FORMAT_R8_SSCALED = 12, 415 VK_FORMAT_R8_UINT = 13, 416 VK_FORMAT_R8_SINT = 14, 417 VK_FORMAT_R8_SRGB = 15, 418 VK_FORMAT_R8G8_UNORM = 16, 419 VK_FORMAT_R8G8_SNORM = 17, 420 VK_FORMAT_R8G8_USCALED = 18, 421 VK_FORMAT_R8G8_SSCALED = 19, 422 VK_FORMAT_R8G8_UINT = 20, 423 VK_FORMAT_R8G8_SINT = 21, 424 VK_FORMAT_R8G8_SRGB = 22, 425 VK_FORMAT_R8G8B8_UNORM = 23, 426 VK_FORMAT_R8G8B8_SNORM = 24, 427 VK_FORMAT_R8G8B8_USCALED = 25, 428 VK_FORMAT_R8G8B8_SSCALED = 26, 429 VK_FORMAT_R8G8B8_UINT = 27, 430 VK_FORMAT_R8G8B8_SINT = 28, 431 VK_FORMAT_R8G8B8_SRGB = 29, 432 VK_FORMAT_B8G8R8_UNORM = 30, 433 VK_FORMAT_B8G8R8_SNORM = 31, 434 VK_FORMAT_B8G8R8_USCALED = 32, 435 VK_FORMAT_B8G8R8_SSCALED = 33, 436 VK_FORMAT_B8G8R8_UINT = 34, 437 VK_FORMAT_B8G8R8_SINT = 35, 438 VK_FORMAT_B8G8R8_SRGB = 36, 439 VK_FORMAT_R8G8B8A8_UNORM = 37, 440 VK_FORMAT_R8G8B8A8_SNORM = 38, 441 VK_FORMAT_R8G8B8A8_USCALED = 39, 442 VK_FORMAT_R8G8B8A8_SSCALED = 40, 443 VK_FORMAT_R8G8B8A8_UINT = 41, 444 VK_FORMAT_R8G8B8A8_SINT = 42, 445 VK_FORMAT_R8G8B8A8_SRGB = 43, 446 VK_FORMAT_B8G8R8A8_UNORM = 44, 447 VK_FORMAT_B8G8R8A8_SNORM = 45, 448 VK_FORMAT_B8G8R8A8_USCALED = 46, 449 VK_FORMAT_B8G8R8A8_SSCALED = 47, 450 VK_FORMAT_B8G8R8A8_UINT = 48, 451 VK_FORMAT_B8G8R8A8_SINT = 49, 452 VK_FORMAT_B8G8R8A8_SRGB = 50, 453 VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51, 454 VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52, 455 VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53, 456 VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54, 457 VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55, 458 VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56, 459 VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57, 460 VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58, 461 VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59, 462 VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60, 463 VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61, 464 VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62, 465 VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63, 466 VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64, 467 VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65, 468 VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66, 469 VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67, 470 VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68, 471 VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69, 472 VK_FORMAT_R16_UNORM = 70, 473 VK_FORMAT_R16_SNORM = 71, 474 VK_FORMAT_R16_USCALED = 72, 475 VK_FORMAT_R16_SSCALED = 73, 476 VK_FORMAT_R16_UINT = 74, 477 VK_FORMAT_R16_SINT = 75, 478 VK_FORMAT_R16_SFLOAT = 76, 479 VK_FORMAT_R16G16_UNORM = 77, 480 VK_FORMAT_R16G16_SNORM = 78, 481 VK_FORMAT_R16G16_USCALED = 79, 482 VK_FORMAT_R16G16_SSCALED = 80, 483 VK_FORMAT_R16G16_UINT = 81, 484 VK_FORMAT_R16G16_SINT = 82, 485 VK_FORMAT_R16G16_SFLOAT = 83, 486 VK_FORMAT_R16G16B16_UNORM = 84, 487 VK_FORMAT_R16G16B16_SNORM = 85, 488 VK_FORMAT_R16G16B16_USCALED = 86, 489 VK_FORMAT_R16G16B16_SSCALED = 87, 490 VK_FORMAT_R16G16B16_UINT = 88, 491 VK_FORMAT_R16G16B16_SINT = 89, 492 VK_FORMAT_R16G16B16_SFLOAT = 90, 493 VK_FORMAT_R16G16B16A16_UNORM = 91, 494 VK_FORMAT_R16G16B16A16_SNORM = 92, 495 VK_FORMAT_R16G16B16A16_USCALED = 93, 496 VK_FORMAT_R16G16B16A16_SSCALED = 94, 497 VK_FORMAT_R16G16B16A16_UINT = 95, 498 VK_FORMAT_R16G16B16A16_SINT = 96, 499 VK_FORMAT_R16G16B16A16_SFLOAT = 97, 500 VK_FORMAT_R32_UINT = 98, 501 VK_FORMAT_R32_SINT = 99, 502 VK_FORMAT_R32_SFLOAT = 100, 503 VK_FORMAT_R32G32_UINT = 101, 504 VK_FORMAT_R32G32_SINT = 102, 505 VK_FORMAT_R32G32_SFLOAT = 103, 506 VK_FORMAT_R32G32B32_UINT = 104, 507 VK_FORMAT_R32G32B32_SINT = 105, 508 VK_FORMAT_R32G32B32_SFLOAT = 106, 509 VK_FORMAT_R32G32B32A32_UINT = 107, 510 VK_FORMAT_R32G32B32A32_SINT = 108, 511 VK_FORMAT_R32G32B32A32_SFLOAT = 109, 512 VK_FORMAT_R64_UINT = 110, 513 VK_FORMAT_R64_SINT = 111, 514 VK_FORMAT_R64_SFLOAT = 112, 515 VK_FORMAT_R64G64_UINT = 113, 516 VK_FORMAT_R64G64_SINT = 114, 517 VK_FORMAT_R64G64_SFLOAT = 115, 518 VK_FORMAT_R64G64B64_UINT = 116, 519 VK_FORMAT_R64G64B64_SINT = 117, 520 VK_FORMAT_R64G64B64_SFLOAT = 118, 521 VK_FORMAT_R64G64B64A64_UINT = 119, 522 VK_FORMAT_R64G64B64A64_SINT = 120, 523 VK_FORMAT_R64G64B64A64_SFLOAT = 121, 524 VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122, 525 VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123, 526 VK_FORMAT_D16_UNORM = 124, 527 VK_FORMAT_X8_D24_UNORM_PACK32 = 125, 528 VK_FORMAT_D32_SFLOAT = 126, 529 VK_FORMAT_S8_UINT = 127, 530 VK_FORMAT_D16_UNORM_S8_UINT = 128, 531 VK_FORMAT_D24_UNORM_S8_UINT = 129, 532 VK_FORMAT_D32_SFLOAT_S8_UINT = 130, 533 VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131, 534 VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132, 535 VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133, 536 VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134, 537 VK_FORMAT_BC2_UNORM_BLOCK = 135, 538 VK_FORMAT_BC2_SRGB_BLOCK = 136, 539 VK_FORMAT_BC3_UNORM_BLOCK = 137, 540 VK_FORMAT_BC3_SRGB_BLOCK = 138, 541 VK_FORMAT_BC4_UNORM_BLOCK = 139, 542 VK_FORMAT_BC4_SNORM_BLOCK = 140, 543 VK_FORMAT_BC5_UNORM_BLOCK = 141, 544 VK_FORMAT_BC5_SNORM_BLOCK = 142, 545 VK_FORMAT_BC6H_UFLOAT_BLOCK = 143, 546 VK_FORMAT_BC6H_SFLOAT_BLOCK = 144, 547 VK_FORMAT_BC7_UNORM_BLOCK = 145, 548 VK_FORMAT_BC7_SRGB_BLOCK = 146, 549 VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147, 550 VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148, 551 VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149, 552 VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150, 553 VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151, 554 VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152, 555 VK_FORMAT_EAC_R11_UNORM_BLOCK = 153, 556 VK_FORMAT_EAC_R11_SNORM_BLOCK = 154, 557 VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155, 558 VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156, 559 VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157, 560 VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158, 561 VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159, 562 VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160, 563 VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161, 564 VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162, 565 VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163, 566 VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164, 567 VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165, 568 VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166, 569 VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167, 570 VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168, 571 VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169, 572 VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170, 573 VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171, 574 VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172, 575 VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173, 576 VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174, 577 VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175, 578 VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176, 579 VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177, 580 VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178, 581 VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179, 582 VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180, 583 VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181, 584 VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182, 585 VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183, 586 VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184, 587} 588 589/// Structure type enumerant 590enum VkStructureType { 591 VK_STRUCTURE_TYPE_APPLICATION_INFO = 0, 592 VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1, 593 VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2, 594 VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3, 595 VK_STRUCTURE_TYPE_SUBMIT_INFO = 4, 596 VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5, 597 VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6, 598 VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7, 599 VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8, 600 VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9, 601 VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10, 602 VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11, 603 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12, 604 VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13, 605 VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14, 606 VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15, 607 VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16, 608 VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17, 609 VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18, 610 VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19, 611 VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20, 612 VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21, 613 VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22, 614 VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23, 615 VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24, 616 VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25, 617 VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26, 618 VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27, 619 VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28, 620 VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29, 621 VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30, 622 VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31, 623 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32, 624 VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33, 625 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34, 626 VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35, 627 VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36, 628 VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37, 629 VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38, 630 VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39, 631 VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40, 632 VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41, 633 VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42, 634 VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43, 635 VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44, 636 VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45, 637 VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46, 638 VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47, 639 VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48, 640 641 //@extension("VK_KHR_swapchain") 642 VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000, 643 VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001, 644 645 //@extension("VK_KHR_display") 646 VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000, 647 VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001, 648 649 //@extension("VK_KHR_display_swapchain") 650 VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR = 1000003000, 651 652 //@extension("VK_KHR_xlib_surface") 653 VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, 654 655 //@extension("VK_KHR_xcb_surface") 656 VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, 657 658 //@extension("VK_KHR_wayland_surface") 659 VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, 660 661 //@extension("VK_KHR_mir_surface") 662 VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = 1000007000, 663 664 //@extension("VK_KHR_android_surface") 665 VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, 666 667 //@extension("VK_KHR_win32_surface") 668 VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, 669 670 //@extension("VK_ANDROID_native_buffer") 671 VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID = 1000010000, 672 673 //@extension("VK_EXT_debug_report") 674 VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, 675 676 //@extension("VK_AMD_rasterization_order") 677 VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, 678 679 //@extension("VK_EXT_debug_marker") 680 VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, 681 682 //@extension("VK_EXT_debug_marker") 683 VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, 684 685 //@extension("VK_EXT_debug_marker") 686 VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, 687} 688 689enum VkSubpassContents { 690 VK_SUBPASS_CONTENTS_INLINE = 0x00000000, 691 VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 0x00000001, 692} 693 694enum VkPipelineCacheHeaderVersion { 695 VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1, 696} 697 698@lastUnused(-11) 699/// Error and return codes 700enum VkResult { 701 // Return codes for successful operation execution (positive values) 702 VK_SUCCESS = 0, 703 VK_NOT_READY = 1, 704 VK_TIMEOUT = 2, 705 VK_EVENT_SET = 3, 706 VK_EVENT_RESET = 4, 707 VK_INCOMPLETE = 5, 708 709 //@extension("VK_KHR_swapchain") 710 VK_SUBOPTIMAL_KHR = 1000001003, 711 712 // Error codes (negative values) 713 VK_ERROR_OUT_OF_HOST_MEMORY = 0xFFFFFFFF, // -1 714 VK_ERROR_OUT_OF_DEVICE_MEMORY = 0xFFFFFFFE, // -2 715 VK_ERROR_INITIALIZATION_FAILED = 0xFFFFFFFD, // -3 716 VK_ERROR_DEVICE_LOST = 0xFFFFFFFC, // -4 717 VK_ERROR_MEMORY_MAP_FAILED = 0xFFFFFFFB, // -5 718 VK_ERROR_LAYER_NOT_PRESENT = 0xFFFFFFFA, // -6 719 VK_ERROR_EXTENSION_NOT_PRESENT = 0xFFFFFFF9, // -7 720 VK_ERROR_FEATURE_NOT_PRESENT = 0xFFFFFFF8, // -8 721 VK_ERROR_INCOMPATIBLE_DRIVER = 0xFFFFFFF7, // -9 722 VK_ERROR_TOO_MANY_OBJECTS = 0xFFFFFFF6, // -10 723 VK_ERROR_FORMAT_NOT_SUPPORTED = 0xFFFFFFF5, // -11 724 725 //@extension("VK_KHR_surface") 726 VK_ERROR_SURFACE_LOST_KHR = 0xC4653600, // -1000000000 727 728 //@extension("VK_KHR_surface") 729 VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = 0xC46535FF, // -1000008001 730 731 //@extension("VK_KHR_swapchain") 732 VK_ERROR_OUT_OF_DATE_KHR = 0xC4653214, // -1000001004 733 734 //@extension("VK_KHR_display_swapchain") 735 VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC4652A47, // -1000003001 736 737 //@extension("VK_EXT_debug_report") 738 VK_ERROR_VALIDATION_FAILED_EXT = 0xC4650B07, // -1000011001 739 740 //@extension("VK_NV_glsl_shader") 741 VK_ERROR_INVALID_SHADER_NV = 0xC4650720, // -1000012000 742} 743 744enum VkDynamicState { 745 VK_DYNAMIC_STATE_VIEWPORT = 0x00000000, 746 VK_DYNAMIC_STATE_SCISSOR = 0x00000001, 747 VK_DYNAMIC_STATE_LINE_WIDTH = 0x00000002, 748 VK_DYNAMIC_STATE_DEPTH_BIAS = 0x00000003, 749 VK_DYNAMIC_STATE_BLEND_CONSTANTS = 0x00000004, 750 VK_DYNAMIC_STATE_DEPTH_BOUNDS = 0x00000005, 751 VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 0x00000006, 752 VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 0x00000007, 753 VK_DYNAMIC_STATE_STENCIL_REFERENCE = 0x00000008, 754} 755 756@extension("VK_KHR_surface") 757enum VkPresentModeKHR { 758 VK_PRESENT_MODE_IMMEDIATE_KHR = 0x00000000, 759 VK_PRESENT_MODE_MAILBOX_KHR = 0x00000001, 760 VK_PRESENT_MODE_FIFO_KHR = 0x00000002, 761 VK_PRESENT_MODE_FIFO_RELAXED_KHR = 0x00000003, 762} 763 764@extension("VK_KHR_surface") 765enum VkColorSpaceKHR { 766 VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000, 767} 768 769@extension("VK_EXT_debug_report") 770enum VkDebugReportObjectTypeEXT { 771 VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0, 772 VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1, 773 VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2, 774 VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3, 775 VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4, 776 VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5, 777 VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6, 778 VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7, 779 VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8, 780 VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9, 781 VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10, 782 VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11, 783 VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12, 784 VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13, 785 VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14, 786 VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15, 787 VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16, 788 VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17, 789 VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18, 790 VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19, 791 VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20, 792 VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21, 793 VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22, 794 VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23, 795 VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24, 796 VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, 797 VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, 798 VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, 799 VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = 28, 800} 801 802@extension("VK_EXT_debug_report") 803enum VkDebugReportErrorEXT { 804 VK_DEBUG_REPORT_ERROR_NONE_EXT = 0, 805 VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = 1, 806} 807 808@extension("VK_AMD_rasterization_order") 809enum VkRasterizationOrderAMD { 810 VK_RASTERIZATION_ORDER_STRICT_AMD = 0, 811 VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, 812} 813 814 815///////////////// 816// Bitfields // 817///////////////// 818 819/// Queue capabilities 820type VkFlags VkQueueFlags 821bitfield VkQueueFlagBits { 822 VK_QUEUE_GRAPHICS_BIT = 0x00000001, /// Queue supports graphics operations 823 VK_QUEUE_COMPUTE_BIT = 0x00000002, /// Queue supports compute operations 824 VK_QUEUE_TRANSFER_BIT = 0x00000004, /// Queue supports transfer operations 825 VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, /// Queue supports sparse resource memory management operations 826} 827 828/// Memory properties passed into vkAllocMemory(). 829type VkFlags VkMemoryPropertyFlags 830bitfield VkMemoryPropertyFlagBits { 831 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001, 832 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002, 833 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004, 834 VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008, 835 VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010, 836} 837 838/// Memory heap flags 839type VkFlags VkMemoryHeapFlags 840bitfield VkMemoryHeapFlagBits { 841 VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, 842} 843 844/// Access flags 845type VkFlags VkAccessFlags 846bitfield VkAccessFlagBits { 847 VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001, 848 VK_ACCESS_INDEX_READ_BIT = 0x00000002, 849 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004, 850 VK_ACCESS_UNIFORM_READ_BIT = 0x00000008, 851 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010, 852 VK_ACCESS_SHADER_READ_BIT = 0x00000020, 853 VK_ACCESS_SHADER_WRITE_BIT = 0x00000040, 854 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080, 855 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100, 856 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200, 857 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400, 858 VK_ACCESS_TRANSFER_READ_BIT = 0x00000800, 859 VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000, 860 VK_ACCESS_HOST_READ_BIT = 0x00002000, 861 VK_ACCESS_HOST_WRITE_BIT = 0x00004000, 862 VK_ACCESS_MEMORY_READ_BIT = 0x00008000, 863 VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000, 864} 865 866/// Buffer usage flags 867type VkFlags VkBufferUsageFlags 868bitfield VkBufferUsageFlagBits { 869 VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001, /// Can be used as a source of transfer operations 870 VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002, /// Can be used as a destination of transfer operations 871 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, /// Can be used as TBO 872 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, /// Can be used as IBO 873 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, /// Can be used as UBO 874 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, /// Can be used as SSBO 875 VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, /// Can be used as source of fixed function index fetch (index buffer) 876 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, /// Can be used as source of fixed function vertex fetch (VBO) 877 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, /// Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer) 878} 879 880/// Buffer creation flags 881type VkFlags VkBufferCreateFlags 882bitfield VkBufferCreateFlagBits { 883 VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Buffer should support sparse backing 884 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Buffer should support sparse backing with partial residency 885 VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers 886} 887 888/// Shader stage flags 889type VkFlags VkShaderStageFlags 890bitfield VkShaderStageFlagBits { 891 VK_SHADER_STAGE_VERTEX_BIT = 0x00000001, 892 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002, 893 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004, 894 VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, 895 VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, 896 VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, 897 VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, 898 899 VK_SHADER_STAGE_ALL = 0x7FFFFFFF, 900} 901 902/// Descriptor pool create flags 903type VkFlags VkDescriptorPoolCreateFlags 904bitfield VkDescriptorPoolCreateFlagBits { 905 VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001, 906} 907 908/// Descriptor pool reset flags 909type VkFlags VkDescriptorPoolResetFlags 910//bitfield VkDescriptorPoolResetFlagBits { 911//} 912 913/// Image usage flags 914type VkFlags VkImageUsageFlags 915bitfield VkImageUsageFlagBits { 916 VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001, /// Can be used as a source of transfer operations 917 VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002, /// Can be used as a destination of transfer operations 918 VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types) 919 VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, /// Can be used as storage image (STORAGE_IMAGE descriptor type) 920 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, /// Can be used as framebuffer color attachment 921 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, /// Can be used as framebuffer depth/stencil attachment 922 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, /// Image data not needed outside of rendering 923 VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, /// Can be used as framebuffer input attachment 924} 925 926/// Image creation flags 927type VkFlags VkImageCreateFlags 928bitfield VkImageCreateFlagBits { 929 VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, /// Image should support sparse backing 930 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, /// Image should support sparse backing with partial residency 931 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004, /// Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images 932 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, /// Allows image views to have different format than the base image 933 VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010, /// Allows creating image views with cube type from the created image 934} 935 936/// Image view creation flags 937type VkFlags VkImageViewCreateFlags 938//bitfield VkImageViewCreateFlagBits { 939//} 940 941/// Pipeline creation flags 942type VkFlags VkPipelineCreateFlags 943bitfield VkPipelineCreateFlagBits { 944 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001, 945 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002, 946 VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004, 947} 948 949/// Color component flags 950type VkFlags VkColorComponentFlags 951bitfield VkColorComponentFlagBits { 952 VK_COLOR_COMPONENT_R_BIT = 0x00000001, 953 VK_COLOR_COMPONENT_G_BIT = 0x00000002, 954 VK_COLOR_COMPONENT_B_BIT = 0x00000004, 955 VK_COLOR_COMPONENT_A_BIT = 0x00000008, 956} 957 958/// Fence creation flags 959type VkFlags VkFenceCreateFlags 960bitfield VkFenceCreateFlagBits { 961 VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001, 962} 963 964/// Semaphore creation flags 965type VkFlags VkSemaphoreCreateFlags 966//bitfield VkSemaphoreCreateFlagBits { 967//} 968 969/// Format capability flags 970type VkFlags VkFormatFeatureFlags 971bitfield VkFormatFeatureFlagBits { 972 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types) 973 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, /// Format can be used for storage images (STORAGE_IMAGE descriptor type) 974 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, /// Format supports atomic operations in case it's used for storage images 975 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, /// Format can be used for uniform texel buffers (TBOs) 976 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, /// Format can be used for storage texel buffers (IBOs) 977 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, /// Format supports atomic operations in case it's used for storage texel buffers 978 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, /// Format can be used for vertex buffers (VBOs) 979 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, /// Format can be used for color attachment images 980 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, /// Format supports blending in case it's used for color attachment images 981 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, /// Format can be used for depth/stencil attachment images 982 VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, /// Format can be used as the source image of blits with vkCommandBlitImage 983 VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, /// Format can be used as the destination image of blits with vkCommandBlitImage 984 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000, 985 986 //@extension("VK_IMG_filter_cubic") 987 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000, 988} 989 990/// Query control flags 991type VkFlags VkQueryControlFlags 992bitfield VkQueryControlFlagBits { 993 VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001, 994} 995 996/// Query result flags 997type VkFlags VkQueryResultFlags 998bitfield VkQueryResultFlagBits { 999 VK_QUERY_RESULT_64_BIT = 0x00000001, /// Results of the queries are written to the destination buffer as 64-bit values 1000 VK_QUERY_RESULT_WAIT_BIT = 0x00000002, /// Results of the queries are waited on before proceeding with the result copy 1001 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, /// Besides the results of the query, the availability of the results is also written 1002 VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, /// Copy the partial results of the query even if the final results aren't available 1003} 1004 1005/// Shader module creation flags 1006type VkFlags VkShaderModuleCreateFlags 1007//bitfield VkShaderModuleCreateFlagBits { 1008//} 1009 1010/// Event creation flags 1011type VkFlags VkEventCreateFlags 1012//bitfield VkEventCreateFlagBits { 1013//} 1014 1015/// Command buffer usage flags 1016type VkFlags VkCommandBufferUsageFlags 1017bitfield VkCommandBufferUsageFlagBits { 1018 VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001, 1019 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002, 1020 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004, 1021} 1022 1023/// Pipeline statistics flags 1024type VkFlags VkQueryPipelineStatisticFlags 1025bitfield VkQueryPipelineStatisticFlagBits { 1026 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, /// Optional 1027 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, /// Optional 1028 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, /// Optional 1029 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, /// Optional 1030 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, /// Optional 1031 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, /// Optional 1032 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, /// Optional 1033 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, /// Optional 1034 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, /// Optional 1035 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, /// Optional 1036 VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, /// Optional 1037} 1038 1039/// Memory mapping flags 1040type VkFlags VkMemoryMapFlags 1041//bitfield VkMemoryMapFlagBits { 1042//} 1043 1044/// Bitfield of image aspects 1045type VkFlags VkImageAspectFlags 1046bitfield VkImageAspectFlagBits { 1047 VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001, 1048 VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002, 1049 VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004, 1050 VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008, 1051} 1052 1053/// Sparse memory bind flags 1054type VkFlags VkSparseMemoryBindFlags 1055bitfield VkSparseMemoryBindFlagBits { 1056 VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001, 1057} 1058 1059/// Sparse image memory requirements flags 1060type VkFlags VkSparseImageFormatFlags 1061bitfield VkSparseImageFormatFlagBits { 1062 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001, /// Image uses a single miptail region for all array slices 1063 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. 1064 VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004, /// Image uses a non-standard sparse block size 1065} 1066 1067/// Pipeline stages 1068type VkFlags VkPipelineStageFlags 1069bitfield VkPipelineStageFlagBits { 1070 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, /// Before subsequent commands are processed 1071 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, /// Draw/DispatchIndirect command fetch 1072 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, /// Vertex/index fetch 1073 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, /// Vertex shading 1074 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, /// Tessellation control shading 1075 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, /// Tessellation evaluation shading 1076 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, /// Geometry shading 1077 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, /// Fragment shading 1078 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, /// Early fragment (depth/stencil) tests 1079 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, /// Late fragment (depth/stencil) tests 1080 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, /// Color attachment writes 1081 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, /// Compute shading 1082 VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, /// Transfer/copy operations 1083 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000, 1084 VK_PIPELINE_STAGE_HOST_BIT = 0x00004000, /// Indicates host (CPU) is a source/sink of the dependency 1085 1086 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000, /// All stages of the graphics pipeline 1087 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000, /// All graphics, compute, copy, and transition commands 1088} 1089 1090/// Render pass attachment description flags 1091type VkFlags VkAttachmentDescriptionFlags 1092bitfield VkAttachmentDescriptionFlagBits { 1093 VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001, /// The attachment may alias physical memory of another attachment in the same renderpass 1094} 1095 1096/// Subpass description flags 1097type VkFlags VkSubpassDescriptionFlags 1098bitfield VkSubpassDescriptionFlagBits { 1099} 1100 1101/// Command pool creation flags 1102type VkFlags VkCommandPoolCreateFlags 1103bitfield VkCommandPoolCreateFlagBits { 1104 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001, /// Command buffers have a short lifetime 1105 VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, /// Command buffers may release their memory individually 1106} 1107 1108/// Command pool reset flags 1109type VkFlags VkCommandPoolResetFlags 1110bitfield VkCommandPoolResetFlagBits { 1111 VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the pool 1112} 1113 1114type VkFlags VkCommandBufferResetFlags 1115bitfield VkCommandBufferResetFlagBits { 1116 VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, /// Release resources owned by the buffer 1117} 1118 1119type VkFlags VkSampleCountFlags 1120bitfield VkSampleCountFlagBits { 1121 VK_SAMPLE_COUNT_1_BIT = 0x00000001, 1122 VK_SAMPLE_COUNT_2_BIT = 0x00000002, 1123 VK_SAMPLE_COUNT_4_BIT = 0x00000004, 1124 VK_SAMPLE_COUNT_8_BIT = 0x00000008, 1125 VK_SAMPLE_COUNT_16_BIT = 0x00000010, 1126 VK_SAMPLE_COUNT_32_BIT = 0x00000020, 1127 VK_SAMPLE_COUNT_64_BIT = 0x00000040, 1128} 1129 1130type VkFlags VkStencilFaceFlags 1131bitfield VkStencilFaceFlagBits { 1132 VK_STENCIL_FACE_FRONT_BIT = 0x00000001, /// Front face 1133 VK_STENCIL_FACE_BACK_BIT = 0x00000002, /// Back face 1134 VK_STENCIL_FRONT_AND_BACK = 0x00000003, 1135} 1136 1137/// Instance creation flags 1138type VkFlags VkInstanceCreateFlags 1139//bitfield VkInstanceCreateFlagBits { 1140//} 1141 1142/// Device creation flags 1143type VkFlags VkDeviceCreateFlags 1144//bitfield VkDeviceCreateFlagBits { 1145//} 1146 1147/// Device queue creation flags 1148type VkFlags VkDeviceQueueCreateFlags 1149//bitfield VkDeviceQueueCreateFlagBits { 1150//} 1151 1152/// Query pool creation flags 1153type VkFlags VkQueryPoolCreateFlags 1154//bitfield VkQueryPoolCreateFlagBits { 1155//} 1156 1157/// Buffer view creation flags 1158type VkFlags VkBufferViewCreateFlags 1159//bitfield VkBufferViewCreateFlagBits { 1160//} 1161 1162/// Pipeline cache creation flags 1163type VkFlags VkPipelineCacheCreateFlags 1164//bitfield VkPipelineCacheCreateFlagBits { 1165//} 1166 1167/// Pipeline shader stage creation flags 1168type VkFlags VkPipelineShaderStageCreateFlags 1169//bitfield VkPipelineShaderStageCreateFlagBits { 1170//} 1171 1172/// Descriptor set layout creation flags 1173type VkFlags VkDescriptorSetLayoutCreateFlags 1174//bitfield VkDescriptorSetLayoutCreateFlagBits { 1175//} 1176 1177/// Pipeline vertex input state creation flags 1178type VkFlags VkPipelineVertexInputStateCreateFlags 1179//bitfield VkPipelineVertexInputStateCreateFlagBits { 1180//} 1181 1182/// Pipeline input assembly state creation flags 1183type VkFlags VkPipelineInputAssemblyStateCreateFlags 1184//bitfield VkPipelineInputAssemblyStateCreateFlagBits { 1185//} 1186 1187/// Tessellation state creation flags 1188type VkFlags VkPipelineTessellationStateCreateFlags 1189//bitfield VkPipelineTessellationStateCreateFlagBits { 1190//} 1191 1192/// Viewport state creation flags 1193type VkFlags VkPipelineViewportStateCreateFlags 1194//bitfield VkPipelineViewportStateCreateFlagBits { 1195//} 1196 1197/// Rasterization state creation flags 1198type VkFlags VkPipelineRasterizationStateCreateFlags 1199//bitfield VkPipelineRasterizationStateCreateFlagBits { 1200//} 1201 1202/// Multisample state creation flags 1203type VkFlags VkPipelineMultisampleStateCreateFlags 1204//bitfield VkPipelineMultisampleStateCreateFlagBits { 1205//} 1206 1207/// Color blend state creation flags 1208type VkFlags VkPipelineColorBlendStateCreateFlags 1209//bitfield VkPipelineColorBlendStateCreateFlagBits { 1210//} 1211 1212/// Depth/stencil state creation flags 1213type VkFlags VkPipelineDepthStencilStateCreateFlags 1214//bitfield VkPipelineDepthStencilStateCreateFlagBits { 1215//} 1216 1217/// Dynamic state creation flags 1218type VkFlags VkPipelineDynamicStateCreateFlags 1219//bitfield VkPipelineDynamicStateCreateFlagBits { 1220//} 1221 1222/// Pipeline layout creation flags 1223type VkFlags VkPipelineLayoutCreateFlags 1224//bitfield VkPipelineLayoutCreateFlagBits { 1225//} 1226 1227/// Sampler creation flags 1228type VkFlags VkSamplerCreateFlags 1229//bitfield VkSamplerCreateFlagBits { 1230//} 1231 1232/// Render pass creation flags 1233type VkFlags VkRenderPassCreateFlags 1234//bitfield VkRenderPassCreateFlagBits { 1235//} 1236 1237/// Framebuffer creation flags 1238type VkFlags VkFramebufferCreateFlags 1239//bitfield VkFramebufferCreateFlagBits { 1240//} 1241 1242/// Dependency flags 1243type VkFlags VkDependencyFlags 1244bitfield VkDependencyFlagBits { 1245 VK_DEPENDENCY_BY_REGION_BIT = 0x00000001, 1246} 1247 1248/// Cull mode flags 1249type VkFlags VkCullModeFlags 1250bitfield VkCullModeFlagBits { 1251 VK_CULL_MODE_NONE = 0x00000000, 1252 VK_CULL_MODE_FRONT_BIT = 0x00000001, 1253 VK_CULL_MODE_BACK_BIT = 0x00000002, 1254 VK_CULL_MODE_FRONT_AND_BACK = 0x00000003, 1255} 1256 1257@extension("VK_KHR_surface") 1258type VkFlags VkSurfaceTransformFlagsKHR 1259@extension("VK_KHR_surface") 1260bitfield VkSurfaceTransformFlagBitsKHR { 1261 VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001, 1262 VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002, 1263 VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004, 1264 VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008, 1265 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010, 1266 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020, 1267 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040, 1268 VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080, 1269 VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100, 1270} 1271 1272@extension("VK_KHR_surface") 1273type VkFlags VkCompositeAlphaFlagsKHR 1274@extension("VK_KHR_surface") 1275bitfield VkCompositeAlphaFlagBitsKHR { 1276 VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, 1277 VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002, 1278 VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004, 1279 VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008, 1280} 1281 1282@extension("VK_KHR_swapchain") 1283type VkFlags VkSwapchainCreateFlagsKHR 1284//@extension("VK_KHR_swapchain") 1285//bitfield VkSwapchainCreateFlagBitsKHR { 1286//} 1287 1288@extension("VK_KHR_display") 1289type VkFlags VkDisplayPlaneAlphaFlagsKHR 1290@extension("VK_KHR_display") 1291bitfield VkDisplayPlaneAlphaFlagBitsKHR { 1292 VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, 1293 VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002, 1294 VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004, 1295 VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008, 1296} 1297 1298@extension("VK_KHR_display") 1299type VkFlags VkDisplaySurfaceCreateFlagsKHR 1300//@extension("VK_KHR_display") 1301//bitfield VkDisplaySurfaceCreateFlagBitsKHR { 1302//} 1303 1304@extension("VK_KHR_display") 1305type VkFlags VkDisplayModeCreateFlagsKHR 1306//@extension("VK_KHR_display") 1307//bitfield VkDisplayModeCreateFlagBitsKHR { 1308//} 1309 1310@extension("VK_KHR_xlib_surface") 1311type VkFlags VkXlibSurfaceCreateFlagsKHR 1312//@extension("VK_KHR_xlib_surface") 1313//bitfield VkXlibSurfaceCreateFlagBitsKHR { 1314//} 1315 1316@extension("VK_KHR_xcb_surface") 1317type VkFlags VkXcbSurfaceCreateFlagsKHR 1318//@extension("VK_KHR_xcb_surface") 1319//bitfield VkXcbSurfaceCreateFlagBitsKHR { 1320//} 1321 1322@extension("VK_KHR_wayland_surface") 1323type VkFlags VkWaylandSurfaceCreateFlagsKHR 1324//@extension("VK_KHR_wayland_surface") 1325//bitfield VkWaylandSurfaceCreateFlagBitsKHR { 1326//} 1327 1328@extension("VK_KHR_mir_surface") 1329type VkFlags VkMirSurfaceCreateFlagsKHR 1330//@extension("VK_KHR_mir_surface") 1331//bitfield VkMirSurfaceCreateFlagBitsKHR { 1332//} 1333 1334@extension("VK_KHR_android_surface") 1335type VkFlags VkAndroidSurfaceCreateFlagsKHR 1336//@extension("VK_KHR_android_surface") 1337//bitfield VkAndroidSurfaceCreateFlagBitsKHR { 1338//} 1339 1340@extension("VK_KHR_win32_surface") 1341type VkFlags VkWin32SurfaceCreateFlagsKHR 1342//@extension("VK_KHR_win32_surface") 1343//bitfield VkWin32SurfaceCreateFlagBitsKHR { 1344//} 1345 1346@extension("VK_EXT_debug_report") 1347type VkFlags VkDebugReportFlagsEXT 1348@extension("VK_EXT_debug_report") 1349bitfield VkDebugReportFlagBitsEXT { 1350 VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001, 1351 VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002, 1352 VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004, 1353 VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008, 1354 VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010, 1355} 1356 1357 1358////////////////// 1359// Structures // 1360////////////////// 1361 1362class VkOffset2D { 1363 s32 x 1364 s32 y 1365} 1366 1367class VkOffset3D { 1368 s32 x 1369 s32 y 1370 s32 z 1371} 1372 1373class VkExtent2D { 1374 u32 width 1375 u32 height 1376} 1377 1378class VkExtent3D { 1379 u32 width 1380 u32 height 1381 u32 depth 1382} 1383 1384class VkViewport { 1385 f32 x 1386 f32 y 1387 f32 width 1388 f32 height 1389 f32 minDepth 1390 f32 maxDepth 1391} 1392 1393class VkRect2D { 1394 VkOffset2D offset 1395 VkExtent2D extent 1396} 1397 1398class VkClearRect { 1399 VkRect2D rect 1400 u32 baseArrayLayer 1401 u32 layerCount 1402} 1403 1404class VkComponentMapping { 1405 VkComponentSwizzle r 1406 VkComponentSwizzle g 1407 VkComponentSwizzle b 1408 VkComponentSwizzle a 1409} 1410 1411class VkPhysicalDeviceProperties { 1412 u32 apiVersion 1413 u32 driverVersion 1414 u32 vendorID 1415 u32 deviceID 1416 VkPhysicalDeviceType deviceType 1417 char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] deviceName 1418 u8[VK_UUID_SIZE] pipelineCacheUUID 1419 VkPhysicalDeviceLimits limits 1420 VkPhysicalDeviceSparseProperties sparseProperties 1421} 1422 1423class VkExtensionProperties { 1424 char[VK_MAX_EXTENSION_NAME_SIZE] extensionName /// extension name 1425 u32 specVersion /// version of the extension specification implemented 1426} 1427 1428class VkLayerProperties { 1429 char[VK_MAX_EXTENSION_NAME_SIZE] layerName /// layer name 1430 u32 specVersion /// version of the layer specification implemented 1431 u32 implementationVersion /// build or release version of the layer's library 1432 char[VK_MAX_DESCRIPTION_SIZE] description /// Free-form description of the layer 1433} 1434 1435class VkSubmitInfo { 1436 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO 1437 const void* pNext /// Next structure in chain 1438 u32 waitSemaphoreCount 1439 const VkSemaphore* pWaitSemaphores 1440 const VkPipelineStageFlags* pWaitDstStageMask 1441 u32 commandBufferCount 1442 const VkCommandBuffer* pCommandBuffers 1443 u32 signalSemaphoreCount 1444 const VkSemaphore* pSignalSemaphores 1445} 1446 1447class VkApplicationInfo { 1448 VkStructureType sType /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO 1449 const void* pNext /// Next structure in chain 1450 const char* pApplicationName 1451 u32 applicationVersion 1452 const char* pEngineName 1453 u32 engineVersion 1454 u32 apiVersion 1455} 1456 1457class VkAllocationCallbacks { 1458 void* pUserData 1459 PFN_vkAllocationFunction pfnAllocation 1460 PFN_vkReallocationFunction pfnReallocation 1461 PFN_vkFreeFunction pfnFree 1462 PFN_vkInternalAllocationNotification pfnInternalAllocation 1463 PFN_vkInternalFreeNotification pfnInternalFree 1464} 1465 1466class VkDeviceQueueCreateInfo { 1467 VkStructureType sStype /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO 1468 const void* pNext /// Pointer to next structure 1469 VkDeviceQueueCreateFlags flags 1470 u32 queueFamilyIndex 1471 u32 queueCount 1472 const f32* pQueuePriorities 1473} 1474 1475class VkDeviceCreateInfo { 1476 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO 1477 const void* pNext /// Pointer to next structure 1478 VkDeviceCreateFlags flags 1479 u32 queueCreateInfoCount 1480 const VkDeviceQueueCreateInfo* pQueueCreateInfos 1481 u32 enabledLayerCount 1482 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled 1483 u32 enabledExtensionCount 1484 const char* const* ppEnabledExtensionNames 1485 const VkPhysicalDeviceFeatures* pEnabledFeatures 1486} 1487 1488class VkInstanceCreateInfo { 1489 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO 1490 const void* pNext /// Pointer to next structure 1491 VkInstanceCreateFlags flags 1492 const VkApplicationInfo* pApplicationInfo 1493 u32 enabledLayerCount 1494 const char* const* ppEnabledLayerNames /// Ordered list of layer names to be enabled 1495 u32 enabledExtensionCount 1496 const char* const* ppEnabledExtensionNames /// Extension names to be enabled 1497} 1498 1499class VkQueueFamilyProperties { 1500 VkQueueFlags queueFlags /// Queue flags 1501 u32 queueCount 1502 u32 timestampValidBits 1503 VkExtent3D minImageTransferGranularity 1504} 1505 1506class VkPhysicalDeviceMemoryProperties { 1507 u32 memoryTypeCount 1508 VkMemoryType[VK_MAX_MEMORY_TYPES] memoryTypes 1509 u32 memoryHeapCount 1510 VkMemoryHeap[VK_MAX_MEMORY_HEAPS] memoryHeaps 1511} 1512 1513class VkMemoryAllocateInfo { 1514 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO 1515 const void* pNext /// Pointer to next structure 1516 VkDeviceSize allocationSize /// Size of memory allocation 1517 u32 memoryTypeIndex /// Index of the of the memory type to allocate from 1518} 1519 1520class VkMemoryRequirements { 1521 VkDeviceSize size /// Specified in bytes 1522 VkDeviceSize alignment /// Specified in bytes 1523 u32 memoryTypeBits /// Bitfield of the allowed memory type indices into memoryTypes[] for this object 1524} 1525 1526class VkSparseImageFormatProperties { 1527 VkImageAspectFlagBits aspectMask 1528 VkExtent3D imageGranularity 1529 VkSparseImageFormatFlags flags 1530} 1531 1532class VkSparseImageMemoryRequirements { 1533 VkSparseImageFormatProperties formatProperties 1534 u32 imageMipTailFirstLod 1535 VkDeviceSize imageMipTailSize /// Specified in bytes, must be a multiple of image block size / alignment 1536 VkDeviceSize imageMipTailOffset /// Specified in bytes, must be a multiple of image block size / alignment 1537 VkDeviceSize imageMipTailStride /// Specified in bytes, must be a multiple of image block size / alignment 1538} 1539 1540class VkMemoryType { 1541 VkMemoryPropertyFlags propertyFlags /// Memory properties of this memory type 1542 u32 heapIndex /// Index of the memory heap allocations of this memory type are taken from 1543} 1544 1545class VkMemoryHeap { 1546 VkDeviceSize size /// Available memory in the heap 1547 VkMemoryHeapFlags flags /// Flags for the heap 1548} 1549 1550class VkMappedMemoryRange { 1551 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE 1552 const void* pNext /// Pointer to next structure 1553 VkDeviceMemory memory /// Mapped memory object 1554 VkDeviceSize offset /// Offset within the mapped memory the range starts from 1555 VkDeviceSize size /// Size of the range within the mapped memory 1556} 1557 1558class VkFormatProperties { 1559 VkFormatFeatureFlags linearTilingFeatures /// Format features in case of linear tiling 1560 VkFormatFeatureFlags optimalTilingFeatures /// Format features in case of optimal tiling 1561 VkFormatFeatureFlags bufferFeatures /// Format features supported by buffers 1562} 1563 1564class VkImageFormatProperties { 1565 VkExtent3D maxExtent /// max image dimensions for this resource type 1566 u32 maxMipLevels /// max number of mipmap levels for this resource type 1567 u32 maxArrayLayers /// max array layers for this resource type 1568 VkSampleCountFlags sampleCounts /// supported sample counts for this resource type 1569 VkDeviceSize maxResourceSize /// max size (in bytes) of this resource type 1570} 1571 1572class VkDescriptorImageInfo { 1573 VkSampler sampler 1574 VkImageView imageView 1575 VkImageLayout imageLayout 1576} 1577 1578class VkDescriptorBufferInfo { 1579 VkBuffer buffer /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC] 1580 VkDeviceSize offset /// Base offset from buffer start in bytes to update in the descriptor set. 1581 VkDeviceSize range /// Size in bytes of the buffer resource for this descriptor update. 1582} 1583 1584class VkWriteDescriptorSet { 1585 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET 1586 const void* pNext /// Pointer to next structure 1587 VkDescriptorSet dstSet /// Destination descriptor set 1588 u32 dstBinding /// Binding within the destination descriptor set to write 1589 u32 dstArrayElement /// Array element within the destination binding to write 1590 u32 descriptorCount /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>) 1591 VkDescriptorType descriptorType /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used) 1592 const VkDescriptorImageInfo* pImageInfo 1593 const VkDescriptorBufferInfo* pBufferInfo 1594 const VkBufferView* pTexelBufferView 1595} 1596 1597class VkCopyDescriptorSet { 1598 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET 1599 const void* pNext /// Pointer to next structure 1600 VkDescriptorSet srcSet /// Source descriptor set 1601 u32 srcBinding /// Binding within the source descriptor set to copy from 1602 u32 srcArrayElement /// Array element within the source binding to copy from 1603 VkDescriptorSet dstSet /// Destination descriptor set 1604 u32 dstBinding /// Binding within the destination descriptor set to copy to 1605 u32 dstArrayElement /// Array element within the destination binding to copy to 1606 u32 descriptorCount /// Number of descriptors to copy 1607} 1608 1609class VkBufferCreateInfo { 1610 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO 1611 const void* pNext /// Pointer to next structure. 1612 VkBufferCreateFlags flags /// Buffer creation flags 1613 VkDeviceSize size /// Specified in bytes 1614 VkBufferUsageFlags usage /// Buffer usage flags 1615 VkSharingMode sharingMode 1616 u32 queueFamilyIndexCount 1617 const u32* pQueueFamilyIndices 1618} 1619 1620class VkBufferViewCreateInfo { 1621 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO 1622 const void* pNext /// Pointer to next structure. 1623 VkBufferViewCreateFlags flags 1624 VkBuffer buffer 1625 VkFormat format /// Optionally specifies format of elements 1626 VkDeviceSize offset /// Specified in bytes 1627 VkDeviceSize range /// View size specified in bytes 1628} 1629 1630class VkImageSubresource { 1631 VkImageAspectFlagBits aspectMask 1632 u32 mipLevel 1633 u32 arrayLayer 1634} 1635 1636class VkImageSubresourceRange { 1637 VkImageAspectFlags aspectMask 1638 u32 baseMipLevel 1639 u32 levelCount 1640 u32 baseArrayLayer 1641 u32 layerCount 1642} 1643 1644class VkMemoryBarrier { 1645 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER 1646 const void* pNext /// Pointer to next structure. 1647 VkAccessFlags srcAccessMask 1648 VkAccessFlags dstAccessMask 1649} 1650 1651class VkBufferMemoryBarrier { 1652 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER 1653 const void* pNext /// Pointer to next structure. 1654 VkAccessFlags srcAccessMask 1655 VkAccessFlags dstAccessMask 1656 u32 srcQueueFamilyIndex /// Queue family to transition ownership from 1657 u32 dstQueueFamilyIndex /// Queue family to transition ownership to 1658 VkBuffer buffer /// Buffer to sync 1659 VkDeviceSize offset /// Offset within the buffer to sync 1660 VkDeviceSize size /// Amount of bytes to sync 1661} 1662 1663class VkImageMemoryBarrier { 1664 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER 1665 const void* pNext /// Pointer to next structure. 1666 VkAccessFlags srcAccessMask 1667 VkAccessFlags dstAccessMask 1668 VkImageLayout oldLayout /// Current layout of the image 1669 VkImageLayout newLayout /// New layout to transition the image to 1670 u32 srcQueueFamilyIndex /// Queue family to transition ownership from 1671 u32 dstQueueFamilyIndex /// Queue family to transition ownership to 1672 VkImage image /// Image to sync 1673 VkImageSubresourceRange subresourceRange /// Subresource range to sync 1674} 1675 1676class VkImageCreateInfo { 1677 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO 1678 const void* pNext /// Pointer to next structure. 1679 VkImageCreateFlags flags /// Image creation flags 1680 VkImageType imageType 1681 VkFormat format 1682 VkExtent3D extent 1683 u32 mipLevels 1684 u32 arrayLayers 1685 VkSampleCountFlagBits samples 1686 VkImageTiling tiling 1687 VkImageUsageFlags usage /// Image usage flags 1688 VkSharingMode sharingMode /// Cross-queue-family sharing mode 1689 u32 queueFamilyIndexCount /// Number of queue families to share across 1690 const u32* pQueueFamilyIndices /// Array of queue family indices to share across 1691 VkImageLayout initialLayout /// Initial image layout for all subresources 1692} 1693 1694class VkSubresourceLayout { 1695 VkDeviceSize offset /// Specified in bytes 1696 VkDeviceSize size /// Specified in bytes 1697 VkDeviceSize rowPitch /// Specified in bytes 1698 VkDeviceSize arrayPitch /// Specified in bytes 1699 VkDeviceSize depthPitch /// Specified in bytes 1700} 1701 1702class VkImageViewCreateInfo { 1703 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO 1704 const void* pNext /// Pointer to next structure 1705 VkImageViewCreateFlags flags 1706 VkImage image 1707 VkImageViewType viewType 1708 VkFormat format 1709 VkComponentMapping components 1710 VkImageSubresourceRange subresourceRange 1711} 1712 1713class VkBufferCopy { 1714 VkDeviceSize srcOffset /// Specified in bytes 1715 VkDeviceSize dstOffset /// Specified in bytes 1716 VkDeviceSize size /// Specified in bytes 1717} 1718 1719class VkSparseMemoryBind { 1720 VkDeviceSize resourceOffset /// Specified in bytes 1721 VkDeviceSize size /// Specified in bytes 1722 VkDeviceMemory memory 1723 VkDeviceSize memoryOffset /// Specified in bytes 1724 VkSparseMemoryBindFlags flags 1725} 1726 1727class VkSparseImageMemoryBind { 1728 VkImageSubresource subresource 1729 VkOffset3D offset 1730 VkExtent3D extent 1731 VkDeviceMemory memory 1732 VkDeviceSize memoryOffset /// Specified in bytes 1733 VkSparseMemoryBindFlags flags 1734} 1735 1736class VkSparseBufferMemoryBindInfo { 1737 VkBuffer buffer 1738 u32 bindCount 1739 const VkSparseMemoryBind* pBinds 1740} 1741 1742class VkSparseImageOpaqueMemoryBindInfo { 1743 VkImage image 1744 u32 bindCount 1745 const VkSparseMemoryBind* pBinds 1746} 1747 1748class VkSparseImageMemoryBindInfo { 1749 VkImage image 1750 u32 bindCount 1751 const VkSparseMemoryBind* pBinds 1752} 1753 1754class VkBindSparseInfo { 1755 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO 1756 const void* pNext 1757 u32 waitSemaphoreCount 1758 const VkSemaphore* pWaitSemaphores 1759 u32 numBufferBinds 1760 const VkSparseBufferMemoryBindInfo* pBufferBinds 1761 u32 numImageOpaqueBinds 1762 const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds 1763 u32 numImageBinds 1764 const VkSparseImageMemoryBindInfo* pImageBinds 1765 u32 signalSemaphoreCount 1766 const VkSemaphore* pSignalSemaphores 1767} 1768 1769class VkImageSubresourceLayers { 1770 VkImageAspectFlags aspectMask 1771 u32 mipLevel 1772 u32 baseArrayLayer 1773 u32 layerCount 1774} 1775 1776class VkImageCopy { 1777 VkImageSubresourceLayers srcSubresource 1778 VkOffset3D srcOffset /// Specified in pixels for both compressed and uncompressed images 1779 VkImageSubresourceLayers dstSubresource 1780 VkOffset3D dstOffset /// Specified in pixels for both compressed and uncompressed images 1781 VkExtent3D extent /// Specified in pixels for both compressed and uncompressed images 1782} 1783 1784class VkImageBlit { 1785 VkImageSubresourceLayers srcSubresource 1786 VkOffset3D[2] srcOffsets 1787 VkImageSubresourceLayers dstSubresource 1788 VkOffset3D[2] dstOffsets 1789} 1790 1791class VkBufferImageCopy { 1792 VkDeviceSize bufferOffset /// Specified in bytes 1793 u32 bufferRowLength /// Specified in texels 1794 u32 bufferImageHeight 1795 VkImageSubresourceLayers imageSubresource 1796 VkOffset3D imageOffset /// Specified in pixels for both compressed and uncompressed images 1797 VkExtent3D imageExtent /// Specified in pixels for both compressed and uncompressed images 1798} 1799 1800class VkImageResolve { 1801 VkImageSubresourceLayers srcSubresource 1802 VkOffset3D srcOffset 1803 VkImageSubresourceLayers dstSubresource 1804 VkOffset3D dstOffset 1805 VkExtent3D extent 1806} 1807 1808class VkShaderModuleCreateInfo { 1809 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO 1810 const void* pNext /// Pointer to next structure 1811 VkShaderModuleCreateFlags flags /// Reserved 1812 platform.size_t codeSize /// Specified in bytes 1813 const u32* pCode /// Binary code of size codeSize 1814} 1815 1816class VkDescriptorSetLayoutBinding { 1817 u32 binding 1818 VkDescriptorType descriptorType /// Type of the descriptors in this binding 1819 u32 descriptorCount /// Number of descriptors in this binding 1820 VkShaderStageFlags stageFlags /// Shader stages this binding is visible to 1821 const VkSampler* pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements) 1822} 1823 1824class VkDescriptorSetLayoutCreateInfo { 1825 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO 1826 const void* pNext /// Pointer to next structure 1827 VkDescriptorSetLayoutCreateFlags flags 1828 u32 bindingCount /// Number of bindings in the descriptor set layout 1829 const VkDescriptorSetLayoutBinding* pBindings /// Array of descriptor set layout bindings 1830} 1831 1832class VkDescriptorPoolSize { 1833 VkDescriptorType type 1834 u32 descriptorCount 1835} 1836 1837class VkDescriptorPoolCreateInfo { 1838 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO 1839 const void* pNext /// Pointer to next structure 1840 VkDescriptorPoolCreateFlags flags 1841 u32 maxSets 1842 u32 poolSizeCount 1843 const VkDescriptorPoolSize* pPoolSizes 1844} 1845 1846class VkDescriptorSetAllocateInfo { 1847 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO 1848 const void* pNext /// Pointer to next structure 1849 VkDescriptorPool descriptorPool 1850 u32 setCount 1851 const VkDescriptorSetLayout* pSetLayouts 1852} 1853 1854class VkSpecializationMapEntry { 1855 u32 constantID /// The SpecConstant ID specified in the BIL 1856 u32 offset /// Offset of the value in the data block 1857 platform.size_t size /// Size in bytes of the SpecConstant 1858} 1859 1860class VkSpecializationInfo { 1861 u32 mapEntryCount /// Number of entries in the map 1862 const VkSpecializationMapEntry* pMapEntries /// Array of map entries 1863 platform.size_t dataSize /// Size in bytes of pData 1864 const void* pData /// Pointer to SpecConstant data 1865} 1866 1867class VkPipelineShaderStageCreateInfo { 1868 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO 1869 const void* pNext /// Pointer to next structure 1870 VkPipelineShaderStageCreateFlags flags 1871 VkShaderStageFlagBits stage 1872 VkShaderModule module 1873 const char* pName 1874 const VkSpecializationInfo* pSpecializationInfo 1875} 1876 1877class VkComputePipelineCreateInfo { 1878 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO 1879 const void* pNext /// Pointer to next structure 1880 VkPipelineCreateFlags flags /// Pipeline creation flags 1881 VkPipelineShaderStageCreateInfo stage 1882 VkPipelineLayout layout /// Interface layout of the pipeline 1883 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 1884 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 1885} 1886 1887class VkVertexInputBindingDescription { 1888 u32 binding /// Vertex buffer binding id 1889 u32 stride /// Distance between vertices in bytes (0 = no advancement) 1890 VkVertexInputRate inputRate /// Rate at which binding is incremented 1891} 1892 1893class VkVertexInputAttributeDescription { 1894 u32 location /// location of the shader vertex attrib 1895 u32 binding /// Vertex buffer binding id 1896 VkFormat format /// format of source data 1897 u32 offset /// Offset of first element in bytes from base of vertex 1898} 1899 1900class VkPipelineVertexInputStateCreateInfo { 1901 VkStructureType sType /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO 1902 const void* pNext /// Pointer to next structure 1903 VkPipelineVertexInputStateCreateFlags flags 1904 u32 vertexBindingDescriptionCount /// number of bindings 1905 const VkVertexInputBindingDescription* pVertexBindingDescriptions 1906 u32 vertexAttributeDescriptionCount /// number of attributes 1907 const VkVertexInputAttributeDescription* pVertexAttributeDescriptions 1908} 1909 1910class VkPipelineInputAssemblyStateCreateInfo { 1911 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO 1912 const void* pNext /// Pointer to next structure 1913 VkPipelineInputAssemblyStateCreateFlags flags 1914 VkPrimitiveTopology topology 1915 VkBool32 primitiveRestartEnable 1916} 1917 1918class VkPipelineTessellationStateCreateInfo { 1919 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO 1920 const void* pNext /// Pointer to next structure 1921 VkPipelineTessellationStateCreateFlags flags 1922 u32 patchControlPoints 1923} 1924 1925class VkPipelineViewportStateCreateInfo { 1926 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO 1927 const void* pNext /// Pointer to next structure 1928 VkPipelineViewportStateCreateFlags flags 1929 u32 viewportCount 1930 const VkViewport* pViewports 1931 u32 scissorCount 1932 const VkRect2D* pScissors 1933} 1934 1935class VkPipelineRasterizationStateCreateInfo { 1936 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO 1937 const void* pNext /// Pointer to next structure 1938 VkPipelineRasterizationStateCreateFlags flags 1939 VkBool32 depthClampEnable 1940 VkBool32 rasterizerDiscardEnable 1941 VkPolygonMode polygonMode /// optional (GL45) 1942 VkCullModeFlags cullMode 1943 VkFrontFace frontFace 1944 VkBool32 depthBiasEnable 1945 f32 depthBiasConstantFactor 1946 f32 depthBiasClamp 1947 f32 depthBiasSlopeFactor 1948 f32 lineWidth 1949} 1950 1951class VkPipelineMultisampleStateCreateInfo { 1952 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO 1953 const void* pNext /// Pointer to next structure 1954 VkPipelineMultisampleStateCreateFlags flags 1955 VkSampleCountFlagBits rasterizationSamples /// Number of samples used for rasterization 1956 VkBool32 sampleShadingEnable /// optional (GL45) 1957 f32 minSampleShading /// optional (GL45) 1958 const VkSampleMask* pSampleMask 1959 VkBool32 alphaToCoverageEnable 1960 VkBool32 alphaToOneEnable 1961} 1962 1963class VkPipelineColorBlendAttachmentState { 1964 VkBool32 blendEnable 1965 VkBlendFactor srcColorBlendFactor 1966 VkBlendFactor dstColorBlendFactor 1967 VkBlendOp colorBlendOp 1968 VkBlendFactor srcAlphaBlendFactor 1969 VkBlendFactor dstAlphaBlendFactor 1970 VkBlendOp alphaBlendOp 1971 VkColorComponentFlags colorWriteMask 1972} 1973 1974class VkPipelineColorBlendStateCreateInfo { 1975 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO 1976 const void* pNext /// Pointer to next structure 1977 VkPipelineColorBlendStateCreateFlags flags 1978 VkBool32 logicOpEnable 1979 VkLogicOp logicOp 1980 u32 attachmentCount /// # of pAttachments 1981 const VkPipelineColorBlendAttachmentState* pAttachments 1982 f32[4] blendConstants 1983} 1984 1985class VkStencilOpState { 1986 VkStencilOp failOp 1987 VkStencilOp passOp 1988 VkStencilOp depthFailOp 1989 VkCompareOp compareOp 1990 u32 compareMask 1991 u32 writeMask 1992 u32 reference 1993} 1994 1995class VkPipelineDepthStencilStateCreateInfo { 1996 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO 1997 const void* pNext /// Pointer to next structure 1998 VkPipelineDepthStencilStateCreateFlags flags 1999 VkBool32 depthTestEnable 2000 VkBool32 depthWriteEnable 2001 VkCompareOp depthCompareOp 2002 VkBool32 depthBoundsTestEnable /// optional (depth_bounds_test) 2003 VkBool32 stencilTestEnable 2004 VkStencilOpState front 2005 VkStencilOpState back 2006 f32 minDepthBounds 2007 f32 maxDepthBounds 2008} 2009 2010class VkPipelineDynamicStateCreateInfo { 2011 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO 2012 const void* pNext /// Pointer to next structure 2013 VkPipelineDynamicStateCreateFlags flags 2014 u32 dynamicStateCount 2015 const VkDynamicState* pDynamicStates 2016} 2017 2018class VkGraphicsPipelineCreateInfo { 2019 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO 2020 const void* pNext /// Pointer to next structure 2021 VkPipelineCreateFlags flags /// Pipeline creation flags 2022 u32 stageCount 2023 const VkPipelineShaderStageCreateInfo* pStages /// One entry for each active shader stage 2024 const VkPipelineVertexInputStateCreateInfo* pVertexInputState 2025 const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState 2026 const VkPipelineTessellationStateCreateInfo* pTessellationState 2027 const VkPipelineViewportStateCreateInfo* pViewportState 2028 const VkPipelineRasterizationStateCreateInfo* pRasterizationState 2029 const VkPipelineMultisampleStateCreateInfo* pMultisampleState 2030 const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState 2031 const VkPipelineColorBlendStateCreateInfo* pColorBlendState 2032 const VkPipelineDynamicStateCreateInfo* pDynamicState 2033 VkPipelineLayout layout /// Interface layout of the pipeline 2034 VkRenderPass renderPass 2035 u32 subpass 2036 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 2037 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 2038} 2039 2040class VkPipelineCacheCreateInfo { 2041 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO 2042 const void* pNext /// Pointer to next structure 2043 VkPipelineCacheCreateFlags flags 2044 platform.size_t initialDataSize /// Size of initial data to populate cache, in bytes 2045 const void* pInitialData /// Initial data to populate cache 2046} 2047 2048class VkPushConstantRange { 2049 VkShaderStageFlags stageFlags /// Which stages use the range 2050 u32 offset /// Start of the range, in bytes 2051 u32 size /// Length of the range, in bytes 2052} 2053 2054class VkPipelineLayoutCreateInfo { 2055 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO 2056 const void* pNext /// Pointer to next structure 2057 VkPipelineLayoutCreateFlags flags 2058 u32 descriptorSetCount /// Number of descriptor sets interfaced by the pipeline 2059 const VkDescriptorSetLayout* pSetLayouts /// Array of <setCount> number of descriptor set layout objects defining the layout of the 2060 u32 pushConstantRangeCount /// Number of push-constant ranges used by the pipeline 2061 const VkPushConstantRange* pPushConstantRanges /// Array of pushConstantRangeCount number of ranges used by various shader stages 2062} 2063 2064class VkSamplerCreateInfo { 2065 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO 2066 const void* pNext /// Pointer to next structure 2067 VkSamplerCreateFlags flags 2068 VkFilter magFilter /// Filter mode for magnification 2069 VkFilter minFilter /// Filter mode for minifiation 2070 VkSamplerMipmapMode mipmapMode /// Mipmap selection mode 2071 VkSamplerAddressMode addressModeU 2072 VkSamplerAddressMode addressModeV 2073 VkSamplerAddressMode addressModeW 2074 f32 mipLodBias 2075 VkBool32 anisotropyEnable 2076 f32 maxAnisotropy 2077 VkBool32 compareEnable 2078 VkCompareOp compareOp 2079 f32 minLod 2080 f32 maxLod 2081 VkBorderColor borderColor 2082 VkBool32 unnormalizedCoordinates 2083} 2084 2085class VkCommandPoolCreateInfo { 2086 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO 2087 const void* pNext /// Pointer to next structure 2088 VkCommandPoolCreateFlags flags /// Command pool creation flags 2089 u32 queueFamilyIndex 2090} 2091 2092class VkCommandBufferAllocateInfo { 2093 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO 2094 const void* pNext /// Pointer to next structure 2095 VkCommandPool commandPool 2096 VkCommandBufferLevel level 2097 u32 commandBufferCount 2098} 2099 2100class VkCommandBufferInheritanceInfo { 2101 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO 2102 const void* pNext /// Pointer to next structure 2103 VkRenderPass renderPass /// Render pass for secondary command buffers 2104 u32 subpass 2105 VkFramebuffer framebuffer /// Framebuffer for secondary command buffers 2106 VkBool32 occlusionQueryEnable 2107 VkQueryControlFlags queryFlags 2108 VkQueryPipelineStatisticFlags pipelineStatistics 2109} 2110 2111class VkCommandBufferBeginInfo { 2112 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO 2113 const void* pNext /// Pointer to next structure 2114 VkCommandBufferUsageFlags flags /// Command buffer usage flags 2115 const VkCommandBufferInheritanceInfo* pInheritanceInfo 2116} 2117 2118class VkRenderPassBeginInfo { 2119 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO 2120 const void* pNext /// Pointer to next structure 2121 VkRenderPass renderPass 2122 VkFramebuffer framebuffer 2123 VkRect2D renderArea 2124 u32 clearValueCount 2125 const VkClearValue* pClearValues 2126} 2127 2128@union 2129/// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared. 2130class VkClearColorValue { 2131 f32[4] float32 2132 s32[4] int32 2133 u32[4] uint32 2134} 2135 2136class VkClearDepthStencilValue { 2137 f32 depth 2138 u32 stencil 2139} 2140 2141@union 2142/// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared. 2143class VkClearValue { 2144 VkClearColorValue color 2145 VkClearDepthStencilValue depthStencil 2146} 2147 2148class VkClearAttachment { 2149 VkImageAspectFlags aspectMask 2150 u32 colorAttachment 2151 VkClearValue clearValue 2152} 2153 2154class VkAttachmentDescription { 2155 VkAttachmentDescriptionFlags flags 2156 VkFormat format 2157 VkSampleCountFlagBits samples 2158 VkAttachmentLoadOp loadOp /// Load op for color or depth data 2159 VkAttachmentStoreOp storeOp /// Store op for color or depth data 2160 VkAttachmentLoadOp stencilLoadOp /// Load op for stencil data 2161 VkAttachmentStoreOp stencilStoreOp /// Store op for stencil data 2162 VkImageLayout initialLayout 2163 VkImageLayout finalLayout 2164} 2165 2166class VkAttachmentReference { 2167 u32 attachment 2168 VkImageLayout layout 2169} 2170 2171class VkSubpassDescription { 2172 VkSubpassDescriptionFlags flags 2173 VkPipelineBindPoint pipelineBindPoint /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now 2174 u32 inputAttachmentCount 2175 const VkAttachmentReference* pInputAttachments 2176 u32 colorAttachmentCount 2177 const VkAttachmentReference* pColorAttachments 2178 const VkAttachmentReference* pResolveAttachments 2179 const VkAttachmentReference* pDepthStencilAttachment 2180 u32 preserveAttachmentCount 2181 const u32* pPreserveAttachments 2182} 2183 2184class VkSubpassDependency { 2185 u32 srcSubpass 2186 u32 dstSubpass 2187 VkPipelineStageFlags srcStageMask 2188 VkPipelineStageFlags dstStageMask 2189 VkAccessFlags srcAccessMask 2190 VkAccessFlags dstAccessMask 2191 VkDependencyFlags dependencyFlags 2192} 2193 2194class VkRenderPassCreateInfo { 2195 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO 2196 const void* pNext /// Pointer to next structure 2197 VkRenderPassCreateFlags flags 2198 u32 attachmentCount 2199 const VkAttachmentDescription* pAttachments 2200 u32 subpassCount 2201 const VkSubpassDescription* pSubpasses 2202 u32 dependencyCount 2203 const VkSubpassDependency* pDependencies 2204} 2205 2206class VkEventCreateInfo { 2207 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO 2208 const void* pNext /// Pointer to next structure 2209 VkEventCreateFlags flags /// Event creation flags 2210} 2211 2212class VkFenceCreateInfo { 2213 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO 2214 const void* pNext /// Pointer to next structure 2215 VkFenceCreateFlags flags /// Fence creation flags 2216} 2217 2218class VkPhysicalDeviceFeatures { 2219 VkBool32 robustBufferAccess /// out of bounds buffer accesses are well defined 2220 VkBool32 fullDrawIndexUint32 /// full 32-bit range of indices for indexed draw calls 2221 VkBool32 imageCubeArray /// image views which are arrays of cube maps 2222 VkBool32 independentBlend /// blending operations are controlled per-attachment 2223 VkBool32 geometryShader /// geometry stage 2224 VkBool32 tessellationShader /// tessellation control and evaluation stage 2225 VkBool32 sampleRateShading /// per-sample shading and interpolation 2226 VkBool32 dualSrcBlend /// blend operations which take two sources 2227 VkBool32 logicOp /// logic operations 2228 VkBool32 multiDrawIndirect /// multi draw indirect 2229 VkBool32 drawIndirectFirstInstance 2230 VkBool32 depthClamp /// depth clamping 2231 VkBool32 depthBiasClamp /// depth bias clamping 2232 VkBool32 fillModeNonSolid /// point and wireframe fill modes 2233 VkBool32 depthBounds /// depth bounds test 2234 VkBool32 wideLines /// lines with width greater than 1 2235 VkBool32 largePoints /// points with size greater than 1 2236 VkBool32 alphaToOne /// The fragment alpha channel can be forced to maximum representable alpha value 2237 VkBool32 multiViewport 2238 VkBool32 samplerAnisotropy 2239 VkBool32 textureCompressionETC2 /// ETC texture compression formats 2240 VkBool32 textureCompressionASTC_LDR /// ASTC LDR texture compression formats 2241 VkBool32 textureCompressionBC /// BC1-7 texture compressed formats 2242 VkBool32 occlusionQueryPrecise 2243 VkBool32 pipelineStatisticsQuery /// pipeline statistics query 2244 VkBool32 vertexPipelineStoresAndAtomics 2245 VkBool32 fragmentStoresAndAtomics 2246 VkBool32 shaderTessellationAndGeometryPointSize 2247 VkBool32 shaderImageGatherExtended /// texture gather with run-time values and independent offsets 2248 VkBool32 shaderStorageImageExtendedFormats /// the extended set of formats can be used for storage images 2249 VkBool32 shaderStorageImageMultisample /// multisample images can be used for storage images 2250 VkBool32 shaderStorageImageReadWithoutFormat 2251 VkBool32 shaderStorageImageWriteWithoutFormat 2252 VkBool32 shaderUniformBufferArrayDynamicIndexing /// arrays of uniform buffers can be accessed with dynamically uniform indices 2253 VkBool32 shaderSampledImageArrayDynamicIndexing /// arrays of sampled images can be accessed with dynamically uniform indices 2254 VkBool32 shaderStorageBufferArrayDynamicIndexing /// arrays of storage buffers can be accessed with dynamically uniform indices 2255 VkBool32 shaderStorageImageArrayDynamicIndexing /// arrays of storage images can be accessed with dynamically uniform indices 2256 VkBool32 shaderClipDistance /// clip distance in shaders 2257 VkBool32 shaderCullDistance /// cull distance in shaders 2258 VkBool32 shaderFloat64 /// 64-bit floats (doubles) in shaders 2259 VkBool32 shaderInt64 /// 64-bit integers in shaders 2260 VkBool32 shaderInt16 /// 16-bit integers in shaders 2261 VkBool32 shaderResourceResidency /// shader can use texture operations that return resource residency information (requires sparseNonResident support) 2262 VkBool32 shaderResourceMinLod /// shader can use texture operations that specify minimum resource LOD 2263 VkBool32 sparseBinding /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level 2264 VkBool32 sparseResidencyBuffer /// Sparse resources support: GPU can access partially resident buffers 2265 VkBool32 sparseResidencyImage2D /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images 2266 VkBool32 sparseResidencyImage3D /// Sparse resources support: GPU can access partially resident 3D images 2267 VkBool32 sparseResidency2Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples 2268 VkBool32 sparseResidency4Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples 2269 VkBool32 sparseResidency8Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples 2270 VkBool32 sparseResidency16Samples /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples 2271 VkBool32 sparseResidencyAliased /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in) 2272 VkBool32 variableMultisampleRate 2273 VkBool32 inheritedQueries 2274} 2275 2276class VkPhysicalDeviceLimits { 2277 /// resource maximum sizes 2278 u32 maxImageDimension1D /// max 1D image dimension 2279 u32 maxImageDimension2D /// max 2D image dimension 2280 u32 maxImageDimension3D /// max 3D image dimension 2281 u32 maxImageDimensionCube /// max cubemap image dimension 2282 u32 maxImageArrayLayers /// max layers for image arrays 2283 u32 maxTexelBufferElements 2284 u32 maxUniformBufferRange /// max uniform buffer size (bytes) 2285 u32 maxStorageBufferRange /// max storage buffer size (bytes) 2286 u32 maxPushConstantsSize /// max size of the push constants pool (bytes) 2287 /// memory limits 2288 u32 maxMemoryAllocationCount /// max number of device memory allocations supported 2289 u32 maxSamplerAllocationCount 2290 VkDeviceSize bufferImageGranularity /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage 2291 VkDeviceSize sparseAddressSpaceSize /// Total address space available for sparse allocations (bytes) 2292 /// descriptor set limits 2293 u32 maxBoundDescriptorSets /// max number of descriptors sets that can be bound to a pipeline 2294 u32 maxPerStageDescriptorSamplers /// max num of samplers allowed per-stage in a descriptor set 2295 u32 maxPerStageDescriptorUniformBuffers /// max num of uniform buffers allowed per-stage in a descriptor set 2296 u32 maxPerStageDescriptorStorageBuffers /// max num of storage buffers allowed per-stage in a descriptor set 2297 u32 maxPerStageDescriptorSampledImages /// max num of sampled images allowed per-stage in a descriptor set 2298 u32 maxPerStageDescriptorStorageImages /// max num of storage images allowed per-stage in a descriptor set 2299 u32 maxPerStageDescriptorInputAttachments 2300 u32 maxPerStageResources 2301 u32 maxDescriptorSetSamplers /// max num of samplers allowed in all stages in a descriptor set 2302 u32 maxDescriptorSetUniformBuffers /// max num of uniform buffers allowed in all stages in a descriptor set 2303 u32 maxDescriptorSetUniformBuffersDynamic /// max num of dynamic uniform buffers allowed in all stages in a descriptor set 2304 u32 maxDescriptorSetStorageBuffers /// max num of storage buffers allowed in all stages in a descriptor set 2305 u32 maxDescriptorSetStorageBuffersDynamic /// max num of dynamic storage buffers allowed in all stages in a descriptor set 2306 u32 maxDescriptorSetSampledImages /// max num of sampled images allowed in all stages in a descriptor set 2307 u32 maxDescriptorSetStorageImages /// max num of storage images allowed in all stages in a descriptor set 2308 u32 maxDescriptorSetInputAttachments 2309 /// vertex stage limits 2310 u32 maxVertexInputAttributes /// max num of vertex input attribute slots 2311 u32 maxVertexInputBindings /// max num of vertex input binding slots 2312 u32 maxVertexInputAttributeOffset /// max vertex input attribute offset added to vertex buffer offset 2313 u32 maxVertexInputBindingStride /// max vertex input binding stride 2314 u32 maxVertexOutputComponents /// max num of output components written by vertex shader 2315 /// tessellation control stage limits 2316 u32 maxTessellationGenerationLevel /// max level supported by tess primitive generator 2317 u32 maxTessellationPatchSize /// max patch size (vertices) 2318 u32 maxTessellationControlPerVertexInputComponents /// max num of input components per-vertex in TCS 2319 u32 maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS 2320 u32 maxTessellationControlPerPatchOutputComponents /// max num of output components per-patch in TCS 2321 u32 maxTessellationControlTotalOutputComponents /// max total num of per-vertex and per-patch output components in TCS 2322 u32 maxTessellationEvaluationInputComponents /// max num of input components per vertex in TES 2323 u32 maxTessellationEvaluationOutputComponents /// max num of output components per vertex in TES 2324 /// geometry stage limits 2325 u32 maxGeometryShaderInvocations /// max invocation count supported in geometry shader 2326 u32 maxGeometryInputComponents /// max num of input components read in geometry stage 2327 u32 maxGeometryOutputComponents /// max num of output components written in geometry stage 2328 u32 maxGeometryOutputVertices /// max num of vertices that can be emitted in geometry stage 2329 u32 maxGeometryTotalOutputComponents /// max total num of components (all vertices) written in geometry stage 2330 /// fragment stage limits 2331 u32 maxFragmentInputComponents /// max num of input compontents read in fragment stage 2332 u32 maxFragmentOutputAttachments /// max num of output attachments written in fragment stage 2333 u32 maxFragmentDualSrcAttachments /// max num of output attachments written when using dual source blending 2334 u32 maxFragmentCombinedOutputResources /// max total num of storage buffers, storage images and output buffers 2335 /// compute stage limits 2336 u32 maxComputeSharedMemorySize /// max total storage size of work group local storage (bytes) 2337 u32[3] maxComputeWorkGroupCount /// max num of compute work groups that may be dispatched by a single command (x,y,z) 2338 u32 maxComputeWorkGroupInvocations /// max total compute invocations in a single local work group 2339 u32[3] maxComputeWorkGroupSize /// max local size of a compute work group (x,y,z) 2340 2341 u32 subPixelPrecisionBits /// num bits of subpixel precision in screen x and y 2342 u32 subTexelPrecisionBits /// num bits of subtexel precision 2343 u32 mipmapPrecisionBits /// num bits of mipmap precision 2344 2345 u32 maxDrawIndexedIndexValue /// max index value for indexed draw calls (for 32-bit indices) 2346 u32 maxDrawIndirectCount 2347 2348 f32 maxSamplerLodBias /// max absolute sampler level of detail bias 2349 f32 maxSamplerAnisotropy /// max degree of sampler anisotropy 2350 2351 u32 maxViewports /// max number of active viewports 2352 u32[2] maxViewportDimensions /// max viewport dimensions (x,y) 2353 f32[2] viewportBoundsRange /// viewport bounds range (min,max) 2354 u32 viewportSubPixelBits /// num bits of subpixel precision for viewport 2355 2356 platform.size_t minMemoryMapAlignment /// min required alignment of pointers returned by MapMemory (bytes) 2357 VkDeviceSize minTexelBufferOffsetAlignment /// min required alignment for texel buffer offsets (bytes) 2358 VkDeviceSize minUniformBufferOffsetAlignment /// min required alignment for uniform buffer sizes and offsets (bytes) 2359 VkDeviceSize minStorageBufferOffsetAlignment /// min required alignment for storage buffer offsets (bytes) 2360 2361 s32 minTexelOffset /// min texel offset for OpTextureSampleOffset 2362 u32 maxTexelOffset /// max texel offset for OpTextureSampleOffset 2363 s32 minTexelGatherOffset /// min texel offset for OpTextureGatherOffset 2364 u32 maxTexelGatherOffset /// max texel offset for OpTextureGatherOffset 2365 f32 minInterpolationOffset /// furthest negative offset for interpolateAtOffset 2366 f32 maxInterpolationOffset /// furthest positive offset for interpolateAtOffset 2367 u32 subPixelInterpolationOffsetBits /// num of subpixel bits for interpolateAtOffset 2368 2369 u32 maxFramebufferWidth /// max width for a framebuffer 2370 u32 maxFramebufferHeight /// max height for a framebuffer 2371 u32 maxFramebufferLayers /// max layer count for a layered framebuffer 2372 VkSampleCountFlags framebufferColorSampleCounts 2373 VkSampleCountFlags framebufferDepthSampleCounts 2374 VkSampleCountFlags framebufferStencilSampleCounts 2375 VkSampleCountFlags framebufferNoAttachmentSampleCounts 2376 u32 maxColorAttachments /// max num of framebuffer color attachments 2377 2378 VkSampleCountFlags sampledImageColorSampleCounts 2379 VkSampleCountFlags sampledImageIntegerSampleCounts 2380 VkSampleCountFlags sampledImageDepthSampleCounts 2381 VkSampleCountFlags sampledImageStencilSampleCounts 2382 VkSampleCountFlags storageImageSampleCounts 2383 u32 maxSampleMaskWords /// max num of sample mask words 2384 VkBool32 timestampComputeAndGraphics 2385 2386 f32 timestampPeriod 2387 2388 u32 maxClipDistances /// max number of clip distances 2389 u32 maxCullDistances /// max number of cull distances 2390 u32 maxCombinedClipAndCullDistances /// max combined number of user clipping 2391 2392 u32 discreteQueuePriorities 2393 2394 f32[2] pointSizeRange /// range (min,max) of supported point sizes 2395 f32[2] lineWidthRange /// range (min,max) of supported line widths 2396 f32 pointSizeGranularity /// granularity of supported point sizes 2397 f32 lineWidthGranularity /// granularity of supported line widths 2398 VkBool32 strictLines 2399 VkBool32 standardSampleLocations 2400 2401 VkDeviceSize optimalBufferCopyOffsetAlignment 2402 VkDeviceSize optimalBufferCopyRowPitchAlignment 2403 VkDeviceSize nonCoherentAtomSize 2404} 2405 2406class VkPhysicalDeviceSparseProperties { 2407 VkBool32 residencyStandard2DBlockShape /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format) 2408 VkBool32 residencyStandard2DMultisampleBlockShape /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format) 2409 VkBool32 residencyStandard3DBlockShape /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format) 2410 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 2411 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 2412} 2413 2414class VkSemaphoreCreateInfo { 2415 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO 2416 const void* pNext /// Pointer to next structure 2417 VkSemaphoreCreateFlags flags /// Semaphore creation flags 2418} 2419 2420class VkQueryPoolCreateInfo { 2421 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO 2422 const void* pNext /// Pointer to next structure 2423 VkQueryPoolCreateFlags flags 2424 VkQueryType queryType 2425 u32 queryCount 2426 VkQueryPipelineStatisticFlags pipelineStatistics /// Optional 2427} 2428 2429class VkFramebufferCreateInfo { 2430 VkStructureType sType /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO 2431 const void* pNext /// Pointer to next structure 2432 VkFramebufferCreateFlags flags 2433 VkRenderPass renderPass 2434 u32 attachmentCount 2435 const VkImageView* pAttachments 2436 u32 width 2437 u32 height 2438 u32 layers 2439} 2440 2441class VkDrawIndirectCommand { 2442 u32 vertexCount 2443 u32 instanceCount 2444 u32 firstVertex 2445 u32 firstInstance 2446} 2447 2448class VkDrawIndexedIndirectCommand { 2449 u32 indexCount 2450 u32 instanceCount 2451 u32 firstIndex 2452 s32 vertexOffset 2453 u32 firstInstance 2454} 2455 2456class VkDispatchIndirectCommand { 2457 u32 x 2458 u32 y 2459 u32 z 2460} 2461 2462@extension("VK_KHR_surface") 2463class VkSurfaceCapabilitiesKHR { 2464 u32 minImageCount 2465 u32 maxImageCount 2466 VkExtent2D currentExtent 2467 VkExtent2D minImageExtent 2468 VkExtent2D maxImageExtent 2469 u32 maxImageArrayLayers 2470 VkSurfaceTransformFlagsKHR supportedTransforms 2471 VkSurfaceTransformFlagBitsKHR currentTransform 2472 VkCompositeAlphaFlagsKHR supportedCompositeAlpha 2473 VkImageUsageFlags supportedUsageFlags 2474} 2475 2476@extension("VK_KHR_surface") 2477class VkSurfaceFormatKHR { 2478 VkFormat format 2479 VkColorSpaceKHR colorSpace 2480} 2481 2482@extension("VK_KHR_swapchain") 2483class VkSwapchainCreateInfoKHR { 2484 VkStructureType sType 2485 const void* pNext 2486 VkSwapchainCreateFlagsKHR flags 2487 VkSurfaceKHR surface 2488 u32 minImageCount 2489 VkFormat imageFormat 2490 VkColorSpaceKHR imageColorSpace 2491 VkExtent2D imageExtent 2492 u32 imageArrayLayers 2493 VkImageUsageFlags imageUsage 2494 VkSharingMode sharingMode 2495 u32 queueFamilyIndexCount 2496 const u32* pQueueFamilyIndices 2497 VkSurfaceTransformFlagBitsKHR preTransform 2498 VkCompositeAlphaFlagBitsKHR compositeAlpha 2499 VkPresentModeKHR presentMode 2500 VkBool32 clipped 2501 VkSwapchainKHR oldSwapchain 2502} 2503 2504@extension("VK_KHR_swapchain") 2505class VkPresentInfoKHR { 2506 VkStructureType sType 2507 const void* pNext 2508 u32 waitSemaphoreCount 2509 const VkSemaphore* pWaitSemaphores 2510 u32 swapchainCount 2511 const VkSwapchainKHR* pSwapchains 2512 const u32* pImageIndices 2513 VkResult* pResults 2514} 2515 2516@extension("VK_KHR_display") 2517class VkDisplayPropertiesKHR { 2518 VkDisplayKHR display 2519 const char* displayName 2520 VkExtent2D physicalDimensions 2521 VkExtent2D physicalResolution 2522 VkSurfaceTransformFlagsKHR supportedTransforms 2523 VkBool32 planeReorderPossible 2524 VkBool32 persistentContent 2525} 2526 2527@extension("VK_KHR_display") 2528class VkDisplayModeParametersKHR { 2529 VkExtent2D visibleRegion 2530 u32 refreshRate 2531} 2532 2533@extension("VK_KHR_display") 2534class VkDisplayModePropertiesKHR { 2535 VkDisplayModeKHR displayMode 2536 VkDisplayModeParametersKHR parameters 2537} 2538 2539@extension("VK_KHR_display") 2540class VkDisplayModeCreateInfoKHR { 2541 VkStructureType sType 2542 const void* pNext 2543 VkDisplayModeCreateFlagsKHR flags 2544 VkDisplayModeParametersKHR parameters 2545} 2546 2547@extension("VK_KHR_display") 2548class VkDisplayPlanePropertiesKHR { 2549 VkDisplayKHR currentDisplay 2550 u32 currentStackIndex 2551} 2552 2553@extension("VK_KHR_display") 2554class VkDisplayPlaneCapabilitiesKHR { 2555 VkDisplayPlaneAlphaFlagsKHR supportedAlpha 2556 VkOffset2D minSrcPosition 2557 VkOffset2D maxSrcPosition 2558 VkExtent2D minSrcExtent 2559 VkExtent2D maxSrcExtent 2560 VkOffset2D minDstPosition 2561 VkOffset2D maxDstPosition 2562 VkExtent2D minDstExtent 2563 VkExtent2D maxDstExtent 2564} 2565 2566@extension("VK_KHR_display") 2567class VkDisplaySurfaceCreateInfoKHR { 2568 VkStructureType sType 2569 const void* pNext 2570 VkDisplaySurfaceCreateFlagsKHR flags 2571 VkDisplayModeKHR displayMode 2572 u32 planeIndex 2573 u32 planeStackIndex 2574 VkSurfaceTransformFlagBitsKHR transform 2575 f32 globalAlpha 2576 VkDisplayPlaneAlphaFlagBitsKHR alphaMode 2577 VkExtent2D imageExtent 2578} 2579 2580@extension("VK_KHR_display_swapchain") 2581class VkDisplayPresentInfoKHR { 2582 VkStructureType sType 2583 const void* pNext 2584 VkRect2D srcRect 2585 VkRect2D dstRect 2586 VkBool32 persistent 2587} 2588 2589@extension("VK_KHR_xlib_surface") 2590class VkXlibSurfaceCreateInfoKHR { 2591 VkStructureType sType 2592 const void* pNext 2593 VkXlibSurfaceCreateFlagsKHR flags 2594 platform.Display* dpy 2595 platform.Window window 2596} 2597 2598@extension("VK_KHR_xcb_surface") 2599class VkXcbSurfaceCreateInfoKHR { 2600 VkStructureType sType 2601 const void* pNext 2602 VkXcbSurfaceCreateFlagsKHR flags 2603 platform.xcb_connection_t* connection 2604 platform.xcb_window_t window 2605} 2606 2607@extension("VK_KHR_wayland_surface") 2608class VkWaylandSurfaceCreateInfoKHR { 2609 VkStructureType sType 2610 const void* pNext 2611 VkWaylandSurfaceCreateFlagsKHR flags 2612 platform.wl_display* display 2613 platform.wl_surface* surface 2614} 2615 2616@extension("VK_KHR_mir_surface") 2617class VkMirSurfaceCreateInfoKHR { 2618 VkStructureType sType 2619 const void* pNext 2620 VkMirSurfaceCreateFlagsKHR flags 2621 platform.MirConnection* connection 2622 platform.MirSurface* mirSurface 2623} 2624 2625@extension("VK_KHR_android_surface") 2626class VkAndroidSurfaceCreateInfoKHR { 2627 VkStructureType sType 2628 const void* pNext 2629 VkAndroidSurfaceCreateFlagsKHR flags 2630 platform.ANativeWindow* window 2631} 2632 2633@extension("VK_KHR_win32_surface") 2634class VkWin32SurfaceCreateInfoKHR { 2635 VkStructureType sType 2636 const void* pNext 2637 VkWin32SurfaceCreateFlagsKHR flags 2638 platform.HINSTANCE hinstance 2639 platform.HWND hwnd 2640} 2641 2642@extension("VK_ANDROID_native_buffer") 2643class VkNativeBufferANDROID { 2644 VkStructureType sType 2645 const void* pNext 2646 platform.buffer_handle_t handle 2647 int stride 2648 int format 2649 int usage 2650} 2651 2652@extension("VK_EXT_debug_report") 2653class VkDebugReportCallbackCreateInfoEXT { 2654 VkStructureType sType 2655 const void* pNext 2656 VkDebugReportFlagsEXT flags 2657 PFN_vkDebugReportCallbackEXT pfnCallback 2658 void* pUserData 2659} 2660 2661@extension("VK_AMD_rasterization_order") 2662class VkPipelineRasterizationStateRasterizationOrderAMD { 2663 VkStructureType sType 2664 const void* pNext 2665 VkRasterizationOrderAMD rasterizationOrder 2666} 2667 2668@extension("VK_EXT_debug_marker") 2669class VkDebugMarkerObjectNameInfoEXT { 2670 VkStructureType sType 2671 const void* pNext 2672 VkDebugReportObjectTypeEXT objectType 2673 u64 object 2674 const char* pObjectName 2675} 2676 2677@extension("VK_EXT_debug_marker") 2678class VkDebugMarkerObjectTagInfoEXT { 2679 VkStructureType sType 2680 const void* pNext 2681 VkDebugReportObjectTypeEXT objectType 2682 u64 object 2683 u64 tagName 2684 platform.size_t tagSize 2685 const void* pTag 2686} 2687 2688@extension("VK_EXT_debug_marker") 2689class VkDebugMarkerMarkerInfoEXT { 2690 VkStructureType sType 2691 const void* pNext 2692 const char* pMarkerName 2693 f32[4] color 2694} 2695 2696 2697//////////////// 2698// Commands // 2699//////////////// 2700 2701// Function pointers. TODO: add support for function pointers. 2702 2703@external type void* PFN_vkVoidFunction 2704@pfn cmd void vkVoidFunction() { 2705} 2706 2707@external type void* PFN_vkAllocationFunction 2708@pfn cmd void* vkAllocationFunction( 2709 void* pUserData, 2710 platform.size_t size, 2711 platform.size_t alignment, 2712 VkSystemAllocationScope allocationScope) { 2713 return ? 2714} 2715 2716@external type void* PFN_vkReallocationFunction 2717@pfn cmd void* vkReallocationFunction( 2718 void* pUserData, 2719 void* pOriginal, 2720 platform.size_t size, 2721 platform.size_t alignment, 2722 VkSystemAllocationScope allocationScope) { 2723 return ? 2724} 2725 2726@external type void* PFN_vkFreeFunction 2727@pfn cmd void vkFreeFunction( 2728 void* pUserData, 2729 void* pMemory) { 2730} 2731 2732@external type void* PFN_vkInternalAllocationNotification 2733@pfn cmd void vkInternalAllocationNotification( 2734 void* pUserData, 2735 platform.size_t size, 2736 VkInternalAllocationType allocationType, 2737 VkSystemAllocationScope allocationScope) { 2738} 2739 2740@external type void* PFN_vkInternalFreeNotification 2741@pfn cmd void vkInternalFreeNotification( 2742 void* pUserData, 2743 platform.size_t size, 2744 VkInternalAllocationType allocationType, 2745 VkSystemAllocationScope allocationScope) { 2746} 2747 2748// Global functions 2749 2750@threadSafety("system") 2751cmd VkResult vkCreateInstance( 2752 const VkInstanceCreateInfo* pCreateInfo, 2753 const VkAllocationCallbacks* pAllocator, 2754 VkInstance* pInstance) { 2755 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO) 2756 2757 instance := ? 2758 pInstance[0] = instance 2759 State.Instances[instance] = new!InstanceObject() 2760 2761 layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerCount] 2762 extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionCount] 2763 2764 return ? 2765} 2766 2767@threadSafety("system") 2768cmd void vkDestroyInstance( 2769 VkInstance instance, 2770 const VkAllocationCallbacks* pAllocator) { 2771 instanceObject := GetInstance(instance) 2772 2773 State.Instances[instance] = null 2774} 2775 2776@threadSafety("system") 2777cmd VkResult vkEnumeratePhysicalDevices( 2778 VkInstance instance, 2779 u32* pPhysicalDeviceCount, 2780 VkPhysicalDevice* pPhysicalDevices) { 2781 instanceObject := GetInstance(instance) 2782 2783 physicalDeviceCount := as!u32(?) 2784 pPhysicalDeviceCount[0] = physicalDeviceCount 2785 physicalDevices := pPhysicalDevices[0:physicalDeviceCount] 2786 2787 for i in (0 .. physicalDeviceCount) { 2788 physicalDevice := ? 2789 physicalDevices[i] = physicalDevice 2790 if !(physicalDevice in State.PhysicalDevices) { 2791 State.PhysicalDevices[physicalDevice] = new!PhysicalDeviceObject(instance: instance) 2792 } 2793 } 2794 2795 return ? 2796} 2797 2798cmd PFN_vkVoidFunction vkGetDeviceProcAddr( 2799 VkDevice device, 2800 const char* pName) { 2801 if device != NULL_HANDLE { 2802 device := GetDevice(device) 2803 } 2804 2805 return ? 2806} 2807 2808cmd PFN_vkVoidFunction vkGetInstanceProcAddr( 2809 VkInstance instance, 2810 const char* pName) { 2811 if instance != NULL_HANDLE { 2812 instanceObject := GetInstance(instance) 2813 } 2814 2815 return ? 2816} 2817 2818cmd void vkGetPhysicalDeviceProperties( 2819 VkPhysicalDevice physicalDevice, 2820 VkPhysicalDeviceProperties* pProperties) { 2821 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2822 2823 properties := ? 2824 pProperties[0] = properties 2825} 2826 2827cmd void vkGetPhysicalDeviceQueueFamilyProperties( 2828 VkPhysicalDevice physicalDevice, 2829 u32* pQueueFamilyPropertyCount, 2830 VkQueueFamilyProperties* pQueueFamilyProperties) { 2831 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2832 // TODO: Figure out how to express fetch-count-or-properties 2833 // This version fails 'apic validate' with 'fence not allowed in 2834 // *semantic.Branch'. Other attempts have failed with the same or other 2835 // errors. 2836 // if pQueueFamilyProperties != null { 2837 // queuesProperties := pQueueFamilyProperties[0:pCount[0]] 2838 // for i in (0 .. pCount[0]) { 2839 // queueProperties := as!VkQueueFamilyProperties(?) 2840 // queuesProperties[i] = queueProperties 2841 // } 2842 // } else { 2843 // count := ? 2844 // pCount[0] = count 2845 // } 2846} 2847 2848cmd void vkGetPhysicalDeviceMemoryProperties( 2849 VkPhysicalDevice physicalDevice, 2850 VkPhysicalDeviceMemoryProperties* pMemoryProperties) { 2851 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2852 2853 memoryProperties := ? 2854 pMemoryProperties[0] = memoryProperties 2855} 2856 2857cmd void vkGetPhysicalDeviceFeatures( 2858 VkPhysicalDevice physicalDevice, 2859 VkPhysicalDeviceFeatures* pFeatures) { 2860 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2861 2862 features := ? 2863 pFeatures[0] = features 2864} 2865 2866cmd void vkGetPhysicalDeviceFormatProperties( 2867 VkPhysicalDevice physicalDevice, 2868 VkFormat format, 2869 VkFormatProperties* pFormatProperties) { 2870 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2871 2872 formatProperties := ? 2873 pFormatProperties[0] = formatProperties 2874} 2875 2876cmd VkResult vkGetPhysicalDeviceImageFormatProperties( 2877 VkPhysicalDevice physicalDevice, 2878 VkFormat format, 2879 VkImageType type, 2880 VkImageTiling tiling, 2881 VkImageUsageFlags usage, 2882 VkImageCreateFlags flags, 2883 VkImageFormatProperties* pImageFormatProperties) { 2884 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2885 2886 imageFormatProperties := ? 2887 pImageFormatProperties[0] = imageFormatProperties 2888 2889 return ? 2890} 2891 2892 2893// Device functions 2894 2895@threadSafety("system") 2896cmd VkResult vkCreateDevice( 2897 VkPhysicalDevice physicalDevice, 2898 const VkDeviceCreateInfo* pCreateInfo, 2899 const VkAllocationCallbacks* pAllocator, 2900 VkDevice* pDevice) { 2901 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO) 2902 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2903 2904 device := ? 2905 pDevice[0] = device 2906 State.Devices[device] = new!DeviceObject(physicalDevice: physicalDevice) 2907 2908 return ? 2909} 2910 2911@threadSafety("system") 2912cmd void vkDestroyDevice( 2913 VkDevice device, 2914 const VkAllocationCallbacks* pAllocator) { 2915 deviceObject := GetDevice(device) 2916 2917 State.Devices[device] = null 2918} 2919 2920 2921// Extension discovery functions 2922 2923cmd VkResult vkEnumerateInstanceLayerProperties( 2924 u32* pPropertyCount, 2925 VkLayerProperties* pProperties) { 2926 count := as!u32(?) 2927 pPropertyCount[0] = count 2928 2929 properties := pProperties[0:count] 2930 for i in (0 .. count) { 2931 property := ? 2932 properties[i] = property 2933 } 2934 2935 return ? 2936} 2937 2938cmd VkResult vkEnumerateInstanceExtensionProperties( 2939 const char* pLayerName, 2940 u32* pPropertyCount, 2941 VkExtensionProperties* pProperties) { 2942 count := as!u32(?) 2943 pPropertyCount[0] = count 2944 2945 properties := pProperties[0:count] 2946 for i in (0 .. count) { 2947 property := ? 2948 properties[i] = property 2949 } 2950 2951 return ? 2952} 2953 2954cmd VkResult vkEnumerateDeviceLayerProperties( 2955 VkPhysicalDevice physicalDevice, 2956 u32* pPropertyCount, 2957 VkLayerProperties* pProperties) { 2958 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2959 count := as!u32(?) 2960 pPropertyCount[0] = count 2961 2962 properties := pProperties[0:count] 2963 for i in (0 .. count) { 2964 property := ? 2965 properties[i] = property 2966 } 2967 2968 return ? 2969} 2970 2971cmd VkResult vkEnumerateDeviceExtensionProperties( 2972 VkPhysicalDevice physicalDevice, 2973 const char* pLayerName, 2974 u32* pPropertyCount, 2975 VkExtensionProperties* pProperties) { 2976 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 2977 2978 count := as!u32(?) 2979 pPropertyCount[0] = count 2980 2981 properties := pProperties[0:count] 2982 for i in (0 .. count) { 2983 property := ? 2984 properties[i] = property 2985 } 2986 2987 return ? 2988} 2989 2990 2991// Queue functions 2992 2993@threadSafety("system") 2994cmd void vkGetDeviceQueue( 2995 VkDevice device, 2996 u32 queueFamilyIndex, 2997 u32 queueIndex, 2998 VkQueue* pQueue) { 2999 deviceObject := GetDevice(device) 3000 3001 queue := ? 3002 pQueue[0] = queue 3003 3004 if !(queue in State.Queues) { 3005 State.Queues[queue] = new!QueueObject(device: device) 3006 } 3007} 3008 3009@threadSafety("app") 3010cmd VkResult vkQueueSubmit( 3011 VkQueue queue, 3012 u32 submitCount, 3013 const VkSubmitInfo* pSubmits, 3014 VkFence fence) { 3015 queueObject := GetQueue(queue) 3016 3017 if fence != NULL_HANDLE { 3018 fenceObject := GetFence(fence) 3019 assert(fenceObject.device == queueObject.device) 3020 } 3021 3022 // commandBuffers := pcommandBuffers[0:commandBufferCount] 3023 // for i in (0 .. commandBufferCount) { 3024 // commandBuffer := commandBuffers[i] 3025 // commandBufferObject := GetCommandBuffer(commandBuffer) 3026 // assert(commandBufferObject.device == queueObject.device) 3027 // 3028 // validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags, 3029 // "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.") 3030 // } 3031 3032 return ? 3033} 3034 3035@threadSafety("system") 3036cmd VkResult vkQueueWaitIdle( 3037 VkQueue queue) { 3038 queueObject := GetQueue(queue) 3039 3040 return ? 3041} 3042 3043@threadSafety("system") 3044cmd VkResult vkDeviceWaitIdle( 3045 VkDevice device) { 3046 deviceObject := GetDevice(device) 3047 3048 return ? 3049} 3050 3051 3052// Memory functions 3053 3054@threadSafety("system") 3055cmd VkResult vkAllocateMemory( 3056 VkDevice device, 3057 const VkMemoryAllocateInfo* pAllocateInfo, 3058 const VkAllocationCallbacks* pAllocator, 3059 VkDeviceMemory* pMemory) { 3060 assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO) 3061 deviceObject := GetDevice(device) 3062 3063 memory := ? 3064 pMemory[0] = memory 3065 State.DeviceMemories[memory] = new!DeviceMemoryObject( 3066 device: device, 3067 allocationSize: pAllocateInfo[0].allocationSize) 3068 3069 return ? 3070} 3071 3072@threadSafety("system") 3073cmd void vkFreeMemory( 3074 VkDevice device, 3075 VkDeviceMemory memory, 3076 const VkAllocationCallbacks* pAllocator) { 3077 deviceObject := GetDevice(device) 3078 memoryObject := GetDeviceMemory(memory) 3079 assert(memoryObject.device == device) 3080 3081 // Check that no objects are still bound before freeing. 3082 validate("MemoryCheck", len(memoryObject.boundObjects) == 0, 3083 "vkFreeMemory: objects still bound") 3084 validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0, 3085 "vkFreeMemory: commandBuffers still bound") 3086 State.DeviceMemories[memory] = null 3087} 3088 3089@threadSafety("app") 3090cmd VkResult vkMapMemory( 3091 VkDevice device, 3092 VkDeviceMemory memory, 3093 VkDeviceSize offset, 3094 VkDeviceSize size, 3095 VkMemoryMapFlags flags, 3096 void** ppData) { 3097 deviceObject := GetDevice(device) 3098 memoryObject := GetDeviceMemory(memory) 3099 assert(memoryObject.device == device) 3100 3101 assert(flags == as!VkMemoryMapFlags(0)) 3102 assert((offset + size) <= memoryObject.allocationSize) 3103 3104 return ? 3105} 3106 3107@threadSafety("app") 3108cmd void vkUnmapMemory( 3109 VkDevice device, 3110 VkDeviceMemory memory) { 3111 deviceObject := GetDevice(device) 3112 memoryObject := GetDeviceMemory(memory) 3113 assert(memoryObject.device == device) 3114} 3115 3116cmd VkResult vkFlushMappedMemoryRanges( 3117 VkDevice device, 3118 u32 memoryRangeCount 3119 const VkMappedMemoryRange* pMemoryRanges) { 3120 deviceObject := GetDevice(device) 3121 3122 memoryRanges := pMemoryRanges[0:memoryRangeCount] 3123 for i in (0 .. memoryRangeCount) { 3124 memoryRange := memoryRanges[i] 3125 memoryObject := GetDeviceMemory(memoryRange.memory) 3126 assert(memoryObject.device == device) 3127 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize) 3128 } 3129 3130 return ? 3131} 3132 3133cmd VkResult vkInvalidateMappedMemoryRanges( 3134 VkDevice device, 3135 u32 memoryRangeCount, 3136 const VkMappedMemoryRange* pMemoryRanges) { 3137 deviceObject := GetDevice(device) 3138 3139 memoryRanges := pMemoryRanges[0:memoryRangeCount] 3140 for i in (0 .. memoryRangeCount) { 3141 memoryRange := memoryRanges[i] 3142 memoryObject := GetDeviceMemory(memoryRange.memory) 3143 assert(memoryObject.device == device) 3144 assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize) 3145 } 3146 3147 return ? 3148} 3149 3150 3151// Memory management API functions 3152 3153cmd void vkGetDeviceMemoryCommitment( 3154 VkDevice device, 3155 VkDeviceMemory memory, 3156 VkDeviceSize* pCommittedMemoryInBytes) { 3157 deviceObject := GetDevice(device) 3158 3159 if memory != NULL_HANDLE { 3160 memoryObject := GetDeviceMemory(memory) 3161 assert(memoryObject.device == device) 3162 } 3163 3164 committedMemoryInBytes := ? 3165 pCommittedMemoryInBytes[0] = committedMemoryInBytes 3166} 3167 3168cmd void vkGetBufferMemoryRequirements( 3169 VkDevice device, 3170 VkBuffer buffer, 3171 VkMemoryRequirements* pMemoryRequirements) { 3172 deviceObject := GetDevice(device) 3173 bufferObject := GetBuffer(buffer) 3174 assert(bufferObject.device == device) 3175} 3176 3177cmd VkResult vkBindBufferMemory( 3178 VkDevice device, 3179 VkBuffer buffer, 3180 VkDeviceMemory memory, 3181 VkDeviceSize memoryOffset) { 3182 deviceObject := GetDevice(device) 3183 bufferObject := GetBuffer(buffer) 3184 assert(bufferObject.device == device) 3185 3186 // Unbind buffer from previous memory object, if not VK_NULL_HANDLE. 3187 if bufferObject.memory != NULL_HANDLE { 3188 memoryObject := GetDeviceMemory(bufferObject.memory) 3189 memoryObject.boundObjects[as!u64(buffer)] = null 3190 } 3191 3192 // Bind buffer to given memory object, if not VK_NULL_HANDLE. 3193 if memory != NULL_HANDLE { 3194 memoryObject := GetDeviceMemory(memory) 3195 assert(memoryObject.device == device) 3196 memoryObject.boundObjects[as!u64(buffer)] = memoryOffset 3197 } 3198 bufferObject.memory = memory 3199 bufferObject.memoryOffset = memoryOffset 3200 3201 return ? 3202} 3203 3204cmd void vkGetImageMemoryRequirements( 3205 VkDevice device, 3206 VkImage image, 3207 VkMemoryRequirements* pMemoryRequirements) { 3208 deviceObject := GetDevice(device) 3209 imageObject := GetImage(image) 3210 assert(imageObject.device == device) 3211} 3212 3213cmd VkResult vkBindImageMemory( 3214 VkDevice device, 3215 VkImage image, 3216 VkDeviceMemory memory, 3217 VkDeviceSize memoryOffset) { 3218 deviceObject := GetDevice(device) 3219 imageObject := GetImage(image) 3220 assert(imageObject.device == device) 3221 3222 // Unbind image from previous memory object, if not VK_NULL_HANDLE. 3223 if imageObject.memory != NULL_HANDLE { 3224 memoryObject := GetDeviceMemory(imageObject.memory) 3225 memoryObject.boundObjects[as!u64(image)] = null 3226 } 3227 3228 // Bind image to given memory object, if not VK_NULL_HANDLE. 3229 if memory != NULL_HANDLE { 3230 memoryObject := GetDeviceMemory(memory) 3231 assert(memoryObject.device == device) 3232 memoryObject.boundObjects[as!u64(image)] = memoryOffset 3233 } 3234 imageObject.memory = memory 3235 imageObject.memoryOffset = memoryOffset 3236 3237 return ? 3238} 3239 3240cmd void vkGetImageSparseMemoryRequirements( 3241 VkDevice device, 3242 VkImage image, 3243 u32* pSparseMemoryRequirementCount, 3244 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) { 3245 deviceObject := GetDevice(device) 3246 imageObject := GetImage(image) 3247 assert(imageObject.device == device) 3248} 3249 3250cmd void vkGetPhysicalDeviceSparseImageFormatProperties( 3251 VkPhysicalDevice physicalDevice, 3252 VkFormat format, 3253 VkImageType type, 3254 VkSampleCountFlagBits samples, 3255 VkImageUsageFlags usage, 3256 VkImageTiling tiling, 3257 u32* pPropertyCount, 3258 VkSparseImageFormatProperties* pProperties) { 3259 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 3260} 3261 3262cmd VkResult vkQueueBindSparse( 3263 VkQueue queue, 3264 u32 bindInfoCount, 3265 const VkBindSparseInfo* pBindInfo, 3266 VkFence fence) { 3267 queueObject := GetQueue(queue) 3268 3269 return ? 3270} 3271 3272 3273// Fence functions 3274 3275@threadSafety("system") 3276cmd VkResult vkCreateFence( 3277 VkDevice device, 3278 const VkFenceCreateInfo* pCreateInfo, 3279 const VkAllocationCallbacks* pAllocator, 3280 VkFence* pFence) { 3281 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO) 3282 deviceObject := GetDevice(device) 3283 3284 fence := ? 3285 pFence[0] = fence 3286 State.Fences[fence] = new!FenceObject( 3287 device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT))) 3288 3289 return ? 3290} 3291 3292@threadSafety("system") 3293cmd void vkDestroyFence( 3294 VkDevice device, 3295 VkFence fence, 3296 const VkAllocationCallbacks* pAllocator) { 3297 deviceObject := GetDevice(device) 3298 fenceObject := GetFence(fence) 3299 assert(fenceObject.device == device) 3300 3301 State.Fences[fence] = null 3302} 3303 3304@threadSafety("system") 3305cmd VkResult vkResetFences( 3306 VkDevice device, 3307 u32 fenceCount, 3308 const VkFence* pFences) { 3309 deviceObject := GetDevice(device) 3310 3311 fences := pFences[0:fenceCount] 3312 for i in (0 .. fenceCount) { 3313 fence := fences[i] 3314 fenceObject := GetFence(fence) 3315 assert(fenceObject.device == device) 3316 fenceObject.signaled = false 3317 } 3318 3319 return ? 3320} 3321 3322@threadSafety("system") 3323cmd VkResult vkGetFenceStatus( 3324 VkDevice device, 3325 VkFence fence) { 3326 deviceObject := GetDevice(device) 3327 fenceObject := GetFence(fence) 3328 assert(fenceObject.device == device) 3329 3330 return ? 3331} 3332 3333@threadSafety("system") 3334cmd VkResult vkWaitForFences( 3335 VkDevice device, 3336 u32 fenceCount, 3337 const VkFence* pFences, 3338 VkBool32 waitAll, 3339 u64 timeout) { /// timeout in nanoseconds 3340 deviceObject := GetDevice(device) 3341 3342 fences := pFences[0:fenceCount] 3343 for i in (0 .. fenceCount) { 3344 fence := fences[i] 3345 fenceObject := GetFence(fence) 3346 assert(fenceObject.device == device) 3347 } 3348 3349 return ? 3350} 3351 3352 3353// Queue semaphore functions 3354 3355@threadSafety("system") 3356cmd VkResult vkCreateSemaphore( 3357 VkDevice device, 3358 const VkSemaphoreCreateInfo* pCreateInfo, 3359 const VkAllocationCallbacks* pAllocator, 3360 VkSemaphore* pSemaphore) { 3361 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO) 3362 deviceObject := GetDevice(device) 3363 3364 semaphore := ? 3365 pSemaphore[0] = semaphore 3366 State.Semaphores[semaphore] = new!SemaphoreObject(device: device) 3367 3368 return ? 3369} 3370 3371@threadSafety("system") 3372cmd void vkDestroySemaphore( 3373 VkDevice device, 3374 VkSemaphore semaphore, 3375 const VkAllocationCallbacks* pAllocator) { 3376 deviceObject := GetDevice(device) 3377 semaphoreObject := GetSemaphore(semaphore) 3378 assert(semaphoreObject.device == device) 3379 3380 State.Semaphores[semaphore] = null 3381} 3382 3383 3384// Event functions 3385 3386@threadSafety("system") 3387cmd VkResult vkCreateEvent( 3388 VkDevice device, 3389 const VkEventCreateInfo* pCreateInfo, 3390 const VkAllocationCallbacks* pAllocator, 3391 VkEvent* pEvent) { 3392 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO) 3393 deviceObject := GetDevice(device) 3394 3395 event := ? 3396 pEvent[0] = event 3397 State.Events[event] = new!EventObject(device: device) 3398 3399 return ? 3400} 3401 3402@threadSafety("system") 3403cmd void vkDestroyEvent( 3404 VkDevice device, 3405 VkEvent event, 3406 const VkAllocationCallbacks* pAllocator) { 3407 deviceObject := GetDevice(device) 3408 eventObject := GetEvent(event) 3409 assert(eventObject.device == device) 3410 3411 State.Events[event] = null 3412} 3413 3414@threadSafety("system") 3415cmd VkResult vkGetEventStatus( 3416 VkDevice device, 3417 VkEvent event) { 3418 deviceObject := GetDevice(device) 3419 eventObject := GetEvent(event) 3420 assert(eventObject.device == device) 3421 3422 return ? 3423} 3424 3425@threadSafety("system") 3426cmd VkResult vkSetEvent( 3427 VkDevice device, 3428 VkEvent event) { 3429 deviceObject := GetDevice(device) 3430 eventObject := GetEvent(event) 3431 assert(eventObject.device == device) 3432 3433 return ? 3434} 3435 3436@threadSafety("system") 3437cmd VkResult vkResetEvent( 3438 VkDevice device, 3439 VkEvent event) { 3440 deviceObject := GetDevice(device) 3441 eventObject := GetEvent(event) 3442 assert(eventObject.device == device) 3443 3444 return ? 3445} 3446 3447 3448// Query functions 3449 3450@threadSafety("system") 3451cmd VkResult vkCreateQueryPool( 3452 VkDevice device, 3453 const VkQueryPoolCreateInfo* pCreateInfo, 3454 const VkAllocationCallbacks* pAllocator, 3455 VkQueryPool* pQueryPool) { 3456 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO) 3457 deviceObject := GetDevice(device) 3458 3459 queryPool := ? 3460 pQueryPool[0] = queryPool 3461 State.QueryPools[queryPool] = new!QueryPoolObject(device: device) 3462 3463 return ? 3464} 3465 3466@threadSafety("system") 3467cmd void vkDestroyQueryPool( 3468 VkDevice device, 3469 VkQueryPool queryPool, 3470 const VkAllocationCallbacks* pAllocator) { 3471 deviceObject := GetDevice(device) 3472 queryPoolObject := GetQueryPool(queryPool) 3473 assert(queryPoolObject.device == device) 3474 3475 State.QueryPools[queryPool] = null 3476} 3477 3478@threadSafety("system") 3479cmd VkResult vkGetQueryPoolResults( 3480 VkDevice device, 3481 VkQueryPool queryPool, 3482 u32 firstQuery, 3483 u32 queryCount, 3484 platform.size_t dataSize, 3485 void* pData, 3486 VkDeviceSize stride, 3487 VkQueryResultFlags flags) { 3488 deviceObject := GetDevice(device) 3489 queryPoolObject := GetQueryPool(queryPool) 3490 assert(queryPoolObject.device == device) 3491 3492 data := pData[0:dataSize] 3493 3494 return ? 3495} 3496 3497// Buffer functions 3498 3499@threadSafety("system") 3500cmd VkResult vkCreateBuffer( 3501 VkDevice device, 3502 const VkBufferCreateInfo* pCreateInfo, 3503 const VkAllocationCallbacks* pAllocator, 3504 VkBuffer* pBuffer) { 3505 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO) 3506 deviceObject := GetDevice(device) 3507 3508 buffer := ? 3509 pBuffer[0] = buffer 3510 State.Buffers[buffer] = new!BufferObject(device: device) 3511 3512 return ? 3513} 3514 3515@threadSafety("system") 3516cmd void vkDestroyBuffer( 3517 VkDevice device, 3518 VkBuffer buffer, 3519 const VkAllocationCallbacks* pAllocator) { 3520 deviceObject := GetDevice(device) 3521 bufferObject := GetBuffer(buffer) 3522 assert(bufferObject.device == device) 3523 3524 assert(bufferObject.memory == 0) 3525 State.Buffers[buffer] = null 3526} 3527 3528 3529// Buffer view functions 3530 3531@threadSafety("system") 3532cmd VkResult vkCreateBufferView( 3533 VkDevice device, 3534 const VkBufferViewCreateInfo* pCreateInfo, 3535 const VkAllocationCallbacks* pAllocator, 3536 VkBufferView* pView) { 3537 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO) 3538 deviceObject := GetDevice(device) 3539 3540 bufferObject := GetBuffer(pCreateInfo.buffer) 3541 assert(bufferObject.device == device) 3542 3543 view := ? 3544 pView[0] = view 3545 State.BufferViews[view] = new!BufferViewObject(device: device, buffer: pCreateInfo.buffer) 3546 3547 return ? 3548} 3549 3550@threadSafety("system") 3551cmd void vkDestroyBufferView( 3552 VkDevice device, 3553 VkBufferView bufferView, 3554 const VkAllocationCallbacks* pAllocator) { 3555 deviceObject := GetDevice(device) 3556 bufferViewObject := GetBufferView(bufferView) 3557 assert(bufferViewObject.device == device) 3558 3559 State.BufferViews[bufferView] = null 3560} 3561 3562 3563// Image functions 3564 3565@threadSafety("system") 3566cmd VkResult vkCreateImage( 3567 VkDevice device, 3568 const VkImageCreateInfo* pCreateInfo, 3569 const VkAllocationCallbacks* pAllocator, 3570 VkImage* pImage) { 3571 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO) 3572 deviceObject := GetDevice(device) 3573 3574 image := ? 3575 pImage[0] = image 3576 State.Images[image] = new!ImageObject(device: device) 3577 3578 return ? 3579} 3580 3581@threadSafety("system") 3582cmd void vkDestroyImage( 3583 VkDevice device, 3584 VkImage image, 3585 const VkAllocationCallbacks* pAllocator) { 3586 deviceObject := GetDevice(device) 3587 imageObject := GetImage(image) 3588 assert(imageObject.device == device) 3589 3590 assert(imageObject.memory == 0) 3591 State.Images[image] = null 3592} 3593 3594cmd void vkGetImageSubresourceLayout( 3595 VkDevice device, 3596 VkImage image, 3597 const VkImageSubresource* pSubresource, 3598 VkSubresourceLayout* pLayout) { 3599 deviceObject := GetDevice(device) 3600 imageObject := GetImage(image) 3601 assert(imageObject.device == device) 3602} 3603 3604 3605// Image view functions 3606 3607@threadSafety("system") 3608cmd VkResult vkCreateImageView( 3609 VkDevice device, 3610 const VkImageViewCreateInfo* pCreateInfo, 3611 const VkAllocationCallbacks* pAllocator, 3612 VkImageView* pView) { 3613 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO) 3614 deviceObject := GetDevice(device) 3615 3616 imageObject := GetImage(pCreateInfo.image) 3617 assert(imageObject.device == device) 3618 3619 view := ? 3620 pView[0] = view 3621 State.ImageViews[view] = new!ImageViewObject(device: device, image: pCreateInfo.image) 3622 3623 return ? 3624} 3625 3626@threadSafety("system") 3627cmd void vkDestroyImageView( 3628 VkDevice device, 3629 VkImageView imageView, 3630 const VkAllocationCallbacks* pAllocator) { 3631 deviceObject := GetDevice(device) 3632 imageViewObject := GetImageView(imageView) 3633 assert(imageViewObject.device == device) 3634 3635 State.ImageViews[imageView] = null 3636} 3637 3638 3639// Shader functions 3640 3641cmd VkResult vkCreateShaderModule( 3642 VkDevice device, 3643 const VkShaderModuleCreateInfo* pCreateInfo, 3644 const VkAllocationCallbacks* pAllocator, 3645 VkShaderModule* pShaderModule) { 3646 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) 3647 deviceObject := GetDevice(device) 3648 3649 shaderModule := ? 3650 pShaderModule[0] = shaderModule 3651 State.ShaderModules[shaderModule] = new!ShaderModuleObject(device: device) 3652 3653 return ? 3654} 3655 3656cmd void vkDestroyShaderModule( 3657 VkDevice device, 3658 VkShaderModule shaderModule, 3659 const VkAllocationCallbacks* pAllocator) { 3660 deviceObject := GetDevice(device) 3661 shaderModuleObject := GetShaderModule(shaderModule) 3662 assert(shaderModuleObject.device == device) 3663 3664 State.ShaderModules[shaderModule] = null 3665} 3666 3667 3668// Pipeline functions 3669 3670cmd VkResult vkCreatePipelineCache( 3671 VkDevice device, 3672 const VkPipelineCacheCreateInfo* pCreateInfo, 3673 const VkAllocationCallbacks* pAllocator, 3674 VkPipelineCache* pPipelineCache) { 3675 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO) 3676 deviceObject := GetDevice(device) 3677 3678 pipelineCache := ? 3679 pPipelineCache[0] = pipelineCache 3680 State.PipelineCaches[pipelineCache] = new!PipelineCacheObject(device: device) 3681 3682 return ? 3683} 3684 3685cmd void vkDestroyPipelineCache( 3686 VkDevice device, 3687 VkPipelineCache pipelineCache, 3688 const VkAllocationCallbacks* pAllocator) { 3689 deviceObject := GetDevice(device) 3690 pipelineCacheObject := GetPipelineCache(pipelineCache) 3691 assert(pipelineCacheObject.device == device) 3692 3693 State.PipelineCaches[pipelineCache] = null 3694} 3695 3696cmd VkResult vkGetPipelineCacheData( 3697 VkDevice device, 3698 VkPipelineCache pipelineCache, 3699 platform.size_t* pDataSize, 3700 void* pData) { 3701 deviceObject := GetDevice(device) 3702 pipelineCacheObject := GetPipelineCache(pipelineCache) 3703 assert(pipelineCacheObject.device == device) 3704 3705 return ? 3706} 3707 3708cmd VkResult vkMergePipelineCaches( 3709 VkDevice device, 3710 VkPipelineCache dstCache, 3711 u32 srcCacheCount, 3712 const VkPipelineCache* pSrcCaches) { 3713 deviceObject := GetDevice(device) 3714 dstCacheObject := GetPipelineCache(dstCache) 3715 assert(dstCacheObject.device == device) 3716 3717 srcCaches := pSrcCaches[0:srcCacheCount] 3718 for i in (0 .. srcCacheCount) { 3719 srcCache := srcCaches[i] 3720 srcCacheObject := GetPipelineCache(srcCache) 3721 assert(srcCacheObject.device == device) 3722 } 3723 3724 return ? 3725} 3726 3727cmd VkResult vkCreateGraphicsPipelines( 3728 VkDevice device, 3729 VkPipelineCache pipelineCache, 3730 u32 createInfoCount, 3731 const VkGraphicsPipelineCreateInfo* pCreateInfos, 3732 const VkAllocationCallbacks* pAllocator, 3733 VkPipeline* pPipelines) { 3734 deviceObject := GetDevice(device) 3735 if pipelineCache != NULL_HANDLE { 3736 pipelineCacheObject := GetPipelineCache(pipelineCache) 3737 assert(pipelineCacheObject.device == device) 3738 } 3739 3740 createInfos := pCreateInfos[0:createInfoCount] 3741 pipelines := pPipelines[0:createInfoCount] 3742 for i in (0 .. createInfoCount) { 3743 pipeline := ? 3744 pipelines[i] = pipeline 3745 State.Pipelines[pipeline] = new!PipelineObject(device: device) 3746 } 3747 3748 return ? 3749} 3750 3751cmd VkResult vkCreateComputePipelines( 3752 VkDevice device, 3753 VkPipelineCache pipelineCache, 3754 u32 createInfoCount, 3755 const VkComputePipelineCreateInfo* pCreateInfos, 3756 const VkAllocationCallbacks* pAllocator, 3757 VkPipeline* pPipelines) { 3758 deviceObject := GetDevice(device) 3759 if pipelineCache != NULL_HANDLE { 3760 pipelineCacheObject := GetPipelineCache(pipelineCache) 3761 assert(pipelineCacheObject.device == device) 3762 } 3763 3764 createInfos := pCreateInfos[0:createInfoCount] 3765 pipelines := pPipelines[0:createInfoCount] 3766 for i in (0 .. createInfoCount) { 3767 pipeline := ? 3768 pipelines[i] = pipeline 3769 State.Pipelines[pipeline] = new!PipelineObject(device: device) 3770 } 3771 3772 return ? 3773} 3774 3775@threadSafety("system") 3776cmd void vkDestroyPipeline( 3777 VkDevice device, 3778 VkPipeline pipeline, 3779 const VkAllocationCallbacks* pAllocator) { 3780 deviceObject := GetDevice(device) 3781 pipelineObjects := GetPipeline(pipeline) 3782 assert(pipelineObjects.device == device) 3783 3784 State.Pipelines[pipeline] = null 3785} 3786 3787 3788// Pipeline layout functions 3789 3790@threadSafety("system") 3791cmd VkResult vkCreatePipelineLayout( 3792 VkDevice device, 3793 const VkPipelineLayoutCreateInfo* pCreateInfo, 3794 const VkAllocationCallbacks* pAllocator, 3795 VkPipelineLayout* pPipelineLayout) { 3796 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO) 3797 deviceObject := GetDevice(device) 3798 3799 pipelineLayout := ? 3800 pPipelineLayout[0] = pipelineLayout 3801 State.PipelineLayouts[pipelineLayout] = new!PipelineLayoutObject(device: device) 3802 3803 return ? 3804} 3805 3806@threadSafety("system") 3807cmd void vkDestroyPipelineLayout( 3808 VkDevice device, 3809 VkPipelineLayout pipelineLayout, 3810 const VkAllocationCallbacks* pAllocator) { 3811 deviceObject := GetDevice(device) 3812 pipelineLayoutObjects := GetPipelineLayout(pipelineLayout) 3813 assert(pipelineLayoutObjects.device == device) 3814 3815 State.PipelineLayouts[pipelineLayout] = null 3816} 3817 3818 3819// Sampler functions 3820 3821@threadSafety("system") 3822cmd VkResult vkCreateSampler( 3823 VkDevice device, 3824 const VkSamplerCreateInfo* pCreateInfo, 3825 const VkAllocationCallbacks* pAllocator, 3826 VkSampler* pSampler) { 3827 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO) 3828 deviceObject := GetDevice(device) 3829 3830 sampler := ? 3831 pSampler[0] = sampler 3832 State.Samplers[sampler] = new!SamplerObject(device: device) 3833 3834 return ? 3835} 3836 3837@threadSafety("system") 3838cmd void vkDestroySampler( 3839 VkDevice device, 3840 VkSampler sampler, 3841 const VkAllocationCallbacks* pAllocator) { 3842 deviceObject := GetDevice(device) 3843 samplerObject := GetSampler(sampler) 3844 assert(samplerObject.device == device) 3845 3846 State.Samplers[sampler] = null 3847} 3848 3849 3850// Descriptor set functions 3851 3852@threadSafety("system") 3853cmd VkResult vkCreateDescriptorSetLayout( 3854 VkDevice device, 3855 const VkDescriptorSetLayoutCreateInfo* pCreateInfo, 3856 const VkAllocationCallbacks* pAllocator, 3857 VkDescriptorSetLayout* pSetLayout) { 3858 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO) 3859 deviceObject := GetDevice(device) 3860 3861 setLayout := ? 3862 pSetLayout[0] = setLayout 3863 State.DescriptorSetLayouts[setLayout] = new!DescriptorSetLayoutObject(device: device) 3864 3865 return ? 3866} 3867 3868@threadSafety("system") 3869cmd void vkDestroyDescriptorSetLayout( 3870 VkDevice device, 3871 VkDescriptorSetLayout descriptorSetLayout, 3872 const VkAllocationCallbacks* pAllocator) { 3873 deviceObject := GetDevice(device) 3874 descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout) 3875 assert(descriptorSetLayoutObject.device == device) 3876 3877 State.DescriptorSetLayouts[descriptorSetLayout] = null 3878} 3879 3880@threadSafety("system") 3881cmd VkResult vkCreateDescriptorPool( 3882 VkDevice device, 3883 const VkDescriptorPoolCreateInfo* pCreateInfo, 3884 const VkAllocationCallbacks* pAllocator, 3885 VkDescriptorPool* pDescriptorPool) { 3886 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO) 3887 deviceObject := GetDevice(device) 3888 3889 descriptorPool := ? 3890 pDescriptorPool[0] = descriptorPool 3891 State.DescriptorPools[descriptorPool] = new!DescriptorPoolObject(device: device) 3892 3893 return ? 3894} 3895 3896@threadSafety("system") 3897cmd void vkDestroyDescriptorPool( 3898 VkDevice device, 3899 VkDescriptorPool descriptorPool, 3900 const VkAllocationCallbacks* pAllocator) { 3901 deviceObject := GetDevice(device) 3902 descriptorPoolObject := GetDescriptorPool(descriptorPool) 3903 assert(descriptorPoolObject.device == device) 3904 3905 State.DescriptorPools[descriptorPool] = null 3906} 3907 3908@threadSafety("app") 3909cmd VkResult vkResetDescriptorPool( 3910 VkDevice device, 3911 VkDescriptorPool descriptorPool, 3912 VkDescriptorPoolResetFlags flags) { 3913 deviceObject := GetDevice(device) 3914 descriptorPoolObject := GetDescriptorPool(descriptorPool) 3915 assert(descriptorPoolObject.device == device) 3916 3917 return ? 3918} 3919 3920@threadSafety("app") 3921cmd VkResult vkAllocateDescriptorSets( 3922 VkDevice device, 3923 const VkDescriptorSetAllocateInfo* pAllocateInfo, 3924 VkDescriptorSet* pDescriptorSets) { 3925 deviceObject := GetDevice(device) 3926 allocInfo := pAllocateInfo[0] 3927 descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool) 3928 3929 setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount] 3930 for i in (0 .. allocInfo.setCount) { 3931 setLayout := setLayouts[i] 3932 setLayoutObject := GetDescriptorSetLayout(setLayout) 3933 assert(setLayoutObject.device == device) 3934 } 3935 3936 descriptorSets := pDescriptorSets[0:allocInfo.setCount] 3937 for i in (0 .. allocInfo.setCount) { 3938 descriptorSet := ? 3939 descriptorSets[i] = descriptorSet 3940 State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device) 3941 } 3942 3943 return ? 3944} 3945 3946cmd VkResult vkFreeDescriptorSets( 3947 VkDevice device, 3948 VkDescriptorPool descriptorPool, 3949 u32 descriptorSetCount, 3950 const VkDescriptorSet* pDescriptorSets) { 3951 deviceObject := GetDevice(device) 3952 descriptorPoolObject := GetDescriptorPool(descriptorPool) 3953 3954 descriptorSets := pDescriptorSets[0:descriptorSetCount] 3955 for i in (0 .. descriptorSetCount) { 3956 descriptorSet := descriptorSets[i] 3957 descriptorSetObject := GetDescriptorSet(descriptorSet) 3958 assert(descriptorSetObject.device == device) 3959 State.DescriptorSets[descriptorSet] = null 3960 } 3961 3962 return ? 3963} 3964 3965cmd void vkUpdateDescriptorSets( 3966 VkDevice device, 3967 u32 descriptorWriteCount, 3968 const VkWriteDescriptorSet* pDescriptorWrites, 3969 u32 descriptorCopyCount, 3970 const VkCopyDescriptorSet* pDescriptorCopies) { 3971 deviceObject := GetDevice(device) 3972 3973 descriptorWrites := pDescriptorWrites[0:descriptorWriteCount] 3974 for i in (0 .. descriptorWriteCount) { 3975 descriptorWrite := descriptorWrites[i] 3976 descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet) 3977 assert(descriptorWriteObject.device == device) 3978 } 3979 3980 descriptorCopies := pDescriptorCopies[0:descriptorCopyCount] 3981 for i in (0 .. descriptorCopyCount) { 3982 descriptorCopy := descriptorCopies[i] 3983 descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet) 3984 assert(descriptorCopyObject.device == device) 3985 } 3986} 3987 3988 3989// Framebuffer functions 3990 3991@threadSafety("system") 3992cmd VkResult vkCreateFramebuffer( 3993 VkDevice device, 3994 const VkFramebufferCreateInfo* pCreateInfo, 3995 const VkAllocationCallbacks* pAllocator, 3996 VkFramebuffer* pFramebuffer) { 3997 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO) 3998 deviceObject := GetDevice(device) 3999 4000 framebuffer := ? 4001 pFramebuffer[0] = framebuffer 4002 State.Framebuffers[framebuffer] = new!FramebufferObject(device: device) 4003 4004 return ? 4005} 4006 4007@threadSafety("system") 4008cmd void vkDestroyFramebuffer( 4009 VkDevice device, 4010 VkFramebuffer framebuffer, 4011 const VkAllocationCallbacks* pAllocator) { 4012 deviceObject := GetDevice(device) 4013 framebufferObject := GetFramebuffer(framebuffer) 4014 assert(framebufferObject.device == device) 4015 4016 State.Framebuffers[framebuffer] = null 4017} 4018 4019 4020// Renderpass functions 4021 4022@threadSafety("system") 4023cmd VkResult vkCreateRenderPass( 4024 VkDevice device, 4025 const VkRenderPassCreateInfo* pCreateInfo, 4026 const VkAllocationCallbacks* pAllocator, 4027 VkRenderPass* pRenderPass) { 4028 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO) 4029 deviceObject := GetDevice(device) 4030 4031 renderpass := ? 4032 pRenderPass[0] = renderpass 4033 State.RenderPasses[renderpass] = new!RenderPassObject(device: device) 4034 4035 return ? 4036} 4037 4038@threadSafety("system") 4039cmd void vkDestroyRenderPass( 4040 VkDevice device, 4041 VkRenderPass renderPass, 4042 const VkAllocationCallbacks* pAllocator) { 4043 deviceObject := GetDevice(device) 4044 renderPassObject := GetRenderPass(renderPass) 4045 assert(renderPassObject.device == device) 4046 4047 State.RenderPasses[renderPass] = null 4048} 4049 4050cmd void vkGetRenderAreaGranularity( 4051 VkDevice device, 4052 VkRenderPass renderPass, 4053 VkExtent2D* pGranularity) { 4054 deviceObject := GetDevice(device) 4055 renderPassObject := GetRenderPass(renderPass) 4056 4057 granularity := ? 4058 pGranularity[0] = granularity 4059} 4060 4061// Command pool functions 4062 4063cmd VkResult vkCreateCommandPool( 4064 VkDevice device, 4065 const VkCommandPoolCreateInfo* pCreateInfo, 4066 const VkAllocationCallbacks* pAllocator, 4067 VkCommandPool* pCommandPool) { 4068 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO) 4069 deviceObject := GetDevice(device) 4070 4071 commandPool := ? 4072 pCommandPool[0] = commandPool 4073 State.CommandPools[commandPool] = new!CommandPoolObject(device: device) 4074 4075 return ? 4076} 4077 4078cmd void vkDestroyCommandPool( 4079 VkDevice device, 4080 VkCommandPool commandPool, 4081 const VkAllocationCallbacks* pAllocator) { 4082 deviceObject := GetDevice(device) 4083 commandPoolObject := GetCommandPool(commandPool) 4084 assert(commandPoolObject.device == device) 4085 4086 State.CommandPools[commandPool] = null 4087} 4088 4089cmd VkResult vkResetCommandPool( 4090 VkDevice device, 4091 VkCommandPool commandPool, 4092 VkCommandPoolResetFlags flags) { 4093 deviceObject := GetDevice(device) 4094 commandPoolObject := GetCommandPool(commandPool) 4095 assert(commandPoolObject.device == device) 4096 4097 return ? 4098} 4099 4100// Command buffer functions 4101 4102macro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) { 4103 memoryObject := GetDeviceMemory(memory) 4104 memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer 4105 4106 commandBufferObject := GetCommandBuffer(commandBuffer) 4107 commandBufferObject.boundObjects[as!u64(obj)] = memory 4108} 4109 4110macro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) { 4111 memoryObject := GetDeviceMemory(memory) 4112 memoryObject.boundCommandBuffers[commandBuffer] = null 4113 4114 commandBufferObject := GetCommandBuffer(commandBuffer) 4115 commandBufferObject.boundObjects[as!u64(obj)] = null 4116} 4117 4118@threadSafety("system") 4119cmd VkResult vkAllocateCommandBuffers( 4120 VkDevice device, 4121 const VkCommandBufferAllocateInfo* pAllocateInfo, 4122 VkCommandBuffer* pCommandBuffers) { 4123 assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO) 4124 4125 count := pAllocateInfo[0].commandBufferCount 4126 commandBuffers := pCommandBuffers[0:count] 4127 for i in (0 .. count) { 4128 commandBuffer := ? 4129 commandBuffers[i] = commandBuffer 4130 State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device) 4131 } 4132 4133 return ? 4134} 4135 4136@threadSafety("system") 4137cmd void vkFreeCommandBuffers( 4138 VkDevice device, 4139 VkCommandPool commandPool, 4140 u32 commandBufferCount, 4141 const VkCommandBuffer* pCommandBuffers) { 4142 deviceObject := GetDevice(device) 4143 4144 commandBuffers := pCommandBuffers[0:commandBufferCount] 4145 for i in (0 .. commandBufferCount) { 4146 commandBufferObject := GetCommandBuffer(commandBuffers[i]) 4147 assert(commandBufferObject.device == device) 4148 // TODO: iterate over boundObjects and clear memory bindings 4149 State.CommandBuffers[commandBuffers[i]] = null 4150 } 4151} 4152 4153@threadSafety("app") 4154cmd VkResult vkBeginCommandBuffer( 4155 VkCommandBuffer commandBuffer, 4156 const VkCommandBufferBeginInfo* pBeginInfo) { 4157 assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) 4158 commandBufferObject := GetCommandBuffer(commandBuffer) 4159 4160 // TODO: iterate over boundObjects and clear memory bindings 4161 4162 return ? 4163} 4164 4165@threadSafety("app") 4166cmd VkResult vkEndCommandBuffer( 4167 VkCommandBuffer commandBuffer) { 4168 commandBufferObject := GetCommandBuffer(commandBuffer) 4169 4170 return ? 4171} 4172 4173@threadSafety("app") 4174cmd VkResult vkResetCommandBuffer( 4175 VkCommandBuffer commandBuffer, 4176 VkCommandBufferResetFlags flags) { 4177 commandBufferObject := GetCommandBuffer(commandBuffer) 4178 4179 // TODO: iterate over boundObjects and clear memory bindings 4180 4181 return ? 4182} 4183 4184 4185// Command buffer building functions 4186 4187@threadSafety("app") 4188cmd void vkCmdBindPipeline( 4189 VkCommandBuffer commandBuffer, 4190 VkPipelineBindPoint pipelineBindPoint, 4191 VkPipeline pipeline) { 4192 commandBufferObject := GetCommandBuffer(commandBuffer) 4193 pipelineObject := GetPipeline(pipeline) 4194 assert(commandBufferObject.device == pipelineObject.device) 4195 4196 queue := switch (pipelineBindPoint) { 4197 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT 4198 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT 4199 } 4200 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue) 4201} 4202 4203@threadSafety("app") 4204cmd void vkCmdSetViewport( 4205 VkCommandBuffer commandBuffer, 4206 u32 firstViewport, 4207 u32 viewportCount, 4208 const VkViewport* pViewports) { 4209 commandBufferObject := GetCommandBuffer(commandBuffer) 4210 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4211} 4212 4213@threadSafety("app") 4214cmd void vkCmdSetScissor( 4215 VkCommandBuffer commandBuffer, 4216 u32 firstScissor, 4217 u32 scissorCount, 4218 const VkRect2D* pScissors) { 4219 commandBufferObject := GetCommandBuffer(commandBuffer) 4220 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4221} 4222 4223@threadSafety("app") 4224cmd void vkCmdSetLineWidth( 4225 VkCommandBuffer commandBuffer, 4226 f32 lineWidth) { 4227 commandBufferObject := GetCommandBuffer(commandBuffer) 4228 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4229} 4230 4231@threadSafety("app") 4232cmd void vkCmdSetDepthBias( 4233 VkCommandBuffer commandBuffer, 4234 f32 depthBiasConstantFactor, 4235 f32 depthBiasClamp, 4236 f32 depthBiasSlopeFactor) { 4237 commandBufferObject := GetCommandBuffer(commandBuffer) 4238 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4239} 4240 4241@threadSafety("app") 4242cmd void vkCmdSetBlendConstants( 4243 VkCommandBuffer commandBuffer, 4244 // TODO(jessehall): apic only supports 'const' on pointer types. Using 4245 // an annotation as a quick hack to pass this to the template without 4246 // having to modify the AST and semantic model. 4247 @readonly f32[4] blendConstants) { 4248 commandBufferObject := GetCommandBuffer(commandBuffer) 4249 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4250} 4251 4252@threadSafety("app") 4253cmd void vkCmdSetDepthBounds( 4254 VkCommandBuffer commandBuffer, 4255 f32 minDepthBounds, 4256 f32 maxDepthBounds) { 4257 commandBufferObject := GetCommandBuffer(commandBuffer) 4258 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4259} 4260 4261@threadSafety("app") 4262cmd void vkCmdSetStencilCompareMask( 4263 VkCommandBuffer commandBuffer, 4264 VkStencilFaceFlags faceMask, 4265 u32 compareMask) { 4266 commandBufferObject := GetCommandBuffer(commandBuffer) 4267 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4268} 4269 4270@threadSafety("app") 4271cmd void vkCmdSetStencilWriteMask( 4272 VkCommandBuffer commandBuffer, 4273 VkStencilFaceFlags faceMask, 4274 u32 writeMask) { 4275 commandBufferObject := GetCommandBuffer(commandBuffer) 4276 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4277} 4278 4279@threadSafety("app") 4280cmd void vkCmdSetStencilReference( 4281 VkCommandBuffer commandBuffer, 4282 VkStencilFaceFlags faceMask, 4283 u32 reference) { 4284 commandBufferObject := GetCommandBuffer(commandBuffer) 4285 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4286} 4287 4288@threadSafety("app") 4289cmd void vkCmdBindDescriptorSets( 4290 VkCommandBuffer commandBuffer, 4291 VkPipelineBindPoint pipelineBindPoint, 4292 VkPipelineLayout layout, 4293 u32 firstSet, 4294 u32 descriptorSetCount, 4295 const VkDescriptorSet* pDescriptorSets, 4296 u32 dynamicOffsetCount, 4297 const u32* pDynamicOffsets) { 4298 commandBufferObject := GetCommandBuffer(commandBuffer) 4299 4300 descriptorSets := pDescriptorSets[0:descriptorSetCount] 4301 for i in (0 .. descriptorSetCount) { 4302 descriptorSet := descriptorSets[i] 4303 descriptorSetObject := GetDescriptorSet(descriptorSet) 4304 assert(commandBufferObject.device == descriptorSetObject.device) 4305 } 4306 4307 dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount] 4308 for i in (0 .. dynamicOffsetCount) { 4309 dynamicOffset := dynamicOffsets[i] 4310 } 4311 4312 queue := switch (pipelineBindPoint) { 4313 case VK_PIPELINE_BIND_POINT_COMPUTE: VK_QUEUE_COMPUTE_BIT 4314 case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT 4315 } 4316 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue) 4317} 4318 4319@threadSafety("app") 4320cmd void vkCmdBindIndexBuffer( 4321 VkCommandBuffer commandBuffer, 4322 VkBuffer buffer, 4323 VkDeviceSize offset, 4324 VkIndexType indexType) { 4325 commandBufferObject := GetCommandBuffer(commandBuffer) 4326 bufferObject := GetBuffer(buffer) 4327 assert(commandBufferObject.device == bufferObject.device) 4328 4329 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory) 4330 4331 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4332} 4333 4334@threadSafety("app") 4335cmd void vkCmdBindVertexBuffers( 4336 VkCommandBuffer commandBuffer, 4337 u32 firstBinding, 4338 u32 bindingCount, 4339 const VkBuffer* pBuffers, 4340 const VkDeviceSize* pOffsets) { 4341 commandBufferObject := GetCommandBuffer(commandBuffer) 4342 4343 // TODO: check if not [firstBinding:firstBinding+bindingCount] 4344 buffers := pBuffers[0:bindingCount] 4345 offsets := pOffsets[0:bindingCount] 4346 for i in (0 .. bindingCount) { 4347 buffer := buffers[i] 4348 offset := offsets[i] 4349 bufferObject := GetBuffer(buffer) 4350 assert(commandBufferObject.device == bufferObject.device) 4351 4352 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory) 4353 } 4354 4355 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4356} 4357 4358@threadSafety("app") 4359cmd void vkCmdDraw( 4360 VkCommandBuffer commandBuffer, 4361 u32 vertexCount, 4362 u32 instanceCount, 4363 u32 firstVertex, 4364 u32 firstInstance) { 4365 commandBufferObject := GetCommandBuffer(commandBuffer) 4366 4367 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4368} 4369 4370@threadSafety("app") 4371cmd void vkCmdDrawIndexed( 4372 VkCommandBuffer commandBuffer, 4373 u32 indexCount, 4374 u32 instanceCount, 4375 u32 firstIndex, 4376 s32 vertexOffset, 4377 u32 firstInstance) { 4378 commandBufferObject := GetCommandBuffer(commandBuffer) 4379 4380 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4381} 4382 4383@threadSafety("app") 4384cmd void vkCmdDrawIndirect( 4385 VkCommandBuffer commandBuffer, 4386 VkBuffer buffer, 4387 VkDeviceSize offset, 4388 u32 drawCount, 4389 u32 stride) { 4390 commandBufferObject := GetCommandBuffer(commandBuffer) 4391 bufferObject := GetBuffer(buffer) 4392 assert(commandBufferObject.device == bufferObject.device) 4393 4394 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory) 4395 4396 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4397} 4398 4399@threadSafety("app") 4400cmd void vkCmdDrawIndexedIndirect( 4401 VkCommandBuffer commandBuffer, 4402 VkBuffer buffer, 4403 VkDeviceSize offset, 4404 u32 drawCount, 4405 u32 stride) { 4406 commandBufferObject := GetCommandBuffer(commandBuffer) 4407 bufferObject := GetBuffer(buffer) 4408 assert(commandBufferObject.device == bufferObject.device) 4409 4410 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory) 4411 4412 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4413} 4414 4415@threadSafety("app") 4416cmd void vkCmdDispatch( 4417 VkCommandBuffer commandBuffer, 4418 u32 x, 4419 u32 y, 4420 u32 z) { 4421 commandBufferObject := GetCommandBuffer(commandBuffer) 4422 4423 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT) 4424} 4425 4426@threadSafety("app") 4427cmd void vkCmdDispatchIndirect( 4428 VkCommandBuffer commandBuffer, 4429 VkBuffer buffer, 4430 VkDeviceSize offset) { 4431 commandBufferObject := GetCommandBuffer(commandBuffer) 4432 bufferObject := GetBuffer(buffer) 4433 assert(commandBufferObject.device == bufferObject.device) 4434 4435 bindCommandBuffer(commandBuffer, buffer, bufferObject.memory) 4436 4437 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT) 4438} 4439 4440@threadSafety("app") 4441cmd void vkCmdCopyBuffer( 4442 VkCommandBuffer commandBuffer, 4443 VkBuffer srcBuffer, 4444 VkBuffer dstBuffer, 4445 u32 regionCount, 4446 const VkBufferCopy* pRegions) { 4447 commandBufferObject := GetCommandBuffer(commandBuffer) 4448 srcBufferObject := GetBuffer(srcBuffer) 4449 dstBufferObject := GetBuffer(dstBuffer) 4450 assert(commandBufferObject.device == srcBufferObject.device) 4451 assert(commandBufferObject.device == dstBufferObject.device) 4452 4453 regions := pRegions[0:regionCount] 4454 for i in (0 .. regionCount) { 4455 region := regions[i] 4456 } 4457 4458 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory) 4459 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory) 4460 4461 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT) 4462} 4463 4464@threadSafety("app") 4465cmd void vkCmdCopyImage( 4466 VkCommandBuffer commandBuffer, 4467 VkImage srcImage, 4468 VkImageLayout srcImageLayout, 4469 VkImage dstImage, 4470 VkImageLayout dstImageLayout, 4471 u32 regionCount, 4472 const VkImageCopy* pRegions) { 4473 commandBufferObject := GetCommandBuffer(commandBuffer) 4474 srcImageObject := GetImage(srcImage) 4475 dstImageObject := GetImage(dstImage) 4476 assert(commandBufferObject.device == srcImageObject.device) 4477 assert(commandBufferObject.device == dstImageObject.device) 4478 4479 regions := pRegions[0:regionCount] 4480 for i in (0 .. regionCount) { 4481 region := regions[i] 4482 } 4483 4484 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory) 4485 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory) 4486 4487 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT) 4488} 4489 4490@threadSafety("app") 4491cmd void vkCmdBlitImage( 4492 VkCommandBuffer commandBuffer, 4493 VkImage srcImage, 4494 VkImageLayout srcImageLayout, 4495 VkImage dstImage, 4496 VkImageLayout dstImageLayout, 4497 u32 regionCount, 4498 const VkImageBlit* pRegions, 4499 VkFilter filter) { 4500 commandBufferObject := GetCommandBuffer(commandBuffer) 4501 srcImageObject := GetImage(srcImage) 4502 dstImageObject := GetImage(dstImage) 4503 assert(commandBufferObject.device == srcImageObject.device) 4504 assert(commandBufferObject.device == dstImageObject.device) 4505 4506 regions := pRegions[0:regionCount] 4507 for i in (0 .. regionCount) { 4508 region := regions[i] 4509 } 4510 4511 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory) 4512 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory) 4513 4514 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4515} 4516 4517@threadSafety("app") 4518cmd void vkCmdCopyBufferToImage( 4519 VkCommandBuffer commandBuffer, 4520 VkBuffer srcBuffer, 4521 VkImage dstImage, 4522 VkImageLayout dstImageLayout, 4523 u32 regionCount, 4524 const VkBufferImageCopy* pRegions) { 4525 commandBufferObject := GetCommandBuffer(commandBuffer) 4526 srcBufferObject := GetBuffer(srcBuffer) 4527 dstImageObject := GetImage(dstImage) 4528 assert(commandBufferObject.device == srcBufferObject.device) 4529 assert(commandBufferObject.device == dstImageObject.device) 4530 4531 regions := pRegions[0:regionCount] 4532 for i in (0 .. regionCount) { 4533 region := regions[i] 4534 } 4535 4536 bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory) 4537 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory) 4538 4539 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT) 4540} 4541 4542@threadSafety("app") 4543cmd void vkCmdCopyImageToBuffer( 4544 VkCommandBuffer commandBuffer, 4545 VkImage srcImage, 4546 VkImageLayout srcImageLayout, 4547 VkBuffer dstBuffer, 4548 u32 regionCount, 4549 const VkBufferImageCopy* pRegions) { 4550 commandBufferObject := GetCommandBuffer(commandBuffer) 4551 srcImageObject := GetImage(srcImage) 4552 dstBufferObject := GetBuffer(dstBuffer) 4553 assert(commandBufferObject.device == srcImageObject.device) 4554 assert(commandBufferObject.device == dstBufferObject.device) 4555 4556 regions := pRegions[0:regionCount] 4557 for i in (0 .. regionCount) { 4558 region := regions[i] 4559 } 4560 4561 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory) 4562 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory) 4563 4564 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT) 4565} 4566 4567@threadSafety("app") 4568cmd void vkCmdUpdateBuffer( 4569 VkCommandBuffer commandBuffer, 4570 VkBuffer dstBuffer, 4571 VkDeviceSize dstOffset, 4572 VkDeviceSize dataSize, 4573 const u32* pData) { 4574 commandBufferObject := GetCommandBuffer(commandBuffer) 4575 dstBufferObject := GetBuffer(dstBuffer) 4576 assert(commandBufferObject.device == dstBufferObject.device) 4577 4578 data := pData[0:dataSize] 4579 4580 bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory) 4581 4582 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT) 4583} 4584 4585@threadSafety("app") 4586cmd void vkCmdFillBuffer( 4587 VkCommandBuffer commandBuffer, 4588 VkBuffer dstBuffer, 4589 VkDeviceSize dstOffset, 4590 VkDeviceSize size, 4591 u32 data) { 4592 commandBufferObject := GetCommandBuffer(commandBuffer) 4593 dstBufferObject := GetBuffer(dstBuffer) 4594 assert(commandBufferObject.device == dstBufferObject.device) 4595 4596 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT) 4597} 4598 4599@threadSafety("app") 4600cmd void vkCmdClearColorImage( 4601 VkCommandBuffer commandBuffer, 4602 VkImage image, 4603 VkImageLayout imageLayout, 4604 const VkClearColorValue* pColor, 4605 u32 rangeCount, 4606 const VkImageSubresourceRange* pRanges) { 4607 commandBufferObject := GetCommandBuffer(commandBuffer) 4608 imageObject := GetImage(image) 4609 assert(commandBufferObject.device == imageObject.device) 4610 4611 ranges := pRanges[0:rangeCount] 4612 for i in (0 .. rangeCount) { 4613 range := ranges[i] 4614 } 4615 4616 bindCommandBuffer(commandBuffer, image, imageObject.memory) 4617 4618 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4619} 4620 4621@threadSafety("app") 4622cmd void vkCmdClearDepthStencilImage( 4623 VkCommandBuffer commandBuffer, 4624 VkImage image, 4625 VkImageLayout imageLayout, 4626 const VkClearDepthStencilValue* pDepthStencil, 4627 u32 rangeCount, 4628 const VkImageSubresourceRange* pRanges) { 4629 commandBufferObject := GetCommandBuffer(commandBuffer) 4630 imageObject := GetImage(image) 4631 assert(commandBufferObject.device == imageObject.device) 4632 4633 ranges := pRanges[0:rangeCount] 4634 for i in (0 .. rangeCount) { 4635 range := ranges[i] 4636 } 4637 4638 bindCommandBuffer(commandBuffer, image, imageObject.memory) 4639 4640 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4641} 4642 4643@threadSafety("app") 4644cmd void vkCmdClearAttachments( 4645 VkCommandBuffer commandBuffer, 4646 u32 attachmentCount, 4647 const VkClearAttachment* pAttachments, 4648 u32 rectCount, 4649 const VkClearRect* pRects) { 4650 commandBufferObject := GetCommandBuffer(commandBuffer) 4651 4652 rects := pRects[0:rectCount] 4653 for i in (0 .. rectCount) { 4654 rect := rects[i] 4655 } 4656 4657 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4658} 4659 4660@threadSafety("app") 4661cmd void vkCmdResolveImage( 4662 VkCommandBuffer commandBuffer, 4663 VkImage srcImage, 4664 VkImageLayout srcImageLayout, 4665 VkImage dstImage, 4666 VkImageLayout dstImageLayout, 4667 u32 regionCount, 4668 const VkImageResolve* pRegions) { 4669 commandBufferObject := GetCommandBuffer(commandBuffer) 4670 srcImageObject := GetImage(srcImage) 4671 dstImageObject := GetImage(dstImage) 4672 assert(commandBufferObject.device == srcImageObject.device) 4673 assert(commandBufferObject.device == dstImageObject.device) 4674 4675 regions := pRegions[0:regionCount] 4676 for i in (0 .. regionCount) { 4677 region := regions[i] 4678 } 4679 4680 bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory) 4681 bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory) 4682 4683 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4684} 4685 4686@threadSafety("app") 4687cmd void vkCmdSetEvent( 4688 VkCommandBuffer commandBuffer, 4689 VkEvent event, 4690 VkPipelineStageFlags stageMask) { 4691 commandBufferObject := GetCommandBuffer(commandBuffer) 4692 eventObject := GetEvent(event) 4693 assert(commandBufferObject.device == eventObject.device) 4694} 4695 4696@threadSafety("app") 4697cmd void vkCmdResetEvent( 4698 VkCommandBuffer commandBuffer, 4699 VkEvent event, 4700 VkPipelineStageFlags stageMask) { 4701 commandBufferObject := GetCommandBuffer(commandBuffer) 4702 eventObject := GetEvent(event) 4703 assert(commandBufferObject.device == eventObject.device) 4704} 4705 4706@threadSafety("app") 4707cmd void vkCmdWaitEvents( 4708 VkCommandBuffer commandBuffer, 4709 u32 eventCount, 4710 const VkEvent* pEvents, 4711 VkPipelineStageFlags srcStageMask, 4712 VkPipelineStageFlags dstStageMask, 4713 u32 memoryBarrierCount, 4714 const VkMemoryBarrier* pMemoryBarriers, 4715 u32 bufferMemoryBarrierCount, 4716 const VkBufferMemoryBarrier* pBufferMemoryBarriers, 4717 u32 imageMemoryBarrierCount, 4718 const VkImageMemoryBarrier* pImageMemoryBarriers) { 4719 commandBufferObject := GetCommandBuffer(commandBuffer) 4720 4721 events := pEvents[0:eventCount] 4722 for i in (0 .. eventCount) { 4723 event := events[i] 4724 eventObject := GetEvent(event) 4725 assert(commandBufferObject.device == eventObject.device) 4726 } 4727 4728 memoryBarriers := pMemoryBarriers[0:memoryBarrierCount] 4729 for i in (0 .. memoryBarrierCount) { 4730 memoryBarrier := memoryBarriers[i] 4731 } 4732 bufferMemoryBarriers := pBufferMemoryBarriers[0:bufferMemoryBarrierCount] 4733 for i in (0 .. bufferMemoryBarrierCount) { 4734 bufferMemoryBarrier := bufferMemoryBarriers[i] 4735 bufferObject := GetBuffer(bufferMemoryBarrier.buffer) 4736 assert(bufferObject.device == commandBufferObject.device) 4737 } 4738 imageMemoryBarriers := pImageMemoryBarriers[0:imageMemoryBarrierCount] 4739 for i in (0 .. imageMemoryBarrierCount) { 4740 imageMemoryBarrier := imageMemoryBarriers[i] 4741 imageObject := GetImage(imageMemoryBarrier.image) 4742 assert(imageObject.device == commandBufferObject.device) 4743 } 4744} 4745 4746@threadSafety("app") 4747cmd void vkCmdPipelineBarrier( 4748 VkCommandBuffer commandBuffer, 4749 VkPipelineStageFlags srcStageMask, 4750 VkPipelineStageFlags dstStageMask, 4751 VkDependencyFlags dependencyFlags, 4752 u32 memoryBarrierCount, 4753 const VkMemoryBarrier* pMemoryBarriers, 4754 u32 bufferMemoryBarrierCount, 4755 const VkBufferMemoryBarrier* pBufferMemoryBarriers, 4756 u32 imageMemoryBarrierCount, 4757 const VkImageMemoryBarrier* pImageMemoryBarriers) { 4758 commandBufferObject := GetCommandBuffer(commandBuffer) 4759 4760 memoryBarriers := pMemoryBarriers[0:memoryBarrierCount] 4761 for i in (0 .. memoryBarrierCount) { 4762 memoryBarrier := memoryBarriers[i] 4763 } 4764 bufferMemoryBarriers := pBufferMemoryBarriers[0:bufferMemoryBarrierCount] 4765 for i in (0 .. bufferMemoryBarrierCount) { 4766 bufferMemoryBarrier := bufferMemoryBarriers[i] 4767 bufferObject := GetBuffer(bufferMemoryBarrier.buffer) 4768 assert(bufferObject.device == commandBufferObject.device) 4769 } 4770 imageMemoryBarriers := pImageMemoryBarriers[0:imageMemoryBarrierCount] 4771 for i in (0 .. imageMemoryBarrierCount) { 4772 imageMemoryBarrier := imageMemoryBarriers[i] 4773 imageObject := GetImage(imageMemoryBarrier.image) 4774 assert(imageObject.device == commandBufferObject.device) 4775 } 4776} 4777 4778@threadSafety("app") 4779cmd void vkCmdBeginQuery( 4780 VkCommandBuffer commandBuffer, 4781 VkQueryPool queryPool, 4782 u32 query, 4783 VkQueryControlFlags flags) { 4784 commandBufferObject := GetCommandBuffer(commandBuffer) 4785 queryPoolObject := GetQueryPool(queryPool) 4786 assert(commandBufferObject.device == queryPoolObject.device) 4787} 4788 4789@threadSafety("app") 4790cmd void vkCmdEndQuery( 4791 VkCommandBuffer commandBuffer, 4792 VkQueryPool queryPool, 4793 u32 query) { 4794 commandBufferObject := GetCommandBuffer(commandBuffer) 4795 queryPoolObject := GetQueryPool(queryPool) 4796 assert(commandBufferObject.device == queryPoolObject.device) 4797} 4798 4799@threadSafety("app") 4800cmd void vkCmdResetQueryPool( 4801 VkCommandBuffer commandBuffer, 4802 VkQueryPool queryPool, 4803 u32 firstQuery, 4804 u32 queryCount) { 4805 commandBufferObject := GetCommandBuffer(commandBuffer) 4806 queryPoolObject := GetQueryPool(queryPool) 4807 assert(commandBufferObject.device == queryPoolObject.device) 4808} 4809 4810@threadSafety("app") 4811cmd void vkCmdWriteTimestamp( 4812 VkCommandBuffer commandBuffer, 4813 VkPipelineStageFlagBits pipelineStage, 4814 VkQueryPool queryPool, 4815 u32 query) { 4816 commandBufferObject := GetCommandBuffer(commandBuffer) 4817 queryPoolObject := GetQueryPool(queryPool) 4818 assert(commandBufferObject.device == queryPoolObject.device) 4819} 4820 4821@threadSafety("app") 4822cmd void vkCmdCopyQueryPoolResults( 4823 VkCommandBuffer commandBuffer, 4824 VkQueryPool queryPool, 4825 u32 firstQuery, 4826 u32 queryCount, 4827 VkBuffer dstBuffer, 4828 VkDeviceSize dstOffset, 4829 VkDeviceSize stride, 4830 VkQueryResultFlags flags) { 4831 commandBufferObject := GetCommandBuffer(commandBuffer) 4832 queryPoolObject := GetQueryPool(queryPool) 4833 dstBufferObject := GetBuffer(dstBuffer) 4834 assert(commandBufferObject.device == queryPoolObject.device) 4835 assert(commandBufferObject.device == dstBufferObject.device) 4836} 4837 4838cmd void vkCmdPushConstants( 4839 VkCommandBuffer commandBuffer, 4840 VkPipelineLayout layout, 4841 VkShaderStageFlags stageFlags, 4842 u32 offset, 4843 u32 size, 4844 const void* pValues) { 4845 commandBufferObject := GetCommandBuffer(commandBuffer) 4846 layoutObject := GetPipelineLayout(layout) 4847 assert(commandBufferObject.device == layoutObject.device) 4848} 4849 4850@threadSafety("app") 4851cmd void vkCmdBeginRenderPass( 4852 VkCommandBuffer commandBuffer, 4853 const VkRenderPassBeginInfo* pRenderPassBegin, 4854 VkSubpassContents contents) { 4855 commandBufferObject := GetCommandBuffer(commandBuffer) 4856 renderPassObject := GetRenderPass(pRenderPassBegin.renderPass) 4857 framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer) 4858 assert(commandBufferObject.device == renderPassObject.device) 4859 assert(commandBufferObject.device == framebufferObject.device) 4860 4861 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4862} 4863 4864cmd void vkCmdNextSubpass( 4865 VkCommandBuffer commandBuffer, 4866 VkSubpassContents contents) { 4867 commandBufferObject := GetCommandBuffer(commandBuffer) 4868} 4869 4870@threadSafety("app") 4871cmd void vkCmdEndRenderPass( 4872 VkCommandBuffer commandBuffer) { 4873 commandBufferObject := GetCommandBuffer(commandBuffer) 4874 4875 commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT) 4876} 4877 4878cmd void vkCmdExecuteCommands( 4879 VkCommandBuffer commandBuffer, 4880 u32 commandBufferCount, 4881 const VkCommandBuffer* pCommandBuffers) { 4882 commandBufferObject := GetCommandBuffer(commandBuffer) 4883 4884 commandBuffers := pCommandBuffers[0:commandBufferCount] 4885 for i in (0 .. commandBufferCount) { 4886 secondaryCommandBuffer := commandBuffers[i] 4887 secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer) 4888 assert(commandBufferObject.device == secondaryCommandBufferObject.device) 4889 } 4890} 4891 4892@extension("VK_KHR_surface") 4893cmd void vkDestroySurfaceKHR( 4894 VkInstance instance, 4895 VkSurfaceKHR surface, 4896 const VkAllocationCallbacks* pAllocator) { 4897 instanceObject := GetInstance(instance) 4898 surfaceObject := GetSurface(surface) 4899 assert(surfaceObject.instance == instance) 4900 4901 State.Surfaces[surface] = null 4902} 4903 4904@extension("VK_KHR_surface") 4905cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR( 4906 VkPhysicalDevice physicalDevice, 4907 u32 queueFamilyIndex, 4908 VkSurfaceKHR surface, 4909 VkBool32* pSupported) { 4910 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 4911 4912 return ? 4913} 4914 4915@extension("VK_KHR_surface") 4916cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR( 4917 VkPhysicalDevice physicalDevice, 4918 VkSurfaceKHR surface, 4919 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) { 4920 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 4921 4922 surfaceCapabilities := ? 4923 pSurfaceCapabilities[0] = surfaceCapabilities 4924 4925 return ? 4926} 4927 4928@extension("VK_KHR_surface") 4929cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR( 4930 VkPhysicalDevice physicalDevice, 4931 VkSurfaceKHR surface, 4932 u32* pSurfaceFormatCount, 4933 VkSurfaceFormatKHR* pSurfaceFormats) { 4934 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 4935 4936 count := as!u32(?) 4937 pSurfaceFormatCount[0] = count 4938 surfaceFormats := pSurfaceFormats[0:count] 4939 4940 for i in (0 .. count) { 4941 surfaceFormat := ? 4942 surfaceFormats[i] = surfaceFormat 4943 } 4944 4945 return ? 4946} 4947 4948@extension("VK_KHR_surface") 4949cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR( 4950 VkPhysicalDevice physicalDevice, 4951 VkSurfaceKHR surface, 4952 u32* pPresentModeCount, 4953 VkPresentModeKHR* pPresentModes) { 4954 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 4955 4956 count := as!u32(?) 4957 pPresentModeCount[0] = count 4958 presentModes := pPresentModes[0:count] 4959 4960 for i in (0 .. count) { 4961 presentMode := ? 4962 presentModes[i] = presentMode 4963 } 4964 4965 return ? 4966} 4967 4968@extension("VK_KHR_swapchain") 4969cmd VkResult vkCreateSwapchainKHR( 4970 VkDevice device, 4971 const VkSwapchainCreateInfoKHR* pCreateInfo, 4972 const VkAllocationCallbacks* pAllocator, 4973 VkSwapchainKHR* pSwapchain) { 4974 assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR) 4975 deviceObject := GetDevice(device) 4976 4977 swapchain := ? 4978 pSwapchain[0] = swapchain 4979 State.Swapchains[swapchain] = new!SwapchainObject(device: device) 4980 4981 return ? 4982} 4983 4984@extension("VK_KHR_swapchain") 4985cmd void vkDestroySwapchainKHR( 4986 VkDevice device, 4987 VkSwapchainKHR swapchain, 4988 const VkAllocationCallbacks* pAllocator) { 4989 deviceObject := GetDevice(device) 4990 swapchainObject := GetSwapchain(swapchain) 4991 assert(swapchainObject.device == device) 4992 4993 State.Swapchains[swapchain] = null 4994} 4995 4996@extension("VK_KHR_swapchain") 4997cmd VkResult vkGetSwapchainImagesKHR( 4998 VkDevice device, 4999 VkSwapchainKHR swapchain, 5000 u32* pSwapchainImageCount, 5001 VkImage* pSwapchainImages) { 5002 deviceObject := GetDevice(device) 5003 5004 count := as!u32(?) 5005 pSwapchainImageCount[0] = count 5006 swapchainImages := pSwapchainImages[0:count] 5007 5008 for i in (0 .. count) { 5009 swapchainImage := ? 5010 swapchainImages[i] = swapchainImage 5011 State.Images[swapchainImage] = new!ImageObject(device: device) 5012 } 5013 5014 return ? 5015} 5016 5017@extension("VK_KHR_swapchain") 5018cmd VkResult vkAcquireNextImageKHR( 5019 VkDevice device, 5020 VkSwapchainKHR swapchain, 5021 u64 timeout, 5022 VkSemaphore semaphore, 5023 VkFence fence, 5024 u32* pImageIndex) { 5025 deviceObject := GetDevice(device) 5026 swapchainObject := GetSwapchain(swapchain) 5027 5028 imageIndex := ? 5029 pImageIndex[0] = imageIndex 5030 5031 return ? 5032} 5033 5034@extension("VK_KHR_swapchain") 5035cmd VkResult vkQueuePresentKHR( 5036 VkQueue queue, 5037 const VkPresentInfoKHR* pPresentInfo) { 5038 queueObject := GetQueue(queue) 5039 5040 presentInfo := ? 5041 pPresentInfo[0] = presentInfo 5042 5043 return ? 5044} 5045 5046@extension("VK_KHR_display") 5047cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR( 5048 VkPhysicalDevice physicalDevice, 5049 u32* pPropertyCount, 5050 VkDisplayPropertiesKHR* pProperties) { 5051 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5052 return ? 5053} 5054 5055@extension("VK_KHR_display") 5056cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR( 5057 VkPhysicalDevice physicalDevice, 5058 u32* pPropertyCount, 5059 VkDisplayPlanePropertiesKHR* pProperties) { 5060 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5061 return ? 5062} 5063 5064@extension("VK_KHR_display") 5065cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR( 5066 VkPhysicalDevice physicalDevice, 5067 u32 planeIndex, 5068 u32* pDisplayCount, 5069 VkDisplayKHR* pDisplays) { 5070 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5071 return ? 5072} 5073 5074@extension("VK_KHR_display") 5075cmd VkResult vkGetDisplayModePropertiesKHR( 5076 VkPhysicalDevice physicalDevice, 5077 VkDisplayKHR display, 5078 u32* pPropertyCount, 5079 VkDisplayModePropertiesKHR* pProperties) { 5080 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5081 return ? 5082} 5083 5084@extension("VK_KHR_display") 5085cmd VkResult vkCreateDisplayModeKHR( 5086 VkPhysicalDevice physicalDevice, 5087 VkDisplayKHR display, 5088 const VkDisplayModeCreateInfoKHR* pCreateInfo, 5089 const VkAllocationCallbacks* pAllocator, 5090 VkDisplayModeKHR* pMode) { 5091 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5092 return ? 5093} 5094 5095@extension("VK_KHR_display") 5096cmd VkResult vkGetDisplayPlaneCapabilitiesKHR( 5097 VkPhysicalDevice physicalDevice, 5098 VkDisplayModeKHR mode, 5099 u32 planeIndex, 5100 VkDisplayPlaneCapabilitiesKHR* pCapabilities) { 5101 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5102 return ? 5103} 5104 5105@extension("VK_KHR_display") 5106cmd VkResult vkCreateDisplayPlaneSurfaceKHR( 5107 VkInstance instance, 5108 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, 5109 const VkAllocationCallbacks* pAllocator, 5110 VkSurfaceKHR* pSurface) { 5111 return ? 5112} 5113 5114@extension("VK_KHR_display_swapchain") 5115cmd VkResult vkCreateSharedSwapchainsKHR( 5116 VkDevice device, 5117 u32 swapchainCount, 5118 const VkSwapchainCreateInfoKHR* pCreateInfos, 5119 const VkAllocationCallbacks* pAllocator, 5120 VkSwapchainKHR* pSwapchains) { 5121 return ? 5122} 5123 5124@extension("VK_KHR_xlib_surface") 5125cmd VkResult vkCreateXlibSurfaceKHR( 5126 VkInstance instance, 5127 const VkXlibSurfaceCreateInfoKHR* pCreateInfo, 5128 const VkAllocationCallbacks* pAllocator, 5129 VkSurfaceKHR* pSurface) { 5130 instanceObject := GetInstance(instance) 5131 return ? 5132} 5133 5134@extension("VK_KHR_xlib_surface") 5135cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR( 5136 VkPhysicalDevice physicalDevice, 5137 u32 queueFamilyIndex, 5138 platform.Display* dpy, 5139 platform.VisualID visualID) { 5140 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5141 return ? 5142} 5143 5144@extension("VK_KHR_xcb_surface") 5145cmd VkResult vkCreateXcbSurfaceKHR( 5146 VkInstance instance, 5147 const VkXcbSurfaceCreateInfoKHR* pCreateInfo, 5148 const VkAllocationCallbacks* pAllocator, 5149 VkSurfaceKHR* pSurface) { 5150 instanceObject := GetInstance(instance) 5151 return ? 5152} 5153 5154@extension("VK_KHR_xcb_surface") 5155cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR( 5156 VkPhysicalDevice physicalDevice, 5157 u32 queueFamilyIndex, 5158 platform.xcb_connection_t* connection, 5159 platform.xcb_visualid_t visual_id) { 5160 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5161 return ? 5162} 5163 5164@extension("VK_KHR_wayland_surface") 5165cmd VkResult vkCreateWaylandSurfaceKHR( 5166 VkInstance instance, 5167 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, 5168 const VkAllocationCallbacks* pAllocator, 5169 VkSurfaceKHR* pSurface) { 5170 instanceObject := GetInstance(instance) 5171 return ? 5172} 5173 5174@extension("VK_KHR_wayland_surface") 5175cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR( 5176 VkPhysicalDevice physicalDevice, 5177 u32 queueFamilyIndex, 5178 platform.wl_display* display) { 5179 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5180 return ? 5181} 5182 5183@extension("VK_KHR_mir_surface") 5184cmd VkResult vkCreateMirSurfaceKHR( 5185 VkInstance instance, 5186 const VkMirSurfaceCreateInfoKHR* pCreateInfo, 5187 const VkAllocationCallbacks* pAllocator, 5188 VkSurfaceKHR* pSurface) { 5189 instanceObject := GetInstance(instance) 5190 return ? 5191} 5192 5193@extension("VK_KHR_mir_surface") 5194cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR( 5195 VkPhysicalDevice physicalDevice, 5196 u32 queueFamilyIndex, 5197 platform.MirConnection* connection) { 5198 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5199 return ? 5200} 5201 5202@extension("VK_KHR_android_surface") 5203cmd VkResult vkCreateAndroidSurfaceKHR( 5204 VkInstance instance, 5205 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, 5206 const VkAllocationCallbacks* pAllocator, 5207 VkSurfaceKHR* pSurface) { 5208 instanceObject := GetInstance(instance) 5209 return ? 5210} 5211 5212@extension("VK_KHR_win32_surface") 5213cmd VkResult vkCreateWin32SurfaceKHR( 5214 VkInstance instance, 5215 const VkWin32SurfaceCreateInfoKHR* pCreateInfo, 5216 const VkAllocationCallbacks* pAllocator, 5217 VkSurfaceKHR* pSurface) { 5218 instanceObject := GetInstance(instance) 5219 return ? 5220} 5221 5222@extension("VK_KHR_win32_surface") 5223cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR( 5224 VkPhysicalDevice physicalDevice, 5225 u32 queueFamilyIndex) { 5226 physicalDeviceObject := GetPhysicalDevice(physicalDevice) 5227 return ? 5228} 5229 5230@extension("VK_ANDROID_native_buffer") 5231cmd VkResult vkGetSwapchainGrallocUsageANDROID( 5232 VkDevice device, 5233 VkFormat format, 5234 VkImageUsageFlags imageUsage, 5235 int* grallocUsage) { 5236 return ? 5237} 5238 5239@extension("VK_ANDROID_native_buffer") 5240cmd VkResult vkAcquireImageANDROID( 5241 VkDevice device, 5242 VkImage image, 5243 int nativeFenceFd, 5244 VkSemaphore semaphore, 5245 VkFence fence) { 5246 return ? 5247} 5248 5249@extension("VK_ANDROID_native_buffer") 5250cmd VkResult vkQueueSignalReleaseImageANDROID( 5251 VkQueue queue, 5252 u32 waitSemaphoreCount, 5253 const VkSemaphore* pWaitSemaphores, 5254 VkImage image, 5255 int* pNativeFenceFd) { 5256 return ? 5257} 5258 5259@extension("VK_EXT_debug_report") 5260@external type void* PFN_vkDebugReportCallbackEXT 5261@extension("VK_EXT_debug_report") 5262@pfn cmd VkBool32 vkDebugReportCallbackEXT( 5263 VkDebugReportFlagsEXT flags, 5264 VkDebugReportObjectTypeEXT objectType, 5265 u64 object, 5266 platform.size_t location, 5267 s32 messageCode, 5268 const char* pLayerPrefix, 5269 const char* pMessage, 5270 void* pUserData) { 5271 return ? 5272} 5273 5274@extension("VK_EXT_debug_report") 5275cmd VkResult vkCreateDebugReportCallbackEXT( 5276 VkInstance instance, 5277 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, 5278 const VkAllocationCallbacks* pAllocator, 5279 VkDebugReportCallbackEXT* pCallback) { 5280 return ? 5281} 5282 5283@extension("VK_EXT_debug_report") 5284cmd void vkDestroyDebugReportCallbackEXT( 5285 VkInstance instance, 5286 VkDebugReportCallbackEXT callback, 5287 const VkAllocationCallbacks* pAllocator) { 5288} 5289 5290@extension("VK_EXT_debug_report") 5291cmd void vkDebugReportMessageEXT( 5292 VkInstance instance, 5293 VkDebugReportFlagsEXT flags, 5294 VkDebugReportObjectTypeEXT objectType, 5295 u64 object, 5296 platform.size_t location, 5297 s32 messageCode, 5298 const char* pLayerPrefix, 5299 const char* pMessage) { 5300} 5301 5302@extension("VK_EXT_debug_marker") 5303cmd VkResult vkDebugMarkerSetObjectTagEXT( 5304 VkDevice device, 5305 VkDebugMarkerObjectTagInfoEXT* pTagInfo) { 5306 return ? 5307} 5308 5309@extension("VK_EXT_debug_marker") 5310cmd VkResult vkDebugMarkerSetObjectNameEXT( 5311 VkDevice device, 5312 VkDebugMarkerObjectNameInfoEXT* pNameInfo) { 5313 return ? 5314} 5315 5316@extension("VK_EXT_debug_marker") 5317cmd void vkCmdDebugMarkerBeginEXT( 5318 VkCommandBuffer commandBuffer, 5319 VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { 5320} 5321 5322@extension("VK_EXT_debug_marker") 5323cmd void vkCmdDebugMarkerEndEXT( 5324 VkCommandBuffer commandBuffer) { 5325} 5326 5327@extension("VK_EXT_debug_marker") 5328cmd void vkCmdDebugMarkerInsertEXT( 5329 VkCommandBuffer commandBuffer, 5330 VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { 5331} 5332 5333 5334//////////////// 5335// Validation // 5336//////////////// 5337 5338extern void validate(string layerName, bool condition, string message) 5339 5340 5341///////////////////////////// 5342// Internal State Tracking // 5343///////////////////////////// 5344 5345StateObject State 5346 5347@internal class StateObject { 5348 // Dispatchable objects. 5349 map!(VkInstance, ref!InstanceObject) Instances 5350 map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices 5351 map!(VkDevice, ref!DeviceObject) Devices 5352 map!(VkQueue, ref!QueueObject) Queues 5353 map!(VkCommandBuffer, ref!CommandBufferObject) CommandBuffers 5354 5355 // Non-dispatchable objects. 5356 map!(VkDeviceMemory, ref!DeviceMemoryObject) DeviceMemories 5357 map!(VkBuffer, ref!BufferObject) Buffers 5358 map!(VkBufferView, ref!BufferViewObject) BufferViews 5359 map!(VkImage, ref!ImageObject) Images 5360 map!(VkImageView, ref!ImageViewObject) ImageViews 5361 map!(VkShaderModule, ref!ShaderModuleObject) ShaderModules 5362 map!(VkPipeline, ref!PipelineObject) Pipelines 5363 map!(VkPipelineLayout, ref!PipelineLayoutObject) PipelineLayouts 5364 map!(VkSampler, ref!SamplerObject) Samplers 5365 map!(VkDescriptorSet, ref!DescriptorSetObject) DescriptorSets 5366 map!(VkDescriptorSetLayout, ref!DescriptorSetLayoutObject) DescriptorSetLayouts 5367 map!(VkDescriptorPool, ref!DescriptorPoolObject) DescriptorPools 5368 map!(VkFence, ref!FenceObject) Fences 5369 map!(VkSemaphore, ref!SemaphoreObject) Semaphores 5370 map!(VkEvent, ref!EventObject) Events 5371 map!(VkQueryPool, ref!QueryPoolObject) QueryPools 5372 map!(VkFramebuffer, ref!FramebufferObject) Framebuffers 5373 map!(VkRenderPass, ref!RenderPassObject) RenderPasses 5374 map!(VkPipelineCache, ref!PipelineCacheObject) PipelineCaches 5375 map!(VkCommandPool, ref!CommandPoolObject) CommandPools 5376 map!(VkSurfaceKHR, ref!SurfaceObject) Surfaces 5377 map!(VkSwapchainKHR, ref!SwapchainObject) Swapchains 5378} 5379 5380@internal class InstanceObject { 5381} 5382 5383@internal class PhysicalDeviceObject { 5384 VkInstance instance 5385} 5386 5387@internal class DeviceObject { 5388 VkPhysicalDevice physicalDevice 5389} 5390 5391@internal class QueueObject { 5392 VkDevice device 5393 VkQueueFlags flags 5394} 5395 5396@internal class CommandBufferObject { 5397 VkDevice device 5398 map!(u64, VkDeviceMemory) boundObjects 5399 VkQueueFlags queueFlags 5400} 5401 5402@internal class DeviceMemoryObject { 5403 VkDevice device 5404 VkDeviceSize allocationSize 5405 map!(u64, VkDeviceSize) boundObjects 5406 map!(VkCommandBuffer, VkCommandBuffer) boundCommandBuffers 5407} 5408 5409@internal class BufferObject { 5410 VkDevice device 5411 VkDeviceMemory memory 5412 VkDeviceSize memoryOffset 5413} 5414 5415@internal class BufferViewObject { 5416 VkDevice device 5417 VkBuffer buffer 5418} 5419 5420@internal class ImageObject { 5421 VkDevice device 5422 VkDeviceMemory memory 5423 VkDeviceSize memoryOffset 5424} 5425 5426@internal class ImageViewObject { 5427 VkDevice device 5428 VkImage image 5429} 5430 5431@internal class ShaderObject { 5432 VkDevice device 5433} 5434 5435@internal class ShaderModuleObject { 5436 VkDevice device 5437} 5438 5439@internal class PipelineObject { 5440 VkDevice device 5441} 5442 5443@internal class PipelineLayoutObject { 5444 VkDevice device 5445} 5446 5447@internal class SamplerObject { 5448 VkDevice device 5449} 5450 5451@internal class DescriptorSetObject { 5452 VkDevice device 5453} 5454 5455@internal class DescriptorSetLayoutObject { 5456 VkDevice device 5457} 5458 5459@internal class DescriptorPoolObject { 5460 VkDevice device 5461} 5462 5463@internal class FenceObject { 5464 VkDevice device 5465 bool signaled 5466} 5467 5468@internal class SemaphoreObject { 5469 VkDevice device 5470} 5471 5472@internal class EventObject { 5473 VkDevice device 5474} 5475 5476@internal class QueryPoolObject { 5477 VkDevice device 5478} 5479 5480@internal class FramebufferObject { 5481 VkDevice device 5482} 5483 5484@internal class RenderPassObject { 5485 VkDevice device 5486} 5487 5488@internal class PipelineCacheObject { 5489 VkDevice device 5490} 5491 5492@internal class CommandPoolObject { 5493 VkDevice device 5494} 5495 5496@internal class SurfaceObject { 5497 VkInstance instance 5498} 5499 5500@internal class SwapchainObject { 5501 VkDevice device 5502} 5503 5504macro ref!InstanceObject GetInstance(VkInstance instance) { 5505 assert(instance in State.Instances) 5506 return State.Instances[instance] 5507} 5508 5509macro ref!PhysicalDeviceObject GetPhysicalDevice(VkPhysicalDevice physicalDevice) { 5510 assert(physicalDevice in State.PhysicalDevices) 5511 return State.PhysicalDevices[physicalDevice] 5512} 5513 5514macro ref!DeviceObject GetDevice(VkDevice device) { 5515 assert(device in State.Devices) 5516 return State.Devices[device] 5517} 5518 5519macro ref!QueueObject GetQueue(VkQueue queue) { 5520 assert(queue in State.Queues) 5521 return State.Queues[queue] 5522} 5523 5524macro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) { 5525 assert(commandBuffer in State.CommandBuffers) 5526 return State.CommandBuffers[commandBuffer] 5527} 5528 5529macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) { 5530 assert(memory in State.DeviceMemories) 5531 return State.DeviceMemories[memory] 5532} 5533 5534macro ref!BufferObject GetBuffer(VkBuffer buffer) { 5535 assert(buffer in State.Buffers) 5536 return State.Buffers[buffer] 5537} 5538 5539macro ref!BufferViewObject GetBufferView(VkBufferView bufferView) { 5540 assert(bufferView in State.BufferViews) 5541 return State.BufferViews[bufferView] 5542} 5543 5544macro ref!ImageObject GetImage(VkImage image) { 5545 assert(image in State.Images) 5546 return State.Images[image] 5547} 5548 5549macro ref!ImageViewObject GetImageView(VkImageView imageView) { 5550 assert(imageView in State.ImageViews) 5551 return State.ImageViews[imageView] 5552} 5553 5554macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) { 5555 assert(shaderModule in State.ShaderModules) 5556 return State.ShaderModules[shaderModule] 5557} 5558 5559macro ref!PipelineObject GetPipeline(VkPipeline pipeline) { 5560 assert(pipeline in State.Pipelines) 5561 return State.Pipelines[pipeline] 5562} 5563 5564macro ref!PipelineLayoutObject GetPipelineLayout(VkPipelineLayout pipelineLayout) { 5565 assert(pipelineLayout in State.PipelineLayouts) 5566 return State.PipelineLayouts[pipelineLayout] 5567} 5568 5569macro ref!SamplerObject GetSampler(VkSampler sampler) { 5570 assert(sampler in State.Samplers) 5571 return State.Samplers[sampler] 5572} 5573 5574macro ref!DescriptorSetObject GetDescriptorSet(VkDescriptorSet descriptorSet) { 5575 assert(descriptorSet in State.DescriptorSets) 5576 return State.DescriptorSets[descriptorSet] 5577} 5578 5579macro ref!DescriptorSetLayoutObject GetDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) { 5580 assert(descriptorSetLayout in State.DescriptorSetLayouts) 5581 return State.DescriptorSetLayouts[descriptorSetLayout] 5582} 5583 5584macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool) { 5585 assert(descriptorPool in State.DescriptorPools) 5586 return State.DescriptorPools[descriptorPool] 5587} 5588 5589macro ref!FenceObject GetFence(VkFence fence) { 5590 assert(fence in State.Fences) 5591 return State.Fences[fence] 5592} 5593 5594macro ref!SemaphoreObject GetSemaphore(VkSemaphore semaphore) { 5595 assert(semaphore in State.Semaphores) 5596 return State.Semaphores[semaphore] 5597} 5598 5599macro ref!EventObject GetEvent(VkEvent event) { 5600 assert(event in State.Events) 5601 return State.Events[event] 5602} 5603 5604macro ref!QueryPoolObject GetQueryPool(VkQueryPool queryPool) { 5605 assert(queryPool in State.QueryPools) 5606 return State.QueryPools[queryPool] 5607} 5608 5609macro ref!FramebufferObject GetFramebuffer(VkFramebuffer framebuffer) { 5610 assert(framebuffer in State.Framebuffers) 5611 return State.Framebuffers[framebuffer] 5612} 5613 5614macro ref!RenderPassObject GetRenderPass(VkRenderPass renderPass) { 5615 assert(renderPass in State.RenderPasses) 5616 return State.RenderPasses[renderPass] 5617} 5618 5619macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) { 5620 assert(pipelineCache in State.PipelineCaches) 5621 return State.PipelineCaches[pipelineCache] 5622} 5623 5624macro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) { 5625 assert(commandPool in State.CommandPools) 5626 return State.CommandPools[commandPool] 5627} 5628 5629macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) { 5630 assert(surface in State.Surfaces) 5631 return State.Surfaces[surface] 5632} 5633 5634macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) { 5635 assert(swapchain in State.Swapchains) 5636 return State.Swapchains[swapchain] 5637} 5638 5639macro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) { 5640 return as!VkQueueFlags(as!u32(flags) | as!u32(bit)) 5641} 5642