Check in vulkan.h for generating framework code
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / scripts / src / vulkan.h.in
1 #ifndef VULKAN_H_
2 #define VULKAN_H_ 1
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8 /*
9 ** Copyright (c) 2015-2016 The Khronos Group Inc.
10 **
11 ** Licensed under the Apache License, Version 2.0 (the "License");
12 ** you may not use this file except in compliance with the License.
13 ** You may obtain a copy of the License at
14 **
15 **     http://www.apache.org/licenses/LICENSE-2.0
16 **
17 ** Unless required by applicable law or agreed to in writing, software
18 ** distributed under the License is distributed on an "AS IS" BASIS,
19 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 ** See the License for the specific language governing permissions and
21 ** limitations under the License.
22 */
23
24 /*
25 ** This header is generated from the Khronos Vulkan XML API Registry.
26 **
27 */
28
29
30 #define VK_VERSION_1_0 1
31 #include "vk_platform.h"
32
33 #define VK_MAKE_VERSION(major, minor, patch) \
34     (((major) << 22) | ((minor) << 12) | (patch))
35
36 // DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
37 //#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0)
38
39 // Vulkan 1.0 version number
40 #define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)
41
42 #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
43 #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
44 #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
45 // Version of this file
46 #define VK_HEADER_VERSION 35
47
48
49 #define VK_NULL_HANDLE 0
50
51
52
53 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
54
55
56 #if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
57 #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
58         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
59 #else
60         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
61 #endif
62 #endif
63
64
65
66 typedef uint32_t VkFlags;
67 typedef uint32_t VkBool32;
68 typedef uint64_t VkDeviceSize;
69 typedef uint32_t VkSampleMask;
70
71 VK_DEFINE_HANDLE(VkInstance)
72 VK_DEFINE_HANDLE(VkPhysicalDevice)
73 VK_DEFINE_HANDLE(VkDevice)
74 VK_DEFINE_HANDLE(VkQueue)
75 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
76 VK_DEFINE_HANDLE(VkCommandBuffer)
77 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
78 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
79 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
80 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
81 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
82 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
83 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
84 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
85 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
86 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
87 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
88 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
89 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
90 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
91 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
92 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
93 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
94 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
95 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
96
97 #define VK_LOD_CLAMP_NONE                 1000.0f
98 #define VK_REMAINING_MIP_LEVELS           (~0U)
99 #define VK_REMAINING_ARRAY_LAYERS         (~0U)
100 #define VK_WHOLE_SIZE                     (~0ULL)
101 #define VK_ATTACHMENT_UNUSED              (~0U)
102 #define VK_TRUE                           1
103 #define VK_FALSE                          0
104 #define VK_QUEUE_FAMILY_IGNORED           (~0U)
105 #define VK_SUBPASS_EXTERNAL               (~0U)
106 #define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256
107 #define VK_UUID_SIZE                      16
108 #define VK_MAX_MEMORY_TYPES               32
109 #define VK_MAX_MEMORY_HEAPS               16
110 #define VK_MAX_EXTENSION_NAME_SIZE        256
111 #define VK_MAX_DESCRIPTION_SIZE           256
112
113
114 typedef enum VkPipelineCacheHeaderVersion {
115     VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
116     VK_PIPELINE_CACHE_HEADER_VERSION_BEGIN_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
117     VK_PIPELINE_CACHE_HEADER_VERSION_END_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
118     VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1),
119     VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
120 } VkPipelineCacheHeaderVersion;
121
122 typedef enum VkResult {
123     VK_SUCCESS = 0,
124     VK_NOT_READY = 1,
125     VK_TIMEOUT = 2,
126     VK_EVENT_SET = 3,
127     VK_EVENT_RESET = 4,
128     VK_INCOMPLETE = 5,
129     VK_ERROR_OUT_OF_HOST_MEMORY = -1,
130     VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
131     VK_ERROR_INITIALIZATION_FAILED = -3,
132     VK_ERROR_DEVICE_LOST = -4,
133     VK_ERROR_MEMORY_MAP_FAILED = -5,
134     VK_ERROR_LAYER_NOT_PRESENT = -6,
135     VK_ERROR_EXTENSION_NOT_PRESENT = -7,
136     VK_ERROR_FEATURE_NOT_PRESENT = -8,
137     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
138     VK_ERROR_TOO_MANY_OBJECTS = -10,
139     VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
140     VK_ERROR_FRAGMENTED_POOL = -12,
141     VK_ERROR_SURFACE_LOST_KHR = -1000000000,
142     VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
143     VK_SUBOPTIMAL_KHR = 1000001003,
144     VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
145     VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
146     VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
147     VK_ERROR_INVALID_SHADER_NV = -1000012000,
148     VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
149     VK_RESULT_END_RANGE = VK_INCOMPLETE,
150     VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
151     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
152 } VkResult;
153
154 typedef enum VkStructureType {
155     VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
156     VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
157     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
158     VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
159     VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
160     VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
161     VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
162     VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
163     VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
164     VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
165     VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
166     VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
167     VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
168     VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
169     VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
170     VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
171     VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
172     VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
173     VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
174     VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
175     VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
176     VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
177     VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
178     VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
179     VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
180     VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
181     VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
182     VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
183     VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
184     VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
185     VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
186     VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
187     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
188     VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
189     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
190     VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
191     VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
192     VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
193     VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
194     VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
195     VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
196     VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
197     VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
198     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
199     VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
200     VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
201     VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
202     VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
203     VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
204     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
205     VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
206     VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
207     VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
208     VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
209     VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
210     VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
211     VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
212     VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = 1000007000,
213     VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
214     VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
215     VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
216     VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
217     VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
218     VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
219     VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
220     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
221     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
222     VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
223     VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
224     VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
225     VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
226     VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
227     VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
228     VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
229     VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
230     VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
231     VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = 1000086002,
232     VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = 1000086003,
233     VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004,
234     VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005,
235     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
236     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
237     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
238     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
239 } VkStructureType;
240
241 typedef enum VkSystemAllocationScope {
242     VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
243     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
244     VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
245     VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
246     VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
247     VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
248     VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
249     VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
250     VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
251 } VkSystemAllocationScope;
252
253 typedef enum VkInternalAllocationType {
254     VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
255     VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
256     VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
257     VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
258     VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
259 } VkInternalAllocationType;
260
261 typedef enum VkFormat {
262     VK_FORMAT_UNDEFINED = 0,
263     VK_FORMAT_R4G4_UNORM_PACK8 = 1,
264     VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
265     VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
266     VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
267     VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
268     VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
269     VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
270     VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
271     VK_FORMAT_R8_UNORM = 9,
272     VK_FORMAT_R8_SNORM = 10,
273     VK_FORMAT_R8_USCALED = 11,
274     VK_FORMAT_R8_SSCALED = 12,
275     VK_FORMAT_R8_UINT = 13,
276     VK_FORMAT_R8_SINT = 14,
277     VK_FORMAT_R8_SRGB = 15,
278     VK_FORMAT_R8G8_UNORM = 16,
279     VK_FORMAT_R8G8_SNORM = 17,
280     VK_FORMAT_R8G8_USCALED = 18,
281     VK_FORMAT_R8G8_SSCALED = 19,
282     VK_FORMAT_R8G8_UINT = 20,
283     VK_FORMAT_R8G8_SINT = 21,
284     VK_FORMAT_R8G8_SRGB = 22,
285     VK_FORMAT_R8G8B8_UNORM = 23,
286     VK_FORMAT_R8G8B8_SNORM = 24,
287     VK_FORMAT_R8G8B8_USCALED = 25,
288     VK_FORMAT_R8G8B8_SSCALED = 26,
289     VK_FORMAT_R8G8B8_UINT = 27,
290     VK_FORMAT_R8G8B8_SINT = 28,
291     VK_FORMAT_R8G8B8_SRGB = 29,
292     VK_FORMAT_B8G8R8_UNORM = 30,
293     VK_FORMAT_B8G8R8_SNORM = 31,
294     VK_FORMAT_B8G8R8_USCALED = 32,
295     VK_FORMAT_B8G8R8_SSCALED = 33,
296     VK_FORMAT_B8G8R8_UINT = 34,
297     VK_FORMAT_B8G8R8_SINT = 35,
298     VK_FORMAT_B8G8R8_SRGB = 36,
299     VK_FORMAT_R8G8B8A8_UNORM = 37,
300     VK_FORMAT_R8G8B8A8_SNORM = 38,
301     VK_FORMAT_R8G8B8A8_USCALED = 39,
302     VK_FORMAT_R8G8B8A8_SSCALED = 40,
303     VK_FORMAT_R8G8B8A8_UINT = 41,
304     VK_FORMAT_R8G8B8A8_SINT = 42,
305     VK_FORMAT_R8G8B8A8_SRGB = 43,
306     VK_FORMAT_B8G8R8A8_UNORM = 44,
307     VK_FORMAT_B8G8R8A8_SNORM = 45,
308     VK_FORMAT_B8G8R8A8_USCALED = 46,
309     VK_FORMAT_B8G8R8A8_SSCALED = 47,
310     VK_FORMAT_B8G8R8A8_UINT = 48,
311     VK_FORMAT_B8G8R8A8_SINT = 49,
312     VK_FORMAT_B8G8R8A8_SRGB = 50,
313     VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
314     VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
315     VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
316     VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
317     VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
318     VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
319     VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
320     VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
321     VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
322     VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
323     VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
324     VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
325     VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
326     VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
327     VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
328     VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
329     VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
330     VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
331     VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
332     VK_FORMAT_R16_UNORM = 70,
333     VK_FORMAT_R16_SNORM = 71,
334     VK_FORMAT_R16_USCALED = 72,
335     VK_FORMAT_R16_SSCALED = 73,
336     VK_FORMAT_R16_UINT = 74,
337     VK_FORMAT_R16_SINT = 75,
338     VK_FORMAT_R16_SFLOAT = 76,
339     VK_FORMAT_R16G16_UNORM = 77,
340     VK_FORMAT_R16G16_SNORM = 78,
341     VK_FORMAT_R16G16_USCALED = 79,
342     VK_FORMAT_R16G16_SSCALED = 80,
343     VK_FORMAT_R16G16_UINT = 81,
344     VK_FORMAT_R16G16_SINT = 82,
345     VK_FORMAT_R16G16_SFLOAT = 83,
346     VK_FORMAT_R16G16B16_UNORM = 84,
347     VK_FORMAT_R16G16B16_SNORM = 85,
348     VK_FORMAT_R16G16B16_USCALED = 86,
349     VK_FORMAT_R16G16B16_SSCALED = 87,
350     VK_FORMAT_R16G16B16_UINT = 88,
351     VK_FORMAT_R16G16B16_SINT = 89,
352     VK_FORMAT_R16G16B16_SFLOAT = 90,
353     VK_FORMAT_R16G16B16A16_UNORM = 91,
354     VK_FORMAT_R16G16B16A16_SNORM = 92,
355     VK_FORMAT_R16G16B16A16_USCALED = 93,
356     VK_FORMAT_R16G16B16A16_SSCALED = 94,
357     VK_FORMAT_R16G16B16A16_UINT = 95,
358     VK_FORMAT_R16G16B16A16_SINT = 96,
359     VK_FORMAT_R16G16B16A16_SFLOAT = 97,
360     VK_FORMAT_R32_UINT = 98,
361     VK_FORMAT_R32_SINT = 99,
362     VK_FORMAT_R32_SFLOAT = 100,
363     VK_FORMAT_R32G32_UINT = 101,
364     VK_FORMAT_R32G32_SINT = 102,
365     VK_FORMAT_R32G32_SFLOAT = 103,
366     VK_FORMAT_R32G32B32_UINT = 104,
367     VK_FORMAT_R32G32B32_SINT = 105,
368     VK_FORMAT_R32G32B32_SFLOAT = 106,
369     VK_FORMAT_R32G32B32A32_UINT = 107,
370     VK_FORMAT_R32G32B32A32_SINT = 108,
371     VK_FORMAT_R32G32B32A32_SFLOAT = 109,
372     VK_FORMAT_R64_UINT = 110,
373     VK_FORMAT_R64_SINT = 111,
374     VK_FORMAT_R64_SFLOAT = 112,
375     VK_FORMAT_R64G64_UINT = 113,
376     VK_FORMAT_R64G64_SINT = 114,
377     VK_FORMAT_R64G64_SFLOAT = 115,
378     VK_FORMAT_R64G64B64_UINT = 116,
379     VK_FORMAT_R64G64B64_SINT = 117,
380     VK_FORMAT_R64G64B64_SFLOAT = 118,
381     VK_FORMAT_R64G64B64A64_UINT = 119,
382     VK_FORMAT_R64G64B64A64_SINT = 120,
383     VK_FORMAT_R64G64B64A64_SFLOAT = 121,
384     VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
385     VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
386     VK_FORMAT_D16_UNORM = 124,
387     VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
388     VK_FORMAT_D32_SFLOAT = 126,
389     VK_FORMAT_S8_UINT = 127,
390     VK_FORMAT_D16_UNORM_S8_UINT = 128,
391     VK_FORMAT_D24_UNORM_S8_UINT = 129,
392     VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
393     VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
394     VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
395     VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
396     VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
397     VK_FORMAT_BC2_UNORM_BLOCK = 135,
398     VK_FORMAT_BC2_SRGB_BLOCK = 136,
399     VK_FORMAT_BC3_UNORM_BLOCK = 137,
400     VK_FORMAT_BC3_SRGB_BLOCK = 138,
401     VK_FORMAT_BC4_UNORM_BLOCK = 139,
402     VK_FORMAT_BC4_SNORM_BLOCK = 140,
403     VK_FORMAT_BC5_UNORM_BLOCK = 141,
404     VK_FORMAT_BC5_SNORM_BLOCK = 142,
405     VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
406     VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
407     VK_FORMAT_BC7_UNORM_BLOCK = 145,
408     VK_FORMAT_BC7_SRGB_BLOCK = 146,
409     VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
410     VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
411     VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
412     VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
413     VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
414     VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
415     VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
416     VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
417     VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
418     VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
419     VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
420     VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
421     VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
422     VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
423     VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
424     VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
425     VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
426     VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
427     VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
428     VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
429     VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
430     VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
431     VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
432     VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
433     VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
434     VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
435     VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
436     VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
437     VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
438     VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
439     VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
440     VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
441     VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
442     VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
443     VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
444     VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
445     VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
446     VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
447     VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
448     VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
449     VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
450     VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
451     VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
452     VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
453     VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
454     VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
455     VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
456     VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
457     VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
458     VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
459 } VkFormat;
460
461 typedef enum VkImageType {
462     VK_IMAGE_TYPE_1D = 0,
463     VK_IMAGE_TYPE_2D = 1,
464     VK_IMAGE_TYPE_3D = 2,
465     VK_IMAGE_TYPE_BEGIN_RANGE = VK_IMAGE_TYPE_1D,
466     VK_IMAGE_TYPE_END_RANGE = VK_IMAGE_TYPE_3D,
467     VK_IMAGE_TYPE_RANGE_SIZE = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
468     VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
469 } VkImageType;
470
471 typedef enum VkImageTiling {
472     VK_IMAGE_TILING_OPTIMAL = 0,
473     VK_IMAGE_TILING_LINEAR = 1,
474     VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
475     VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
476     VK_IMAGE_TILING_RANGE_SIZE = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
477     VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
478 } VkImageTiling;
479
480 typedef enum VkPhysicalDeviceType {
481     VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
482     VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
483     VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
484     VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
485     VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
486     VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
487     VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
488     VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
489     VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
490 } VkPhysicalDeviceType;
491
492 typedef enum VkQueryType {
493     VK_QUERY_TYPE_OCCLUSION = 0,
494     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
495     VK_QUERY_TYPE_TIMESTAMP = 2,
496     VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
497     VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
498     VK_QUERY_TYPE_RANGE_SIZE = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
499     VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
500 } VkQueryType;
501
502 typedef enum VkSharingMode {
503     VK_SHARING_MODE_EXCLUSIVE = 0,
504     VK_SHARING_MODE_CONCURRENT = 1,
505     VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
506     VK_SHARING_MODE_END_RANGE = VK_SHARING_MODE_CONCURRENT,
507     VK_SHARING_MODE_RANGE_SIZE = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
508     VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
509 } VkSharingMode;
510
511 typedef enum VkImageLayout {
512     VK_IMAGE_LAYOUT_UNDEFINED = 0,
513     VK_IMAGE_LAYOUT_GENERAL = 1,
514     VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
515     VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
516     VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
517     VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
518     VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
519     VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
520     VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
521     VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
522     VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
523     VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
524     VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
525     VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
526 } VkImageLayout;
527
528 typedef enum VkImageViewType {
529     VK_IMAGE_VIEW_TYPE_1D = 0,
530     VK_IMAGE_VIEW_TYPE_2D = 1,
531     VK_IMAGE_VIEW_TYPE_3D = 2,
532     VK_IMAGE_VIEW_TYPE_CUBE = 3,
533     VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
534     VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
535     VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
536     VK_IMAGE_VIEW_TYPE_BEGIN_RANGE = VK_IMAGE_VIEW_TYPE_1D,
537     VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
538     VK_IMAGE_VIEW_TYPE_RANGE_SIZE = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
539     VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
540 } VkImageViewType;
541
542 typedef enum VkComponentSwizzle {
543     VK_COMPONENT_SWIZZLE_IDENTITY = 0,
544     VK_COMPONENT_SWIZZLE_ZERO = 1,
545     VK_COMPONENT_SWIZZLE_ONE = 2,
546     VK_COMPONENT_SWIZZLE_R = 3,
547     VK_COMPONENT_SWIZZLE_G = 4,
548     VK_COMPONENT_SWIZZLE_B = 5,
549     VK_COMPONENT_SWIZZLE_A = 6,
550     VK_COMPONENT_SWIZZLE_BEGIN_RANGE = VK_COMPONENT_SWIZZLE_IDENTITY,
551     VK_COMPONENT_SWIZZLE_END_RANGE = VK_COMPONENT_SWIZZLE_A,
552     VK_COMPONENT_SWIZZLE_RANGE_SIZE = (VK_COMPONENT_SWIZZLE_A - VK_COMPONENT_SWIZZLE_IDENTITY + 1),
553     VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
554 } VkComponentSwizzle;
555
556 typedef enum VkVertexInputRate {
557     VK_VERTEX_INPUT_RATE_VERTEX = 0,
558     VK_VERTEX_INPUT_RATE_INSTANCE = 1,
559     VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
560     VK_VERTEX_INPUT_RATE_END_RANGE = VK_VERTEX_INPUT_RATE_INSTANCE,
561     VK_VERTEX_INPUT_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_RATE_INSTANCE - VK_VERTEX_INPUT_RATE_VERTEX + 1),
562     VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
563 } VkVertexInputRate;
564
565 typedef enum VkPrimitiveTopology {
566     VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
567     VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
568     VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
569     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
570     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
571     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
572     VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
573     VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
574     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
575     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
576     VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
577     VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
578     VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
579     VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
580     VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
581 } VkPrimitiveTopology;
582
583 typedef enum VkPolygonMode {
584     VK_POLYGON_MODE_FILL = 0,
585     VK_POLYGON_MODE_LINE = 1,
586     VK_POLYGON_MODE_POINT = 2,
587     VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL,
588     VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT,
589     VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1),
590     VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
591 } VkPolygonMode;
592
593 typedef enum VkFrontFace {
594     VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
595     VK_FRONT_FACE_CLOCKWISE = 1,
596     VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
597     VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CLOCKWISE,
598     VK_FRONT_FACE_RANGE_SIZE = (VK_FRONT_FACE_CLOCKWISE - VK_FRONT_FACE_COUNTER_CLOCKWISE + 1),
599     VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
600 } VkFrontFace;
601
602 typedef enum VkCompareOp {
603     VK_COMPARE_OP_NEVER = 0,
604     VK_COMPARE_OP_LESS = 1,
605     VK_COMPARE_OP_EQUAL = 2,
606     VK_COMPARE_OP_LESS_OR_EQUAL = 3,
607     VK_COMPARE_OP_GREATER = 4,
608     VK_COMPARE_OP_NOT_EQUAL = 5,
609     VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
610     VK_COMPARE_OP_ALWAYS = 7,
611     VK_COMPARE_OP_BEGIN_RANGE = VK_COMPARE_OP_NEVER,
612     VK_COMPARE_OP_END_RANGE = VK_COMPARE_OP_ALWAYS,
613     VK_COMPARE_OP_RANGE_SIZE = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
614     VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
615 } VkCompareOp;
616
617 typedef enum VkStencilOp {
618     VK_STENCIL_OP_KEEP = 0,
619     VK_STENCIL_OP_ZERO = 1,
620     VK_STENCIL_OP_REPLACE = 2,
621     VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
622     VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
623     VK_STENCIL_OP_INVERT = 5,
624     VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
625     VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
626     VK_STENCIL_OP_BEGIN_RANGE = VK_STENCIL_OP_KEEP,
627     VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DECREMENT_AND_WRAP,
628     VK_STENCIL_OP_RANGE_SIZE = (VK_STENCIL_OP_DECREMENT_AND_WRAP - VK_STENCIL_OP_KEEP + 1),
629     VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
630 } VkStencilOp;
631
632 typedef enum VkLogicOp {
633     VK_LOGIC_OP_CLEAR = 0,
634     VK_LOGIC_OP_AND = 1,
635     VK_LOGIC_OP_AND_REVERSE = 2,
636     VK_LOGIC_OP_COPY = 3,
637     VK_LOGIC_OP_AND_INVERTED = 4,
638     VK_LOGIC_OP_NO_OP = 5,
639     VK_LOGIC_OP_XOR = 6,
640     VK_LOGIC_OP_OR = 7,
641     VK_LOGIC_OP_NOR = 8,
642     VK_LOGIC_OP_EQUIVALENT = 9,
643     VK_LOGIC_OP_INVERT = 10,
644     VK_LOGIC_OP_OR_REVERSE = 11,
645     VK_LOGIC_OP_COPY_INVERTED = 12,
646     VK_LOGIC_OP_OR_INVERTED = 13,
647     VK_LOGIC_OP_NAND = 14,
648     VK_LOGIC_OP_SET = 15,
649     VK_LOGIC_OP_BEGIN_RANGE = VK_LOGIC_OP_CLEAR,
650     VK_LOGIC_OP_END_RANGE = VK_LOGIC_OP_SET,
651     VK_LOGIC_OP_RANGE_SIZE = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
652     VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
653 } VkLogicOp;
654
655 typedef enum VkBlendFactor {
656     VK_BLEND_FACTOR_ZERO = 0,
657     VK_BLEND_FACTOR_ONE = 1,
658     VK_BLEND_FACTOR_SRC_COLOR = 2,
659     VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
660     VK_BLEND_FACTOR_DST_COLOR = 4,
661     VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
662     VK_BLEND_FACTOR_SRC_ALPHA = 6,
663     VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
664     VK_BLEND_FACTOR_DST_ALPHA = 8,
665     VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
666     VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
667     VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
668     VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
669     VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
670     VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
671     VK_BLEND_FACTOR_SRC1_COLOR = 15,
672     VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
673     VK_BLEND_FACTOR_SRC1_ALPHA = 17,
674     VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
675     VK_BLEND_FACTOR_BEGIN_RANGE = VK_BLEND_FACTOR_ZERO,
676     VK_BLEND_FACTOR_END_RANGE = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA,
677     VK_BLEND_FACTOR_RANGE_SIZE = (VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - VK_BLEND_FACTOR_ZERO + 1),
678     VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
679 } VkBlendFactor;
680
681 typedef enum VkBlendOp {
682     VK_BLEND_OP_ADD = 0,
683     VK_BLEND_OP_SUBTRACT = 1,
684     VK_BLEND_OP_REVERSE_SUBTRACT = 2,
685     VK_BLEND_OP_MIN = 3,
686     VK_BLEND_OP_MAX = 4,
687     VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD,
688     VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX,
689     VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
690     VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
691 } VkBlendOp;
692
693 typedef enum VkDynamicState {
694     VK_DYNAMIC_STATE_VIEWPORT = 0,
695     VK_DYNAMIC_STATE_SCISSOR = 1,
696     VK_DYNAMIC_STATE_LINE_WIDTH = 2,
697     VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
698     VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
699     VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
700     VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
701     VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
702     VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
703     VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
704     VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
705     VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
706     VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
707 } VkDynamicState;
708
709 typedef enum VkFilter {
710     VK_FILTER_NEAREST = 0,
711     VK_FILTER_LINEAR = 1,
712     VK_FILTER_CUBIC_IMG = 1000015000,
713     VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
714     VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
715     VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
716     VK_FILTER_MAX_ENUM = 0x7FFFFFFF
717 } VkFilter;
718
719 typedef enum VkSamplerMipmapMode {
720     VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
721     VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
722     VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_NEAREST,
723     VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
724     VK_SAMPLER_MIPMAP_MODE_RANGE_SIZE = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_NEAREST + 1),
725     VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
726 } VkSamplerMipmapMode;
727
728 typedef enum VkSamplerAddressMode {
729     VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
730     VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
731     VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
732     VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
733     VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
734     VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
735     VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
736     VK_SAMPLER_ADDRESS_MODE_RANGE_SIZE = (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
737     VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
738 } VkSamplerAddressMode;
739
740 typedef enum VkBorderColor {
741     VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
742     VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
743     VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
744     VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
745     VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
746     VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
747     VK_BORDER_COLOR_BEGIN_RANGE = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
748     VK_BORDER_COLOR_END_RANGE = VK_BORDER_COLOR_INT_OPAQUE_WHITE,
749     VK_BORDER_COLOR_RANGE_SIZE = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
750     VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
751 } VkBorderColor;
752
753 typedef enum VkDescriptorType {
754     VK_DESCRIPTOR_TYPE_SAMPLER = 0,
755     VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
756     VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
757     VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
758     VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
759     VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
760     VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
761     VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
762     VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
763     VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
764     VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
765     VK_DESCRIPTOR_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_TYPE_SAMPLER,
766     VK_DESCRIPTOR_TYPE_END_RANGE = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
767     VK_DESCRIPTOR_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
768     VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
769 } VkDescriptorType;
770
771 typedef enum VkAttachmentLoadOp {
772     VK_ATTACHMENT_LOAD_OP_LOAD = 0,
773     VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
774     VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
775     VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE = VK_ATTACHMENT_LOAD_OP_LOAD,
776     VK_ATTACHMENT_LOAD_OP_END_RANGE = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
777     VK_ATTACHMENT_LOAD_OP_RANGE_SIZE = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
778     VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
779 } VkAttachmentLoadOp;
780
781 typedef enum VkAttachmentStoreOp {
782     VK_ATTACHMENT_STORE_OP_STORE = 0,
783     VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
784     VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
785     VK_ATTACHMENT_STORE_OP_END_RANGE = VK_ATTACHMENT_STORE_OP_DONT_CARE,
786     VK_ATTACHMENT_STORE_OP_RANGE_SIZE = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
787     VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
788 } VkAttachmentStoreOp;
789
790 typedef enum VkPipelineBindPoint {
791     VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
792     VK_PIPELINE_BIND_POINT_COMPUTE = 1,
793     VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
794     VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
795     VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
796     VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
797 } VkPipelineBindPoint;
798
799 typedef enum VkCommandBufferLevel {
800     VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
801     VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
802     VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
803     VK_COMMAND_BUFFER_LEVEL_END_RANGE = VK_COMMAND_BUFFER_LEVEL_SECONDARY,
804     VK_COMMAND_BUFFER_LEVEL_RANGE_SIZE = (VK_COMMAND_BUFFER_LEVEL_SECONDARY - VK_COMMAND_BUFFER_LEVEL_PRIMARY + 1),
805     VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
806 } VkCommandBufferLevel;
807
808 typedef enum VkIndexType {
809     VK_INDEX_TYPE_UINT16 = 0,
810     VK_INDEX_TYPE_UINT32 = 1,
811     VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
812     VK_INDEX_TYPE_END_RANGE = VK_INDEX_TYPE_UINT32,
813     VK_INDEX_TYPE_RANGE_SIZE = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
814     VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
815 } VkIndexType;
816
817 typedef enum VkSubpassContents {
818     VK_SUBPASS_CONTENTS_INLINE = 0,
819     VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
820     VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
821     VK_SUBPASS_CONTENTS_END_RANGE = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
822     VK_SUBPASS_CONTENTS_RANGE_SIZE = (VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_SUBPASS_CONTENTS_INLINE + 1),
823     VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
824 } VkSubpassContents;
825
826 typedef VkFlags VkInstanceCreateFlags;
827
828 typedef enum VkFormatFeatureFlagBits {
829     VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
830     VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
831     VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
832     VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
833     VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
834     VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
835     VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
836     VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
837     VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
838     VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
839     VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
840     VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
841     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
842     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
843     VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
844 } VkFormatFeatureFlagBits;
845 typedef VkFlags VkFormatFeatureFlags;
846
847 typedef enum VkImageUsageFlagBits {
848     VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
849     VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
850     VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
851     VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
852     VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
853     VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
854     VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
855     VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
856     VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
857 } VkImageUsageFlagBits;
858 typedef VkFlags VkImageUsageFlags;
859
860 typedef enum VkImageCreateFlagBits {
861     VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
862     VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
863     VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
864     VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
865     VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
866     VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
867 } VkImageCreateFlagBits;
868 typedef VkFlags VkImageCreateFlags;
869
870 typedef enum VkSampleCountFlagBits {
871     VK_SAMPLE_COUNT_1_BIT = 0x00000001,
872     VK_SAMPLE_COUNT_2_BIT = 0x00000002,
873     VK_SAMPLE_COUNT_4_BIT = 0x00000004,
874     VK_SAMPLE_COUNT_8_BIT = 0x00000008,
875     VK_SAMPLE_COUNT_16_BIT = 0x00000010,
876     VK_SAMPLE_COUNT_32_BIT = 0x00000020,
877     VK_SAMPLE_COUNT_64_BIT = 0x00000040,
878     VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
879 } VkSampleCountFlagBits;
880 typedef VkFlags VkSampleCountFlags;
881
882 typedef enum VkQueueFlagBits {
883     VK_QUEUE_GRAPHICS_BIT = 0x00000001,
884     VK_QUEUE_COMPUTE_BIT = 0x00000002,
885     VK_QUEUE_TRANSFER_BIT = 0x00000004,
886     VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
887     VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
888 } VkQueueFlagBits;
889 typedef VkFlags VkQueueFlags;
890
891 typedef enum VkMemoryPropertyFlagBits {
892     VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
893     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
894     VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
895     VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
896     VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
897     VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
898 } VkMemoryPropertyFlagBits;
899 typedef VkFlags VkMemoryPropertyFlags;
900
901 typedef enum VkMemoryHeapFlagBits {
902     VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
903     VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
904 } VkMemoryHeapFlagBits;
905 typedef VkFlags VkMemoryHeapFlags;
906 typedef VkFlags VkDeviceCreateFlags;
907 typedef VkFlags VkDeviceQueueCreateFlags;
908
909 typedef enum VkPipelineStageFlagBits {
910     VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
911     VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
912     VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
913     VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
914     VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
915     VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
916     VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
917     VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
918     VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
919     VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
920     VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
921     VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
922     VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
923     VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
924     VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
925     VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
926     VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
927     VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = 0x00020000,
928     VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
929 } VkPipelineStageFlagBits;
930 typedef VkFlags VkPipelineStageFlags;
931 typedef VkFlags VkMemoryMapFlags;
932
933 typedef enum VkImageAspectFlagBits {
934     VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
935     VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
936     VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
937     VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
938     VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
939 } VkImageAspectFlagBits;
940 typedef VkFlags VkImageAspectFlags;
941
942 typedef enum VkSparseImageFormatFlagBits {
943     VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
944     VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
945     VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
946     VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
947 } VkSparseImageFormatFlagBits;
948 typedef VkFlags VkSparseImageFormatFlags;
949
950 typedef enum VkSparseMemoryBindFlagBits {
951     VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
952     VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
953 } VkSparseMemoryBindFlagBits;
954 typedef VkFlags VkSparseMemoryBindFlags;
955
956 typedef enum VkFenceCreateFlagBits {
957     VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
958     VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
959 } VkFenceCreateFlagBits;
960 typedef VkFlags VkFenceCreateFlags;
961 typedef VkFlags VkSemaphoreCreateFlags;
962 typedef VkFlags VkEventCreateFlags;
963 typedef VkFlags VkQueryPoolCreateFlags;
964
965 typedef enum VkQueryPipelineStatisticFlagBits {
966     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
967     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
968     VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
969     VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
970     VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
971     VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
972     VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
973     VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
974     VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
975     VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
976     VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
977     VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
978 } VkQueryPipelineStatisticFlagBits;
979 typedef VkFlags VkQueryPipelineStatisticFlags;
980
981 typedef enum VkQueryResultFlagBits {
982     VK_QUERY_RESULT_64_BIT = 0x00000001,
983     VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
984     VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
985     VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
986     VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
987 } VkQueryResultFlagBits;
988 typedef VkFlags VkQueryResultFlags;
989
990 typedef enum VkBufferCreateFlagBits {
991     VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
992     VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
993     VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
994     VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
995 } VkBufferCreateFlagBits;
996 typedef VkFlags VkBufferCreateFlags;
997
998 typedef enum VkBufferUsageFlagBits {
999     VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
1000     VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
1001     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
1002     VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
1003     VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
1004     VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
1005     VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
1006     VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
1007     VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
1008     VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1009 } VkBufferUsageFlagBits;
1010 typedef VkFlags VkBufferUsageFlags;
1011 typedef VkFlags VkBufferViewCreateFlags;
1012 typedef VkFlags VkImageViewCreateFlags;
1013 typedef VkFlags VkShaderModuleCreateFlags;
1014 typedef VkFlags VkPipelineCacheCreateFlags;
1015
1016 typedef enum VkPipelineCreateFlagBits {
1017     VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
1018     VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
1019     VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
1020     VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1021 } VkPipelineCreateFlagBits;
1022 typedef VkFlags VkPipelineCreateFlags;
1023 typedef VkFlags VkPipelineShaderStageCreateFlags;
1024
1025 typedef enum VkShaderStageFlagBits {
1026     VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
1027     VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
1028     VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
1029     VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
1030     VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
1031     VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
1032     VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
1033     VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
1034     VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1035 } VkShaderStageFlagBits;
1036 typedef VkFlags VkPipelineVertexInputStateCreateFlags;
1037 typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
1038 typedef VkFlags VkPipelineTessellationStateCreateFlags;
1039 typedef VkFlags VkPipelineViewportStateCreateFlags;
1040 typedef VkFlags VkPipelineRasterizationStateCreateFlags;
1041
1042 typedef enum VkCullModeFlagBits {
1043     VK_CULL_MODE_NONE = 0,
1044     VK_CULL_MODE_FRONT_BIT = 0x00000001,
1045     VK_CULL_MODE_BACK_BIT = 0x00000002,
1046     VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
1047     VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1048 } VkCullModeFlagBits;
1049 typedef VkFlags VkCullModeFlags;
1050 typedef VkFlags VkPipelineMultisampleStateCreateFlags;
1051 typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
1052 typedef VkFlags VkPipelineColorBlendStateCreateFlags;
1053
1054 typedef enum VkColorComponentFlagBits {
1055     VK_COLOR_COMPONENT_R_BIT = 0x00000001,
1056     VK_COLOR_COMPONENT_G_BIT = 0x00000002,
1057     VK_COLOR_COMPONENT_B_BIT = 0x00000004,
1058     VK_COLOR_COMPONENT_A_BIT = 0x00000008,
1059     VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1060 } VkColorComponentFlagBits;
1061 typedef VkFlags VkColorComponentFlags;
1062 typedef VkFlags VkPipelineDynamicStateCreateFlags;
1063 typedef VkFlags VkPipelineLayoutCreateFlags;
1064 typedef VkFlags VkShaderStageFlags;
1065 typedef VkFlags VkSamplerCreateFlags;
1066 typedef VkFlags VkDescriptorSetLayoutCreateFlags;
1067
1068 typedef enum VkDescriptorPoolCreateFlagBits {
1069     VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
1070     VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1071 } VkDescriptorPoolCreateFlagBits;
1072 typedef VkFlags VkDescriptorPoolCreateFlags;
1073 typedef VkFlags VkDescriptorPoolResetFlags;
1074 typedef VkFlags VkFramebufferCreateFlags;
1075 typedef VkFlags VkRenderPassCreateFlags;
1076
1077 typedef enum VkAttachmentDescriptionFlagBits {
1078     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
1079     VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1080 } VkAttachmentDescriptionFlagBits;
1081 typedef VkFlags VkAttachmentDescriptionFlags;
1082 typedef VkFlags VkSubpassDescriptionFlags;
1083
1084 typedef enum VkAccessFlagBits {
1085     VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
1086     VK_ACCESS_INDEX_READ_BIT = 0x00000002,
1087     VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
1088     VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
1089     VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
1090     VK_ACCESS_SHADER_READ_BIT = 0x00000020,
1091     VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
1092     VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
1093     VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
1094     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
1095     VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
1096     VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
1097     VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
1098     VK_ACCESS_HOST_READ_BIT = 0x00002000,
1099     VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
1100     VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
1101     VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
1102     VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1103 } VkAccessFlagBits;
1104 typedef VkFlags VkAccessFlags;
1105
1106 typedef enum VkDependencyFlagBits {
1107     VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
1108     VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1109 } VkDependencyFlagBits;
1110 typedef VkFlags VkDependencyFlags;
1111
1112 typedef enum VkCommandPoolCreateFlagBits {
1113     VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
1114     VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
1115     VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1116 } VkCommandPoolCreateFlagBits;
1117 typedef VkFlags VkCommandPoolCreateFlags;
1118
1119 typedef enum VkCommandPoolResetFlagBits {
1120     VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
1121     VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1122 } VkCommandPoolResetFlagBits;
1123 typedef VkFlags VkCommandPoolResetFlags;
1124
1125 typedef enum VkCommandBufferUsageFlagBits {
1126     VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
1127     VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
1128     VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
1129     VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1130 } VkCommandBufferUsageFlagBits;
1131 typedef VkFlags VkCommandBufferUsageFlags;
1132
1133 typedef enum VkQueryControlFlagBits {
1134     VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
1135     VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1136 } VkQueryControlFlagBits;
1137 typedef VkFlags VkQueryControlFlags;
1138
1139 typedef enum VkCommandBufferResetFlagBits {
1140     VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
1141     VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1142 } VkCommandBufferResetFlagBits;
1143 typedef VkFlags VkCommandBufferResetFlags;
1144
1145 typedef enum VkStencilFaceFlagBits {
1146     VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
1147     VK_STENCIL_FACE_BACK_BIT = 0x00000002,
1148     VK_STENCIL_FRONT_AND_BACK = 0x00000003,
1149     VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
1150 } VkStencilFaceFlagBits;
1151 typedef VkFlags VkStencilFaceFlags;
1152
1153 typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
1154     void*                                       pUserData,
1155     size_t                                      size,
1156     size_t                                      alignment,
1157     VkSystemAllocationScope                     allocationScope);
1158
1159 typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
1160     void*                                       pUserData,
1161     void*                                       pOriginal,
1162     size_t                                      size,
1163     size_t                                      alignment,
1164     VkSystemAllocationScope                     allocationScope);
1165
1166 typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
1167     void*                                       pUserData,
1168     void*                                       pMemory);
1169
1170 typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
1171     void*                                       pUserData,
1172     size_t                                      size,
1173     VkInternalAllocationType                    allocationType,
1174     VkSystemAllocationScope                     allocationScope);
1175
1176 typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
1177     void*                                       pUserData,
1178     size_t                                      size,
1179     VkInternalAllocationType                    allocationType,
1180     VkSystemAllocationScope                     allocationScope);
1181
1182 typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
1183
1184 typedef struct VkApplicationInfo {
1185     VkStructureType    sType;
1186     const void*        pNext;
1187     const char*        pApplicationName;
1188     uint32_t           applicationVersion;
1189     const char*        pEngineName;
1190     uint32_t           engineVersion;
1191     uint32_t           apiVersion;
1192 } VkApplicationInfo;
1193
1194 typedef struct VkInstanceCreateInfo {
1195     VkStructureType             sType;
1196     const void*                 pNext;
1197     VkInstanceCreateFlags       flags;
1198     const VkApplicationInfo*    pApplicationInfo;
1199     uint32_t                    enabledLayerCount;
1200     const char* const*          ppEnabledLayerNames;
1201     uint32_t                    enabledExtensionCount;
1202     const char* const*          ppEnabledExtensionNames;
1203 } VkInstanceCreateInfo;
1204
1205 typedef struct VkAllocationCallbacks {
1206     void*                                   pUserData;
1207     PFN_vkAllocationFunction                pfnAllocation;
1208     PFN_vkReallocationFunction              pfnReallocation;
1209     PFN_vkFreeFunction                      pfnFree;
1210     PFN_vkInternalAllocationNotification    pfnInternalAllocation;
1211     PFN_vkInternalFreeNotification          pfnInternalFree;
1212 } VkAllocationCallbacks;
1213
1214 typedef struct VkPhysicalDeviceFeatures {
1215     VkBool32    robustBufferAccess;
1216     VkBool32    fullDrawIndexUint32;
1217     VkBool32    imageCubeArray;
1218     VkBool32    independentBlend;
1219     VkBool32    geometryShader;
1220     VkBool32    tessellationShader;
1221     VkBool32    sampleRateShading;
1222     VkBool32    dualSrcBlend;
1223     VkBool32    logicOp;
1224     VkBool32    multiDrawIndirect;
1225     VkBool32    drawIndirectFirstInstance;
1226     VkBool32    depthClamp;
1227     VkBool32    depthBiasClamp;
1228     VkBool32    fillModeNonSolid;
1229     VkBool32    depthBounds;
1230     VkBool32    wideLines;
1231     VkBool32    largePoints;
1232     VkBool32    alphaToOne;
1233     VkBool32    multiViewport;
1234     VkBool32    samplerAnisotropy;
1235     VkBool32    textureCompressionETC2;
1236     VkBool32    textureCompressionASTC_LDR;
1237     VkBool32    textureCompressionBC;
1238     VkBool32    occlusionQueryPrecise;
1239     VkBool32    pipelineStatisticsQuery;
1240     VkBool32    vertexPipelineStoresAndAtomics;
1241     VkBool32    fragmentStoresAndAtomics;
1242     VkBool32    shaderTessellationAndGeometryPointSize;
1243     VkBool32    shaderImageGatherExtended;
1244     VkBool32    shaderStorageImageExtendedFormats;
1245     VkBool32    shaderStorageImageMultisample;
1246     VkBool32    shaderStorageImageReadWithoutFormat;
1247     VkBool32    shaderStorageImageWriteWithoutFormat;
1248     VkBool32    shaderUniformBufferArrayDynamicIndexing;
1249     VkBool32    shaderSampledImageArrayDynamicIndexing;
1250     VkBool32    shaderStorageBufferArrayDynamicIndexing;
1251     VkBool32    shaderStorageImageArrayDynamicIndexing;
1252     VkBool32    shaderClipDistance;
1253     VkBool32    shaderCullDistance;
1254     VkBool32    shaderFloat64;
1255     VkBool32    shaderInt64;
1256     VkBool32    shaderInt16;
1257     VkBool32    shaderResourceResidency;
1258     VkBool32    shaderResourceMinLod;
1259     VkBool32    sparseBinding;
1260     VkBool32    sparseResidencyBuffer;
1261     VkBool32    sparseResidencyImage2D;
1262     VkBool32    sparseResidencyImage3D;
1263     VkBool32    sparseResidency2Samples;
1264     VkBool32    sparseResidency4Samples;
1265     VkBool32    sparseResidency8Samples;
1266     VkBool32    sparseResidency16Samples;
1267     VkBool32    sparseResidencyAliased;
1268     VkBool32    variableMultisampleRate;
1269     VkBool32    inheritedQueries;
1270 } VkPhysicalDeviceFeatures;
1271
1272 typedef struct VkFormatProperties {
1273     VkFormatFeatureFlags    linearTilingFeatures;
1274     VkFormatFeatureFlags    optimalTilingFeatures;
1275     VkFormatFeatureFlags    bufferFeatures;
1276 } VkFormatProperties;
1277
1278 typedef struct VkExtent3D {
1279     uint32_t    width;
1280     uint32_t    height;
1281     uint32_t    depth;
1282 } VkExtent3D;
1283
1284 typedef struct VkImageFormatProperties {
1285     VkExtent3D            maxExtent;
1286     uint32_t              maxMipLevels;
1287     uint32_t              maxArrayLayers;
1288     VkSampleCountFlags    sampleCounts;
1289     VkDeviceSize          maxResourceSize;
1290 } VkImageFormatProperties;
1291
1292 typedef struct VkPhysicalDeviceLimits {
1293     uint32_t              maxImageDimension1D;
1294     uint32_t              maxImageDimension2D;
1295     uint32_t              maxImageDimension3D;
1296     uint32_t              maxImageDimensionCube;
1297     uint32_t              maxImageArrayLayers;
1298     uint32_t              maxTexelBufferElements;
1299     uint32_t              maxUniformBufferRange;
1300     uint32_t              maxStorageBufferRange;
1301     uint32_t              maxPushConstantsSize;
1302     uint32_t              maxMemoryAllocationCount;
1303     uint32_t              maxSamplerAllocationCount;
1304     VkDeviceSize          bufferImageGranularity;
1305     VkDeviceSize          sparseAddressSpaceSize;
1306     uint32_t              maxBoundDescriptorSets;
1307     uint32_t              maxPerStageDescriptorSamplers;
1308     uint32_t              maxPerStageDescriptorUniformBuffers;
1309     uint32_t              maxPerStageDescriptorStorageBuffers;
1310     uint32_t              maxPerStageDescriptorSampledImages;
1311     uint32_t              maxPerStageDescriptorStorageImages;
1312     uint32_t              maxPerStageDescriptorInputAttachments;
1313     uint32_t              maxPerStageResources;
1314     uint32_t              maxDescriptorSetSamplers;
1315     uint32_t              maxDescriptorSetUniformBuffers;
1316     uint32_t              maxDescriptorSetUniformBuffersDynamic;
1317     uint32_t              maxDescriptorSetStorageBuffers;
1318     uint32_t              maxDescriptorSetStorageBuffersDynamic;
1319     uint32_t              maxDescriptorSetSampledImages;
1320     uint32_t              maxDescriptorSetStorageImages;
1321     uint32_t              maxDescriptorSetInputAttachments;
1322     uint32_t              maxVertexInputAttributes;
1323     uint32_t              maxVertexInputBindings;
1324     uint32_t              maxVertexInputAttributeOffset;
1325     uint32_t              maxVertexInputBindingStride;
1326     uint32_t              maxVertexOutputComponents;
1327     uint32_t              maxTessellationGenerationLevel;
1328     uint32_t              maxTessellationPatchSize;
1329     uint32_t              maxTessellationControlPerVertexInputComponents;
1330     uint32_t              maxTessellationControlPerVertexOutputComponents;
1331     uint32_t              maxTessellationControlPerPatchOutputComponents;
1332     uint32_t              maxTessellationControlTotalOutputComponents;
1333     uint32_t              maxTessellationEvaluationInputComponents;
1334     uint32_t              maxTessellationEvaluationOutputComponents;
1335     uint32_t              maxGeometryShaderInvocations;
1336     uint32_t              maxGeometryInputComponents;
1337     uint32_t              maxGeometryOutputComponents;
1338     uint32_t              maxGeometryOutputVertices;
1339     uint32_t              maxGeometryTotalOutputComponents;
1340     uint32_t              maxFragmentInputComponents;
1341     uint32_t              maxFragmentOutputAttachments;
1342     uint32_t              maxFragmentDualSrcAttachments;
1343     uint32_t              maxFragmentCombinedOutputResources;
1344     uint32_t              maxComputeSharedMemorySize;
1345     uint32_t              maxComputeWorkGroupCount[3];
1346     uint32_t              maxComputeWorkGroupInvocations;
1347     uint32_t              maxComputeWorkGroupSize[3];
1348     uint32_t              subPixelPrecisionBits;
1349     uint32_t              subTexelPrecisionBits;
1350     uint32_t              mipmapPrecisionBits;
1351     uint32_t              maxDrawIndexedIndexValue;
1352     uint32_t              maxDrawIndirectCount;
1353     float                 maxSamplerLodBias;
1354     float                 maxSamplerAnisotropy;
1355     uint32_t              maxViewports;
1356     uint32_t              maxViewportDimensions[2];
1357     float                 viewportBoundsRange[2];
1358     uint32_t              viewportSubPixelBits;
1359     size_t                minMemoryMapAlignment;
1360     VkDeviceSize          minTexelBufferOffsetAlignment;
1361     VkDeviceSize          minUniformBufferOffsetAlignment;
1362     VkDeviceSize          minStorageBufferOffsetAlignment;
1363     int32_t               minTexelOffset;
1364     uint32_t              maxTexelOffset;
1365     int32_t               minTexelGatherOffset;
1366     uint32_t              maxTexelGatherOffset;
1367     float                 minInterpolationOffset;
1368     float                 maxInterpolationOffset;
1369     uint32_t              subPixelInterpolationOffsetBits;
1370     uint32_t              maxFramebufferWidth;
1371     uint32_t              maxFramebufferHeight;
1372     uint32_t              maxFramebufferLayers;
1373     VkSampleCountFlags    framebufferColorSampleCounts;
1374     VkSampleCountFlags    framebufferDepthSampleCounts;
1375     VkSampleCountFlags    framebufferStencilSampleCounts;
1376     VkSampleCountFlags    framebufferNoAttachmentsSampleCounts;
1377     uint32_t              maxColorAttachments;
1378     VkSampleCountFlags    sampledImageColorSampleCounts;
1379     VkSampleCountFlags    sampledImageIntegerSampleCounts;
1380     VkSampleCountFlags    sampledImageDepthSampleCounts;
1381     VkSampleCountFlags    sampledImageStencilSampleCounts;
1382     VkSampleCountFlags    storageImageSampleCounts;
1383     uint32_t              maxSampleMaskWords;
1384     VkBool32              timestampComputeAndGraphics;
1385     float                 timestampPeriod;
1386     uint32_t              maxClipDistances;
1387     uint32_t              maxCullDistances;
1388     uint32_t              maxCombinedClipAndCullDistances;
1389     uint32_t              discreteQueuePriorities;
1390     float                 pointSizeRange[2];
1391     float                 lineWidthRange[2];
1392     float                 pointSizeGranularity;
1393     float                 lineWidthGranularity;
1394     VkBool32              strictLines;
1395     VkBool32              standardSampleLocations;
1396     VkDeviceSize          optimalBufferCopyOffsetAlignment;
1397     VkDeviceSize          optimalBufferCopyRowPitchAlignment;
1398     VkDeviceSize          nonCoherentAtomSize;
1399 } VkPhysicalDeviceLimits;
1400
1401 typedef struct VkPhysicalDeviceSparseProperties {
1402     VkBool32    residencyStandard2DBlockShape;
1403     VkBool32    residencyStandard2DMultisampleBlockShape;
1404     VkBool32    residencyStandard3DBlockShape;
1405     VkBool32    residencyAlignedMipSize;
1406     VkBool32    residencyNonResidentStrict;
1407 } VkPhysicalDeviceSparseProperties;
1408
1409 typedef struct VkPhysicalDeviceProperties {
1410     uint32_t                            apiVersion;
1411     uint32_t                            driverVersion;
1412     uint32_t                            vendorID;
1413     uint32_t                            deviceID;
1414     VkPhysicalDeviceType                deviceType;
1415     char                                deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
1416     uint8_t                             pipelineCacheUUID[VK_UUID_SIZE];
1417     VkPhysicalDeviceLimits              limits;
1418     VkPhysicalDeviceSparseProperties    sparseProperties;
1419 } VkPhysicalDeviceProperties;
1420
1421 typedef struct VkQueueFamilyProperties {
1422     VkQueueFlags    queueFlags;
1423     uint32_t        queueCount;
1424     uint32_t        timestampValidBits;
1425     VkExtent3D      minImageTransferGranularity;
1426 } VkQueueFamilyProperties;
1427
1428 typedef struct VkMemoryType {
1429     VkMemoryPropertyFlags    propertyFlags;
1430     uint32_t                 heapIndex;
1431 } VkMemoryType;
1432
1433 typedef struct VkMemoryHeap {
1434     VkDeviceSize         size;
1435     VkMemoryHeapFlags    flags;
1436 } VkMemoryHeap;
1437
1438 typedef struct VkPhysicalDeviceMemoryProperties {
1439     uint32_t        memoryTypeCount;
1440     VkMemoryType    memoryTypes[VK_MAX_MEMORY_TYPES];
1441     uint32_t        memoryHeapCount;
1442     VkMemoryHeap    memoryHeaps[VK_MAX_MEMORY_HEAPS];
1443 } VkPhysicalDeviceMemoryProperties;
1444
1445 typedef struct VkDeviceQueueCreateInfo {
1446     VkStructureType             sType;
1447     const void*                 pNext;
1448     VkDeviceQueueCreateFlags    flags;
1449     uint32_t                    queueFamilyIndex;
1450     uint32_t                    queueCount;
1451     const float*                pQueuePriorities;
1452 } VkDeviceQueueCreateInfo;
1453
1454 typedef struct VkDeviceCreateInfo {
1455     VkStructureType                    sType;
1456     const void*                        pNext;
1457     VkDeviceCreateFlags                flags;
1458     uint32_t                           queueCreateInfoCount;
1459     const VkDeviceQueueCreateInfo*     pQueueCreateInfos;
1460     uint32_t                           enabledLayerCount;
1461     const char* const*                 ppEnabledLayerNames;
1462     uint32_t                           enabledExtensionCount;
1463     const char* const*                 ppEnabledExtensionNames;
1464     const VkPhysicalDeviceFeatures*    pEnabledFeatures;
1465 } VkDeviceCreateInfo;
1466
1467 typedef struct VkExtensionProperties {
1468     char        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
1469     uint32_t    specVersion;
1470 } VkExtensionProperties;
1471
1472 typedef struct VkLayerProperties {
1473     char        layerName[VK_MAX_EXTENSION_NAME_SIZE];
1474     uint32_t    specVersion;
1475     uint32_t    implementationVersion;
1476     char        description[VK_MAX_DESCRIPTION_SIZE];
1477 } VkLayerProperties;
1478
1479 typedef struct VkSubmitInfo {
1480     VkStructureType                sType;
1481     const void*                    pNext;
1482     uint32_t                       waitSemaphoreCount;
1483     const VkSemaphore*             pWaitSemaphores;
1484     const VkPipelineStageFlags*    pWaitDstStageMask;
1485     uint32_t                       commandBufferCount;
1486     const VkCommandBuffer*         pCommandBuffers;
1487     uint32_t                       signalSemaphoreCount;
1488     const VkSemaphore*             pSignalSemaphores;
1489 } VkSubmitInfo;
1490
1491 typedef struct VkMemoryAllocateInfo {
1492     VkStructureType    sType;
1493     const void*        pNext;
1494     VkDeviceSize       allocationSize;
1495     uint32_t           memoryTypeIndex;
1496 } VkMemoryAllocateInfo;
1497
1498 typedef struct VkMappedMemoryRange {
1499     VkStructureType    sType;
1500     const void*        pNext;
1501     VkDeviceMemory     memory;
1502     VkDeviceSize       offset;
1503     VkDeviceSize       size;
1504 } VkMappedMemoryRange;
1505
1506 typedef struct VkMemoryRequirements {
1507     VkDeviceSize    size;
1508     VkDeviceSize    alignment;
1509     uint32_t        memoryTypeBits;
1510 } VkMemoryRequirements;
1511
1512 typedef struct VkSparseImageFormatProperties {
1513     VkImageAspectFlags          aspectMask;
1514     VkExtent3D                  imageGranularity;
1515     VkSparseImageFormatFlags    flags;
1516 } VkSparseImageFormatProperties;
1517
1518 typedef struct VkSparseImageMemoryRequirements {
1519     VkSparseImageFormatProperties    formatProperties;
1520     uint32_t                         imageMipTailFirstLod;
1521     VkDeviceSize                     imageMipTailSize;
1522     VkDeviceSize                     imageMipTailOffset;
1523     VkDeviceSize                     imageMipTailStride;
1524 } VkSparseImageMemoryRequirements;
1525
1526 typedef struct VkSparseMemoryBind {
1527     VkDeviceSize               resourceOffset;
1528     VkDeviceSize               size;
1529     VkDeviceMemory             memory;
1530     VkDeviceSize               memoryOffset;
1531     VkSparseMemoryBindFlags    flags;
1532 } VkSparseMemoryBind;
1533
1534 typedef struct VkSparseBufferMemoryBindInfo {
1535     VkBuffer                     buffer;
1536     uint32_t                     bindCount;
1537     const VkSparseMemoryBind*    pBinds;
1538 } VkSparseBufferMemoryBindInfo;
1539
1540 typedef struct VkSparseImageOpaqueMemoryBindInfo {
1541     VkImage                      image;
1542     uint32_t                     bindCount;
1543     const VkSparseMemoryBind*    pBinds;
1544 } VkSparseImageOpaqueMemoryBindInfo;
1545
1546 typedef struct VkImageSubresource {
1547     VkImageAspectFlags    aspectMask;
1548     uint32_t              mipLevel;
1549     uint32_t              arrayLayer;
1550 } VkImageSubresource;
1551
1552 typedef struct VkOffset3D {
1553     int32_t    x;
1554     int32_t    y;
1555     int32_t    z;
1556 } VkOffset3D;
1557
1558 typedef struct VkSparseImageMemoryBind {
1559     VkImageSubresource         subresource;
1560     VkOffset3D                 offset;
1561     VkExtent3D                 extent;
1562     VkDeviceMemory             memory;
1563     VkDeviceSize               memoryOffset;
1564     VkSparseMemoryBindFlags    flags;
1565 } VkSparseImageMemoryBind;
1566
1567 typedef struct VkSparseImageMemoryBindInfo {
1568     VkImage                           image;
1569     uint32_t                          bindCount;
1570     const VkSparseImageMemoryBind*    pBinds;
1571 } VkSparseImageMemoryBindInfo;
1572
1573 typedef struct VkBindSparseInfo {
1574     VkStructureType                             sType;
1575     const void*                                 pNext;
1576     uint32_t                                    waitSemaphoreCount;
1577     const VkSemaphore*                          pWaitSemaphores;
1578     uint32_t                                    bufferBindCount;
1579     const VkSparseBufferMemoryBindInfo*         pBufferBinds;
1580     uint32_t                                    imageOpaqueBindCount;
1581     const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
1582     uint32_t                                    imageBindCount;
1583     const VkSparseImageMemoryBindInfo*          pImageBinds;
1584     uint32_t                                    signalSemaphoreCount;
1585     const VkSemaphore*                          pSignalSemaphores;
1586 } VkBindSparseInfo;
1587
1588 typedef struct VkFenceCreateInfo {
1589     VkStructureType       sType;
1590     const void*           pNext;
1591     VkFenceCreateFlags    flags;
1592 } VkFenceCreateInfo;
1593
1594 typedef struct VkSemaphoreCreateInfo {
1595     VkStructureType           sType;
1596     const void*               pNext;
1597     VkSemaphoreCreateFlags    flags;
1598 } VkSemaphoreCreateInfo;
1599
1600 typedef struct VkEventCreateInfo {
1601     VkStructureType       sType;
1602     const void*           pNext;
1603     VkEventCreateFlags    flags;
1604 } VkEventCreateInfo;
1605
1606 typedef struct VkQueryPoolCreateInfo {
1607     VkStructureType                  sType;
1608     const void*                      pNext;
1609     VkQueryPoolCreateFlags           flags;
1610     VkQueryType                      queryType;
1611     uint32_t                         queryCount;
1612     VkQueryPipelineStatisticFlags    pipelineStatistics;
1613 } VkQueryPoolCreateInfo;
1614
1615 typedef struct VkBufferCreateInfo {
1616     VkStructureType        sType;
1617     const void*            pNext;
1618     VkBufferCreateFlags    flags;
1619     VkDeviceSize           size;
1620     VkBufferUsageFlags     usage;
1621     VkSharingMode          sharingMode;
1622     uint32_t               queueFamilyIndexCount;
1623     const uint32_t*        pQueueFamilyIndices;
1624 } VkBufferCreateInfo;
1625
1626 typedef struct VkBufferViewCreateInfo {
1627     VkStructureType            sType;
1628     const void*                pNext;
1629     VkBufferViewCreateFlags    flags;
1630     VkBuffer                   buffer;
1631     VkFormat                   format;
1632     VkDeviceSize               offset;
1633     VkDeviceSize               range;
1634 } VkBufferViewCreateInfo;
1635
1636 typedef struct VkImageCreateInfo {
1637     VkStructureType          sType;
1638     const void*              pNext;
1639     VkImageCreateFlags       flags;
1640     VkImageType              imageType;
1641     VkFormat                 format;
1642     VkExtent3D               extent;
1643     uint32_t                 mipLevels;
1644     uint32_t                 arrayLayers;
1645     VkSampleCountFlagBits    samples;
1646     VkImageTiling            tiling;
1647     VkImageUsageFlags        usage;
1648     VkSharingMode            sharingMode;
1649     uint32_t                 queueFamilyIndexCount;
1650     const uint32_t*          pQueueFamilyIndices;
1651     VkImageLayout            initialLayout;
1652 } VkImageCreateInfo;
1653
1654 typedef struct VkSubresourceLayout {
1655     VkDeviceSize    offset;
1656     VkDeviceSize    size;
1657     VkDeviceSize    rowPitch;
1658     VkDeviceSize    arrayPitch;
1659     VkDeviceSize    depthPitch;
1660 } VkSubresourceLayout;
1661
1662 typedef struct VkComponentMapping {
1663     VkComponentSwizzle    r;
1664     VkComponentSwizzle    g;
1665     VkComponentSwizzle    b;
1666     VkComponentSwizzle    a;
1667 } VkComponentMapping;
1668
1669 typedef struct VkImageSubresourceRange {
1670     VkImageAspectFlags    aspectMask;
1671     uint32_t              baseMipLevel;
1672     uint32_t              levelCount;
1673     uint32_t              baseArrayLayer;
1674     uint32_t              layerCount;
1675 } VkImageSubresourceRange;
1676
1677 typedef struct VkImageViewCreateInfo {
1678     VkStructureType            sType;
1679     const void*                pNext;
1680     VkImageViewCreateFlags     flags;
1681     VkImage                    image;
1682     VkImageViewType            viewType;
1683     VkFormat                   format;
1684     VkComponentMapping         components;
1685     VkImageSubresourceRange    subresourceRange;
1686 } VkImageViewCreateInfo;
1687
1688 typedef struct VkShaderModuleCreateInfo {
1689     VkStructureType              sType;
1690     const void*                  pNext;
1691     VkShaderModuleCreateFlags    flags;
1692     size_t                       codeSize;
1693     const uint32_t*              pCode;
1694 } VkShaderModuleCreateInfo;
1695
1696 typedef struct VkPipelineCacheCreateInfo {
1697     VkStructureType               sType;
1698     const void*                   pNext;
1699     VkPipelineCacheCreateFlags    flags;
1700     size_t                        initialDataSize;
1701     const void*                   pInitialData;
1702 } VkPipelineCacheCreateInfo;
1703
1704 typedef struct VkSpecializationMapEntry {
1705     uint32_t    constantID;
1706     uint32_t    offset;
1707     size_t      size;
1708 } VkSpecializationMapEntry;
1709
1710 typedef struct VkSpecializationInfo {
1711     uint32_t                           mapEntryCount;
1712     const VkSpecializationMapEntry*    pMapEntries;
1713     size_t                             dataSize;
1714     const void*                        pData;
1715 } VkSpecializationInfo;
1716
1717 typedef struct VkPipelineShaderStageCreateInfo {
1718     VkStructureType                     sType;
1719     const void*                         pNext;
1720     VkPipelineShaderStageCreateFlags    flags;
1721     VkShaderStageFlagBits               stage;
1722     VkShaderModule                      module;
1723     const char*                         pName;
1724     const VkSpecializationInfo*         pSpecializationInfo;
1725 } VkPipelineShaderStageCreateInfo;
1726
1727 typedef struct VkVertexInputBindingDescription {
1728     uint32_t             binding;
1729     uint32_t             stride;
1730     VkVertexInputRate    inputRate;
1731 } VkVertexInputBindingDescription;
1732
1733 typedef struct VkVertexInputAttributeDescription {
1734     uint32_t    location;
1735     uint32_t    binding;
1736     VkFormat    format;
1737     uint32_t    offset;
1738 } VkVertexInputAttributeDescription;
1739
1740 typedef struct VkPipelineVertexInputStateCreateInfo {
1741     VkStructureType                             sType;
1742     const void*                                 pNext;
1743     VkPipelineVertexInputStateCreateFlags       flags;
1744     uint32_t                                    vertexBindingDescriptionCount;
1745     const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
1746     uint32_t                                    vertexAttributeDescriptionCount;
1747     const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
1748 } VkPipelineVertexInputStateCreateInfo;
1749
1750 typedef struct VkPipelineInputAssemblyStateCreateInfo {
1751     VkStructureType                            sType;
1752     const void*                                pNext;
1753     VkPipelineInputAssemblyStateCreateFlags    flags;
1754     VkPrimitiveTopology                        topology;
1755     VkBool32                                   primitiveRestartEnable;
1756 } VkPipelineInputAssemblyStateCreateInfo;
1757
1758 typedef struct VkPipelineTessellationStateCreateInfo {
1759     VkStructureType                           sType;
1760     const void*                               pNext;
1761     VkPipelineTessellationStateCreateFlags    flags;
1762     uint32_t                                  patchControlPoints;
1763 } VkPipelineTessellationStateCreateInfo;
1764
1765 typedef struct VkViewport {
1766     float    x;
1767     float    y;
1768     float    width;
1769     float    height;
1770     float    minDepth;
1771     float    maxDepth;
1772 } VkViewport;
1773
1774 typedef struct VkOffset2D {
1775     int32_t    x;
1776     int32_t    y;
1777 } VkOffset2D;
1778
1779 typedef struct VkExtent2D {
1780     uint32_t    width;
1781     uint32_t    height;
1782 } VkExtent2D;
1783
1784 typedef struct VkRect2D {
1785     VkOffset2D    offset;
1786     VkExtent2D    extent;
1787 } VkRect2D;
1788
1789 typedef struct VkPipelineViewportStateCreateInfo {
1790     VkStructureType                       sType;
1791     const void*                           pNext;
1792     VkPipelineViewportStateCreateFlags    flags;
1793     uint32_t                              viewportCount;
1794     const VkViewport*                     pViewports;
1795     uint32_t                              scissorCount;
1796     const VkRect2D*                       pScissors;
1797 } VkPipelineViewportStateCreateInfo;
1798
1799 typedef struct VkPipelineRasterizationStateCreateInfo {
1800     VkStructureType                            sType;
1801     const void*                                pNext;
1802     VkPipelineRasterizationStateCreateFlags    flags;
1803     VkBool32                                   depthClampEnable;
1804     VkBool32                                   rasterizerDiscardEnable;
1805     VkPolygonMode                              polygonMode;
1806     VkCullModeFlags                            cullMode;
1807     VkFrontFace                                frontFace;
1808     VkBool32                                   depthBiasEnable;
1809     float                                      depthBiasConstantFactor;
1810     float                                      depthBiasClamp;
1811     float                                      depthBiasSlopeFactor;
1812     float                                      lineWidth;
1813 } VkPipelineRasterizationStateCreateInfo;
1814
1815 typedef struct VkPipelineMultisampleStateCreateInfo {
1816     VkStructureType                          sType;
1817     const void*                              pNext;
1818     VkPipelineMultisampleStateCreateFlags    flags;
1819     VkSampleCountFlagBits                    rasterizationSamples;
1820     VkBool32                                 sampleShadingEnable;
1821     float                                    minSampleShading;
1822     const VkSampleMask*                      pSampleMask;
1823     VkBool32                                 alphaToCoverageEnable;
1824     VkBool32                                 alphaToOneEnable;
1825 } VkPipelineMultisampleStateCreateInfo;
1826
1827 typedef struct VkStencilOpState {
1828     VkStencilOp    failOp;
1829     VkStencilOp    passOp;
1830     VkStencilOp    depthFailOp;
1831     VkCompareOp    compareOp;
1832     uint32_t       compareMask;
1833     uint32_t       writeMask;
1834     uint32_t       reference;
1835 } VkStencilOpState;
1836
1837 typedef struct VkPipelineDepthStencilStateCreateInfo {
1838     VkStructureType                           sType;
1839     const void*                               pNext;
1840     VkPipelineDepthStencilStateCreateFlags    flags;
1841     VkBool32                                  depthTestEnable;
1842     VkBool32                                  depthWriteEnable;
1843     VkCompareOp                               depthCompareOp;
1844     VkBool32                                  depthBoundsTestEnable;
1845     VkBool32                                  stencilTestEnable;
1846     VkStencilOpState                          front;
1847     VkStencilOpState                          back;
1848     float                                     minDepthBounds;
1849     float                                     maxDepthBounds;
1850 } VkPipelineDepthStencilStateCreateInfo;
1851
1852 typedef struct VkPipelineColorBlendAttachmentState {
1853     VkBool32                 blendEnable;
1854     VkBlendFactor            srcColorBlendFactor;
1855     VkBlendFactor            dstColorBlendFactor;
1856     VkBlendOp                colorBlendOp;
1857     VkBlendFactor            srcAlphaBlendFactor;
1858     VkBlendFactor            dstAlphaBlendFactor;
1859     VkBlendOp                alphaBlendOp;
1860     VkColorComponentFlags    colorWriteMask;
1861 } VkPipelineColorBlendAttachmentState;
1862
1863 typedef struct VkPipelineColorBlendStateCreateInfo {
1864     VkStructureType                               sType;
1865     const void*                                   pNext;
1866     VkPipelineColorBlendStateCreateFlags          flags;
1867     VkBool32                                      logicOpEnable;
1868     VkLogicOp                                     logicOp;
1869     uint32_t                                      attachmentCount;
1870     const VkPipelineColorBlendAttachmentState*    pAttachments;
1871     float                                         blendConstants[4];
1872 } VkPipelineColorBlendStateCreateInfo;
1873
1874 typedef struct VkPipelineDynamicStateCreateInfo {
1875     VkStructureType                      sType;
1876     const void*                          pNext;
1877     VkPipelineDynamicStateCreateFlags    flags;
1878     uint32_t                             dynamicStateCount;
1879     const VkDynamicState*                pDynamicStates;
1880 } VkPipelineDynamicStateCreateInfo;
1881
1882 typedef struct VkGraphicsPipelineCreateInfo {
1883     VkStructureType                                  sType;
1884     const void*                                      pNext;
1885     VkPipelineCreateFlags                            flags;
1886     uint32_t                                         stageCount;
1887     const VkPipelineShaderStageCreateInfo*           pStages;
1888     const VkPipelineVertexInputStateCreateInfo*      pVertexInputState;
1889     const VkPipelineInputAssemblyStateCreateInfo*    pInputAssemblyState;
1890     const VkPipelineTessellationStateCreateInfo*     pTessellationState;
1891     const VkPipelineViewportStateCreateInfo*         pViewportState;
1892     const VkPipelineRasterizationStateCreateInfo*    pRasterizationState;
1893     const VkPipelineMultisampleStateCreateInfo*      pMultisampleState;
1894     const VkPipelineDepthStencilStateCreateInfo*     pDepthStencilState;
1895     const VkPipelineColorBlendStateCreateInfo*       pColorBlendState;
1896     const VkPipelineDynamicStateCreateInfo*          pDynamicState;
1897     VkPipelineLayout                                 layout;
1898     VkRenderPass                                     renderPass;
1899     uint32_t                                         subpass;
1900     VkPipeline                                       basePipelineHandle;
1901     int32_t                                          basePipelineIndex;
1902 } VkGraphicsPipelineCreateInfo;
1903
1904 typedef struct VkComputePipelineCreateInfo {
1905     VkStructureType                    sType;
1906     const void*                        pNext;
1907     VkPipelineCreateFlags              flags;
1908     VkPipelineShaderStageCreateInfo    stage;
1909     VkPipelineLayout                   layout;
1910     VkPipeline                         basePipelineHandle;
1911     int32_t                            basePipelineIndex;
1912 } VkComputePipelineCreateInfo;
1913
1914 typedef struct VkPushConstantRange {
1915     VkShaderStageFlags    stageFlags;
1916     uint32_t              offset;
1917     uint32_t              size;
1918 } VkPushConstantRange;
1919
1920 typedef struct VkPipelineLayoutCreateInfo {
1921     VkStructureType                 sType;
1922     const void*                     pNext;
1923     VkPipelineLayoutCreateFlags     flags;
1924     uint32_t                        setLayoutCount;
1925     const VkDescriptorSetLayout*    pSetLayouts;
1926     uint32_t                        pushConstantRangeCount;
1927     const VkPushConstantRange*      pPushConstantRanges;
1928 } VkPipelineLayoutCreateInfo;
1929
1930 typedef struct VkSamplerCreateInfo {
1931     VkStructureType         sType;
1932     const void*             pNext;
1933     VkSamplerCreateFlags    flags;
1934     VkFilter                magFilter;
1935     VkFilter                minFilter;
1936     VkSamplerMipmapMode     mipmapMode;
1937     VkSamplerAddressMode    addressModeU;
1938     VkSamplerAddressMode    addressModeV;
1939     VkSamplerAddressMode    addressModeW;
1940     float                   mipLodBias;
1941     VkBool32                anisotropyEnable;
1942     float                   maxAnisotropy;
1943     VkBool32                compareEnable;
1944     VkCompareOp             compareOp;
1945     float                   minLod;
1946     float                   maxLod;
1947     VkBorderColor           borderColor;
1948     VkBool32                unnormalizedCoordinates;
1949 } VkSamplerCreateInfo;
1950
1951 typedef struct VkDescriptorSetLayoutBinding {
1952     uint32_t              binding;
1953     VkDescriptorType      descriptorType;
1954     uint32_t              descriptorCount;
1955     VkShaderStageFlags    stageFlags;
1956     const VkSampler*      pImmutableSamplers;
1957 } VkDescriptorSetLayoutBinding;
1958
1959 typedef struct VkDescriptorSetLayoutCreateInfo {
1960     VkStructureType                        sType;
1961     const void*                            pNext;
1962     VkDescriptorSetLayoutCreateFlags       flags;
1963     uint32_t                               bindingCount;
1964     const VkDescriptorSetLayoutBinding*    pBindings;
1965 } VkDescriptorSetLayoutCreateInfo;
1966
1967 typedef struct VkDescriptorPoolSize {
1968     VkDescriptorType    type;
1969     uint32_t            descriptorCount;
1970 } VkDescriptorPoolSize;
1971
1972 typedef struct VkDescriptorPoolCreateInfo {
1973     VkStructureType                sType;
1974     const void*                    pNext;
1975     VkDescriptorPoolCreateFlags    flags;
1976     uint32_t                       maxSets;
1977     uint32_t                       poolSizeCount;
1978     const VkDescriptorPoolSize*    pPoolSizes;
1979 } VkDescriptorPoolCreateInfo;
1980
1981 typedef struct VkDescriptorSetAllocateInfo {
1982     VkStructureType                 sType;
1983     const void*                     pNext;
1984     VkDescriptorPool                descriptorPool;
1985     uint32_t                        descriptorSetCount;
1986     const VkDescriptorSetLayout*    pSetLayouts;
1987 } VkDescriptorSetAllocateInfo;
1988
1989 typedef struct VkDescriptorImageInfo {
1990     VkSampler        sampler;
1991     VkImageView      imageView;
1992     VkImageLayout    imageLayout;
1993 } VkDescriptorImageInfo;
1994
1995 typedef struct VkDescriptorBufferInfo {
1996     VkBuffer        buffer;
1997     VkDeviceSize    offset;
1998     VkDeviceSize    range;
1999 } VkDescriptorBufferInfo;
2000
2001 typedef struct VkWriteDescriptorSet {
2002     VkStructureType                  sType;
2003     const void*                      pNext;
2004     VkDescriptorSet                  dstSet;
2005     uint32_t                         dstBinding;
2006     uint32_t                         dstArrayElement;
2007     uint32_t                         descriptorCount;
2008     VkDescriptorType                 descriptorType;
2009     const VkDescriptorImageInfo*     pImageInfo;
2010     const VkDescriptorBufferInfo*    pBufferInfo;
2011     const VkBufferView*              pTexelBufferView;
2012 } VkWriteDescriptorSet;
2013
2014 typedef struct VkCopyDescriptorSet {
2015     VkStructureType    sType;
2016     const void*        pNext;
2017     VkDescriptorSet    srcSet;
2018     uint32_t           srcBinding;
2019     uint32_t           srcArrayElement;
2020     VkDescriptorSet    dstSet;
2021     uint32_t           dstBinding;
2022     uint32_t           dstArrayElement;
2023     uint32_t           descriptorCount;
2024 } VkCopyDescriptorSet;
2025
2026 typedef struct VkFramebufferCreateInfo {
2027     VkStructureType             sType;
2028     const void*                 pNext;
2029     VkFramebufferCreateFlags    flags;
2030     VkRenderPass                renderPass;
2031     uint32_t                    attachmentCount;
2032     const VkImageView*          pAttachments;
2033     uint32_t                    width;
2034     uint32_t                    height;
2035     uint32_t                    layers;
2036 } VkFramebufferCreateInfo;
2037
2038 typedef struct VkAttachmentDescription {
2039     VkAttachmentDescriptionFlags    flags;
2040     VkFormat                        format;
2041     VkSampleCountFlagBits           samples;
2042     VkAttachmentLoadOp              loadOp;
2043     VkAttachmentStoreOp             storeOp;
2044     VkAttachmentLoadOp              stencilLoadOp;
2045     VkAttachmentStoreOp             stencilStoreOp;
2046     VkImageLayout                   initialLayout;
2047     VkImageLayout                   finalLayout;
2048 } VkAttachmentDescription;
2049
2050 typedef struct VkAttachmentReference {
2051     uint32_t         attachment;
2052     VkImageLayout    layout;
2053 } VkAttachmentReference;
2054
2055 typedef struct VkSubpassDescription {
2056     VkSubpassDescriptionFlags       flags;
2057     VkPipelineBindPoint             pipelineBindPoint;
2058     uint32_t                        inputAttachmentCount;
2059     const VkAttachmentReference*    pInputAttachments;
2060     uint32_t                        colorAttachmentCount;
2061     const VkAttachmentReference*    pColorAttachments;
2062     const VkAttachmentReference*    pResolveAttachments;
2063     const VkAttachmentReference*    pDepthStencilAttachment;
2064     uint32_t                        preserveAttachmentCount;
2065     const uint32_t*                 pPreserveAttachments;
2066 } VkSubpassDescription;
2067
2068 typedef struct VkSubpassDependency {
2069     uint32_t                srcSubpass;
2070     uint32_t                dstSubpass;
2071     VkPipelineStageFlags    srcStageMask;
2072     VkPipelineStageFlags    dstStageMask;
2073     VkAccessFlags           srcAccessMask;
2074     VkAccessFlags           dstAccessMask;
2075     VkDependencyFlags       dependencyFlags;
2076 } VkSubpassDependency;
2077
2078 typedef struct VkRenderPassCreateInfo {
2079     VkStructureType                   sType;
2080     const void*                       pNext;
2081     VkRenderPassCreateFlags           flags;
2082     uint32_t                          attachmentCount;
2083     const VkAttachmentDescription*    pAttachments;
2084     uint32_t                          subpassCount;
2085     const VkSubpassDescription*       pSubpasses;
2086     uint32_t                          dependencyCount;
2087     const VkSubpassDependency*        pDependencies;
2088 } VkRenderPassCreateInfo;
2089
2090 typedef struct VkCommandPoolCreateInfo {
2091     VkStructureType             sType;
2092     const void*                 pNext;
2093     VkCommandPoolCreateFlags    flags;
2094     uint32_t                    queueFamilyIndex;
2095 } VkCommandPoolCreateInfo;
2096
2097 typedef struct VkCommandBufferAllocateInfo {
2098     VkStructureType         sType;
2099     const void*             pNext;
2100     VkCommandPool           commandPool;
2101     VkCommandBufferLevel    level;
2102     uint32_t                commandBufferCount;
2103 } VkCommandBufferAllocateInfo;
2104
2105 typedef struct VkCommandBufferInheritanceInfo {
2106     VkStructureType                  sType;
2107     const void*                      pNext;
2108     VkRenderPass                     renderPass;
2109     uint32_t                         subpass;
2110     VkFramebuffer                    framebuffer;
2111     VkBool32                         occlusionQueryEnable;
2112     VkQueryControlFlags              queryFlags;
2113     VkQueryPipelineStatisticFlags    pipelineStatistics;
2114 } VkCommandBufferInheritanceInfo;
2115
2116 typedef struct VkCommandBufferBeginInfo {
2117     VkStructureType                          sType;
2118     const void*                              pNext;
2119     VkCommandBufferUsageFlags                flags;
2120     const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
2121 } VkCommandBufferBeginInfo;
2122
2123 typedef struct VkBufferCopy {
2124     VkDeviceSize    srcOffset;
2125     VkDeviceSize    dstOffset;
2126     VkDeviceSize    size;
2127 } VkBufferCopy;
2128
2129 typedef struct VkImageSubresourceLayers {
2130     VkImageAspectFlags    aspectMask;
2131     uint32_t              mipLevel;
2132     uint32_t              baseArrayLayer;
2133     uint32_t              layerCount;
2134 } VkImageSubresourceLayers;
2135
2136 typedef struct VkImageCopy {
2137     VkImageSubresourceLayers    srcSubresource;
2138     VkOffset3D                  srcOffset;
2139     VkImageSubresourceLayers    dstSubresource;
2140     VkOffset3D                  dstOffset;
2141     VkExtent3D                  extent;
2142 } VkImageCopy;
2143
2144 typedef struct VkImageBlit {
2145     VkImageSubresourceLayers    srcSubresource;
2146     VkOffset3D                  srcOffsets[2];
2147     VkImageSubresourceLayers    dstSubresource;
2148     VkOffset3D                  dstOffsets[2];
2149 } VkImageBlit;
2150
2151 typedef struct VkBufferImageCopy {
2152     VkDeviceSize                bufferOffset;
2153     uint32_t                    bufferRowLength;
2154     uint32_t                    bufferImageHeight;
2155     VkImageSubresourceLayers    imageSubresource;
2156     VkOffset3D                  imageOffset;
2157     VkExtent3D                  imageExtent;
2158 } VkBufferImageCopy;
2159
2160 typedef union VkClearColorValue {
2161     float       float32[4];
2162     int32_t     int32[4];
2163     uint32_t    uint32[4];
2164 } VkClearColorValue;
2165
2166 typedef struct VkClearDepthStencilValue {
2167     float       depth;
2168     uint32_t    stencil;
2169 } VkClearDepthStencilValue;
2170
2171 typedef union VkClearValue {
2172     VkClearColorValue           color;
2173     VkClearDepthStencilValue    depthStencil;
2174 } VkClearValue;
2175
2176 typedef struct VkClearAttachment {
2177     VkImageAspectFlags    aspectMask;
2178     uint32_t              colorAttachment;
2179     VkClearValue          clearValue;
2180 } VkClearAttachment;
2181
2182 typedef struct VkClearRect {
2183     VkRect2D    rect;
2184     uint32_t    baseArrayLayer;
2185     uint32_t    layerCount;
2186 } VkClearRect;
2187
2188 typedef struct VkImageResolve {
2189     VkImageSubresourceLayers    srcSubresource;
2190     VkOffset3D                  srcOffset;
2191     VkImageSubresourceLayers    dstSubresource;
2192     VkOffset3D                  dstOffset;
2193     VkExtent3D                  extent;
2194 } VkImageResolve;
2195
2196 typedef struct VkMemoryBarrier {
2197     VkStructureType    sType;
2198     const void*        pNext;
2199     VkAccessFlags      srcAccessMask;
2200     VkAccessFlags      dstAccessMask;
2201 } VkMemoryBarrier;
2202
2203 typedef struct VkBufferMemoryBarrier {
2204     VkStructureType    sType;
2205     const void*        pNext;
2206     VkAccessFlags      srcAccessMask;
2207     VkAccessFlags      dstAccessMask;
2208     uint32_t           srcQueueFamilyIndex;
2209     uint32_t           dstQueueFamilyIndex;
2210     VkBuffer           buffer;
2211     VkDeviceSize       offset;
2212     VkDeviceSize       size;
2213 } VkBufferMemoryBarrier;
2214
2215 typedef struct VkImageMemoryBarrier {
2216     VkStructureType            sType;
2217     const void*                pNext;
2218     VkAccessFlags              srcAccessMask;
2219     VkAccessFlags              dstAccessMask;
2220     VkImageLayout              oldLayout;
2221     VkImageLayout              newLayout;
2222     uint32_t                   srcQueueFamilyIndex;
2223     uint32_t                   dstQueueFamilyIndex;
2224     VkImage                    image;
2225     VkImageSubresourceRange    subresourceRange;
2226 } VkImageMemoryBarrier;
2227
2228 typedef struct VkRenderPassBeginInfo {
2229     VkStructureType        sType;
2230     const void*            pNext;
2231     VkRenderPass           renderPass;
2232     VkFramebuffer          framebuffer;
2233     VkRect2D               renderArea;
2234     uint32_t               clearValueCount;
2235     const VkClearValue*    pClearValues;
2236 } VkRenderPassBeginInfo;
2237
2238 typedef struct VkDispatchIndirectCommand {
2239     uint32_t    x;
2240     uint32_t    y;
2241     uint32_t    z;
2242 } VkDispatchIndirectCommand;
2243
2244 typedef struct VkDrawIndexedIndirectCommand {
2245     uint32_t    indexCount;
2246     uint32_t    instanceCount;
2247     uint32_t    firstIndex;
2248     int32_t     vertexOffset;
2249     uint32_t    firstInstance;
2250 } VkDrawIndexedIndirectCommand;
2251
2252 typedef struct VkDrawIndirectCommand {
2253     uint32_t    vertexCount;
2254     uint32_t    instanceCount;
2255     uint32_t    firstVertex;
2256     uint32_t    firstInstance;
2257 } VkDrawIndirectCommand;
2258
2259
2260 typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
2261 typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
2262 typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
2263 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
2264 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
2265 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
2266 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
2267 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
2268 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
2269 typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
2270 typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
2271 typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
2272 typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
2273 typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
2274 typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
2275 typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
2276 typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
2277 typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
2278 typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
2279 typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
2280 typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
2281 typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
2282 typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
2283 typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
2284 typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
2285 typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
2286 typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
2287 typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
2288 typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
2289 typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
2290 typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
2291 typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
2292 typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
2293 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
2294 typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
2295 typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
2296 typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
2297 typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
2298 typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
2299 typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
2300 typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
2301 typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
2302 typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
2303 typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
2304 typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
2305 typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
2306 typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
2307 typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
2308 typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
2309 typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
2310 typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
2311 typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
2312 typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
2313 typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
2314 typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
2315 typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
2316 typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
2317 typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
2318 typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
2319 typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
2320 typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
2321 typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
2322 typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
2323 typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
2324 typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
2325 typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
2326 typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
2327 typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
2328 typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
2329 typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
2330 typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
2331 typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
2332 typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
2333 typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
2334 typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
2335 typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
2336 typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
2337 typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
2338 typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
2339 typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
2340 typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
2341 typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
2342 typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
2343 typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
2344 typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
2345 typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
2346 typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
2347 typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
2348 typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
2349 typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
2350 typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
2351 typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
2352 typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
2353 typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
2354 typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
2355 typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
2356 typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
2357 typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
2358 typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
2359 typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
2360 typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
2361 typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
2362 typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
2363 typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
2364 typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
2365 typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
2366 typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
2367 typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
2368 typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
2369 typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
2370 typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
2371 typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
2372 typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
2373 typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
2374 typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
2375 typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
2376 typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
2377 typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
2378 typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
2379 typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
2380 typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
2381 typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
2382 typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
2383 typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
2384 typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
2385 typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
2386 typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
2387 typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
2388 typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
2389 typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
2390 typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
2391 typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
2392 typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
2393 typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
2394 typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
2395 typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
2396 typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
2397
2398 #ifndef VK_NO_PROTOTYPES
2399 VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
2400     const VkInstanceCreateInfo*                 pCreateInfo,
2401     const VkAllocationCallbacks*                pAllocator,
2402     VkInstance*                                 pInstance);
2403
2404 VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
2405     VkInstance                                  instance,
2406     const VkAllocationCallbacks*                pAllocator);
2407
2408 VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
2409     VkInstance                                  instance,
2410     uint32_t*                                   pPhysicalDeviceCount,
2411     VkPhysicalDevice*                           pPhysicalDevices);
2412
2413 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
2414     VkPhysicalDevice                            physicalDevice,
2415     VkPhysicalDeviceFeatures*                   pFeatures);
2416
2417 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
2418     VkPhysicalDevice                            physicalDevice,
2419     VkFormat                                    format,
2420     VkFormatProperties*                         pFormatProperties);
2421
2422 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
2423     VkPhysicalDevice                            physicalDevice,
2424     VkFormat                                    format,
2425     VkImageType                                 type,
2426     VkImageTiling                               tiling,
2427     VkImageUsageFlags                           usage,
2428     VkImageCreateFlags                          flags,
2429     VkImageFormatProperties*                    pImageFormatProperties);
2430
2431 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
2432     VkPhysicalDevice                            physicalDevice,
2433     VkPhysicalDeviceProperties*                 pProperties);
2434
2435 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
2436     VkPhysicalDevice                            physicalDevice,
2437     uint32_t*                                   pQueueFamilyPropertyCount,
2438     VkQueueFamilyProperties*                    pQueueFamilyProperties);
2439
2440 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
2441     VkPhysicalDevice                            physicalDevice,
2442     VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
2443
2444 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
2445     VkInstance                                  instance,
2446     const char*                                 pName);
2447
2448 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
2449     VkDevice                                    device,
2450     const char*                                 pName);
2451
2452 VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
2453     VkPhysicalDevice                            physicalDevice,
2454     const VkDeviceCreateInfo*                   pCreateInfo,
2455     const VkAllocationCallbacks*                pAllocator,
2456     VkDevice*                                   pDevice);
2457
2458 VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
2459     VkDevice                                    device,
2460     const VkAllocationCallbacks*                pAllocator);
2461
2462 VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
2463     const char*                                 pLayerName,
2464     uint32_t*                                   pPropertyCount,
2465     VkExtensionProperties*                      pProperties);
2466
2467 VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
2468     VkPhysicalDevice                            physicalDevice,
2469     const char*                                 pLayerName,
2470     uint32_t*                                   pPropertyCount,
2471     VkExtensionProperties*                      pProperties);
2472
2473 VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
2474     uint32_t*                                   pPropertyCount,
2475     VkLayerProperties*                          pProperties);
2476
2477 VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
2478     VkPhysicalDevice                            physicalDevice,
2479     uint32_t*                                   pPropertyCount,
2480     VkLayerProperties*                          pProperties);
2481
2482 VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
2483     VkDevice                                    device,
2484     uint32_t                                    queueFamilyIndex,
2485     uint32_t                                    queueIndex,
2486     VkQueue*                                    pQueue);
2487
2488 VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
2489     VkQueue                                     queue,
2490     uint32_t                                    submitCount,
2491     const VkSubmitInfo*                         pSubmits,
2492     VkFence                                     fence);
2493
2494 VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
2495     VkQueue                                     queue);
2496
2497 VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
2498     VkDevice                                    device);
2499
2500 VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
2501     VkDevice                                    device,
2502     const VkMemoryAllocateInfo*                 pAllocateInfo,
2503     const VkAllocationCallbacks*                pAllocator,
2504     VkDeviceMemory*                             pMemory);
2505
2506 VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
2507     VkDevice                                    device,
2508     VkDeviceMemory                              memory,
2509     const VkAllocationCallbacks*                pAllocator);
2510
2511 VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
2512     VkDevice                                    device,
2513     VkDeviceMemory                              memory,
2514     VkDeviceSize                                offset,
2515     VkDeviceSize                                size,
2516     VkMemoryMapFlags                            flags,
2517     void**                                      ppData);
2518
2519 VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
2520     VkDevice                                    device,
2521     VkDeviceMemory                              memory);
2522
2523 VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
2524     VkDevice                                    device,
2525     uint32_t                                    memoryRangeCount,
2526     const VkMappedMemoryRange*                  pMemoryRanges);
2527
2528 VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
2529     VkDevice                                    device,
2530     uint32_t                                    memoryRangeCount,
2531     const VkMappedMemoryRange*                  pMemoryRanges);
2532
2533 VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
2534     VkDevice                                    device,
2535     VkDeviceMemory                              memory,
2536     VkDeviceSize*                               pCommittedMemoryInBytes);
2537
2538 VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
2539     VkDevice                                    device,
2540     VkBuffer                                    buffer,
2541     VkDeviceMemory                              memory,
2542     VkDeviceSize                                memoryOffset);
2543
2544 VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
2545     VkDevice                                    device,
2546     VkImage                                     image,
2547     VkDeviceMemory                              memory,
2548     VkDeviceSize                                memoryOffset);
2549
2550 VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
2551     VkDevice                                    device,
2552     VkBuffer                                    buffer,
2553     VkMemoryRequirements*                       pMemoryRequirements);
2554
2555 VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
2556     VkDevice                                    device,
2557     VkImage                                     image,
2558     VkMemoryRequirements*                       pMemoryRequirements);
2559
2560 VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
2561     VkDevice                                    device,
2562     VkImage                                     image,
2563     uint32_t*                                   pSparseMemoryRequirementCount,
2564     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
2565
2566 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
2567     VkPhysicalDevice                            physicalDevice,
2568     VkFormat                                    format,
2569     VkImageType                                 type,
2570     VkSampleCountFlagBits                       samples,
2571     VkImageUsageFlags                           usage,
2572     VkImageTiling                               tiling,
2573     uint32_t*                                   pPropertyCount,
2574     VkSparseImageFormatProperties*              pProperties);
2575
2576 VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
2577     VkQueue                                     queue,
2578     uint32_t                                    bindInfoCount,
2579     const VkBindSparseInfo*                     pBindInfo,
2580     VkFence                                     fence);
2581
2582 VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
2583     VkDevice                                    device,
2584     const VkFenceCreateInfo*                    pCreateInfo,
2585     const VkAllocationCallbacks*                pAllocator,
2586     VkFence*                                    pFence);
2587
2588 VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
2589     VkDevice                                    device,
2590     VkFence                                     fence,
2591     const VkAllocationCallbacks*                pAllocator);
2592
2593 VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
2594     VkDevice                                    device,
2595     uint32_t                                    fenceCount,
2596     const VkFence*                              pFences);
2597
2598 VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
2599     VkDevice                                    device,
2600     VkFence                                     fence);
2601
2602 VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
2603     VkDevice                                    device,
2604     uint32_t                                    fenceCount,
2605     const VkFence*                              pFences,
2606     VkBool32                                    waitAll,
2607     uint64_t                                    timeout);
2608
2609 VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
2610     VkDevice                                    device,
2611     const VkSemaphoreCreateInfo*                pCreateInfo,
2612     const VkAllocationCallbacks*                pAllocator,
2613     VkSemaphore*                                pSemaphore);
2614
2615 VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
2616     VkDevice                                    device,
2617     VkSemaphore                                 semaphore,
2618     const VkAllocationCallbacks*                pAllocator);
2619
2620 VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
2621     VkDevice                                    device,
2622     const VkEventCreateInfo*                    pCreateInfo,
2623     const VkAllocationCallbacks*                pAllocator,
2624     VkEvent*                                    pEvent);
2625
2626 VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
2627     VkDevice                                    device,
2628     VkEvent                                     event,
2629     const VkAllocationCallbacks*                pAllocator);
2630
2631 VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
2632     VkDevice                                    device,
2633     VkEvent                                     event);
2634
2635 VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
2636     VkDevice                                    device,
2637     VkEvent                                     event);
2638
2639 VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
2640     VkDevice                                    device,
2641     VkEvent                                     event);
2642
2643 VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
2644     VkDevice                                    device,
2645     const VkQueryPoolCreateInfo*                pCreateInfo,
2646     const VkAllocationCallbacks*                pAllocator,
2647     VkQueryPool*                                pQueryPool);
2648
2649 VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
2650     VkDevice                                    device,
2651     VkQueryPool                                 queryPool,
2652     const VkAllocationCallbacks*                pAllocator);
2653
2654 VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
2655     VkDevice                                    device,
2656     VkQueryPool                                 queryPool,
2657     uint32_t                                    firstQuery,
2658     uint32_t                                    queryCount,
2659     size_t                                      dataSize,
2660     void*                                       pData,
2661     VkDeviceSize                                stride,
2662     VkQueryResultFlags                          flags);
2663
2664 VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
2665     VkDevice                                    device,
2666     const VkBufferCreateInfo*                   pCreateInfo,
2667     const VkAllocationCallbacks*                pAllocator,
2668     VkBuffer*                                   pBuffer);
2669
2670 VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
2671     VkDevice                                    device,
2672     VkBuffer                                    buffer,
2673     const VkAllocationCallbacks*                pAllocator);
2674
2675 VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
2676     VkDevice                                    device,
2677     const VkBufferViewCreateInfo*               pCreateInfo,
2678     const VkAllocationCallbacks*                pAllocator,
2679     VkBufferView*                               pView);
2680
2681 VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
2682     VkDevice                                    device,
2683     VkBufferView                                bufferView,
2684     const VkAllocationCallbacks*                pAllocator);
2685
2686 VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
2687     VkDevice                                    device,
2688     const VkImageCreateInfo*                    pCreateInfo,
2689     const VkAllocationCallbacks*                pAllocator,
2690     VkImage*                                    pImage);
2691
2692 VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
2693     VkDevice                                    device,
2694     VkImage                                     image,
2695     const VkAllocationCallbacks*                pAllocator);
2696
2697 VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
2698     VkDevice                                    device,
2699     VkImage                                     image,
2700     const VkImageSubresource*                   pSubresource,
2701     VkSubresourceLayout*                        pLayout);
2702
2703 VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
2704     VkDevice                                    device,
2705     const VkImageViewCreateInfo*                pCreateInfo,
2706     const VkAllocationCallbacks*                pAllocator,
2707     VkImageView*                                pView);
2708
2709 VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
2710     VkDevice                                    device,
2711     VkImageView                                 imageView,
2712     const VkAllocationCallbacks*                pAllocator);
2713
2714 VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
2715     VkDevice                                    device,
2716     const VkShaderModuleCreateInfo*             pCreateInfo,
2717     const VkAllocationCallbacks*                pAllocator,
2718     VkShaderModule*                             pShaderModule);
2719
2720 VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
2721     VkDevice                                    device,
2722     VkShaderModule                              shaderModule,
2723     const VkAllocationCallbacks*                pAllocator);
2724
2725 VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
2726     VkDevice                                    device,
2727     const VkPipelineCacheCreateInfo*            pCreateInfo,
2728     const VkAllocationCallbacks*                pAllocator,
2729     VkPipelineCache*                            pPipelineCache);
2730
2731 VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
2732     VkDevice                                    device,
2733     VkPipelineCache                             pipelineCache,
2734     const VkAllocationCallbacks*                pAllocator);
2735
2736 VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
2737     VkDevice                                    device,
2738     VkPipelineCache                             pipelineCache,
2739     size_t*                                     pDataSize,
2740     void*                                       pData);
2741
2742 VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
2743     VkDevice                                    device,
2744     VkPipelineCache                             dstCache,
2745     uint32_t                                    srcCacheCount,
2746     const VkPipelineCache*                      pSrcCaches);
2747
2748 VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
2749     VkDevice                                    device,
2750     VkPipelineCache                             pipelineCache,
2751     uint32_t                                    createInfoCount,
2752     const VkGraphicsPipelineCreateInfo*         pCreateInfos,
2753     const VkAllocationCallbacks*                pAllocator,
2754     VkPipeline*                                 pPipelines);
2755
2756 VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
2757     VkDevice                                    device,
2758     VkPipelineCache                             pipelineCache,
2759     uint32_t                                    createInfoCount,
2760     const VkComputePipelineCreateInfo*          pCreateInfos,
2761     const VkAllocationCallbacks*                pAllocator,
2762     VkPipeline*                                 pPipelines);
2763
2764 VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
2765     VkDevice                                    device,
2766     VkPipeline                                  pipeline,
2767     const VkAllocationCallbacks*                pAllocator);
2768
2769 VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
2770     VkDevice                                    device,
2771     const VkPipelineLayoutCreateInfo*           pCreateInfo,
2772     const VkAllocationCallbacks*                pAllocator,
2773     VkPipelineLayout*                           pPipelineLayout);
2774
2775 VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
2776     VkDevice                                    device,
2777     VkPipelineLayout                            pipelineLayout,
2778     const VkAllocationCallbacks*                pAllocator);
2779
2780 VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
2781     VkDevice                                    device,
2782     const VkSamplerCreateInfo*                  pCreateInfo,
2783     const VkAllocationCallbacks*                pAllocator,
2784     VkSampler*                                  pSampler);
2785
2786 VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
2787     VkDevice                                    device,
2788     VkSampler                                   sampler,
2789     const VkAllocationCallbacks*                pAllocator);
2790
2791 VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
2792     VkDevice                                    device,
2793     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
2794     const VkAllocationCallbacks*                pAllocator,
2795     VkDescriptorSetLayout*                      pSetLayout);
2796
2797 VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
2798     VkDevice                                    device,
2799     VkDescriptorSetLayout                       descriptorSetLayout,
2800     const VkAllocationCallbacks*                pAllocator);
2801
2802 VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
2803     VkDevice                                    device,
2804     const VkDescriptorPoolCreateInfo*           pCreateInfo,
2805     const VkAllocationCallbacks*                pAllocator,
2806     VkDescriptorPool*                           pDescriptorPool);
2807
2808 VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
2809     VkDevice                                    device,
2810     VkDescriptorPool                            descriptorPool,
2811     const VkAllocationCallbacks*                pAllocator);
2812
2813 VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
2814     VkDevice                                    device,
2815     VkDescriptorPool                            descriptorPool,
2816     VkDescriptorPoolResetFlags                  flags);
2817
2818 VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
2819     VkDevice                                    device,
2820     const VkDescriptorSetAllocateInfo*          pAllocateInfo,
2821     VkDescriptorSet*                            pDescriptorSets);
2822
2823 VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
2824     VkDevice                                    device,
2825     VkDescriptorPool                            descriptorPool,
2826     uint32_t                                    descriptorSetCount,
2827     const VkDescriptorSet*                      pDescriptorSets);
2828
2829 VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
2830     VkDevice                                    device,
2831     uint32_t                                    descriptorWriteCount,
2832     const VkWriteDescriptorSet*                 pDescriptorWrites,
2833     uint32_t                                    descriptorCopyCount,
2834     const VkCopyDescriptorSet*                  pDescriptorCopies);
2835
2836 VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
2837     VkDevice                                    device,
2838     const VkFramebufferCreateInfo*              pCreateInfo,
2839     const VkAllocationCallbacks*                pAllocator,
2840     VkFramebuffer*                              pFramebuffer);
2841
2842 VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
2843     VkDevice                                    device,
2844     VkFramebuffer                               framebuffer,
2845     const VkAllocationCallbacks*                pAllocator);
2846
2847 VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
2848     VkDevice                                    device,
2849     const VkRenderPassCreateInfo*               pCreateInfo,
2850     const VkAllocationCallbacks*                pAllocator,
2851     VkRenderPass*                               pRenderPass);
2852
2853 VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
2854     VkDevice                                    device,
2855     VkRenderPass                                renderPass,
2856     const VkAllocationCallbacks*                pAllocator);
2857
2858 VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
2859     VkDevice                                    device,
2860     VkRenderPass                                renderPass,
2861     VkExtent2D*                                 pGranularity);
2862
2863 VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
2864     VkDevice                                    device,
2865     const VkCommandPoolCreateInfo*              pCreateInfo,
2866     const VkAllocationCallbacks*                pAllocator,
2867     VkCommandPool*                              pCommandPool);
2868
2869 VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
2870     VkDevice                                    device,
2871     VkCommandPool                               commandPool,
2872     const VkAllocationCallbacks*                pAllocator);
2873
2874 VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
2875     VkDevice                                    device,
2876     VkCommandPool                               commandPool,
2877     VkCommandPoolResetFlags                     flags);
2878
2879 VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
2880     VkDevice                                    device,
2881     const VkCommandBufferAllocateInfo*          pAllocateInfo,
2882     VkCommandBuffer*                            pCommandBuffers);
2883
2884 VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
2885     VkDevice                                    device,
2886     VkCommandPool                               commandPool,
2887     uint32_t                                    commandBufferCount,
2888     const VkCommandBuffer*                      pCommandBuffers);
2889
2890 VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
2891     VkCommandBuffer                             commandBuffer,
2892     const VkCommandBufferBeginInfo*             pBeginInfo);
2893
2894 VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
2895     VkCommandBuffer                             commandBuffer);
2896
2897 VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
2898     VkCommandBuffer                             commandBuffer,
2899     VkCommandBufferResetFlags                   flags);
2900
2901 VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
2902     VkCommandBuffer                             commandBuffer,
2903     VkPipelineBindPoint                         pipelineBindPoint,
2904     VkPipeline                                  pipeline);
2905
2906 VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
2907     VkCommandBuffer                             commandBuffer,
2908     uint32_t                                    firstViewport,
2909     uint32_t                                    viewportCount,
2910     const VkViewport*                           pViewports);
2911
2912 VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
2913     VkCommandBuffer                             commandBuffer,
2914     uint32_t                                    firstScissor,
2915     uint32_t                                    scissorCount,
2916     const VkRect2D*                             pScissors);
2917
2918 VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
2919     VkCommandBuffer                             commandBuffer,
2920     float                                       lineWidth);
2921
2922 VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
2923     VkCommandBuffer                             commandBuffer,
2924     float                                       depthBiasConstantFactor,
2925     float                                       depthBiasClamp,
2926     float                                       depthBiasSlopeFactor);
2927
2928 VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
2929     VkCommandBuffer                             commandBuffer,
2930     const float                                 blendConstants[4]);
2931
2932 VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
2933     VkCommandBuffer                             commandBuffer,
2934     float                                       minDepthBounds,
2935     float                                       maxDepthBounds);
2936
2937 VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
2938     VkCommandBuffer                             commandBuffer,
2939     VkStencilFaceFlags                          faceMask,
2940     uint32_t                                    compareMask);
2941
2942 VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
2943     VkCommandBuffer                             commandBuffer,
2944     VkStencilFaceFlags                          faceMask,
2945     uint32_t                                    writeMask);
2946
2947 VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
2948     VkCommandBuffer                             commandBuffer,
2949     VkStencilFaceFlags                          faceMask,
2950     uint32_t                                    reference);
2951
2952 VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
2953     VkCommandBuffer                             commandBuffer,
2954     VkPipelineBindPoint                         pipelineBindPoint,
2955     VkPipelineLayout                            layout,
2956     uint32_t                                    firstSet,
2957     uint32_t                                    descriptorSetCount,
2958     const VkDescriptorSet*                      pDescriptorSets,
2959     uint32_t                                    dynamicOffsetCount,
2960     const uint32_t*                             pDynamicOffsets);
2961
2962 VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
2963     VkCommandBuffer                             commandBuffer,
2964     VkBuffer                                    buffer,
2965     VkDeviceSize                                offset,
2966     VkIndexType                                 indexType);
2967
2968 VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
2969     VkCommandBuffer                             commandBuffer,
2970     uint32_t                                    firstBinding,
2971     uint32_t                                    bindingCount,
2972     const VkBuffer*                             pBuffers,
2973     const VkDeviceSize*                         pOffsets);
2974
2975 VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
2976     VkCommandBuffer                             commandBuffer,
2977     uint32_t                                    vertexCount,
2978     uint32_t                                    instanceCount,
2979     uint32_t                                    firstVertex,
2980     uint32_t                                    firstInstance);
2981
2982 VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
2983     VkCommandBuffer                             commandBuffer,
2984     uint32_t                                    indexCount,
2985     uint32_t                                    instanceCount,
2986     uint32_t                                    firstIndex,
2987     int32_t                                     vertexOffset,
2988     uint32_t                                    firstInstance);
2989
2990 VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
2991     VkCommandBuffer                             commandBuffer,
2992     VkBuffer                                    buffer,
2993     VkDeviceSize                                offset,
2994     uint32_t                                    drawCount,
2995     uint32_t                                    stride);
2996
2997 VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
2998     VkCommandBuffer                             commandBuffer,
2999     VkBuffer                                    buffer,
3000     VkDeviceSize                                offset,
3001     uint32_t                                    drawCount,
3002     uint32_t                                    stride);
3003
3004 VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
3005     VkCommandBuffer                             commandBuffer,
3006     uint32_t                                    x,
3007     uint32_t                                    y,
3008     uint32_t                                    z);
3009
3010 VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
3011     VkCommandBuffer                             commandBuffer,
3012     VkBuffer                                    buffer,
3013     VkDeviceSize                                offset);
3014
3015 VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
3016     VkCommandBuffer                             commandBuffer,
3017     VkBuffer                                    srcBuffer,
3018     VkBuffer                                    dstBuffer,
3019     uint32_t                                    regionCount,
3020     const VkBufferCopy*                         pRegions);
3021
3022 VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
3023     VkCommandBuffer                             commandBuffer,
3024     VkImage                                     srcImage,
3025     VkImageLayout                               srcImageLayout,
3026     VkImage                                     dstImage,
3027     VkImageLayout                               dstImageLayout,
3028     uint32_t                                    regionCount,
3029     const VkImageCopy*                          pRegions);
3030
3031 VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
3032     VkCommandBuffer                             commandBuffer,
3033     VkImage                                     srcImage,
3034     VkImageLayout                               srcImageLayout,
3035     VkImage                                     dstImage,
3036     VkImageLayout                               dstImageLayout,
3037     uint32_t                                    regionCount,
3038     const VkImageBlit*                          pRegions,
3039     VkFilter                                    filter);
3040
3041 VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
3042     VkCommandBuffer                             commandBuffer,
3043     VkBuffer                                    srcBuffer,
3044     VkImage                                     dstImage,
3045     VkImageLayout                               dstImageLayout,
3046     uint32_t                                    regionCount,
3047     const VkBufferImageCopy*                    pRegions);
3048
3049 VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
3050     VkCommandBuffer                             commandBuffer,
3051     VkImage                                     srcImage,
3052     VkImageLayout                               srcImageLayout,
3053     VkBuffer                                    dstBuffer,
3054     uint32_t                                    regionCount,
3055     const VkBufferImageCopy*                    pRegions);
3056
3057 VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
3058     VkCommandBuffer                             commandBuffer,
3059     VkBuffer                                    dstBuffer,
3060     VkDeviceSize                                dstOffset,
3061     VkDeviceSize                                dataSize,
3062     const void*                                 pData);
3063
3064 VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
3065     VkCommandBuffer                             commandBuffer,
3066     VkBuffer                                    dstBuffer,
3067     VkDeviceSize                                dstOffset,
3068     VkDeviceSize                                size,
3069     uint32_t                                    data);
3070
3071 VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
3072     VkCommandBuffer                             commandBuffer,
3073     VkImage                                     image,
3074     VkImageLayout                               imageLayout,
3075     const VkClearColorValue*                    pColor,
3076     uint32_t                                    rangeCount,
3077     const VkImageSubresourceRange*              pRanges);
3078
3079 VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
3080     VkCommandBuffer                             commandBuffer,
3081     VkImage                                     image,
3082     VkImageLayout                               imageLayout,
3083     const VkClearDepthStencilValue*             pDepthStencil,
3084     uint32_t                                    rangeCount,
3085     const VkImageSubresourceRange*              pRanges);
3086
3087 VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
3088     VkCommandBuffer                             commandBuffer,
3089     uint32_t                                    attachmentCount,
3090     const VkClearAttachment*                    pAttachments,
3091     uint32_t                                    rectCount,
3092     const VkClearRect*                          pRects);
3093
3094 VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
3095     VkCommandBuffer                             commandBuffer,
3096     VkImage                                     srcImage,
3097     VkImageLayout                               srcImageLayout,
3098     VkImage                                     dstImage,
3099     VkImageLayout                               dstImageLayout,
3100     uint32_t                                    regionCount,
3101     const VkImageResolve*                       pRegions);
3102
3103 VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
3104     VkCommandBuffer                             commandBuffer,
3105     VkEvent                                     event,
3106     VkPipelineStageFlags                        stageMask);
3107
3108 VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
3109     VkCommandBuffer                             commandBuffer,
3110     VkEvent                                     event,
3111     VkPipelineStageFlags                        stageMask);
3112
3113 VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
3114     VkCommandBuffer                             commandBuffer,
3115     uint32_t                                    eventCount,
3116     const VkEvent*                              pEvents,
3117     VkPipelineStageFlags                        srcStageMask,
3118     VkPipelineStageFlags                        dstStageMask,
3119     uint32_t                                    memoryBarrierCount,
3120     const VkMemoryBarrier*                      pMemoryBarriers,
3121     uint32_t                                    bufferMemoryBarrierCount,
3122     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
3123     uint32_t                                    imageMemoryBarrierCount,
3124     const VkImageMemoryBarrier*                 pImageMemoryBarriers);
3125
3126 VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
3127     VkCommandBuffer                             commandBuffer,
3128     VkPipelineStageFlags                        srcStageMask,
3129     VkPipelineStageFlags                        dstStageMask,
3130     VkDependencyFlags                           dependencyFlags,
3131     uint32_t                                    memoryBarrierCount,
3132     const VkMemoryBarrier*                      pMemoryBarriers,
3133     uint32_t                                    bufferMemoryBarrierCount,
3134     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
3135     uint32_t                                    imageMemoryBarrierCount,
3136     const VkImageMemoryBarrier*                 pImageMemoryBarriers);
3137
3138 VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
3139     VkCommandBuffer                             commandBuffer,
3140     VkQueryPool                                 queryPool,
3141     uint32_t                                    query,
3142     VkQueryControlFlags                         flags);
3143
3144 VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
3145     VkCommandBuffer                             commandBuffer,
3146     VkQueryPool                                 queryPool,
3147     uint32_t                                    query);
3148
3149 VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
3150     VkCommandBuffer                             commandBuffer,
3151     VkQueryPool                                 queryPool,
3152     uint32_t                                    firstQuery,
3153     uint32_t                                    queryCount);
3154
3155 VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
3156     VkCommandBuffer                             commandBuffer,
3157     VkPipelineStageFlagBits                     pipelineStage,
3158     VkQueryPool                                 queryPool,
3159     uint32_t                                    query);
3160
3161 VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
3162     VkCommandBuffer                             commandBuffer,
3163     VkQueryPool                                 queryPool,
3164     uint32_t                                    firstQuery,
3165     uint32_t                                    queryCount,
3166     VkBuffer                                    dstBuffer,
3167     VkDeviceSize                                dstOffset,
3168     VkDeviceSize                                stride,
3169     VkQueryResultFlags                          flags);
3170
3171 VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
3172     VkCommandBuffer                             commandBuffer,
3173     VkPipelineLayout                            layout,
3174     VkShaderStageFlags                          stageFlags,
3175     uint32_t                                    offset,
3176     uint32_t                                    size,
3177     const void*                                 pValues);
3178
3179 VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
3180     VkCommandBuffer                             commandBuffer,
3181     const VkRenderPassBeginInfo*                pRenderPassBegin,
3182     VkSubpassContents                           contents);
3183
3184 VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
3185     VkCommandBuffer                             commandBuffer,
3186     VkSubpassContents                           contents);
3187
3188 VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
3189     VkCommandBuffer                             commandBuffer);
3190
3191 VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
3192     VkCommandBuffer                             commandBuffer,
3193     uint32_t                                    commandBufferCount,
3194     const VkCommandBuffer*                      pCommandBuffers);
3195 #endif
3196
3197 #define VK_KHR_surface 1
3198 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
3199
3200 #define VK_KHR_SURFACE_SPEC_VERSION       25
3201 #define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
3202 #define VK_COLORSPACE_SRGB_NONLINEAR_KHR  VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
3203
3204
3205 typedef enum VkColorSpaceKHR {
3206     VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
3207     VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
3208     VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
3209     VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1),
3210     VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
3211 } VkColorSpaceKHR;
3212
3213 typedef enum VkPresentModeKHR {
3214     VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
3215     VK_PRESENT_MODE_MAILBOX_KHR = 1,
3216     VK_PRESENT_MODE_FIFO_KHR = 2,
3217     VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
3218     VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
3219     VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
3220     VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
3221     VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
3222 } VkPresentModeKHR;
3223
3224
3225 typedef enum VkSurfaceTransformFlagBitsKHR {
3226     VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
3227     VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
3228     VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
3229     VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
3230     VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
3231     VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
3232     VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
3233     VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
3234     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
3235     VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
3236 } VkSurfaceTransformFlagBitsKHR;
3237 typedef VkFlags VkSurfaceTransformFlagsKHR;
3238
3239 typedef enum VkCompositeAlphaFlagBitsKHR {
3240     VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
3241     VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
3242     VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
3243     VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
3244     VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
3245 } VkCompositeAlphaFlagBitsKHR;
3246 typedef VkFlags VkCompositeAlphaFlagsKHR;
3247
3248 typedef struct VkSurfaceCapabilitiesKHR {
3249     uint32_t                         minImageCount;
3250     uint32_t                         maxImageCount;
3251     VkExtent2D                       currentExtent;
3252     VkExtent2D                       minImageExtent;
3253     VkExtent2D                       maxImageExtent;
3254     uint32_t                         maxImageArrayLayers;
3255     VkSurfaceTransformFlagsKHR       supportedTransforms;
3256     VkSurfaceTransformFlagBitsKHR    currentTransform;
3257     VkCompositeAlphaFlagsKHR         supportedCompositeAlpha;
3258     VkImageUsageFlags                supportedUsageFlags;
3259 } VkSurfaceCapabilitiesKHR;
3260
3261 typedef struct VkSurfaceFormatKHR {
3262     VkFormat           format;
3263     VkColorSpaceKHR    colorSpace;
3264 } VkSurfaceFormatKHR;
3265
3266
3267 typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
3268 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
3269 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
3270 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
3271 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
3272
3273 #ifndef VK_NO_PROTOTYPES
3274 VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
3275     VkInstance                                  instance,
3276     VkSurfaceKHR                                surface,
3277     const VkAllocationCallbacks*                pAllocator);
3278
3279 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
3280     VkPhysicalDevice                            physicalDevice,
3281     uint32_t                                    queueFamilyIndex,
3282     VkSurfaceKHR                                surface,
3283     VkBool32*                                   pSupported);
3284
3285 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
3286     VkPhysicalDevice                            physicalDevice,
3287     VkSurfaceKHR                                surface,
3288     VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities);
3289
3290 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
3291     VkPhysicalDevice                            physicalDevice,
3292     VkSurfaceKHR                                surface,
3293     uint32_t*                                   pSurfaceFormatCount,
3294     VkSurfaceFormatKHR*                         pSurfaceFormats);
3295
3296 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
3297     VkPhysicalDevice                            physicalDevice,
3298     VkSurfaceKHR                                surface,
3299     uint32_t*                                   pPresentModeCount,
3300     VkPresentModeKHR*                           pPresentModes);
3301 #endif
3302
3303 #define VK_KHR_swapchain 1
3304 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
3305
3306 #define VK_KHR_SWAPCHAIN_SPEC_VERSION     68
3307 #define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
3308
3309 typedef VkFlags VkSwapchainCreateFlagsKHR;
3310
3311 typedef struct VkSwapchainCreateInfoKHR {
3312     VkStructureType                  sType;
3313     const void*                      pNext;
3314     VkSwapchainCreateFlagsKHR        flags;
3315     VkSurfaceKHR                     surface;
3316     uint32_t                         minImageCount;
3317     VkFormat                         imageFormat;
3318     VkColorSpaceKHR                  imageColorSpace;
3319     VkExtent2D                       imageExtent;
3320     uint32_t                         imageArrayLayers;
3321     VkImageUsageFlags                imageUsage;
3322     VkSharingMode                    imageSharingMode;
3323     uint32_t                         queueFamilyIndexCount;
3324     const uint32_t*                  pQueueFamilyIndices;
3325     VkSurfaceTransformFlagBitsKHR    preTransform;
3326     VkCompositeAlphaFlagBitsKHR      compositeAlpha;
3327     VkPresentModeKHR                 presentMode;
3328     VkBool32                         clipped;
3329     VkSwapchainKHR                   oldSwapchain;
3330 } VkSwapchainCreateInfoKHR;
3331
3332 typedef struct VkPresentInfoKHR {
3333     VkStructureType          sType;
3334     const void*              pNext;
3335     uint32_t                 waitSemaphoreCount;
3336     const VkSemaphore*       pWaitSemaphores;
3337     uint32_t                 swapchainCount;
3338     const VkSwapchainKHR*    pSwapchains;
3339     const uint32_t*          pImageIndices;
3340     VkResult*                pResults;
3341 } VkPresentInfoKHR;
3342
3343
3344 typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
3345 typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator);
3346 typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
3347 typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
3348 typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
3349
3350 #ifndef VK_NO_PROTOTYPES
3351 VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
3352     VkDevice                                    device,
3353     const VkSwapchainCreateInfoKHR*             pCreateInfo,
3354     const VkAllocationCallbacks*                pAllocator,
3355     VkSwapchainKHR*                             pSwapchain);
3356
3357 VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
3358     VkDevice                                    device,
3359     VkSwapchainKHR                              swapchain,
3360     const VkAllocationCallbacks*                pAllocator);
3361
3362 VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
3363     VkDevice                                    device,
3364     VkSwapchainKHR                              swapchain,
3365     uint32_t*                                   pSwapchainImageCount,
3366     VkImage*                                    pSwapchainImages);
3367
3368 VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
3369     VkDevice                                    device,
3370     VkSwapchainKHR                              swapchain,
3371     uint64_t                                    timeout,
3372     VkSemaphore                                 semaphore,
3373     VkFence                                     fence,
3374     uint32_t*                                   pImageIndex);
3375
3376 VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
3377     VkQueue                                     queue,
3378     const VkPresentInfoKHR*                     pPresentInfo);
3379 #endif
3380
3381 #define VK_KHR_display 1
3382 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
3383 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
3384
3385 #define VK_KHR_DISPLAY_SPEC_VERSION       21
3386 #define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
3387
3388
3389 typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
3390     VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
3391     VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
3392     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
3393     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
3394     VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
3395 } VkDisplayPlaneAlphaFlagBitsKHR;
3396 typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
3397 typedef VkFlags VkDisplayModeCreateFlagsKHR;
3398 typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
3399
3400 typedef struct VkDisplayPropertiesKHR {
3401     VkDisplayKHR                  display;
3402     const char*                   displayName;
3403     VkExtent2D                    physicalDimensions;
3404     VkExtent2D                    physicalResolution;
3405     VkSurfaceTransformFlagsKHR    supportedTransforms;
3406     VkBool32                      planeReorderPossible;
3407     VkBool32                      persistentContent;
3408 } VkDisplayPropertiesKHR;
3409
3410 typedef struct VkDisplayModeParametersKHR {
3411     VkExtent2D    visibleRegion;
3412     uint32_t      refreshRate;
3413 } VkDisplayModeParametersKHR;
3414
3415 typedef struct VkDisplayModePropertiesKHR {
3416     VkDisplayModeKHR              displayMode;
3417     VkDisplayModeParametersKHR    parameters;
3418 } VkDisplayModePropertiesKHR;
3419
3420 typedef struct VkDisplayModeCreateInfoKHR {
3421     VkStructureType                sType;
3422     const void*                    pNext;
3423     VkDisplayModeCreateFlagsKHR    flags;
3424     VkDisplayModeParametersKHR     parameters;
3425 } VkDisplayModeCreateInfoKHR;
3426
3427 typedef struct VkDisplayPlaneCapabilitiesKHR {
3428     VkDisplayPlaneAlphaFlagsKHR    supportedAlpha;
3429     VkOffset2D                     minSrcPosition;
3430     VkOffset2D                     maxSrcPosition;
3431     VkExtent2D                     minSrcExtent;
3432     VkExtent2D                     maxSrcExtent;
3433     VkOffset2D                     minDstPosition;
3434     VkOffset2D                     maxDstPosition;
3435     VkExtent2D                     minDstExtent;
3436     VkExtent2D                     maxDstExtent;
3437 } VkDisplayPlaneCapabilitiesKHR;
3438
3439 typedef struct VkDisplayPlanePropertiesKHR {
3440     VkDisplayKHR    currentDisplay;
3441     uint32_t        currentStackIndex;
3442 } VkDisplayPlanePropertiesKHR;
3443
3444 typedef struct VkDisplaySurfaceCreateInfoKHR {
3445     VkStructureType                   sType;
3446     const void*                       pNext;
3447     VkDisplaySurfaceCreateFlagsKHR    flags;
3448     VkDisplayModeKHR                  displayMode;
3449     uint32_t                          planeIndex;
3450     uint32_t                          planeStackIndex;
3451     VkSurfaceTransformFlagBitsKHR     transform;
3452     float                             globalAlpha;
3453     VkDisplayPlaneAlphaFlagBitsKHR    alphaMode;
3454     VkExtent2D                        imageExtent;
3455 } VkDisplaySurfaceCreateInfoKHR;
3456
3457
3458 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
3459 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
3460 typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
3461 typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
3462 typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
3463 typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
3464 typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3465
3466 #ifndef VK_NO_PROTOTYPES
3467 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
3468     VkPhysicalDevice                            physicalDevice,
3469     uint32_t*                                   pPropertyCount,
3470     VkDisplayPropertiesKHR*                     pProperties);
3471
3472 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
3473     VkPhysicalDevice                            physicalDevice,
3474     uint32_t*                                   pPropertyCount,
3475     VkDisplayPlanePropertiesKHR*                pProperties);
3476
3477 VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
3478     VkPhysicalDevice                            physicalDevice,
3479     uint32_t                                    planeIndex,
3480     uint32_t*                                   pDisplayCount,
3481     VkDisplayKHR*                               pDisplays);
3482
3483 VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
3484     VkPhysicalDevice                            physicalDevice,
3485     VkDisplayKHR                                display,
3486     uint32_t*                                   pPropertyCount,
3487     VkDisplayModePropertiesKHR*                 pProperties);
3488
3489 VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
3490     VkPhysicalDevice                            physicalDevice,
3491     VkDisplayKHR                                display,
3492     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
3493     const VkAllocationCallbacks*                pAllocator,
3494     VkDisplayModeKHR*                           pMode);
3495
3496 VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
3497     VkPhysicalDevice                            physicalDevice,
3498     VkDisplayModeKHR                            mode,
3499     uint32_t                                    planeIndex,
3500     VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
3501
3502 VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
3503     VkInstance                                  instance,
3504     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
3505     const VkAllocationCallbacks*                pAllocator,
3506     VkSurfaceKHR*                               pSurface);
3507 #endif
3508
3509 #define VK_KHR_display_swapchain 1
3510 #define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 9
3511 #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
3512
3513 typedef struct VkDisplayPresentInfoKHR {
3514     VkStructureType    sType;
3515     const void*        pNext;
3516     VkRect2D           srcRect;
3517     VkRect2D           dstRect;
3518     VkBool32           persistent;
3519 } VkDisplayPresentInfoKHR;
3520
3521
3522 typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
3523
3524 #ifndef VK_NO_PROTOTYPES
3525 VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
3526     VkDevice                                    device,
3527     uint32_t                                    swapchainCount,
3528     const VkSwapchainCreateInfoKHR*             pCreateInfos,
3529     const VkAllocationCallbacks*                pAllocator,
3530     VkSwapchainKHR*                             pSwapchains);
3531 #endif
3532
3533 #ifdef VK_USE_PLATFORM_XLIB_KHR
3534 #define VK_KHR_xlib_surface 1
3535 #include <X11/Xlib.h>
3536
3537 #define VK_KHR_XLIB_SURFACE_SPEC_VERSION  6
3538 #define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
3539
3540 typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
3541
3542 typedef struct VkXlibSurfaceCreateInfoKHR {
3543     VkStructureType                sType;
3544     const void*                    pNext;
3545     VkXlibSurfaceCreateFlagsKHR    flags;
3546     Display*                       dpy;
3547     Window                         window;
3548 } VkXlibSurfaceCreateInfoKHR;
3549
3550
3551 typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3552 typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
3553
3554 #ifndef VK_NO_PROTOTYPES
3555 VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
3556     VkInstance                                  instance,
3557     const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
3558     const VkAllocationCallbacks*                pAllocator,
3559     VkSurfaceKHR*                               pSurface);
3560
3561 VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
3562     VkPhysicalDevice                            physicalDevice,
3563     uint32_t                                    queueFamilyIndex,
3564     Display*                                    dpy,
3565     VisualID                                    visualID);
3566 #endif
3567 #endif /* VK_USE_PLATFORM_XLIB_KHR */
3568
3569 #ifdef VK_USE_PLATFORM_XCB_KHR
3570 #define VK_KHR_xcb_surface 1
3571 #include <xcb/xcb.h>
3572
3573 #define VK_KHR_XCB_SURFACE_SPEC_VERSION   6
3574 #define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
3575
3576 typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
3577
3578 typedef struct VkXcbSurfaceCreateInfoKHR {
3579     VkStructureType               sType;
3580     const void*                   pNext;
3581     VkXcbSurfaceCreateFlagsKHR    flags;
3582     xcb_connection_t*             connection;
3583     xcb_window_t                  window;
3584 } VkXcbSurfaceCreateInfoKHR;
3585
3586
3587 typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3588 typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
3589
3590 #ifndef VK_NO_PROTOTYPES
3591 VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
3592     VkInstance                                  instance,
3593     const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
3594     const VkAllocationCallbacks*                pAllocator,
3595     VkSurfaceKHR*                               pSurface);
3596
3597 VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
3598     VkPhysicalDevice                            physicalDevice,
3599     uint32_t                                    queueFamilyIndex,
3600     xcb_connection_t*                           connection,
3601     xcb_visualid_t                              visual_id);
3602 #endif
3603 #endif /* VK_USE_PLATFORM_XCB_KHR */
3604
3605 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
3606 #define VK_KHR_wayland_surface 1
3607 #include <wayland-client.h>
3608
3609 #define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 5
3610 #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
3611
3612 typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
3613
3614 typedef struct VkWaylandSurfaceCreateInfoKHR {
3615     VkStructureType                   sType;
3616     const void*                       pNext;
3617     VkWaylandSurfaceCreateFlagsKHR    flags;
3618     struct wl_display*                display;
3619     struct wl_surface*                surface;
3620 } VkWaylandSurfaceCreateInfoKHR;
3621
3622
3623 typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3624 typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
3625
3626 #ifndef VK_NO_PROTOTYPES
3627 VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
3628     VkInstance                                  instance,
3629     const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
3630     const VkAllocationCallbacks*                pAllocator,
3631     VkSurfaceKHR*                               pSurface);
3632
3633 VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
3634     VkPhysicalDevice                            physicalDevice,
3635     uint32_t                                    queueFamilyIndex,
3636     struct wl_display*                          display);
3637 #endif
3638 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
3639
3640 #ifdef VK_USE_PLATFORM_MIR_KHR
3641 #define VK_KHR_mir_surface 1
3642 #include <mir_toolkit/client_types.h>
3643
3644 #define VK_KHR_MIR_SURFACE_SPEC_VERSION   4
3645 #define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
3646
3647 typedef VkFlags VkMirSurfaceCreateFlagsKHR;
3648
3649 typedef struct VkMirSurfaceCreateInfoKHR {
3650     VkStructureType               sType;
3651     const void*                   pNext;
3652     VkMirSurfaceCreateFlagsKHR    flags;
3653     MirConnection*                connection;
3654     MirSurface*                   mirSurface;
3655 } VkMirSurfaceCreateInfoKHR;
3656
3657
3658 typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, const VkMirSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3659 typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
3660
3661 #ifndef VK_NO_PROTOTYPES
3662 VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
3663     VkInstance                                  instance,
3664     const VkMirSurfaceCreateInfoKHR*            pCreateInfo,
3665     const VkAllocationCallbacks*                pAllocator,
3666     VkSurfaceKHR*                               pSurface);
3667
3668 VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
3669     VkPhysicalDevice                            physicalDevice,
3670     uint32_t                                    queueFamilyIndex,
3671     MirConnection*                              connection);
3672 #endif
3673 #endif /* VK_USE_PLATFORM_MIR_KHR */
3674
3675 #ifdef VK_USE_PLATFORM_ANDROID_KHR
3676 #define VK_KHR_android_surface 1
3677 #include <android/native_window.h>
3678
3679 #define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
3680 #define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
3681
3682 typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
3683
3684 typedef struct VkAndroidSurfaceCreateInfoKHR {
3685     VkStructureType                   sType;
3686     const void*                       pNext;
3687     VkAndroidSurfaceCreateFlagsKHR    flags;
3688     ANativeWindow*                    window;
3689 } VkAndroidSurfaceCreateInfoKHR;
3690
3691
3692 typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3693
3694 #ifndef VK_NO_PROTOTYPES
3695 VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
3696     VkInstance                                  instance,
3697     const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
3698     const VkAllocationCallbacks*                pAllocator,
3699     VkSurfaceKHR*                               pSurface);
3700 #endif
3701 #endif /* VK_USE_PLATFORM_ANDROID_KHR */
3702
3703 #ifdef VK_USE_PLATFORM_WIN32_KHR
3704 #define VK_KHR_win32_surface 1
3705 #include <windows.h>
3706
3707 #define VK_KHR_WIN32_SURFACE_SPEC_VERSION 5
3708 #define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
3709
3710 typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
3711
3712 typedef struct VkWin32SurfaceCreateInfoKHR {
3713     VkStructureType                 sType;
3714     const void*                     pNext;
3715     VkWin32SurfaceCreateFlagsKHR    flags;
3716     HINSTANCE                       hinstance;
3717     HWND                            hwnd;
3718 } VkWin32SurfaceCreateInfoKHR;
3719
3720
3721 typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
3722 typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
3723
3724 #ifndef VK_NO_PROTOTYPES
3725 VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
3726     VkInstance                                  instance,
3727     const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
3728     const VkAllocationCallbacks*                pAllocator,
3729     VkSurfaceKHR*                               pSurface);
3730
3731 VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
3732     VkPhysicalDevice                            physicalDevice,
3733     uint32_t                                    queueFamilyIndex);
3734 #endif
3735 #endif /* VK_USE_PLATFORM_WIN32_KHR */
3736
3737 #define VK_KHR_sampler_mirror_clamp_to_edge 1
3738 #define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 1
3739 #define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
3740
3741
3742 #define VK_EXT_debug_report 1
3743 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
3744
3745 #define VK_EXT_DEBUG_REPORT_SPEC_VERSION  3
3746 #define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
3747 #define VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
3748
3749
3750 typedef enum VkDebugReportObjectTypeEXT {
3751     VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
3752     VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
3753     VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
3754     VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
3755     VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
3756     VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
3757     VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
3758     VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
3759     VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
3760     VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
3761     VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
3762     VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
3763     VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
3764     VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
3765     VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
3766     VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
3767     VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
3768     VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
3769     VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
3770     VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
3771     VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
3772     VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
3773     VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
3774     VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
3775     VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
3776     VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
3777     VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
3778     VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
3779     VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = 28,
3780     VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
3781     VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT,
3782     VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
3783     VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
3784 } VkDebugReportObjectTypeEXT;
3785
3786 typedef enum VkDebugReportErrorEXT {
3787     VK_DEBUG_REPORT_ERROR_NONE_EXT = 0,
3788     VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = 1,
3789     VK_DEBUG_REPORT_ERROR_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_ERROR_NONE_EXT,
3790     VK_DEBUG_REPORT_ERROR_END_RANGE_EXT = VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT,
3791     VK_DEBUG_REPORT_ERROR_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT - VK_DEBUG_REPORT_ERROR_NONE_EXT + 1),
3792     VK_DEBUG_REPORT_ERROR_MAX_ENUM_EXT = 0x7FFFFFFF
3793 } VkDebugReportErrorEXT;
3794
3795
3796 typedef enum VkDebugReportFlagBitsEXT {
3797     VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001,
3798     VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002,
3799     VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004,
3800     VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008,
3801     VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010,
3802     VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
3803 } VkDebugReportFlagBitsEXT;
3804 typedef VkFlags VkDebugReportFlagsEXT;
3805
3806 typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
3807     VkDebugReportFlagsEXT                       flags,
3808     VkDebugReportObjectTypeEXT                  objectType,
3809     uint64_t                                    object,
3810     size_t                                      location,
3811     int32_t                                     messageCode,
3812     const char*                                 pLayerPrefix,
3813     const char*                                 pMessage,
3814     void*                                       pUserData);
3815
3816
3817 typedef struct VkDebugReportCallbackCreateInfoEXT {
3818     VkStructureType                 sType;
3819     const void*                     pNext;
3820     VkDebugReportFlagsEXT           flags;
3821     PFN_vkDebugReportCallbackEXT    pfnCallback;
3822     void*                           pUserData;
3823 } VkDebugReportCallbackCreateInfoEXT;
3824
3825
3826 typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
3827 typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
3828 typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
3829
3830 #ifndef VK_NO_PROTOTYPES
3831 VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
3832     VkInstance                                  instance,
3833     const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
3834     const VkAllocationCallbacks*                pAllocator,
3835     VkDebugReportCallbackEXT*                   pCallback);
3836
3837 VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
3838     VkInstance                                  instance,
3839     VkDebugReportCallbackEXT                    callback,
3840     const VkAllocationCallbacks*                pAllocator);
3841
3842 VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
3843     VkInstance                                  instance,
3844     VkDebugReportFlagsEXT                       flags,
3845     VkDebugReportObjectTypeEXT                  objectType,
3846     uint64_t                                    object,
3847     size_t                                      location,
3848     int32_t                                     messageCode,
3849     const char*                                 pLayerPrefix,
3850     const char*                                 pMessage);
3851 #endif
3852
3853 #define VK_NV_glsl_shader 1
3854 #define VK_NV_GLSL_SHADER_SPEC_VERSION    1
3855 #define VK_NV_GLSL_SHADER_EXTENSION_NAME  "VK_NV_glsl_shader"
3856
3857
3858 #define VK_IMG_filter_cubic 1
3859 #define VK_IMG_FILTER_CUBIC_SPEC_VERSION  1
3860 #define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic"
3861
3862
3863 #define VK_AMD_rasterization_order 1
3864 #define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1
3865 #define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order"
3866
3867
3868 typedef enum VkRasterizationOrderAMD {
3869     VK_RASTERIZATION_ORDER_STRICT_AMD = 0,
3870     VK_RASTERIZATION_ORDER_RELAXED_AMD = 1,
3871     VK_RASTERIZATION_ORDER_BEGIN_RANGE_AMD = VK_RASTERIZATION_ORDER_STRICT_AMD,
3872     VK_RASTERIZATION_ORDER_END_RANGE_AMD = VK_RASTERIZATION_ORDER_RELAXED_AMD,
3873     VK_RASTERIZATION_ORDER_RANGE_SIZE_AMD = (VK_RASTERIZATION_ORDER_RELAXED_AMD - VK_RASTERIZATION_ORDER_STRICT_AMD + 1),
3874     VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF
3875 } VkRasterizationOrderAMD;
3876
3877 typedef struct VkPipelineRasterizationStateRasterizationOrderAMD {
3878     VkStructureType            sType;
3879     const void*                pNext;
3880     VkRasterizationOrderAMD    rasterizationOrder;
3881 } VkPipelineRasterizationStateRasterizationOrderAMD;
3882
3883
3884
3885 #define VK_AMD_shader_trinary_minmax 1
3886 #define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
3887 #define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
3888
3889
3890 #define VK_AMD_shader_explicit_vertex_parameter 1
3891 #define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
3892 #define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
3893
3894
3895 #define VK_EXT_debug_marker 1
3896 #define VK_EXT_DEBUG_MARKER_SPEC_VERSION  3
3897 #define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
3898
3899 typedef struct VkDebugMarkerObjectNameInfoEXT {
3900     VkStructureType               sType;
3901     const void*                   pNext;
3902     VkDebugReportObjectTypeEXT    objectType;
3903     uint64_t                      object;
3904     const char*                   pObjectName;
3905 } VkDebugMarkerObjectNameInfoEXT;
3906
3907 typedef struct VkDebugMarkerObjectTagInfoEXT {
3908     VkStructureType               sType;
3909     const void*                   pNext;
3910     VkDebugReportObjectTypeEXT    objectType;
3911     uint64_t                      object;
3912     uint64_t                      tagName;
3913     size_t                        tagSize;
3914     const void*                   pTag;
3915 } VkDebugMarkerObjectTagInfoEXT;
3916
3917 typedef struct VkDebugMarkerMarkerInfoEXT {
3918     VkStructureType    sType;
3919     const void*        pNext;
3920     const char*        pMarkerName;
3921     float              color[4];
3922 } VkDebugMarkerMarkerInfoEXT;
3923
3924
3925 typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, VkDebugMarkerObjectTagInfoEXT* pTagInfo);
3926 typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, VkDebugMarkerObjectNameInfoEXT* pNameInfo);
3927 typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
3928 typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer);
3929 typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
3930
3931 #ifndef VK_NO_PROTOTYPES
3932 VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT(
3933     VkDevice                                    device,
3934     VkDebugMarkerObjectTagInfoEXT*              pTagInfo);
3935
3936 VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT(
3937     VkDevice                                    device,
3938     VkDebugMarkerObjectNameInfoEXT*             pNameInfo);
3939
3940 VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT(
3941     VkCommandBuffer                             commandBuffer,
3942     VkDebugMarkerMarkerInfoEXT*                 pMarkerInfo);
3943
3944 VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT(
3945     VkCommandBuffer                             commandBuffer);
3946
3947 VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT(
3948     VkCommandBuffer                             commandBuffer,
3949     VkDebugMarkerMarkerInfoEXT*                 pMarkerInfo);
3950 #endif
3951
3952 #define VK_AMD_gcn_shader 1
3953 #define VK_AMD_GCN_SHADER_SPEC_VERSION    1
3954 #define VK_AMD_GCN_SHADER_EXTENSION_NAME  "VK_AMD_gcn_shader"
3955
3956
3957 #define VK_NV_dedicated_allocation 1
3958 #define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
3959 #define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
3960
3961 typedef struct VkDedicatedAllocationImageCreateInfoNV {
3962     VkStructureType    sType;
3963     const void*        pNext;
3964     VkBool32           dedicatedAllocation;
3965 } VkDedicatedAllocationImageCreateInfoNV;
3966
3967 typedef struct VkDedicatedAllocationBufferCreateInfoNV {
3968     VkStructureType    sType;
3969     const void*        pNext;
3970     VkBool32           dedicatedAllocation;
3971 } VkDedicatedAllocationBufferCreateInfoNV;
3972
3973 typedef struct VkDedicatedAllocationMemoryAllocateInfoNV {
3974     VkStructureType    sType;
3975     const void*        pNext;
3976     VkImage            image;
3977     VkBuffer           buffer;
3978 } VkDedicatedAllocationMemoryAllocateInfoNV;
3979
3980
3981
3982 #define VK_AMD_draw_indirect_count 1
3983 #define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
3984 #define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
3985
3986 typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
3987 typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
3988
3989 #ifndef VK_NO_PROTOTYPES
3990 VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD(
3991     VkCommandBuffer                             commandBuffer,
3992     VkBuffer                                    buffer,
3993     VkDeviceSize                                offset,
3994     VkBuffer                                    countBuffer,
3995     VkDeviceSize                                countBufferOffset,
3996     uint32_t                                    maxDrawCount,
3997     uint32_t                                    stride);
3998
3999 VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
4000     VkCommandBuffer                             commandBuffer,
4001     VkBuffer                                    buffer,
4002     VkDeviceSize                                offset,
4003     VkBuffer                                    countBuffer,
4004     VkDeviceSize                                countBufferOffset,
4005     uint32_t                                    maxDrawCount,
4006     uint32_t                                    stride);
4007 #endif
4008
4009 #define VK_AMD_negative_viewport_height 1
4010 #define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
4011 #define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
4012
4013
4014 #define VK_AMD_gpu_shader_half_float 1
4015 #define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 1
4016 #define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
4017
4018
4019 #define VK_AMD_shader_ballot 1
4020 #define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
4021 #define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
4022
4023
4024 #define VK_IMG_format_pvrtc 1
4025 #define VK_IMG_FORMAT_PVRTC_SPEC_VERSION  1
4026 #define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
4027
4028
4029 #define VK_NV_external_memory_capabilities 1
4030 #define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
4031 #define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
4032
4033
4034 typedef enum VkExternalMemoryHandleTypeFlagBitsNV {
4035     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001,
4036     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002,
4037     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004,
4038     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008,
4039     VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
4040 } VkExternalMemoryHandleTypeFlagBitsNV;
4041 typedef VkFlags VkExternalMemoryHandleTypeFlagsNV;
4042
4043 typedef enum VkExternalMemoryFeatureFlagBitsNV {
4044     VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
4045     VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
4046     VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
4047     VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
4048 } VkExternalMemoryFeatureFlagBitsNV;
4049 typedef VkFlags VkExternalMemoryFeatureFlagsNV;
4050
4051 typedef struct VkExternalImageFormatPropertiesNV {
4052     VkImageFormatProperties              imageFormatProperties;
4053     VkExternalMemoryFeatureFlagsNV       externalMemoryFeatures;
4054     VkExternalMemoryHandleTypeFlagsNV    exportFromImportedHandleTypes;
4055     VkExternalMemoryHandleTypeFlagsNV    compatibleHandleTypes;
4056 } VkExternalImageFormatPropertiesNV;
4057
4058
4059 typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
4060
4061 #ifndef VK_NO_PROTOTYPES
4062 VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
4063     VkPhysicalDevice                            physicalDevice,
4064     VkFormat                                    format,
4065     VkImageType                                 type,
4066     VkImageTiling                               tiling,
4067     VkImageUsageFlags                           usage,
4068     VkImageCreateFlags                          flags,
4069     VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
4070     VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties);
4071 #endif
4072
4073 #define VK_NV_external_memory 1
4074 #define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
4075 #define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
4076
4077 typedef struct VkExternalMemoryImageCreateInfoNV {
4078     VkStructureType                      sType;
4079     const void*                          pNext;
4080     VkExternalMemoryHandleTypeFlagsNV    handleTypes;
4081 } VkExternalMemoryImageCreateInfoNV;
4082
4083 typedef struct VkExportMemoryAllocateInfoNV {
4084     VkStructureType                      sType;
4085     const void*                          pNext;
4086     VkExternalMemoryHandleTypeFlagsNV    handleTypes;
4087 } VkExportMemoryAllocateInfoNV;
4088
4089
4090
4091 #ifdef VK_USE_PLATFORM_WIN32_KHR
4092 #define VK_NV_external_memory_win32 1
4093 #define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
4094 #define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
4095
4096 typedef struct VkImportMemoryWin32HandleInfoNV {
4097     VkStructureType                      sType;
4098     const void*                          pNext;
4099     VkExternalMemoryHandleTypeFlagsNV    handleType;
4100     HANDLE                               handle;
4101 } VkImportMemoryWin32HandleInfoNV;
4102
4103 typedef struct VkExportMemoryWin32HandleInfoNV {
4104     VkStructureType               sType;
4105     const void*                   pNext;
4106     const SECURITY_ATTRIBUTES*    pAttributes;
4107     DWORD                         dwAccess;
4108 } VkExportMemoryWin32HandleInfoNV;
4109
4110
4111 typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
4112
4113 #ifndef VK_NO_PROTOTYPES
4114 VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
4115     VkDevice                                    device,
4116     VkDeviceMemory                              memory,
4117     VkExternalMemoryHandleTypeFlagsNV           handleType,
4118     HANDLE*                                     pHandle);
4119 #endif
4120 #endif /* VK_USE_PLATFORM_WIN32_KHR */
4121
4122 #ifdef VK_USE_PLATFORM_WIN32_KHR
4123 #define VK_NV_win32_keyed_mutex 1
4124 #define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
4125 #define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
4126
4127 typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
4128     VkStructureType          sType;
4129     const void*              pNext;
4130     uint32_t                 acquireCount;
4131     const VkDeviceMemory*    pAcquireSyncs;
4132     const uint64_t*          pAcquireKeys;
4133     const uint32_t*          pAcquireTimeoutMilliseconds;
4134     uint32_t                 releaseCount;
4135     const VkDeviceMemory*    pReleaseSyncs;
4136     const uint64_t*          pReleaseKeys;
4137 } VkWin32KeyedMutexAcquireReleaseInfoNV;
4138
4139
4140 #endif /* VK_USE_PLATFORM_WIN32_KHR */
4141
4142 #define VK_EXT_validation_flags 1
4143 #define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 1
4144 #define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
4145
4146
4147 typedef enum VkValidationCheckEXT {
4148     VK_VALIDATION_CHECK_ALL_EXT = 0,
4149     VK_VALIDATION_CHECK_BEGIN_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
4150     VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
4151     VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_ALL_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1),
4152     VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF
4153 } VkValidationCheckEXT;
4154
4155 typedef struct VkValidationFlagsEXT {
4156     VkStructureType          sType;
4157     const void*              pNext;
4158     uint32_t                 disabledValidationCheckCount;
4159     VkValidationCheckEXT*    pDisabledValidationChecks;
4160 } VkValidationFlagsEXT;
4161
4162
4163
4164 #define VK_NVX_device_generated_commands 1
4165 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX)
4166 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX)
4167
4168 #define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1
4169 #define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"
4170
4171
4172 typedef enum VkIndirectCommandsTokenTypeNVX {
4173     VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX = 0,
4174     VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX = 1,
4175     VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX = 2,
4176     VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX = 3,
4177     VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX = 4,
4178     VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX = 5,
4179     VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX = 6,
4180     VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX = 7,
4181     VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX,
4182     VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX,
4183     VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX + 1),
4184     VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
4185 } VkIndirectCommandsTokenTypeNVX;
4186
4187 typedef enum VkObjectEntryTypeNVX {
4188     VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX = 0,
4189     VK_OBJECT_ENTRY_PIPELINE_NVX = 1,
4190     VK_OBJECT_ENTRY_INDEX_BUFFER_NVX = 2,
4191     VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX = 3,
4192     VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX = 4,
4193     VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX,
4194     VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX,
4195     VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX + 1),
4196     VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
4197 } VkObjectEntryTypeNVX;
4198
4199
4200 typedef enum VkIndirectCommandsLayoutUsageFlagBitsNVX {
4201     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = 0x00000001,
4202     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = 0x00000002,
4203     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = 0x00000004,
4204     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = 0x00000008,
4205     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
4206 } VkIndirectCommandsLayoutUsageFlagBitsNVX;
4207 typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNVX;
4208
4209 typedef enum VkObjectEntryUsageFlagBitsNVX {
4210     VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = 0x00000001,
4211     VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = 0x00000002,
4212     VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
4213 } VkObjectEntryUsageFlagBitsNVX;
4214 typedef VkFlags VkObjectEntryUsageFlagsNVX;
4215
4216 typedef struct VkDeviceGeneratedCommandsFeaturesNVX {
4217     VkStructureType    sType;
4218     const void*        pNext;
4219     VkBool32           computeBindingPointSupport;
4220 } VkDeviceGeneratedCommandsFeaturesNVX;
4221
4222 typedef struct VkDeviceGeneratedCommandsLimitsNVX {
4223     VkStructureType    sType;
4224     const void*        pNext;
4225     uint32_t           maxIndirectCommandsLayoutTokenCount;
4226     uint32_t           maxObjectEntryCounts;
4227     uint32_t           minSequenceCountBufferOffsetAlignment;
4228     uint32_t           minSequenceIndexBufferOffsetAlignment;
4229     uint32_t           minCommandsTokenBufferOffsetAlignment;
4230 } VkDeviceGeneratedCommandsLimitsNVX;
4231
4232 typedef struct VkIndirectCommandsTokenNVX {
4233     VkIndirectCommandsTokenTypeNVX    tokenType;
4234     VkBuffer                          buffer;
4235     VkDeviceSize                      offset;
4236 } VkIndirectCommandsTokenNVX;
4237
4238 typedef struct VkIndirectCommandsLayoutTokenNVX {
4239     VkIndirectCommandsTokenTypeNVX    tokenType;
4240     uint32_t                          bindingUnit;
4241     uint32_t                          dynamicCount;
4242     uint32_t                          divisor;
4243 } VkIndirectCommandsLayoutTokenNVX;
4244
4245 typedef struct VkIndirectCommandsLayoutCreateInfoNVX {
4246     VkStructureType                            sType;
4247     const void*                                pNext;
4248     VkPipelineBindPoint                        pipelineBindPoint;
4249     VkIndirectCommandsLayoutUsageFlagsNVX      flags;
4250     uint32_t                                   tokenCount;
4251     const VkIndirectCommandsLayoutTokenNVX*    pTokens;
4252 } VkIndirectCommandsLayoutCreateInfoNVX;
4253
4254 typedef struct VkCmdProcessCommandsInfoNVX {
4255     VkStructureType                      sType;
4256     const void*                          pNext;
4257     VkObjectTableNVX                     objectTable;
4258     VkIndirectCommandsLayoutNVX          indirectCommandsLayout;
4259     uint32_t                             indirectCommandsTokenCount;
4260     const VkIndirectCommandsTokenNVX*    pIndirectCommandsTokens;
4261     uint32_t                             maxSequencesCount;
4262     VkCommandBuffer                      targetCommandBuffer;
4263     VkBuffer                             sequencesCountBuffer;
4264     VkDeviceSize                         sequencesCountOffset;
4265     VkBuffer                             sequencesIndexBuffer;
4266     VkDeviceSize                         sequencesIndexOffset;
4267 } VkCmdProcessCommandsInfoNVX;
4268
4269 typedef struct VkCmdReserveSpaceForCommandsInfoNVX {
4270     VkStructureType                sType;
4271     const void*                    pNext;
4272     VkObjectTableNVX               objectTable;
4273     VkIndirectCommandsLayoutNVX    indirectCommandsLayout;
4274     uint32_t                       maxSequencesCount;
4275 } VkCmdReserveSpaceForCommandsInfoNVX;
4276
4277 typedef struct VkObjectTableCreateInfoNVX {
4278     VkStructureType                      sType;
4279     const void*                          pNext;
4280     uint32_t                             objectCount;
4281     const VkObjectEntryTypeNVX*          pObjectEntryTypes;
4282     const uint32_t*                      pObjectEntryCounts;
4283     const VkObjectEntryUsageFlagsNVX*    pObjectEntryUsageFlags;
4284     uint32_t                             maxUniformBuffersPerDescriptor;
4285     uint32_t                             maxStorageBuffersPerDescriptor;
4286     uint32_t                             maxStorageImagesPerDescriptor;
4287     uint32_t                             maxSampledImagesPerDescriptor;
4288     uint32_t                             maxPipelineLayouts;
4289 } VkObjectTableCreateInfoNVX;
4290
4291 typedef struct VkObjectTableEntryNVX {
4292     VkObjectEntryTypeNVX          type;
4293     VkObjectEntryUsageFlagsNVX    flags;
4294 } VkObjectTableEntryNVX;
4295
4296 typedef struct VkObjectTablePipelineEntryNVX {
4297     VkObjectEntryTypeNVX          type;
4298     VkObjectEntryUsageFlagsNVX    flags;
4299     VkPipeline                    pipeline;
4300 } VkObjectTablePipelineEntryNVX;
4301
4302 typedef struct VkObjectTableDescriptorSetEntryNVX {
4303     VkObjectEntryTypeNVX          type;
4304     VkObjectEntryUsageFlagsNVX    flags;
4305     VkPipelineLayout              pipelineLayout;
4306     VkDescriptorSet               descriptorSet;
4307 } VkObjectTableDescriptorSetEntryNVX;
4308
4309 typedef struct VkObjectTableVertexBufferEntryNVX {
4310     VkObjectEntryTypeNVX          type;
4311     VkObjectEntryUsageFlagsNVX    flags;
4312     VkBuffer                      buffer;
4313 } VkObjectTableVertexBufferEntryNVX;
4314
4315 typedef struct VkObjectTableIndexBufferEntryNVX {
4316     VkObjectEntryTypeNVX          type;
4317     VkObjectEntryUsageFlagsNVX    flags;
4318     VkBuffer                      buffer;
4319 } VkObjectTableIndexBufferEntryNVX;
4320
4321 typedef struct VkObjectTablePushConstantEntryNVX {
4322     VkObjectEntryTypeNVX          type;
4323     VkObjectEntryUsageFlagsNVX    flags;
4324     VkPipelineLayout              pipelineLayout;
4325     VkShaderStageFlags            stageFlags;
4326 } VkObjectTablePushConstantEntryNVX;
4327
4328
4329 typedef void (VKAPI_PTR *PFN_vkCmdProcessCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
4330 typedef void (VKAPI_PTR *PFN_vkCmdReserveSpaceForCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
4331 typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNVX)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
4332 typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNVX)(VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);
4333 typedef VkResult (VKAPI_PTR *PFN_vkCreateObjectTableNVX)(VkDevice device, const VkObjectTableCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkObjectTableNVX* pObjectTable);
4334 typedef void (VKAPI_PTR *PFN_vkDestroyObjectTableNVX)(VkDevice device, VkObjectTableNVX objectTable, const VkAllocationCallbacks* pAllocator);
4335 typedef VkResult (VKAPI_PTR *PFN_vkRegisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectTableEntryNVX* const*    ppObjectTableEntries, const uint32_t* pObjectIndices);
4336 typedef VkResult (VKAPI_PTR *PFN_vkUnregisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices);
4337 typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)(VkPhysicalDevice physicalDevice, VkDeviceGeneratedCommandsFeaturesNVX* pFeatures, VkDeviceGeneratedCommandsLimitsNVX* pLimits);
4338
4339 #ifndef VK_NO_PROTOTYPES
4340 VKAPI_ATTR void VKAPI_CALL vkCmdProcessCommandsNVX(
4341     VkCommandBuffer                             commandBuffer,
4342     const VkCmdProcessCommandsInfoNVX*          pProcessCommandsInfo);
4343
4344 VKAPI_ATTR void VKAPI_CALL vkCmdReserveSpaceForCommandsNVX(
4345     VkCommandBuffer                             commandBuffer,
4346     const VkCmdReserveSpaceForCommandsInfoNVX*  pReserveSpaceInfo);
4347
4348 VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNVX(
4349     VkDevice                                    device,
4350     const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
4351     const VkAllocationCallbacks*                pAllocator,
4352     VkIndirectCommandsLayoutNVX*                pIndirectCommandsLayout);
4353
4354 VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNVX(
4355     VkDevice                                    device,
4356     VkIndirectCommandsLayoutNVX                 indirectCommandsLayout,
4357     const VkAllocationCallbacks*                pAllocator);
4358
4359 VKAPI_ATTR VkResult VKAPI_CALL vkCreateObjectTableNVX(
4360     VkDevice                                    device,
4361     const VkObjectTableCreateInfoNVX*           pCreateInfo,
4362     const VkAllocationCallbacks*                pAllocator,
4363     VkObjectTableNVX*                           pObjectTable);
4364
4365 VKAPI_ATTR void VKAPI_CALL vkDestroyObjectTableNVX(
4366     VkDevice                                    device,
4367     VkObjectTableNVX                            objectTable,
4368     const VkAllocationCallbacks*                pAllocator);
4369
4370 VKAPI_ATTR VkResult VKAPI_CALL vkRegisterObjectsNVX(
4371     VkDevice                                    device,
4372     VkObjectTableNVX                            objectTable,
4373     uint32_t                                    objectCount,
4374     const VkObjectTableEntryNVX* const*         ppObjectTableEntries,
4375     const uint32_t*                             pObjectIndices);
4376
4377 VKAPI_ATTR VkResult VKAPI_CALL vkUnregisterObjectsNVX(
4378     VkDevice                                    device,
4379     VkObjectTableNVX                            objectTable,
4380     uint32_t                                    objectCount,
4381     const VkObjectEntryTypeNVX*                 pObjectEntryTypes,
4382     const uint32_t*                             pObjectIndices);
4383
4384 VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
4385     VkPhysicalDevice                            physicalDevice,
4386     VkDeviceGeneratedCommandsFeaturesNVX*       pFeatures,
4387     VkDeviceGeneratedCommandsLimitsNVX*         pLimits);
4388 #endif
4389
4390 #ifdef __cplusplus
4391 }
4392 #endif
4393
4394 #endif