diff --git a/include/vk.h b/include/vk.h
new file mode 100644
index 0000000..b78a56c
--- /dev/null
+++ b/include/vk.h
@@ -0,0 +1,3135 @@
+//
+// File: vulkan.h
+//
+/*
+** Copyright (c) 2014 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#ifndef __VULKAN_H__
+#define __VULKAN_H__
+
+#define VK_MAKE_VERSION(major, minor, patch) \
+    ((major << 22) | (minor << 12) | patch)
+
+#include "vkPlatform.h"
+
+// VK API version supported by this file
+#define VK_API_VERSION VK_MAKE_VERSION(0, 67, 0)
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+/*
+***************************************************************************************************
+*   Core VK API
+***************************************************************************************************
+*/
+
+#ifdef __cplusplus
+    #define VK_DEFINE_HANDLE(_obj) struct _obj##_T {char _dummy;}; typedef _obj##_T* _obj;
+    #define VK_DEFINE_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
+#else // __cplusplus
+    #define VK_DEFINE_HANDLE(_obj) typedef void* _obj;
+    #define VK_DEFINE_SUBCLASS_HANDLE(_obj, _base) typedef void* _obj;
+#endif // __cplusplus
+
+VK_DEFINE_HANDLE(VK_INSTANCE)
+VK_DEFINE_HANDLE(VK_PHYSICAL_GPU)
+VK_DEFINE_HANDLE(VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DEVICE, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_QUEUE, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_GPU_MEMORY, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_OBJECT, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_BUFFER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_BUFFER_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_IMAGE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_IMAGE_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_COLOR_ATTACHMENT_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DEPTH_STENCIL_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_SHADER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_PIPELINE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_SAMPLER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_SET, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_SET_LAYOUT, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_SET_LAYOUT_CHAIN, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_POOL, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_STATE_OBJECT, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_VP_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_RS_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_CB_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_DS_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_CMD_BUFFER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_FENCE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_SEMAPHORE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_EVENT, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_QUERY_POOL, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_FRAMEBUFFER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_RENDER_PASS, VK_OBJECT)
+
+#define VK_MAX_PHYSICAL_GPUS       16
+#define VK_MAX_PHYSICAL_GPU_NAME   256
+
+#define VK_LOD_CLAMP_NONE       MAX_FLOAT
+#define VK_LAST_MIP_OR_SLICE    0xffffffff
+
+#define VK_TRUE  1
+#define VK_FALSE 0
+
+#define VK_NULL_HANDLE 0
+
+// This macro defines INT_MAX in enumerations to force compilers to use 32 bits
+// to represent them. This may or may not be necessary on some compilers. The
+// option to compile it out may allow compilers that warn about missing enumerants
+// in switch statements to be silenced.
+#define VK_MAX_ENUM(T) T##_MAX_ENUM = 0x7FFFFFFF
+
+// ------------------------------------------------------------------------------------------------
+// Enumerations
+
+
+typedef enum _VK_MEMORY_PRIORITY
+{
+    VK_MEMORY_PRIORITY_UNUSED                              = 0x0,
+    VK_MEMORY_PRIORITY_VERY_LOW                            = 0x1,
+    VK_MEMORY_PRIORITY_LOW                                 = 0x2,
+    VK_MEMORY_PRIORITY_NORMAL                              = 0x3,
+    VK_MEMORY_PRIORITY_HIGH                                = 0x4,
+    VK_MEMORY_PRIORITY_VERY_HIGH                           = 0x5,
+
+    VK_MEMORY_PRIORITY_BEGIN_RANGE                         = VK_MEMORY_PRIORITY_UNUSED,
+    VK_MEMORY_PRIORITY_END_RANGE                           = VK_MEMORY_PRIORITY_VERY_HIGH,
+    VK_NUM_MEMORY_PRIORITY                                 = (VK_MEMORY_PRIORITY_END_RANGE - VK_MEMORY_PRIORITY_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_MEMORY_PRIORITY)
+} VK_MEMORY_PRIORITY;
+
+typedef enum _VK_IMAGE_LAYOUT
+{
+    VK_IMAGE_LAYOUT_UNDEFINED                              = 0x00000000,   // Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
+    VK_IMAGE_LAYOUT_GENERAL                                = 0x00000001,   // General layout when image can be used for any kind of access
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL               = 0x00000002,   // Optimal layout when image is only used for color attachment read/write
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL       = 0x00000003,   // Optimal layout when image is only used for depth/stencil attachment read/write
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL        = 0x00000004,   // Optimal layout when image is used for read only depth/stencil attachment and shader access
+    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL               = 0x00000005,   // Optimal layout when image is used for read only shader access
+    VK_IMAGE_LAYOUT_CLEAR_OPTIMAL                          = 0x00000006,   // Optimal layout when image is used only for clear operations
+    VK_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL                = 0x00000007,   // Optimal layout when image is used only as source of transfer operations
+    VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL           = 0x00000008,   // Optimal layout when image is used only as destination of transfer operations
+
+    VK_IMAGE_LAYOUT_BEGIN_RANGE                            = VK_IMAGE_LAYOUT_UNDEFINED,
+    VK_IMAGE_LAYOUT_END_RANGE                              = VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL,
+    VK_NUM_IMAGE_LAYOUT                                    = (VK_IMAGE_LAYOUT_END_RANGE - VK_IMAGE_LAYOUT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_LAYOUT)
+} VK_IMAGE_LAYOUT;
+
+typedef enum _VK_PIPE_EVENT
+{
+    VK_PIPE_EVENT_TOP_OF_PIPE                              = 0x00000001,   // Set event before the GPU starts processing subsequent command
+    VK_PIPE_EVENT_VERTEX_PROCESSING_COMPLETE               = 0x00000002,   // Set event when all pending vertex processing is complete
+    VK_PIPE_EVENT_LOCAL_FRAGMENT_PROCESSING_COMPLETE       = 0x00000003,   // Set event when all pending fragment shader executions are complete, within each fragment location
+    VK_PIPE_EVENT_FRAGMENT_PROCESSING_COMPLETE             = 0x00000004,   // Set event when all pending fragment shader executions are complete
+    VK_PIPE_EVENT_GRAPHICS_PIPELINE_COMPLETE               = 0x00000005,   // Set event when all pending graphics operations are complete
+    VK_PIPE_EVENT_COMPUTE_PIPELINE_COMPLETE                = 0x00000006,   // Set event when all pending compute operations are complete
+    VK_PIPE_EVENT_TRANSFER_COMPLETE                        = 0x00000007,   // Set event when all pending transfer operations are complete
+    VK_PIPE_EVENT_GPU_COMMANDS_COMPLETE                    = 0x00000008,   // Set event when all pending GPU work is complete
+
+    VK_PIPE_EVENT_BEGIN_RANGE                              = VK_PIPE_EVENT_TOP_OF_PIPE,
+    VK_PIPE_EVENT_END_RANGE                                = VK_PIPE_EVENT_GPU_COMMANDS_COMPLETE,
+    VK_NUM_PIPE_EVENT                                      = (VK_PIPE_EVENT_END_RANGE - VK_PIPE_EVENT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PIPE_EVENT)
+} VK_PIPE_EVENT;
+
+typedef enum _VK_WAIT_EVENT
+{
+    VK_WAIT_EVENT_TOP_OF_PIPE                              = 0x00000001,   // Wait event before the GPU starts processing subsequent commands
+    VK_WAIT_EVENT_BEFORE_RASTERIZATION                     = 0x00000002,   // Wait event before rasterizing subsequent primitives
+
+    VK_WAIT_EVENT_BEGIN_RANGE                              = VK_WAIT_EVENT_TOP_OF_PIPE,
+    VK_WAIT_EVENT_END_RANGE                                = VK_WAIT_EVENT_BEFORE_RASTERIZATION,
+    VK_NUM_WAIT_EVENT                                      = (VK_WAIT_EVENT_END_RANGE - VK_WAIT_EVENT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_WAIT_EVENT)
+} VK_WAIT_EVENT;
+
+typedef enum _VK_MEMORY_OUTPUT_FLAGS
+{
+    VK_MEMORY_OUTPUT_CPU_WRITE_BIT                         = 0x00000001,   // Controls output coherency of CPU writes
+    VK_MEMORY_OUTPUT_SHADER_WRITE_BIT                      = 0x00000002,   // Controls output coherency of generic shader writes
+    VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT                  = 0x00000004,   // Controls output coherency of color attachment writes
+    VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT          = 0x00000008,   // Controls output coherency of depth/stencil attachment writes
+    VK_MEMORY_OUTPUT_COPY_BIT                              = 0x00000010,   // Controls output coherency of copy operations
+    VK_MAX_ENUM(_VK_MEMORY_OUTPUT_FLAGS)
+} VK_MEMORY_OUTPUT_FLAGS;
+
+typedef enum _VK_MEMORY_INPUT_FLAGS
+{
+    VK_MEMORY_INPUT_CPU_READ_BIT                           = 0x00000001,   // Controls input coherency of CPU reads
+    VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT                   = 0x00000002,   // Controls input coherency of indirect command reads
+    VK_MEMORY_INPUT_INDEX_FETCH_BIT                        = 0x00000004,   // Controls input coherency of index fetches
+    VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT             = 0x00000008,   // Controls input coherency of vertex attribute fetches
+    VK_MEMORY_INPUT_UNIFORM_READ_BIT                       = 0x00000010,   // Controls input coherency of uniform buffer reads
+    VK_MEMORY_INPUT_SHADER_READ_BIT                        = 0x00000020,   // Controls input coherency of generic shader reads
+    VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT                   = 0x00000040,   // Controls input coherency of color attachment reads
+    VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT           = 0x00000080,   // Controls input coherency of depth/stencil attachment reads
+    VK_MEMORY_INPUT_COPY_BIT                               = 0x00000100,   // Controls input coherency of copy operations
+    VK_MAX_ENUM(_VK_MEMORY_INPUT_FLAGS)
+} VK_MEMORY_INPUT_FLAGS;
+
+typedef enum _VK_ATTACHMENT_LOAD_OP
+{
+    VK_ATTACHMENT_LOAD_OP_LOAD                             = 0x00000000,
+    VK_ATTACHMENT_LOAD_OP_CLEAR                            = 0x00000001,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE                        = 0x00000002,
+
+    VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE                      = VK_ATTACHMENT_LOAD_OP_LOAD,
+    VK_ATTACHMENT_LOAD_OP_END_RANGE                        = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_NUM_ATTACHMENT_LOAD_OP                              = (VK_ATTACHMENT_LOAD_OP_END_RANGE - VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_ATTACHMENT_LOAD_OP)
+} VK_ATTACHMENT_LOAD_OP;
+
+typedef enum _VK_ATTACHMENT_STORE_OP
+{
+    VK_ATTACHMENT_STORE_OP_STORE                           = 0x00000000,
+    VK_ATTACHMENT_STORE_OP_RESOLVE_MSAA                    = 0x00000001,
+    VK_ATTACHMENT_STORE_OP_DONT_CARE                       = 0x00000002,
+
+    VK_ATTACHMENT_STORE_OP_BEGIN_RANGE                     = VK_ATTACHMENT_STORE_OP_STORE,
+    VK_ATTACHMENT_STORE_OP_END_RANGE                       = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    VK_NUM_ATTACHMENT_STORE_OP                             = (VK_ATTACHMENT_STORE_OP_END_RANGE - VK_ATTACHMENT_STORE_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_ATTACHMENT_STORE_OP)
+} VK_ATTACHMENT_STORE_OP;
+
+typedef enum _VK_IMAGE_TYPE
+{
+    VK_IMAGE_1D                                            = 0x00000000,
+    VK_IMAGE_2D                                            = 0x00000001,
+    VK_IMAGE_3D                                            = 0x00000002,
+
+    VK_IMAGE_TYPE_BEGIN_RANGE                              = VK_IMAGE_1D,
+    VK_IMAGE_TYPE_END_RANGE                                = VK_IMAGE_3D,
+    VK_NUM_IMAGE_TYPE                                      = (VK_IMAGE_TYPE_END_RANGE - VK_IMAGE_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_TYPE)
+} VK_IMAGE_TYPE;
+
+typedef enum _VK_IMAGE_TILING
+{
+    VK_LINEAR_TILING                                       = 0x00000000,
+    VK_OPTIMAL_TILING                                      = 0x00000001,
+
+    VK_IMAGE_TILING_BEGIN_RANGE                            = VK_LINEAR_TILING,
+    VK_IMAGE_TILING_END_RANGE                              = VK_OPTIMAL_TILING,
+    VK_NUM_IMAGE_TILING                                    = (VK_IMAGE_TILING_END_RANGE - VK_IMAGE_TILING_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_TILING)
+} VK_IMAGE_TILING;
+
+typedef enum _VK_IMAGE_VIEW_TYPE
+{
+    VK_IMAGE_VIEW_1D                                       = 0x00000000,
+    VK_IMAGE_VIEW_2D                                       = 0x00000001,
+    VK_IMAGE_VIEW_3D                                       = 0x00000002,
+    VK_IMAGE_VIEW_CUBE                                     = 0x00000003,
+
+    VK_IMAGE_VIEW_TYPE_BEGIN_RANGE                         = VK_IMAGE_VIEW_1D,
+    VK_IMAGE_VIEW_TYPE_END_RANGE                           = VK_IMAGE_VIEW_CUBE,
+    VK_NUM_IMAGE_VIEW_TYPE                                 = (VK_IMAGE_VIEW_TYPE_END_RANGE - VK_IMAGE_VIEW_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_VIEW_TYPE)
+} VK_IMAGE_VIEW_TYPE;
+
+typedef enum _VK_IMAGE_ASPECT
+{
+    VK_IMAGE_ASPECT_COLOR                                  = 0x00000000,
+    VK_IMAGE_ASPECT_DEPTH                                  = 0x00000001,
+    VK_IMAGE_ASPECT_STENCIL                                = 0x00000002,
+
+    VK_IMAGE_ASPECT_BEGIN_RANGE                            = VK_IMAGE_ASPECT_COLOR,
+    VK_IMAGE_ASPECT_END_RANGE                              = VK_IMAGE_ASPECT_STENCIL,
+    VK_NUM_IMAGE_ASPECT                                    = (VK_IMAGE_ASPECT_END_RANGE - VK_IMAGE_ASPECT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_ASPECT)
+} VK_IMAGE_ASPECT;
+
+typedef enum _VK_CHANNEL_SWIZZLE
+{
+    VK_CHANNEL_SWIZZLE_ZERO                                = 0x00000000,
+    VK_CHANNEL_SWIZZLE_ONE                                 = 0x00000001,
+    VK_CHANNEL_SWIZZLE_R                                   = 0x00000002,
+    VK_CHANNEL_SWIZZLE_G                                   = 0x00000003,
+    VK_CHANNEL_SWIZZLE_B                                   = 0x00000004,
+    VK_CHANNEL_SWIZZLE_A                                   = 0x00000005,
+
+    VK_CHANNEL_SWIZZLE_BEGIN_RANGE                         = VK_CHANNEL_SWIZZLE_ZERO,
+    VK_CHANNEL_SWIZZLE_END_RANGE                           = VK_CHANNEL_SWIZZLE_A,
+    VK_NUM_CHANNEL_SWIZZLE                                 = (VK_CHANNEL_SWIZZLE_END_RANGE - VK_CHANNEL_SWIZZLE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_CHANNEL_SWIZZLE)
+} VK_CHANNEL_SWIZZLE;
+
+typedef enum _VK_DESCRIPTOR_TYPE
+{
+    VK_DESCRIPTOR_TYPE_SAMPLER                             = 0x00000000,
+    VK_DESCRIPTOR_TYPE_SAMPLER_TEXTURE                     = 0x00000001,
+    VK_DESCRIPTOR_TYPE_TEXTURE                             = 0x00000002,
+    VK_DESCRIPTOR_TYPE_TEXTURE_BUFFER                      = 0x00000003,
+    VK_DESCRIPTOR_TYPE_IMAGE                               = 0x00000004,
+    VK_DESCRIPTOR_TYPE_IMAGE_BUFFER                        = 0x00000005,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER                      = 0x00000006,
+    VK_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER               = 0x00000007,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC              = 0x00000008,
+    VK_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER_DYNAMIC       = 0x00000009,
+
+    VK_DESCRIPTOR_TYPE_BEGIN_RANGE                         = VK_DESCRIPTOR_TYPE_SAMPLER,
+    VK_DESCRIPTOR_TYPE_END_RANGE                           = VK_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER_DYNAMIC,
+    VK_NUM_DESCRIPTOR_TYPE                                 = (VK_DESCRIPTOR_TYPE_END_RANGE - VK_DESCRIPTOR_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_TYPE)
+} VK_DESCRIPTOR_TYPE;
+
+typedef enum _VK_DESCRIPTOR_POOL_USAGE
+{
+    VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT                      = 0x00000000,
+    VK_DESCRIPTOR_POOL_USAGE_DYNAMIC                       = 0x00000001,
+
+    VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE                   = VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT,
+    VK_DESCRIPTOR_POOL_USAGE_END_RANGE                     = VK_DESCRIPTOR_POOL_USAGE_DYNAMIC,
+    VK_NUM_DESCRIPTOR_POOL_USAGE                           = (VK_DESCRIPTOR_POOL_USAGE_END_RANGE - VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_POOL_USAGE)
+} VK_DESCRIPTOR_POOL_USAGE;
+
+typedef enum _VK_DESCRIPTOR_UPDATE_MODE
+{
+    VK_DESCRIPTOR_UDPATE_MODE_COPY                         = 0x00000000,
+    VK_DESCRIPTOR_UPDATE_MODE_FASTEST                      = 0x00000001,
+
+    VK_DESCRIPTOR_UPDATE_MODE_BEGIN_RANGE                  = VK_DESCRIPTOR_UDPATE_MODE_COPY,
+    VK_DESCRIPTOR_UPDATE_MODE_END_RANGE                    = VK_DESCRIPTOR_UPDATE_MODE_FASTEST,
+    VK_NUM_DESCRIPTOR_UPDATE_MODE                          = (VK_DESCRIPTOR_UPDATE_MODE_END_RANGE - VK_DESCRIPTOR_UPDATE_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_UPDATE_MODE)
+} VK_DESCRIPTOR_UPDATE_MODE;
+
+typedef enum _VK_DESCRIPTOR_SET_USAGE
+{
+    VK_DESCRIPTOR_SET_USAGE_ONE_SHOT                       = 0x00000000,
+    VK_DESCRIPTOR_SET_USAGE_STATIC                         = 0x00000001,
+
+    VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE                    = VK_DESCRIPTOR_SET_USAGE_ONE_SHOT,
+    VK_DESCRIPTOR_SET_USAGE_END_RANGE                      = VK_DESCRIPTOR_SET_USAGE_STATIC,
+    VK_NUM_DESCRIPTOR_SET_USAGE                            = (VK_DESCRIPTOR_SET_USAGE_END_RANGE - VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_SET_USAGE)
+} VK_DESCRIPTOR_SET_USAGE;
+
+typedef enum _VK_QUERY_TYPE
+{
+    VK_QUERY_OCCLUSION                                     = 0x00000000,
+    VK_QUERY_PIPELINE_STATISTICS                           = 0x00000001,
+
+    VK_QUERY_TYPE_BEGIN_RANGE                              = VK_QUERY_OCCLUSION,
+    VK_QUERY_TYPE_END_RANGE                                = VK_QUERY_PIPELINE_STATISTICS,
+    VK_NUM_QUERY_TYPE                                      = (VK_QUERY_TYPE_END_RANGE - VK_QUERY_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_QUERY_TYPE)
+} VK_QUERY_TYPE;
+
+typedef enum _VK_TIMESTAMP_TYPE
+{
+    VK_TIMESTAMP_TOP                                       = 0x00000000,
+    VK_TIMESTAMP_BOTTOM                                    = 0x00000001,
+
+    VK_TIMESTAMP_TYPE_BEGIN_RANGE                          = VK_TIMESTAMP_TOP,
+    VK_TIMESTAMP_TYPE_END_RANGE                            = VK_TIMESTAMP_BOTTOM,
+    VK_NUM_TIMESTAMP_TYPE                                  = (VK_TIMESTAMP_TYPE_END_RANGE - VK_TIMESTAMP_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TIMESTEAMP_TYPE)
+} VK_TIMESTAMP_TYPE;
+
+typedef enum _VK_BORDER_COLOR_TYPE
+{
+    VK_BORDER_COLOR_OPAQUE_WHITE                           = 0x00000000,
+    VK_BORDER_COLOR_TRANSPARENT_BLACK                      = 0x00000001,
+    VK_BORDER_COLOR_OPAQUE_BLACK                           = 0x00000002,
+
+    VK_BORDER_COLOR_TYPE_BEGIN_RANGE                       = VK_BORDER_COLOR_OPAQUE_WHITE,
+    VK_BORDER_COLOR_TYPE_END_RANGE                         = VK_BORDER_COLOR_OPAQUE_BLACK,
+    VK_NUM_BORDER_COLOR_TYPE                               = (VK_BORDER_COLOR_TYPE_END_RANGE - VK_BORDER_COLOR_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BORDER_COLOR_TYPE)
+} VK_BORDER_COLOR_TYPE;
+
+typedef enum _VK_PIPELINE_BIND_POINT
+{
+    VK_PIPELINE_BIND_POINT_COMPUTE                         = 0x00000000,
+    VK_PIPELINE_BIND_POINT_GRAPHICS                        = 0x00000001,
+
+    VK_PIPELINE_BIND_POINT_BEGIN_RANGE                     = VK_PIPELINE_BIND_POINT_COMPUTE,
+    VK_PIPELINE_BIND_POINT_END_RANGE                       = VK_PIPELINE_BIND_POINT_GRAPHICS,
+    VK_NUM_PIPELINE_BIND_POINT                             = (VK_PIPELINE_BIND_POINT_END_RANGE - VK_PIPELINE_BIND_POINT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PIPELINE_BIND_POINT)
+} VK_PIPELINE_BIND_POINT;
+
+typedef enum _VK_STATE_BIND_POINT
+{
+    VK_STATE_BIND_VIEWPORT                                 = 0x00000000,
+    VK_STATE_BIND_RASTER                                   = 0x00000001,
+    VK_STATE_BIND_COLOR_BLEND                              = 0x00000002,
+    VK_STATE_BIND_DEPTH_STENCIL                            = 0x00000003,
+
+    VK_STATE_BIND_POINT_BEGIN_RANGE                        = VK_STATE_BIND_VIEWPORT,
+    VK_STATE_BIND_POINT_END_RANGE                          = VK_STATE_BIND_DEPTH_STENCIL,
+    VK_NUM_STATE_BIND_POINT                                = (VK_STATE_BIND_POINT_END_RANGE - VK_STATE_BIND_POINT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_STATE_BIND_POINT)
+} VK_STATE_BIND_POINT;
+
+typedef enum _VK_PRIMITIVE_TOPOLOGY
+{
+    VK_TOPOLOGY_POINT_LIST                                 = 0x00000000,
+    VK_TOPOLOGY_LINE_LIST                                  = 0x00000001,
+    VK_TOPOLOGY_LINE_STRIP                                 = 0x00000002,
+    VK_TOPOLOGY_TRIANGLE_LIST                              = 0x00000003,
+    VK_TOPOLOGY_TRIANGLE_STRIP                             = 0x00000004,
+    VK_TOPOLOGY_TRIANGLE_FAN                               = 0x00000005,
+    VK_TOPOLOGY_LINE_LIST_ADJ                              = 0x00000006,
+    VK_TOPOLOGY_LINE_STRIP_ADJ                             = 0x00000007,
+    VK_TOPOLOGY_TRIANGLE_LIST_ADJ                          = 0x00000008,
+    VK_TOPOLOGY_TRIANGLE_STRIP_ADJ                         = 0x00000009,
+    VK_TOPOLOGY_PATCH                                      = 0x0000000a,
+
+    VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE                      = VK_TOPOLOGY_POINT_LIST,
+    VK_PRIMITIVE_TOPOLOGY_END_RANGE                        = VK_TOPOLOGY_PATCH,
+    VK_NUM_PRIMITIVE_TOPOLOGY                              = (VK_PRIMITIVE_TOPOLOGY_END_RANGE - VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PRIMITIVE_TOPOLOGY)
+} VK_PRIMITIVE_TOPOLOGY;
+
+typedef enum _VK_INDEX_TYPE
+{
+    VK_INDEX_8                                             = 0x00000000,
+    VK_INDEX_16                                            = 0x00000001,
+    VK_INDEX_32                                            = 0x00000002,
+
+    VK_INDEX_TYPE_BEGIN_RANGE                              = VK_INDEX_8,
+    VK_INDEX_TYPE_END_RANGE                                = VK_INDEX_32,
+    VK_NUM_INDEX_TYPE                                      = (VK_INDEX_TYPE_END_RANGE - VK_INDEX_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_INDEX_TYPE)
+} VK_INDEX_TYPE;
+
+typedef enum _VK_TEX_FILTER
+{
+    VK_TEX_FILTER_NEAREST                                  = 0,
+    VK_TEX_FILTER_LINEAR                                   = 1,
+
+    VK_TEX_FILTER_BEGIN_RANGE                              = VK_TEX_FILTER_NEAREST,
+    VK_TEX_FILTER_END_RANGE                                = VK_TEX_FILTER_LINEAR,
+    VK_NUM_TEX_FILTER                                      = (VK_TEX_FILTER_END_RANGE - VK_TEX_FILTER_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TEX_FILTER)
+} VK_TEX_FILTER;
+
+typedef enum _VK_TEX_MIPMAP_MODE
+{
+    VK_TEX_MIPMAP_BASE                                     = 0,        // Always choose base level
+    VK_TEX_MIPMAP_NEAREST                                  = 1,        // Choose nearest mip level
+    VK_TEX_MIPMAP_LINEAR                                   = 2,        // Linear filter between mip levels
+
+    VK_TEX_MIPMAP_BEGIN_RANGE                              = VK_TEX_MIPMAP_BASE,
+    VK_TEX_MIPMAP_END_RANGE                                = VK_TEX_MIPMAP_LINEAR,
+    VK_NUM_TEX_MIPMAP                                      = (VK_TEX_MIPMAP_END_RANGE - VK_TEX_MIPMAP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TEX_MIPMAP_MODE)
+} VK_TEX_MIPMAP_MODE;
+
+typedef enum _VK_TEX_ADDRESS
+{
+    VK_TEX_ADDRESS_WRAP                                    = 0x00000000,
+    VK_TEX_ADDRESS_MIRROR                                  = 0x00000001,
+    VK_TEX_ADDRESS_CLAMP                                   = 0x00000002,
+    VK_TEX_ADDRESS_MIRROR_ONCE                             = 0x00000003,
+    VK_TEX_ADDRESS_CLAMP_BORDER                            = 0x00000004,
+
+    VK_TEX_ADDRESS_BEGIN_RANGE                             = VK_TEX_ADDRESS_WRAP,
+    VK_TEX_ADDRESS_END_RANGE                               = VK_TEX_ADDRESS_CLAMP_BORDER,
+    VK_NUM_TEX_ADDRESS                                     = (VK_TEX_ADDRESS_END_RANGE - VK_TEX_ADDRESS_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TEX_ADDRESS)
+} VK_TEX_ADDRESS;
+
+typedef enum _VK_COMPARE_FUNC
+{
+    VK_COMPARE_NEVER                                       = 0x00000000,
+    VK_COMPARE_LESS                                        = 0x00000001,
+    VK_COMPARE_EQUAL                                       = 0x00000002,
+    VK_COMPARE_LESS_EQUAL                                  = 0x00000003,
+    VK_COMPARE_GREATER                                     = 0x00000004,
+    VK_COMPARE_NOT_EQUAL                                   = 0x00000005,
+    VK_COMPARE_GREATER_EQUAL                               = 0x00000006,
+    VK_COMPARE_ALWAYS                                      = 0x00000007,
+
+    VK_COMPARE_FUNC_BEGIN_RANGE                            = VK_COMPARE_NEVER,
+    VK_COMPARE_FUNC_END_RANGE                              = VK_COMPARE_ALWAYS,
+    VK_NUM_COMPARE_FUNC                                    = (VK_COMPARE_FUNC_END_RANGE - VK_COMPARE_FUNC_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_COMPARE_FUNC)
+} VK_COMPARE_FUNC;
+
+typedef enum _VK_FILL_MODE
+{
+    VK_FILL_POINTS                                         = 0x00000000,
+    VK_FILL_WIREFRAME                                      = 0x00000001,
+    VK_FILL_SOLID                                          = 0x00000002,
+
+    VK_FILL_MODE_BEGIN_RANGE                               = VK_FILL_POINTS,
+    VK_FILL_MODE_END_RANGE                                 = VK_FILL_SOLID,
+    VK_NUM_FILL_MODE                                       = (VK_FILL_MODE_END_RANGE - VK_FILL_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FILL_MODE)
+} VK_FILL_MODE;
+
+typedef enum _VK_CULL_MODE
+{
+    VK_CULL_NONE                                           = 0x00000000,
+    VK_CULL_FRONT                                          = 0x00000001,
+    VK_CULL_BACK                                           = 0x00000002,
+    VK_CULL_FRONT_AND_BACK                                 = 0x00000003,
+
+    VK_CULL_MODE_BEGIN_RANGE                               = VK_CULL_NONE,
+    VK_CULL_MODE_END_RANGE                                 = VK_CULL_FRONT_AND_BACK,
+    VK_NUM_CULL_MODE                                       = (VK_CULL_MODE_END_RANGE - VK_CULL_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_CULL_MODE)
+} VK_CULL_MODE;
+
+typedef enum _VK_FACE_ORIENTATION
+{
+    VK_FRONT_FACE_CCW                                      = 0x00000000,
+    VK_FRONT_FACE_CW                                       = 0x00000001,
+
+    VK_FACE_ORIENTATION_BEGIN_RANGE                        = VK_FRONT_FACE_CCW,
+    VK_FACE_ORIENTATION_END_RANGE                          = VK_FRONT_FACE_CW,
+    VK_NUM_FACE_ORIENTATION                                = (VK_FACE_ORIENTATION_END_RANGE - VK_FACE_ORIENTATION_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FACE_ORIENTATION)
+} VK_FACE_ORIENTATION;
+
+typedef enum _VK_PROVOKING_VERTEX_CONVENTION
+{
+    VK_PROVOKING_VERTEX_FIRST                              = 0x00000000,
+    VK_PROVOKING_VERTEX_LAST                               = 0x00000001,
+
+    VK_PROVOKING_VERTEX_BEGIN_RANGE                        = VK_PROVOKING_VERTEX_FIRST,
+    VK_PROVOKING_VERTEX_END_RANGE                          = VK_PROVOKING_VERTEX_LAST,
+    VK_NUM_PROVOKING_VERTEX_CONVENTION                     = (VK_PROVOKING_VERTEX_END_RANGE - VK_PROVOKING_VERTEX_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PROVOKING_VERTEX_CONVENTION)
+} VK_PROVOKING_VERTEX_CONVENTION;
+
+typedef enum _VK_COORDINATE_ORIGIN
+{
+    VK_COORDINATE_ORIGIN_UPPER_LEFT                        = 0x00000000,
+    VK_COORDINATE_ORIGIN_LOWER_LEFT                        = 0x00000001,
+
+    VK_COORDINATE_ORIGIN_BEGIN_RANGE                       = VK_COORDINATE_ORIGIN_UPPER_LEFT,
+    VK_COORDINATE_ORIGIN_END_RANGE                         = VK_COORDINATE_ORIGIN_LOWER_LEFT,
+    VK_NUM_COORDINATE_ORIGIN                               = (VK_COORDINATE_ORIGIN_END_RANGE - VK_COORDINATE_ORIGIN_END_RANGE + 1),
+    VK_MAX_ENUM(_VK_COORDINATE_ORIGIN)
+} VK_COORDINATE_ORIGIN;
+
+typedef enum _VK_DEPTH_MODE
+{
+    VK_DEPTH_MODE_ZERO_TO_ONE                              = 0x00000000,
+    VK_DEPTH_MODE_NEGATIVE_ONE_TO_ONE                      = 0x00000001,
+
+    VK_DEPTH_MODE_BEGIN_RANGE                              = VK_DEPTH_MODE_ZERO_TO_ONE,
+    VK_DEPTH_MODE_END_RANGE                                = VK_DEPTH_MODE_NEGATIVE_ONE_TO_ONE,
+    VK_NUM_DEPTH_MODE                                      = (VK_DEPTH_MODE_END_RANGE - VK_DEPTH_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DEPTH_MODE)
+} VK_DEPTH_MODE;
+
+typedef enum _VK_BLEND
+{
+    VK_BLEND_ZERO                                          = 0x00000000,
+    VK_BLEND_ONE                                           = 0x00000001,
+    VK_BLEND_SRC_COLOR                                     = 0x00000002,
+    VK_BLEND_ONE_MINUS_SRC_COLOR                           = 0x00000003,
+    VK_BLEND_DEST_COLOR                                    = 0x00000004,
+    VK_BLEND_ONE_MINUS_DEST_COLOR                          = 0x00000005,
+    VK_BLEND_SRC_ALPHA                                     = 0x00000006,
+    VK_BLEND_ONE_MINUS_SRC_ALPHA                           = 0x00000007,
+    VK_BLEND_DEST_ALPHA                                    = 0x00000008,
+    VK_BLEND_ONE_MINUS_DEST_ALPHA                          = 0x00000009,
+    VK_BLEND_CONSTANT_COLOR                                = 0x0000000a,
+    VK_BLEND_ONE_MINUS_CONSTANT_COLOR                      = 0x0000000b,
+    VK_BLEND_CONSTANT_ALPHA                                = 0x0000000c,
+    VK_BLEND_ONE_MINUS_CONSTANT_ALPHA                      = 0x0000000d,
+    VK_BLEND_SRC_ALPHA_SATURATE                            = 0x0000000e,
+    VK_BLEND_SRC1_COLOR                                    = 0x0000000f,
+    VK_BLEND_ONE_MINUS_SRC1_COLOR                          = 0x00000010,
+    VK_BLEND_SRC1_ALPHA                                    = 0x00000011,
+    VK_BLEND_ONE_MINUS_SRC1_ALPHA                          = 0x00000012,
+
+    VK_BLEND_BEGIN_RANGE                                   = VK_BLEND_ZERO,
+    VK_BLEND_END_RANGE                                     = VK_BLEND_ONE_MINUS_SRC1_ALPHA,
+    VK_NUM_BLEND                                           = (VK_BLEND_END_RANGE - VK_BLEND_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BLEND)
+} VK_BLEND;
+
+typedef enum _VK_BLEND_FUNC
+{
+    VK_BLEND_FUNC_ADD                                      = 0x00000000,
+    VK_BLEND_FUNC_SUBTRACT                                 = 0x00000001,
+    VK_BLEND_FUNC_REVERSE_SUBTRACT                         = 0x00000002,
+    VK_BLEND_FUNC_MIN                                      = 0x00000003,
+    VK_BLEND_FUNC_MAX                                      = 0x00000004,
+
+    VK_BLEND_FUNC_BEGIN_RANGE                              = VK_BLEND_FUNC_ADD,
+    VK_BLEND_FUNC_END_RANGE                                = VK_BLEND_FUNC_MAX,
+    VK_NUM_BLEND_FUNC                                      = (VK_BLEND_FUNC_END_RANGE - VK_BLEND_FUNC_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BLEND_FUNC)
+} VK_BLEND_FUNC;
+
+typedef enum _VK_STENCIL_OP
+{
+    VK_STENCIL_OP_KEEP                                     = 0x00000000,
+    VK_STENCIL_OP_ZERO                                     = 0x00000001,
+    VK_STENCIL_OP_REPLACE                                  = 0x00000002,
+    VK_STENCIL_OP_INC_CLAMP                                = 0x00000003,
+    VK_STENCIL_OP_DEC_CLAMP                                = 0x00000004,
+    VK_STENCIL_OP_INVERT                                   = 0x00000005,
+    VK_STENCIL_OP_INC_WRAP                                 = 0x00000006,
+    VK_STENCIL_OP_DEC_WRAP                                 = 0x00000007,
+
+    VK_STENCIL_OP_BEGIN_RANGE                              = VK_STENCIL_OP_KEEP,
+    VK_STENCIL_OP_END_RANGE                                = VK_STENCIL_OP_DEC_WRAP,
+    VK_NUM_STENCIL_OP                                      = (VK_STENCIL_OP_END_RANGE - VK_STENCIL_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_STENCIL_OP)
+} VK_STENCIL_OP;
+
+typedef enum _VK_LOGIC_OP
+{
+    VK_LOGIC_OP_COPY                                       = 0x00000000,
+    VK_LOGIC_OP_CLEAR                                      = 0x00000001,
+    VK_LOGIC_OP_AND                                        = 0x00000002,
+    VK_LOGIC_OP_AND_REVERSE                                = 0x00000003,
+    VK_LOGIC_OP_AND_INVERTED                               = 0x00000004,
+    VK_LOGIC_OP_NOOP                                       = 0x00000005,
+    VK_LOGIC_OP_XOR                                        = 0x00000006,
+    VK_LOGIC_OP_OR                                         = 0x00000007,
+    VK_LOGIC_OP_NOR                                        = 0x00000008,
+    VK_LOGIC_OP_EQUIV                                      = 0x00000009,
+    VK_LOGIC_OP_INVERT                                     = 0x0000000a,
+    VK_LOGIC_OP_OR_REVERSE                                 = 0x0000000b,
+    VK_LOGIC_OP_COPY_INVERTED                              = 0x0000000c,
+    VK_LOGIC_OP_OR_INVERTED                                = 0x0000000d,
+    VK_LOGIC_OP_NAND                                       = 0x0000000e,
+    VK_LOGIC_OP_SET                                        = 0x0000000f,
+
+    VK_LOGIC_OP_BEGIN_RANGE                                = VK_LOGIC_OP_COPY,
+    VK_LOGIC_OP_END_RANGE                                  = VK_LOGIC_OP_SET,
+    VK_NUM_LOGIC_OP                                        = (VK_LOGIC_OP_END_RANGE - VK_LOGIC_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_LOGIC_OP)
+} VK_LOGIC_OP;
+
+typedef enum _VK_SYSTEM_ALLOC_TYPE
+{
+    VK_SYSTEM_ALLOC_API_OBJECT                             = 0x00000000,
+    VK_SYSTEM_ALLOC_INTERNAL                               = 0x00000001,
+    VK_SYSTEM_ALLOC_INTERNAL_TEMP                          = 0x00000002,
+    VK_SYSTEM_ALLOC_INTERNAL_SHADER                        = 0x00000003,
+    VK_SYSTEM_ALLOC_DEBUG                                  = 0x00000004,
+
+    VK_SYSTEM_ALLOC_BEGIN_RANGE                            = VK_SYSTEM_ALLOC_API_OBJECT,
+    VK_SYSTEM_ALLOC_END_RANGE                              = VK_SYSTEM_ALLOC_DEBUG,
+    VK_NUM_SYSTEM_ALLOC_TYPE                               = (VK_SYSTEM_ALLOC_END_RANGE - VK_SYSTEM_ALLOC_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_SYSTEM_ALLOC_TYPE)
+} VK_SYSTEM_ALLOC_TYPE;
+
+typedef enum _VK_PHYSICAL_GPU_TYPE
+{
+    VK_GPU_TYPE_OTHER                                      = 0x00000000,
+    VK_GPU_TYPE_INTEGRATED                                 = 0x00000001,
+    VK_GPU_TYPE_DISCRETE                                   = 0x00000002,
+    VK_GPU_TYPE_VIRTUAL                                    = 0x00000003,
+
+    VK_PHYSICAL_GPU_TYPE_BEGIN_RANGE                       = VK_GPU_TYPE_OTHER,
+    VK_PHYSICAL_GPU_TYPE_END_RANGE                         = VK_GPU_TYPE_VIRTUAL,
+    VK_NUM_PHYSICAL_GPU_TYPE                               = (VK_PHYSICAL_GPU_TYPE_END_RANGE - VK_PHYSICAL_GPU_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PHYSICAL_GPU_TYPE)
+} VK_PHYSICAL_GPU_TYPE;
+
+typedef enum _VK_PHYSICAL_GPU_INFO_TYPE
+{
+    // Info type for vkGetGpuInfo()
+    VK_INFO_TYPE_PHYSICAL_GPU_PROPERTIES                   = 0x00000000,
+    VK_INFO_TYPE_PHYSICAL_GPU_PERFORMANCE                  = 0x00000001,
+    VK_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES             = 0x00000002,
+    VK_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES            = 0x00000003,
+
+    VK_INFO_TYPE_PHYSICAL_GPU_BEGIN_RANGE                  = VK_INFO_TYPE_PHYSICAL_GPU_PROPERTIES,
+    VK_INFO_TYPE_PHYSICAL_GPU_END_RANGE                    = VK_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES,
+    VK_NUM_INFO_TYPE_PHYSICAL_GPU                          = (VK_INFO_TYPE_PHYSICAL_GPU_END_RANGE - VK_INFO_TYPE_PHYSICAL_GPU_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PHYSICAL_GPU_INFO_TYPE)
+} VK_PHYSICAL_GPU_INFO_TYPE;
+
+typedef enum _VK_FORMAT_INFO_TYPE
+{
+    // Info type for vkGetFormatInfo()
+    VK_INFO_TYPE_FORMAT_PROPERTIES                         = 0x00000000,
+
+    VK_INFO_TYPE_FORMAT_BEGIN_RANGE                        = VK_INFO_TYPE_FORMAT_PROPERTIES,
+    VK_INFO_TYPE_FORMAT_END_RANGE                          = VK_INFO_TYPE_FORMAT_PROPERTIES,
+    VK_NUM_INFO_TYPE_FORMAT                                 = (VK_INFO_TYPE_FORMAT_END_RANGE - VK_INFO_TYPE_FORMAT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FORMAT_INFO_TYPE)
+} VK_FORMAT_INFO_TYPE;
+
+typedef enum _VK_SUBRESOURCE_INFO_TYPE
+{
+    // Info type for vkGetImageSubresourceInfo()
+    VK_INFO_TYPE_SUBRESOURCE_LAYOUT                        = 0x00000000,
+
+    VK_INFO_TYPE_SUBRESOURCE_BEGIN_RANGE                   = VK_INFO_TYPE_SUBRESOURCE_LAYOUT,
+    VK_INFO_TYPE_SUBRESOURCE_END_RANGE                     = VK_INFO_TYPE_SUBRESOURCE_LAYOUT,
+    VK_NUM_INFO_TYPE_SUBRESOURCE                           = (VK_INFO_TYPE_SUBRESOURCE_END_RANGE - VK_INFO_TYPE_SUBRESOURCE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_SUBRESOURCE_INFO_TYPE)
+} VK_SUBRESOURCE_INFO_TYPE;
+
+typedef enum _VK_OBJECT_INFO_TYPE
+{
+    // Info type for vkGetObjectInfo()
+    VK_INFO_TYPE_MEMORY_ALLOCATION_COUNT                   = 0x00000000,
+    VK_INFO_TYPE_MEMORY_REQUIREMENTS                       = 0x00000001,
+    VK_INFO_TYPE_BUFFER_MEMORY_REQUIREMENTS                = 0x00000002,
+    VK_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS                 = 0x00000003,
+
+    VK_INFO_TYPE_BEGIN_RANGE                               = VK_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
+    VK_INFO_TYPE_END_RANGE                                 = VK_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS,
+    VK_NUM_INFO_TYPE                                       = (VK_INFO_TYPE_END_RANGE - VK_INFO_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_OBJECT_INFO_TYPE)
+} VK_OBJECT_INFO_TYPE;
+
+typedef enum _VK_VALIDATION_LEVEL
+{
+    VK_VALIDATION_LEVEL_0                                  = 0x00000000,
+    VK_VALIDATION_LEVEL_1                                  = 0x00000001,
+    VK_VALIDATION_LEVEL_2                                  = 0x00000002,
+    VK_VALIDATION_LEVEL_3                                  = 0x00000003,
+    VK_VALIDATION_LEVEL_4                                  = 0x00000004,
+
+    VK_VALIDATION_LEVEL_BEGIN_RANGE                        = VK_VALIDATION_LEVEL_0,
+    VK_VALIDATION_LEVEL_END_RANGE                          = VK_VALIDATION_LEVEL_4,
+    VK_NUM_VALIDATION_LEVEL                                = (VK_VALIDATION_LEVEL_END_RANGE - VK_VALIDATION_LEVEL_BEGIN_RANGE + 1),
+
+    VK_MAX_ENUM(_VK_VALIDATION_LEVEL)
+} VK_VALIDATION_LEVEL;
+
+// ------------------------------------------------------------------------------------------------
+// Error and return codes
+
+typedef enum _VK_RESULT
+{
+    // Return codes for successful operation execution (>= 0)
+    VK_SUCCESS                                             = 0x0000000,
+    VK_UNSUPPORTED                                         = 0x0000001,
+    VK_NOT_READY                                           = 0x0000002,
+    VK_TIMEOUT                                             = 0x0000003,
+    VK_EVENT_SET                                           = 0x0000004,
+    VK_EVENT_RESET                                         = 0x0000005,
+
+    // Error codes (negative values)
+    VK_ERROR_UNKNOWN                                       = -(0x00000001),
+    VK_ERROR_UNAVAILABLE                                   = -(0x00000002),
+    VK_ERROR_INITIALIZATION_FAILED                         = -(0x00000003),
+    VK_ERROR_OUT_OF_MEMORY                                 = -(0x00000004),
+    VK_ERROR_OUT_OF_GPU_MEMORY                             = -(0x00000005),
+    VK_ERROR_DEVICE_ALREADY_CREATED                        = -(0x00000006),
+    VK_ERROR_DEVICE_LOST                                   = -(0x00000007),
+    VK_ERROR_INVALID_POINTER                               = -(0x00000008),
+    VK_ERROR_INVALID_VALUE                                 = -(0x00000009),
+    VK_ERROR_INVALID_HANDLE                                = -(0x0000000A),
+    VK_ERROR_INVALID_ORDINAL                               = -(0x0000000B),
+    VK_ERROR_INVALID_MEMORY_SIZE                           = -(0x0000000C),
+    VK_ERROR_INVALID_EXTENSION                             = -(0x0000000D),
+    VK_ERROR_INVALID_FLAGS                                 = -(0x0000000E),
+    VK_ERROR_INVALID_ALIGNMENT                             = -(0x0000000F),
+    VK_ERROR_INVALID_FORMAT                                = -(0x00000010),
+    VK_ERROR_INVALID_IMAGE                                 = -(0x00000011),
+    VK_ERROR_INVALID_DESCRIPTOR_SET_DATA                   = -(0x00000012),
+    VK_ERROR_INVALID_QUEUE_TYPE                            = -(0x00000013),
+    VK_ERROR_INVALID_OBJECT_TYPE                           = -(0x00000014),
+    VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION                 = -(0x00000015),
+    VK_ERROR_BAD_SHADER_CODE                               = -(0x00000016),
+    VK_ERROR_BAD_PIPELINE_DATA                             = -(0x00000017),
+    VK_ERROR_TOO_MANY_MEMORY_REFERENCES                    = -(0x00000018),
+    VK_ERROR_NOT_MAPPABLE                                  = -(0x00000019),
+    VK_ERROR_MEMORY_MAP_FAILED                             = -(0x0000001A),
+    VK_ERROR_MEMORY_UNMAP_FAILED                           = -(0x0000001B),
+    VK_ERROR_INCOMPATIBLE_DEVICE                           = -(0x0000001C),
+    VK_ERROR_INCOMPATIBLE_DRIVER                           = -(0x0000001D),
+    VK_ERROR_INCOMPLETE_COMMAND_BUFFER                     = -(0x0000001E),
+    VK_ERROR_BUILDING_COMMAND_BUFFER                       = -(0x0000001F),
+    VK_ERROR_MEMORY_NOT_BOUND                              = -(0x00000020),
+    VK_ERROR_INCOMPATIBLE_QUEUE                            = -(0x00000021),
+    VK_ERROR_NOT_SHAREABLE                                 = -(0x00000022),
+    VK_MAX_ENUM(_VK_RESULT_CODE)
+} VK_RESULT;
+
+// ------------------------------------------------------------------------------------------------
+// VK format definitions
+
+typedef enum _VK_VERTEX_INPUT_STEP_RATE
+{
+    VK_VERTEX_INPUT_STEP_RATE_VERTEX                       = 0x0,
+    VK_VERTEX_INPUT_STEP_RATE_INSTANCE                     = 0x1,
+    VK_VERTEX_INPUT_STEP_RATE_DRAW                         = 0x2,  //Optional
+
+    VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE                  = VK_VERTEX_INPUT_STEP_RATE_VERTEX,
+    VK_VERTEX_INPUT_STEP_RATE_END_RANGE                    = VK_VERTEX_INPUT_STEP_RATE_DRAW,
+    VK_NUM_VERTEX_INPUT_STEP_RATE                          = (VK_VERTEX_INPUT_STEP_RATE_END_RANGE - VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_VERTEX_INPUT_STEP_RATE)
+} VK_VERTEX_INPUT_STEP_RATE;
+
+typedef enum _VK_FORMAT
+{
+    VK_FMT_UNDEFINED                                       = 0x00000000,
+    VK_FMT_R4G4_UNORM                                      = 0x00000001,
+    VK_FMT_R4G4_USCALED                                    = 0x00000002,
+    VK_FMT_R4G4B4A4_UNORM                                  = 0x00000003,
+    VK_FMT_R4G4B4A4_USCALED                                = 0x00000004,
+    VK_FMT_R5G6B5_UNORM                                    = 0x00000005,
+    VK_FMT_R5G6B5_USCALED                                  = 0x00000006,
+    VK_FMT_R5G5B5A1_UNORM                                  = 0x00000007,
+    VK_FMT_R5G5B5A1_USCALED                                = 0x00000008,
+    VK_FMT_R8_UNORM                                        = 0x00000009,
+    VK_FMT_R8_SNORM                                        = 0x0000000A,
+    VK_FMT_R8_USCALED                                      = 0x0000000B,
+    VK_FMT_R8_SSCALED                                      = 0x0000000C,
+    VK_FMT_R8_UINT                                         = 0x0000000D,
+    VK_FMT_R8_SINT                                         = 0x0000000E,
+    VK_FMT_R8_SRGB                                         = 0x0000000F,
+    VK_FMT_R8G8_UNORM                                      = 0x00000010,
+    VK_FMT_R8G8_SNORM                                      = 0x00000011,
+    VK_FMT_R8G8_USCALED                                    = 0x00000012,
+    VK_FMT_R8G8_SSCALED                                    = 0x00000013,
+    VK_FMT_R8G8_UINT                                       = 0x00000014,
+    VK_FMT_R8G8_SINT                                       = 0x00000015,
+    VK_FMT_R8G8_SRGB                                       = 0x00000016,
+    VK_FMT_R8G8B8_UNORM                                    = 0x00000017,
+    VK_FMT_R8G8B8_SNORM                                    = 0x00000018,
+    VK_FMT_R8G8B8_USCALED                                  = 0x00000019,
+    VK_FMT_R8G8B8_SSCALED                                  = 0x0000001A,
+    VK_FMT_R8G8B8_UINT                                     = 0x0000001B,
+    VK_FMT_R8G8B8_SINT                                     = 0x0000001C,
+    VK_FMT_R8G8B8_SRGB                                     = 0x0000001D,
+    VK_FMT_R8G8B8A8_UNORM                                  = 0x0000001E,
+    VK_FMT_R8G8B8A8_SNORM                                  = 0x0000001F,
+    VK_FMT_R8G8B8A8_USCALED                                = 0x00000020,
+    VK_FMT_R8G8B8A8_SSCALED                                = 0x00000021,
+    VK_FMT_R8G8B8A8_UINT                                   = 0x00000022,
+    VK_FMT_R8G8B8A8_SINT                                   = 0x00000023,
+    VK_FMT_R8G8B8A8_SRGB                                   = 0x00000024,
+    VK_FMT_R10G10B10A2_UNORM                               = 0x00000025,
+    VK_FMT_R10G10B10A2_SNORM                               = 0x00000026,
+    VK_FMT_R10G10B10A2_USCALED                             = 0x00000027,
+    VK_FMT_R10G10B10A2_SSCALED                             = 0x00000028,
+    VK_FMT_R10G10B10A2_UINT                                = 0x00000029,
+    VK_FMT_R10G10B10A2_SINT                                = 0x0000002A,
+    VK_FMT_R16_UNORM                                       = 0x0000002B,
+    VK_FMT_R16_SNORM                                       = 0x0000002C,
+    VK_FMT_R16_USCALED                                     = 0x0000002D,
+    VK_FMT_R16_SSCALED                                     = 0x0000002E,
+    VK_FMT_R16_UINT                                        = 0x0000002F,
+    VK_FMT_R16_SINT                                        = 0x00000030,
+    VK_FMT_R16_SFLOAT                                      = 0x00000031,
+    VK_FMT_R16G16_UNORM                                    = 0x00000032,
+    VK_FMT_R16G16_SNORM                                    = 0x00000033,
+    VK_FMT_R16G16_USCALED                                  = 0x00000034,
+    VK_FMT_R16G16_SSCALED                                  = 0x00000035,
+    VK_FMT_R16G16_UINT                                     = 0x00000036,
+    VK_FMT_R16G16_SINT                                     = 0x00000037,
+    VK_FMT_R16G16_SFLOAT                                   = 0x00000038,
+    VK_FMT_R16G16B16_UNORM                                 = 0x00000039,
+    VK_FMT_R16G16B16_SNORM                                 = 0x0000003A,
+    VK_FMT_R16G16B16_USCALED                               = 0x0000003B,
+    VK_FMT_R16G16B16_SSCALED                               = 0x0000003C,
+    VK_FMT_R16G16B16_UINT                                  = 0x0000003D,
+    VK_FMT_R16G16B16_SINT                                  = 0x0000003E,
+    VK_FMT_R16G16B16_SFLOAT                                = 0x0000003F,
+    VK_FMT_R16G16B16A16_UNORM                              = 0x00000040,
+    VK_FMT_R16G16B16A16_SNORM                              = 0x00000041,
+    VK_FMT_R16G16B16A16_USCALED                            = 0x00000042,
+    VK_FMT_R16G16B16A16_SSCALED                            = 0x00000043,
+    VK_FMT_R16G16B16A16_UINT                               = 0x00000044,
+    VK_FMT_R16G16B16A16_SINT                               = 0x00000045,
+    VK_FMT_R16G16B16A16_SFLOAT                             = 0x00000046,
+    VK_FMT_R32_UINT                                        = 0x00000047,
+    VK_FMT_R32_SINT                                        = 0x00000048,
+    VK_FMT_R32_SFLOAT                                      = 0x00000049,
+    VK_FMT_R32G32_UINT                                     = 0x0000004A,
+    VK_FMT_R32G32_SINT                                     = 0x0000004B,
+    VK_FMT_R32G32_SFLOAT                                   = 0x0000004C,
+    VK_FMT_R32G32B32_UINT                                  = 0x0000004D,
+    VK_FMT_R32G32B32_SINT                                  = 0x0000004E,
+    VK_FMT_R32G32B32_SFLOAT                                = 0x0000004F,
+    VK_FMT_R32G32B32A32_UINT                               = 0x00000050,
+    VK_FMT_R32G32B32A32_SINT                               = 0x00000051,
+    VK_FMT_R32G32B32A32_SFLOAT                             = 0x00000052,
+    VK_FMT_R64_SFLOAT                                      = 0x00000053,
+    VK_FMT_R64G64_SFLOAT                                   = 0x00000054,
+    VK_FMT_R64G64B64_SFLOAT                                = 0x00000055,
+    VK_FMT_R64G64B64A64_SFLOAT                             = 0x00000056,
+    VK_FMT_R11G11B10_UFLOAT                                = 0x00000057,
+    VK_FMT_R9G9B9E5_UFLOAT                                 = 0x00000058,
+    VK_FMT_D16_UNORM                                       = 0x00000059,
+    VK_FMT_D24_UNORM                                       = 0x0000005A,
+    VK_FMT_D32_SFLOAT                                      = 0x0000005B,
+    VK_FMT_S8_UINT                                         = 0x0000005C,
+    VK_FMT_D16_UNORM_S8_UINT                               = 0x0000005D,
+    VK_FMT_D24_UNORM_S8_UINT                               = 0x0000005E,
+    VK_FMT_D32_SFLOAT_S8_UINT                              = 0x0000005F,
+    VK_FMT_BC1_RGB_UNORM                                   = 0x00000060,
+    VK_FMT_BC1_RGB_SRGB                                    = 0x00000061,
+    VK_FMT_BC1_RGBA_UNORM                                  = 0x00000062,
+    VK_FMT_BC1_RGBA_SRGB                                   = 0x00000063,
+    VK_FMT_BC2_UNORM                                       = 0x00000064,
+    VK_FMT_BC2_SRGB                                        = 0x00000065,
+    VK_FMT_BC3_UNORM                                       = 0x00000066,
+    VK_FMT_BC3_SRGB                                        = 0x00000067,
+    VK_FMT_BC4_UNORM                                       = 0x00000068,
+    VK_FMT_BC4_SNORM                                       = 0x00000069,
+    VK_FMT_BC5_UNORM                                       = 0x0000006A,
+    VK_FMT_BC5_SNORM                                       = 0x0000006B,
+    VK_FMT_BC6H_UFLOAT                                     = 0x0000006C,
+    VK_FMT_BC6H_SFLOAT                                     = 0x0000006D,
+    VK_FMT_BC7_UNORM                                       = 0x0000006E,
+    VK_FMT_BC7_SRGB                                        = 0x0000006F,
+    VK_FMT_ETC2_R8G8B8_UNORM                               = 0x00000070,
+    VK_FMT_ETC2_R8G8B8_SRGB                                = 0x00000071,
+    VK_FMT_ETC2_R8G8B8A1_UNORM                             = 0x00000072,
+    VK_FMT_ETC2_R8G8B8A1_SRGB                              = 0x00000073,
+    VK_FMT_ETC2_R8G8B8A8_UNORM                             = 0x00000074,
+    VK_FMT_ETC2_R8G8B8A8_SRGB                              = 0x00000075,
+    VK_FMT_EAC_R11_UNORM                                   = 0x00000076,
+    VK_FMT_EAC_R11_SNORM                                   = 0x00000077,
+    VK_FMT_EAC_R11G11_UNORM                                = 0x00000078,
+    VK_FMT_EAC_R11G11_SNORM                                = 0x00000079,
+    VK_FMT_ASTC_4x4_UNORM                                  = 0x0000007A,
+    VK_FMT_ASTC_4x4_SRGB                                   = 0x0000007B,
+    VK_FMT_ASTC_5x4_UNORM                                  = 0x0000007C,
+    VK_FMT_ASTC_5x4_SRGB                                   = 0x0000007D,
+    VK_FMT_ASTC_5x5_UNORM                                  = 0x0000007E,
+    VK_FMT_ASTC_5x5_SRGB                                   = 0x0000007F,
+    VK_FMT_ASTC_6x5_UNORM                                  = 0x00000080,
+    VK_FMT_ASTC_6x5_SRGB                                   = 0x00000081,
+    VK_FMT_ASTC_6x6_UNORM                                  = 0x00000082,
+    VK_FMT_ASTC_6x6_SRGB                                   = 0x00000083,
+    VK_FMT_ASTC_8x5_UNORM                                  = 0x00000084,
+    VK_FMT_ASTC_8x5_SRGB                                   = 0x00000085,
+    VK_FMT_ASTC_8x6_UNORM                                  = 0x00000086,
+    VK_FMT_ASTC_8x6_SRGB                                   = 0x00000087,
+    VK_FMT_ASTC_8x8_UNORM                                  = 0x00000088,
+    VK_FMT_ASTC_8x8_SRGB                                   = 0x00000089,
+    VK_FMT_ASTC_10x5_UNORM                                 = 0x0000008A,
+    VK_FMT_ASTC_10x5_SRGB                                  = 0x0000008B,
+    VK_FMT_ASTC_10x6_UNORM                                 = 0x0000008C,
+    VK_FMT_ASTC_10x6_SRGB                                  = 0x0000008D,
+    VK_FMT_ASTC_10x8_UNORM                                 = 0x0000008E,
+    VK_FMT_ASTC_10x8_SRGB                                  = 0x0000008F,
+    VK_FMT_ASTC_10x10_UNORM                                = 0x00000090,
+    VK_FMT_ASTC_10x10_SRGB                                 = 0x00000091,
+    VK_FMT_ASTC_12x10_UNORM                                = 0x00000092,
+    VK_FMT_ASTC_12x10_SRGB                                 = 0x00000093,
+    VK_FMT_ASTC_12x12_UNORM                                = 0x00000094,
+    VK_FMT_ASTC_12x12_SRGB                                 = 0x00000095,
+    VK_FMT_B4G4R4A4_UNORM                                  = 0x00000096,
+    VK_FMT_B5G5R5A1_UNORM                                  = 0x00000097,
+    VK_FMT_B5G6R5_UNORM                                    = 0x00000098,
+    VK_FMT_B5G6R5_USCALED                                  = 0x00000099,
+    VK_FMT_B8G8R8_UNORM                                    = 0x0000009A,
+    VK_FMT_B8G8R8_SNORM                                    = 0x0000009B,
+    VK_FMT_B8G8R8_USCALED                                  = 0x0000009C,
+    VK_FMT_B8G8R8_SSCALED                                  = 0x0000009D,
+    VK_FMT_B8G8R8_UINT                                     = 0x0000009E,
+    VK_FMT_B8G8R8_SINT                                     = 0x0000009F,
+    VK_FMT_B8G8R8_SRGB                                     = 0x000000A0,
+    VK_FMT_B8G8R8A8_UNORM                                  = 0x000000A1,
+    VK_FMT_B8G8R8A8_SNORM                                  = 0x000000A2,
+    VK_FMT_B8G8R8A8_USCALED                                = 0x000000A3,
+    VK_FMT_B8G8R8A8_SSCALED                                = 0x000000A4,
+    VK_FMT_B8G8R8A8_UINT                                   = 0x000000A5,
+    VK_FMT_B8G8R8A8_SINT                                   = 0x000000A6,
+    VK_FMT_B8G8R8A8_SRGB                                   = 0x000000A7,
+    VK_FMT_B10G10R10A2_UNORM                               = 0x000000A8,
+    VK_FMT_B10G10R10A2_SNORM                               = 0x000000A9,
+    VK_FMT_B10G10R10A2_USCALED                             = 0x000000AA,
+    VK_FMT_B10G10R10A2_SSCALED                             = 0x000000AB,
+    VK_FMT_B10G10R10A2_UINT                                = 0x000000AC,
+    VK_FMT_B10G10R10A2_SINT                                = 0x000000AD,
+
+    VK_FMT_BEGIN_RANGE                                     = VK_FMT_UNDEFINED,
+    VK_FMT_END_RANGE                                       = VK_FMT_B10G10R10A2_SINT,
+    VK_NUM_FMT                                             = (VK_FMT_END_RANGE - VK_FMT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FORMAT)
+} VK_FORMAT;
+
+// Shader stage enumerant
+typedef enum _VK_PIPELINE_SHADER_STAGE
+{
+    VK_SHADER_STAGE_VERTEX                                 = 0,
+    VK_SHADER_STAGE_TESS_CONTROL                           = 1,
+    VK_SHADER_STAGE_TESS_EVALUATION                        = 2,
+    VK_SHADER_STAGE_GEOMETRY                               = 3,
+    VK_SHADER_STAGE_FRAGMENT                               = 4,
+    VK_SHADER_STAGE_COMPUTE                                = 5,
+
+    VK_SHADER_STAGE_BEGIN_RANGE                            = VK_SHADER_STAGE_VERTEX,
+    VK_SHADER_STAGE_END_RANGE                              = VK_SHADER_STAGE_COMPUTE,
+    VK_NUM_SHADER_STAGE                                    = (VK_SHADER_STAGE_END_RANGE - VK_SHADER_STAGE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PIPELINE_SHADER_STAGE)
+} VK_PIPELINE_SHADER_STAGE;
+
+typedef enum _VK_SHADER_STAGE_FLAGS
+{
+    VK_SHADER_STAGE_FLAGS_VERTEX_BIT                        = 0x00000001,
+    VK_SHADER_STAGE_FLAGS_TESS_CONTROL_BIT                  = 0x00000002,
+    VK_SHADER_STAGE_FLAGS_TESS_EVALUATION_BIT               = 0x00000004,
+    VK_SHADER_STAGE_FLAGS_GEOMETRY_BIT                      = 0x00000008,
+    VK_SHADER_STAGE_FLAGS_FRAGMENT_BIT                      = 0x00000010,
+    VK_SHADER_STAGE_FLAGS_COMPUTE_BIT                       = 0x00000020,
+
+    VK_SHADER_STAGE_FLAGS_ALL                               = 0x7FFFFFFF,
+    VK_MAX_ENUM(_VK_SHADER_STAGE_FLAGS)
+} VK_SHADER_STAGE_FLAGS;
+
+// Structure type enumerant
+typedef enum _VK_STRUCTURE_TYPE
+{
+    VK_STRUCTURE_TYPE_APPLICATION_INFO                     = 0,
+    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                   = 1,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                    = 2,
+    VK_STRUCTURE_TYPE_MEMORY_OPEN_INFO                     = 4,
+    VK_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO                = 5,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO              = 6,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO               = 7,
+    VK_STRUCTURE_TYPE_EVENT_WAIT_INFO                      = 8,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO               = 9,
+    VK_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO    = 10,
+    VK_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO       = 11,
+    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO                   = 12,
+    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO         = 13,
+    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                  = 14,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO    = 15,
+    VK_STRUCTURE_TYPE_DYNAMIC_VP_STATE_CREATE_INFO         = 16,
+    VK_STRUCTURE_TYPE_DYNAMIC_RS_STATE_CREATE_INFO         = 17,
+    VK_STRUCTURE_TYPE_DYNAMIC_CB_STATE_CREATE_INFO         = 18,
+    VK_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO         = 19,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO               = 20,
+    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                    = 21,
+    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                    = 22,
+    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                = 23,
+    VK_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO                  = 24,
+    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO               = 25,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO    = 26,
+    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO        = 27,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO    = 28,
+    VK_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO        = 29,
+    VK_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO      = 30,
+    VK_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO        = 31,
+    VK_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO        = 32,
+    VK_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO        = 33,
+    VK_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO        = 34,
+    VK_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO        = 35,
+    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                    = 36,
+    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                   = 37,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO              = 38,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO              = 39,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                = 40,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO       = 41,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO              = 42,
+    VK_STRUCTURE_TYPE_LAYER_CREATE_INFO                    = 43,
+    VK_STRUCTURE_TYPE_PIPELINE_BARRIER                     = 44,
+    VK_STRUCTURE_TYPE_MEMORY_BARRIER                       = 45,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                = 46,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                 = 47,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO          = 48,
+    VK_STRUCTURE_TYPE_UPDATE_SAMPLERS                      = 49,
+    VK_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES              = 50,
+    VK_STRUCTURE_TYPE_UPDATE_IMAGES                        = 51,
+    VK_STRUCTURE_TYPE_UPDATE_BUFFERS                       = 52,
+    VK_STRUCTURE_TYPE_UPDATE_AS_COPY                       = 53,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO             = 54,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO              = 55,
+    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                 = 56,
+    VK_STRUCTURE_TYPE_BEGIN_RANGE                          = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+    VK_STRUCTURE_TYPE_END_RANGE                            = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+    VK_NUM_STRUCTURE_TYPE                                  = (VK_STRUCTURE_TYPE_END_RANGE - VK_STRUCTURE_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_STRUCTURE_TYPE)
+} VK_STRUCTURE_TYPE;
+
+// ------------------------------------------------------------------------------------------------
+// Flags
+
+// Device creation flags
+typedef enum _VK_DEVICE_CREATE_FLAGS
+{
+    VK_DEVICE_CREATE_VALIDATION_BIT                        = 0x00000001,
+    VK_DEVICE_CREATE_MGPU_IQ_MATCH_BIT                     = 0x00000002,
+    VK_MAX_ENUM(_VK_DEVICE_CREATE_FLAGS)
+} VK_DEVICE_CREATE_FLAGS;
+
+// Queue capabilities
+typedef enum _VK_QUEUE_FLAGS
+{
+    VK_QUEUE_GRAPHICS_BIT                                  = 0x00000001,   // Queue supports graphics operations
+    VK_QUEUE_COMPUTE_BIT                                   = 0x00000002,   // Queue supports compute operations
+    VK_QUEUE_DMA_BIT                                       = 0x00000004,   // Queue supports DMA operations
+    VK_QUEUE_EXTENDED_BIT                                  = 0x40000000,   // Extended queue
+    VK_MAX_ENUM(_VK_QUEUE_FLAGS)
+} VK_QUEUE_FLAGS;
+
+// memory properties passed into vkAllocMemory().
+typedef enum _VK_MEMORY_PROPERTY_FLAGS
+{
+    VK_MEMORY_PROPERTY_GPU_ONLY                            = 0x00000000,   // If not set, then allocate memory on device (GPU)
+    VK_MEMORY_PROPERTY_CPU_VISIBLE_BIT                     = 0x00000001,
+    VK_MEMORY_PROPERTY_CPU_GPU_COHERENT_BIT                = 0x00000002,
+    VK_MEMORY_PROPERTY_CPU_UNCACHED_BIT                    = 0x00000004,
+    VK_MEMORY_PROPERTY_CPU_WRITE_COMBINED_BIT              = 0x00000008,
+    VK_MEMORY_PROPERTY_PREFER_CPU_LOCAL                    = 0x00000010,   // all else being equal, prefer CPU access
+    VK_MEMORY_PROPERTY_SHAREABLE_BIT                       = 0x00000020,
+    VK_MAX_ENUM(_VK_MEMORY_PROPERTY_FLAGS)
+} VK_MEMORY_PROPERTY_FLAGS;
+
+typedef enum _VK_MEMORY_TYPE
+{
+    VK_MEMORY_TYPE_OTHER                                   = 0x00000000,   // device memory that is not any of the others
+    VK_MEMORY_TYPE_BUFFER                                  = 0x00000001,   // memory for buffers and associated information
+    VK_MEMORY_TYPE_IMAGE                                   = 0x00000002,   // memory for images and associated information
+
+    VK_MEMORY_TYPE_BEGIN_RANGE                             = VK_MEMORY_TYPE_OTHER,
+    VK_MEMORY_TYPE_END_RANGE                               = VK_MEMORY_TYPE_IMAGE,
+    VK_NUM_MEMORY_TYPE                                     = (VK_MEMORY_TYPE_END_RANGE - VK_MEMORY_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_MEMORY_TYPE)
+} VK_MEMORY_TYPE;
+
+// Buffer and buffer allocation usage flags
+typedef enum _VK_BUFFER_USAGE_FLAGS
+{
+    VK_BUFFER_USAGE_GENERAL                                = 0x00000000,   // no special usage
+    VK_BUFFER_USAGE_SHADER_ACCESS_READ_BIT                 = 0x00000001,   // Shader read (e.g. TBO, image buffer, UBO, SSBO)
+    VK_BUFFER_USAGE_SHADER_ACCESS_WRITE_BIT                = 0x00000002,   // Shader write (e.g. image buffer, SSBO)
+    VK_BUFFER_USAGE_SHADER_ACCESS_ATOMIC_BIT               = 0x00000004,   // Shader atomic operations (e.g. image buffer, SSBO)
+    VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT                    = 0x00000008,   // used as a source for copies
+    VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT               = 0x00000010,   // used as a destination for copies
+    VK_BUFFER_USAGE_UNIFORM_READ_BIT                       = 0x00000020,   // Uniform read (UBO)
+    VK_BUFFER_USAGE_INDEX_FETCH_BIT                        = 0x00000040,   // Fixed function index fetch (index buffer)
+    VK_BUFFER_USAGE_VERTEX_FETCH_BIT                       = 0x00000080,   // Fixed function vertex fetch (VBO)
+    VK_BUFFER_USAGE_SHADER_STORAGE_BIT                     = 0x00000100,   // Shader storage buffer (SSBO)
+    VK_BUFFER_USAGE_INDIRECT_PARAMETER_FETCH_BIT           = 0x00000200,   // Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
+    VK_BUFFER_USAGE_TEXTURE_BUFFER_BIT                     = 0x00000400,   // texture buffer (TBO)
+    VK_BUFFER_USAGE_IMAGE_BUFFER_BIT                       = 0x00000800,   // image buffer (load/store)
+    VK_MAX_ENUM(_VK_BUFFER_USAGE_FLAGS)
+} VK_BUFFER_USAGE_FLAGS;
+
+// Buffer flags
+typedef enum _VK_BUFFER_CREATE_FLAGS
+{
+    VK_BUFFER_CREATE_SHAREABLE_BIT                         = 0x00000001,
+    VK_BUFFER_CREATE_SPARSE_BIT                            = 0x00000002,
+    VK_MAX_ENUM(_VK_BUFFER_CREATE_FLAGS)
+} VK_BUFFER_CREATE_FLAGS;
+
+typedef enum _VK_BUFFER_VIEW_TYPE
+{
+    VK_BUFFER_VIEW_RAW                                     = 0x00000000,   // Raw buffer without special structure (e.g. UBO, SSBO, indirect and parameter buffers)
+    VK_BUFFER_VIEW_TYPED                                   = 0x00000001,   // Typed buffer, format and channels are used (TBO, image buffer)
+
+    VK_BUFFER_VIEW_TYPE_BEGIN_RANGE                        = VK_BUFFER_VIEW_RAW,
+    VK_BUFFER_VIEW_TYPE_END_RANGE                          = VK_BUFFER_VIEW_TYPED,
+    VK_NUM_BUFFER_VIEW_TYPE                                = (VK_BUFFER_VIEW_TYPE_END_RANGE - VK_BUFFER_VIEW_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BUFFER_VIEW_TYPE)
+} VK_BUFFER_VIEW_TYPE;
+
+
+// Images memory allocations can be used for resources of a given format class.
+typedef enum _VK_IMAGE_FORMAT_CLASS
+{
+    VK_IMAGE_FORMAT_CLASS_128_BITS                         = 1,  // color formats
+    VK_IMAGE_FORMAT_CLASS_96_BITS                          = 2,
+    VK_IMAGE_FORMAT_CLASS_64_BITS                          = 3,
+    VK_IMAGE_FORMAT_CLASS_48_BITS                          = 4,
+    VK_IMAGE_FORMAT_CLASS_32_BITS                          = 5,
+    VK_IMAGE_FORMAT_CLASS_24_BITS                          = 6,
+    VK_IMAGE_FORMAT_CLASS_16_BITS                          = 7,
+    VK_IMAGE_FORMAT_CLASS_8_BITS                           = 8,
+    VK_IMAGE_FORMAT_CLASS_128_BIT_BLOCK                    = 9,  // 128-bit block compressed formats
+    VK_IMAGE_FORMAT_CLASS_64_BIT_BLOCK                     = 10, // 64-bit block compressed formats
+    VK_IMAGE_FORMAT_CLASS_D32                              = 11, // D32_SFLOAT
+    VK_IMAGE_FORMAT_CLASS_D24                              = 12, // D24_UNORM
+    VK_IMAGE_FORMAT_CLASS_D16                              = 13, // D16_UNORM
+    VK_IMAGE_FORMAT_CLASS_S8                               = 14, // S8_UINT
+    VK_IMAGE_FORMAT_CLASS_D32S8                            = 15, // D32_SFLOAT_S8_UINT
+    VK_IMAGE_FORMAT_CLASS_D24S8                            = 16, // D24_UNORM_S8_UINT
+    VK_IMAGE_FORMAT_CLASS_D16S8                            = 17, // D16_UNORM_S8_UINT
+    VK_IMAGE_FORMAT_CLASS_LINEAR                           = 18, // used for pitch-linear (transparent) textures
+
+    VK_IMAGE_FORMAT_CLASS_BEGIN_RANGE                      = VK_IMAGE_FORMAT_CLASS_128_BITS,
+    VK_IMAGE_FORMAT_CLASS_END_RANGE                        = VK_IMAGE_FORMAT_CLASS_LINEAR,
+    VK_NUM_IMAGE_FORMAT_CLASS                              = (VK_IMAGE_FORMAT_CLASS_END_RANGE - VK_IMAGE_FORMAT_CLASS_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_FORMAT_CLASS)
+} VK_IMAGE_FORMAT_CLASS;
+
+// Image and image allocation usage flags
+typedef enum _VK_IMAGE_USAGE_FLAGS
+{
+    VK_IMAGE_USAGE_GENERAL                                 = 0x00000000,   // no special usage
+    VK_IMAGE_USAGE_SHADER_ACCESS_READ_BIT                  = 0x00000001,   // shader read (e.g. texture, image)
+    VK_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT                 = 0x00000002,   // shader write (e.g. image)
+    VK_IMAGE_USAGE_SHADER_ACCESS_ATOMIC_BIT                = 0x00000004,   // shader atomic operations (e.g. image)
+    VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT                     = 0x00000008,   // used as a source for copies
+    VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT                = 0x00000010,   // used as a destination for copies
+    VK_IMAGE_USAGE_TEXTURE_BIT                             = 0x00000020,   // opaque texture (2d, 3d, etc.)
+    VK_IMAGE_USAGE_IMAGE_BIT                               = 0x00000040,   // opaque image (2d, 3d, etc.)
+    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                    = 0x00000080,   // framebuffer color attachment
+    VK_IMAGE_USAGE_DEPTH_STENCIL_BIT                       = 0x00000100,   // framebuffer depth/stencil
+    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                = 0x00000200,   // image data not needed outside of rendering.
+    VK_MAX_ENUM(_VK_IMAGE_USAGE_FLAGS)
+} VK_IMAGE_USAGE_FLAGS;
+
+// Image flags
+typedef enum _VK_IMAGE_CREATE_FLAGS
+{
+    VK_IMAGE_CREATE_INVARIANT_DATA_BIT                     = 0x00000001,
+    VK_IMAGE_CREATE_CLONEABLE_BIT                          = 0x00000002,
+    VK_IMAGE_CREATE_SHAREABLE_BIT                          = 0x00000004,
+    VK_IMAGE_CREATE_SPARSE_BIT                             = 0x00000008,
+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                     = 0x00000010,   // Allows image views to have different format than the base image
+    VK_MAX_ENUM(_VK_IMAGE_CREATE_FLAGS)
+} VK_IMAGE_CREATE_FLAGS;
+
+// Depth-stencil view creation flags
+typedef enum _VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS
+{
+    VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT       = 0x00000001,
+    VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT     = 0x00000002,
+    VK_MAX_ENUM(_VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS)
+} VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS;
+
+// Pipeline creation flags
+typedef enum _VK_PIPELINE_CREATE_FLAGS
+{
+    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT            = 0x00000001,
+    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT               = 0x00000002,
+    VK_MAX_ENUM(_VK_PIPELINE_CREATE_FLAGS)
+} VK_PIPELINE_CREATE_FLAGS;
+
+// Fence creation flags
+typedef enum _VK_FENCE_CREATE_FLAGS
+{
+    VK_FENCE_CREATE_SIGNALED_BIT                           = 0x00000001,
+    VK_MAX_ENUM(_VK_FENCE_CREATE_FLAGS)
+} VK_FENCE_CREATE_FLAGS;
+
+// Semaphore creation flags
+typedef enum _VK_SEMAPHORE_CREATE_FLAGS
+{
+    VK_SEMAPHORE_CREATE_SHAREABLE_BIT                      = 0x00000001,
+    VK_MAX_ENUM(_VK_SEMAPHORE_CREATE_FLAGS)
+} VK_SEMAPHORE_CREATE_FLAGS;
+
+// Format capability flags
+typedef enum _VK_FORMAT_FEATURE_FLAGS
+{
+    VK_FORMAT_IMAGE_SHADER_READ_BIT                        = 0x00000001,
+    VK_FORMAT_IMAGE_SHADER_WRITE_BIT                       = 0x00000002,
+    VK_FORMAT_IMAGE_COPY_BIT                               = 0x00000004,
+    VK_FORMAT_MEMORY_SHADER_ACCESS_BIT                     = 0x00000008,
+    VK_FORMAT_COLOR_ATTACHMENT_WRITE_BIT                   = 0x00000010,
+    VK_FORMAT_COLOR_ATTACHMENT_BLEND_BIT                   = 0x00000020,
+    VK_FORMAT_DEPTH_ATTACHMENT_BIT                         = 0x00000040,
+    VK_FORMAT_STENCIL_ATTACHMENT_BIT                       = 0x00000080,
+    VK_FORMAT_MSAA_ATTACHMENT_BIT                          = 0x00000100,
+    VK_FORMAT_CONVERSION_BIT                               = 0x00000200,
+    VK_MAX_ENUM(_VK_FORMAT_FEATURE_FLAGS)
+} VK_FORMAT_FEATURE_FLAGS;
+
+// Query flags
+typedef enum _VK_QUERY_CONTROL_FLAGS
+{
+    VK_QUERY_IMPRECISE_DATA_BIT                            = 0x00000001,
+    VK_MAX_ENUM(_VK_QUERY_CONTROL_FLAGS)
+} VK_QUERY_CONTROL_FLAGS;
+
+// GPU compatibility flags
+typedef enum _VK_GPU_COMPATIBILITY_FLAGS
+{
+    VK_GPU_COMPAT_ASIC_FEATURES_BIT                        = 0x00000001,
+    VK_GPU_COMPAT_IQ_MATCH_BIT                             = 0x00000002,
+    VK_GPU_COMPAT_PEER_TRANSFER_BIT                        = 0x00000004,
+    VK_GPU_COMPAT_SHARED_MEMORY_BIT                        = 0x00000008,
+    VK_GPU_COMPAT_SHARED_SYNC_BIT                          = 0x00000010,
+    VK_GPU_COMPAT_SHARED_GPU0_DISPLAY_BIT                  = 0x00000020,
+    VK_GPU_COMPAT_SHARED_GPU1_DISPLAY_BIT                  = 0x00000040,
+    VK_MAX_ENUM(_VK_GPU_COMPATIBILITY_FLAGS)
+} VK_GPU_COMPATIBILITY_FLAGS;
+
+// Command buffer building flags
+typedef enum _VK_CMD_BUFFER_BUILD_FLAGS
+{
+    VK_CMD_BUFFER_OPTIMIZE_GPU_SMALL_BATCH_BIT             = 0x00000001,
+    VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT             = 0x00000002,
+    VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT             = 0x00000004,
+    VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT       = 0x00000008,
+    VK_MAX_ENUM(_VK_CMD_BUFFER_BUILD_FLAGS)
+} VK_CMD_BUFFER_BUILD_FLAGS;
+
+// ------------------------------------------------------------------------------------------------
+// VK structures
+
+typedef struct _VK_OFFSET2D
+{
+    int32_t                                 x;
+    int32_t                                 y;
+} VK_OFFSET2D;
+
+typedef struct _VK_OFFSET3D
+{
+    int32_t                                 x;
+    int32_t                                 y;
+    int32_t                                 z;
+} VK_OFFSET3D;
+
+typedef struct _VK_EXTENT2D
+{
+    int32_t                                 width;
+    int32_t                                 height;
+} VK_EXTENT2D;
+
+typedef struct _VK_EXTENT3D
+{
+    int32_t                                 width;
+    int32_t                                 height;
+    int32_t                                 depth;
+} VK_EXTENT3D;
+
+typedef struct _VK_VIEWPORT
+{
+    float                                   originX;
+    float                                   originY;
+    float                                   width;
+    float                                   height;
+    float                                   minDepth;
+    float                                   maxDepth;
+} VK_VIEWPORT;
+
+typedef struct _VK_RECT
+{
+    VK_OFFSET2D                            offset;
+    VK_EXTENT2D                            extent;
+} VK_RECT;
+
+typedef struct _VK_CHANNEL_MAPPING
+{
+    VK_CHANNEL_SWIZZLE                     r;
+    VK_CHANNEL_SWIZZLE                     g;
+    VK_CHANNEL_SWIZZLE                     b;
+    VK_CHANNEL_SWIZZLE                     a;
+} VK_CHANNEL_MAPPING;
+
+typedef struct _VK_PHYSICAL_GPU_PROPERTIES
+{
+    uint32_t                                apiVersion;
+    uint32_t                                driverVersion;
+    uint32_t                                vendorId;
+    uint32_t                                deviceId;
+    VK_PHYSICAL_GPU_TYPE                   gpuType;
+    char                                    gpuName[VK_MAX_PHYSICAL_GPU_NAME];
+    VK_GPU_SIZE                            maxInlineMemoryUpdateSize;
+    uint32_t                                maxBoundDescriptorSets;
+    uint32_t                                maxThreadGroupSize;
+    uint64_t                                timestampFrequency;
+    bool32_t                                multiColorAttachmentClears;
+    uint32_t                                maxDescriptorSets;              // at least 2?
+    uint32_t                                maxViewports;                   // at least 16?
+    uint32_t                                maxColorAttachments;            // at least 8?
+} VK_PHYSICAL_GPU_PROPERTIES;
+
+typedef struct _VK_PHYSICAL_GPU_PERFORMANCE
+{
+    float                                   maxGpuClock;
+    float                                   aluPerClock;
+    float                                   texPerClock;
+    float                                   primsPerClock;
+    float                                   pixelsPerClock;
+} VK_PHYSICAL_GPU_PERFORMANCE;
+
+typedef struct _VK_GPU_COMPATIBILITY_INFO
+{
+    VK_FLAGS                               compatibilityFlags; // VK_GPU_COMPATIBILITY_FLAGS
+} VK_GPU_COMPATIBILITY_INFO;
+
+typedef struct _VK_APPLICATION_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;              // Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
+    const void*                             pNext;              // Next structure in chain
+    const char*                             pAppName;
+    uint32_t                                appVersion;
+    const char*                             pEngineName;
+    uint32_t                                engineVersion;
+    uint32_t                                apiVersion;
+} VK_APPLICATION_INFO;
+
+typedef void* (VKAPI *VK_ALLOC_FUNCTION)(
+    void*                                   pUserData,
+    size_t                                  size,
+    size_t                                  alignment,
+    VK_SYSTEM_ALLOC_TYPE                   allocType);
+
+typedef void (VKAPI *VK_FREE_FUNCTION)(
+    void*                                   pUserData,
+    void*                                   pMem);
+
+typedef struct _VK_ALLOC_CALLBACKS
+{
+    void*                                   pUserData;
+    VK_ALLOC_FUNCTION                      pfnAlloc;
+    VK_FREE_FUNCTION                       pfnFree;
+} VK_ALLOC_CALLBACKS;
+
+typedef struct _VK_DEVICE_QUEUE_CREATE_INFO
+{
+    uint32_t                                queueNodeIndex;
+    uint32_t                                queueCount;
+} VK_DEVICE_QUEUE_CREATE_INFO;
+
+typedef struct _VK_DEVICE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                queueRecordCount;
+    const VK_DEVICE_QUEUE_CREATE_INFO*     pRequestedQueues;
+    uint32_t                                extensionCount;
+    const char*const*                       ppEnabledExtensionNames;
+    VK_VALIDATION_LEVEL                    maxValidationLevel;
+    VK_FLAGS                               flags;                      // VK_DEVICE_CREATE_FLAGS
+} VK_DEVICE_CREATE_INFO;
+
+typedef struct _VK_INSTANCE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    const VK_APPLICATION_INFO*             pAppInfo;
+    const VK_ALLOC_CALLBACKS*              pAllocCb;
+    uint32_t                                extensionCount;
+    const char*const*                       ppEnabledExtensionNames;    // layer or extension name to be enabled
+} VK_INSTANCE_CREATE_INFO;
+
+// can be added to VK_DEVICE_CREATE_INFO or VK_INSTANCE_CREATE_INFO via pNext
+typedef struct _VK_LAYER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Should be VK_STRUCTURE_TYPE_LAYER_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                layerCount;
+    const char *const*                      ppActiveLayerNames;         // layer name from the layer's vkEnumerateLayers())
+} VK_LAYER_CREATE_INFO;
+
+typedef struct _VK_PHYSICAL_GPU_QUEUE_PROPERTIES
+{
+    VK_FLAGS                               queueFlags;                 // VK_QUEUE_FLAGS
+    uint32_t                                queueCount;
+    uint32_t                                maxAtomicCounters;
+    bool32_t                                supportsTimestamps;
+    uint32_t                                maxMemReferences;           // Tells how many memory references can be active for the given queue
+} VK_PHYSICAL_GPU_QUEUE_PROPERTIES;
+
+typedef struct _VK_PHYSICAL_GPU_MEMORY_PROPERTIES
+{
+    bool32_t                                supportsMigration;
+    bool32_t                                supportsPinning;
+} VK_PHYSICAL_GPU_MEMORY_PROPERTIES;
+
+typedef struct _VK_MEMORY_ALLOC_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_GPU_SIZE                            allocationSize;             // Size of memory allocation
+    VK_FLAGS                               memProps;                   // VK_MEMORY_PROPERTY_FLAGS
+    VK_MEMORY_TYPE                         memType;
+    VK_MEMORY_PRIORITY                     memPriority;
+} VK_MEMORY_ALLOC_INFO;
+
+// This structure is included in the VK_MEMORY_ALLOC_INFO chain
+// for memory regions allocated for buffer usage.
+typedef struct _VK_MEMORY_ALLOC_BUFFER_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_FLAGS                               usage;                      // VK_BUFFER_USAGE_FLAGS
+} VK_MEMORY_ALLOC_BUFFER_INFO;
+
+// This structure is included in the VK_MEMORY_ALLOC_INFO chain
+// for memory regions allocated for image usage.
+typedef struct _VK_MEMORY_ALLOC_IMAGE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_FLAGS                               usage;                      // VK_IMAGE_USAGE_FLAGS
+    VK_IMAGE_FORMAT_CLASS                  formatClass;
+    uint32_t                                samples;
+} VK_MEMORY_ALLOC_IMAGE_INFO;
+
+typedef struct _VK_MEMORY_OPEN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_OPEN_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_GPU_MEMORY                          sharedMem;
+} VK_MEMORY_OPEN_INFO;
+
+typedef struct _VK_PEER_MEMORY_OPEN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_GPU_MEMORY                          originalMem;
+} VK_PEER_MEMORY_OPEN_INFO;
+
+typedef struct _VK_MEMORY_REQUIREMENTS
+{
+    VK_GPU_SIZE                            size;                       // Specified in bytes
+    VK_GPU_SIZE                            alignment;                  // Specified in bytes
+    VK_GPU_SIZE                            granularity;                // Granularity on which vkBindObjectMemoryRange can bind sub-ranges of memory specified in bytes (usually the page size)
+    VK_FLAGS                               memProps;                   // VK_MEMORY_PROPERTY_FLAGS
+    VK_MEMORY_TYPE                         memType;
+} VK_MEMORY_REQUIREMENTS;
+
+typedef struct _VK_BUFFER_MEMORY_REQUIREMENTS
+{
+    VK_FLAGS                               usage;                      // VK_BUFFER_USAGE_FLAGS
+} VK_BUFFER_MEMORY_REQUIREMENTS;
+
+typedef struct _VK_IMAGE_MEMORY_REQUIREMENTS
+{
+    VK_FLAGS                               usage;                      // VK_IMAGE_USAGE_FLAGS
+    VK_IMAGE_FORMAT_CLASS                  formatClass;
+    uint32_t                                samples;
+} VK_IMAGE_MEMORY_REQUIREMENTS;
+
+typedef struct _VK_FORMAT_PROPERTIES
+{
+    VK_FLAGS                               linearTilingFeatures;      // VK_FORMAT_FEATURE_FLAGS
+    VK_FLAGS                               optimalTilingFeatures;     // VK_FORMAT_FEATURE_FLAGS
+} VK_FORMAT_PROPERTIES;
+
+typedef struct _VK_BUFFER_VIEW_ATTACH_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_BUFFER_VIEW                         view;
+} VK_BUFFER_VIEW_ATTACH_INFO;
+
+typedef struct _VK_IMAGE_VIEW_ATTACH_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_IMAGE_VIEW                          view;
+    VK_IMAGE_LAYOUT                        layout;
+} VK_IMAGE_VIEW_ATTACH_INFO;
+
+typedef struct _VK_UPDATE_SAMPLERS
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_UPDATE_SAMPLERS
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                binding;                    // Binding of the sampler (array)
+    uint32_t                                arrayIndex;                 // First element of the array to update or zero otherwise
+    uint32_t                                count;                      // Number of elements to update
+    const VK_SAMPLER*                      pSamplers;
+} VK_UPDATE_SAMPLERS;
+
+typedef struct _VK_SAMPLER_IMAGE_VIEW_INFO
+{
+    VK_SAMPLER                             sampler;
+    const VK_IMAGE_VIEW_ATTACH_INFO*       pImageView;
+} VK_SAMPLER_IMAGE_VIEW_INFO;
+
+typedef struct _VK_UPDATE_SAMPLER_TEXTURES
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                binding;                    // Binding of the combined texture sampler (array)
+    uint32_t                                arrayIndex;                 // First element of the array to update or zero otherwise
+    uint32_t                                count;                      // Number of elements to update
+    const VK_SAMPLER_IMAGE_VIEW_INFO*      pSamplerImageViews;
+} VK_UPDATE_SAMPLER_TEXTURES;
+
+typedef struct _VK_UPDATE_IMAGES
+{
+    VK_STRUCTURE_TYPE                       sType;                     // Must be VK_STRUCTURE_TYPE_UPDATE_IMAGES
+    const void*                              pNext;                     // Pointer to next structure
+    VK_DESCRIPTOR_TYPE                      descriptorType;
+    uint32_t                                 binding;                   // Binding of the image (array)
+    uint32_t                                 arrayIndex;                // First element of the array to update or zero otherwise
+    uint32_t                                 count;                     // Number of elements to update
+    const VK_IMAGE_VIEW_ATTACH_INFO*        pImageViews;
+} VK_UPDATE_IMAGES;
+
+typedef struct _VK_UPDATE_BUFFERS
+{
+    VK_STRUCTURE_TYPE                        sType;                    // Must be VK_STRUCTURE_TYPE_UPDATE_BUFFERS
+    const void*                               pNext;                    // Pointer to next structure
+    VK_DESCRIPTOR_TYPE                       descriptorType;
+    uint32_t                                  binding;                  // Binding of the buffer (array)
+    uint32_t                                  arrayIndex;               // First element of the array to update or zero otherwise
+    uint32_t                                  count;                    // Number of elements to update
+    const VK_BUFFER_VIEW_ATTACH_INFO*        pBufferViews;
+} VK_UPDATE_BUFFERS;
+
+typedef struct _VK_UPDATE_AS_COPY
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_UPDATE_AS_COPY
+    const void*                             pNext;                      // Pointer to next structure
+    VK_DESCRIPTOR_TYPE                     descriptorType;
+    VK_DESCRIPTOR_SET                      descriptorSet;
+    uint32_t                                binding;
+    uint32_t                                arrayElement;
+    uint32_t                                count;
+} VK_UPDATE_AS_COPY;
+
+typedef struct _VK_BUFFER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+    VK_GPU_SIZE                            size;                       // Specified in bytes
+    VK_FLAGS                               usage;                      // VK_BUFFER_USAGE_FLAGS
+    VK_FLAGS                               flags;                      // VK_BUFFER_CREATE_FLAGS
+} VK_BUFFER_CREATE_INFO;
+
+typedef struct _VK_BUFFER_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+    VK_BUFFER                              buffer;
+    VK_BUFFER_VIEW_TYPE                    viewType;
+    VK_FORMAT                              format;                     // Optionally specifies format of elements
+    VK_GPU_SIZE                            offset;                     // Specified in bytes
+    VK_GPU_SIZE                            range;                      // View size specified in bytes
+} VK_BUFFER_VIEW_CREATE_INFO;
+
+typedef struct _VK_IMAGE_SUBRESOURCE
+{
+    VK_IMAGE_ASPECT                        aspect;
+    uint32_t                                mipLevel;
+    uint32_t                                arraySlice;
+} VK_IMAGE_SUBRESOURCE;
+
+typedef struct _VK_IMAGE_SUBRESOURCE_RANGE
+{
+    VK_IMAGE_ASPECT                        aspect;
+    uint32_t                                baseMipLevel;
+    uint32_t                                mipLevels;
+    uint32_t                                baseArraySlice;
+    uint32_t                                arraySize;
+} VK_IMAGE_SUBRESOURCE_RANGE;
+
+typedef struct _VK_EVENT_WAIT_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_EVENT_WAIT_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+
+    uint32_t                                eventCount;                 // Number of events to wait on
+    const VK_EVENT*                        pEvents;                    // Array of event objects to wait on
+
+    VK_WAIT_EVENT                          waitEvent;                  // Pipeline event where the wait should happen
+
+    uint32_t                                memBarrierCount;            // Number of memory barriers
+    const void**                            ppMemBarriers;              // Array of pointers to memory barriers (any of them can be either VK_MEMORY_BARRIER, VK_BUFFER_MEMORY_BARRIER, or VK_IMAGE_MEMORY_BARRIER)
+} VK_EVENT_WAIT_INFO;
+
+typedef struct _VK_PIPELINE_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_PIPELINE_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    uint32_t                                eventCount;                 // Number of events to wait on
+    const VK_PIPE_EVENT*                   pEvents;                    // Array of pipeline events to wait on
+
+    VK_WAIT_EVENT                          waitEvent;                  // Pipeline event where the wait should happen
+
+    uint32_t                                memBarrierCount;            // Number of memory barriers
+    const void**                            ppMemBarriers;              // Array of pointers to memory barriers (any of them can be either VK_MEMORY_BARRIER, VK_BUFFER_MEMORY_BARRIER, or VK_IMAGE_MEMORY_BARRIER)
+} VK_PIPELINE_BARRIER;
+
+typedef struct _VK_MEMORY_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    VK_FLAGS                               outputMask;                 // Outputs the barrier should sync (see VK_MEMORY_OUTPUT_FLAGS)
+    VK_FLAGS                               inputMask;                  // Inputs the barrier should sync to (see VK_MEMORY_INPUT_FLAGS)
+} VK_MEMORY_BARRIER;
+
+typedef struct _VK_BUFFER_MEMORY_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    VK_FLAGS                               outputMask;                 // Outputs the barrier should sync (see VK_MEMORY_OUTPUT_FLAGS)
+    VK_FLAGS                               inputMask;                  // Inputs the barrier should sync to (see VK_MEMORY_INPUT_FLAGS)
+
+    VK_BUFFER                              buffer;                     // Buffer to sync
+
+    VK_GPU_SIZE                            offset;                     // Offset within the buffer to sync
+    VK_GPU_SIZE                            size;                       // Amount of bytes to sync
+} VK_BUFFER_MEMORY_BARRIER;
+
+typedef struct _VK_IMAGE_MEMORY_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    VK_FLAGS                               outputMask;                 // Outputs the barrier should sync (see VK_MEMORY_OUTPUT_FLAGS)
+    VK_FLAGS                               inputMask;                  // Inputs the barrier should sync to (see VK_MEMORY_INPUT_FLAGS)
+
+    VK_IMAGE_LAYOUT                        oldLayout;                  // Current layout of the image
+    VK_IMAGE_LAYOUT                        newLayout;                  // New layout to transition the image to
+
+    VK_IMAGE                               image;                      // Image to sync
+
+    VK_IMAGE_SUBRESOURCE_RANGE             subresourceRange;           // Subresource range to sync
+} VK_IMAGE_MEMORY_BARRIER;
+
+typedef struct _VK_IMAGE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+    VK_IMAGE_TYPE                          imageType;
+    VK_FORMAT                              format;
+    VK_EXTENT3D                            extent;
+    uint32_t                                mipLevels;
+    uint32_t                                arraySize;
+    uint32_t                                samples;
+    VK_IMAGE_TILING                        tiling;
+    VK_FLAGS                               usage;                      // VK_IMAGE_USAGE_FLAGS
+    VK_FLAGS                               flags;                      // VK_IMAGE_CREATE_FLAGS
+} VK_IMAGE_CREATE_INFO;
+
+typedef struct _VK_PEER_IMAGE_OPEN_INFO
+{
+    VK_IMAGE                               originalImage;
+} VK_PEER_IMAGE_OPEN_INFO;
+
+typedef struct _VK_SUBRESOURCE_LAYOUT
+{
+    VK_GPU_SIZE                            offset;                 // Specified in bytes
+    VK_GPU_SIZE                            size;                   // Specified in bytes
+    VK_GPU_SIZE                            rowPitch;               // Specified in bytes
+    VK_GPU_SIZE                            depthPitch;             // Specified in bytes
+} VK_SUBRESOURCE_LAYOUT;
+
+typedef struct _VK_IMAGE_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                  // Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
+    const void*                             pNext;                  // Pointer to next structure
+    VK_IMAGE                               image;
+    VK_IMAGE_VIEW_TYPE                     viewType;
+    VK_FORMAT                              format;
+    VK_CHANNEL_MAPPING                     channels;
+    VK_IMAGE_SUBRESOURCE_RANGE             subresourceRange;
+    float                                   minLod;
+} VK_IMAGE_VIEW_CREATE_INFO;
+
+typedef struct _VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                  // Must be VK_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO
+    const void*                             pNext;                  // Pointer to next structure
+    VK_IMAGE                               image;
+    VK_FORMAT                              format;
+    uint32_t                                mipLevel;
+    uint32_t                                baseArraySlice;
+    uint32_t                                arraySize;
+    VK_IMAGE                               msaaResolveImage;
+    VK_IMAGE_SUBRESOURCE_RANGE             msaaResolveSubResource;
+} VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO;
+
+typedef struct _VK_DEPTH_STENCIL_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                  // Must be VK_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO
+    const void*                             pNext;                  // Pointer to next structure
+    VK_IMAGE                               image;
+    uint32_t                                mipLevel;
+    uint32_t                                baseArraySlice;
+    uint32_t                                arraySize;
+    VK_IMAGE                               msaaResolveImage;
+    VK_IMAGE_SUBRESOURCE_RANGE             msaaResolveSubResource;
+    VK_FLAGS                               flags;                  // VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS
+} VK_DEPTH_STENCIL_VIEW_CREATE_INFO;
+
+typedef struct _VK_COLOR_ATTACHMENT_BIND_INFO
+{
+    VK_COLOR_ATTACHMENT_VIEW               view;
+    VK_IMAGE_LAYOUT                        layout;
+} VK_COLOR_ATTACHMENT_BIND_INFO;
+
+typedef struct _VK_DEPTH_STENCIL_BIND_INFO
+{
+    VK_DEPTH_STENCIL_VIEW                  view;
+    VK_IMAGE_LAYOUT                        layout;
+} VK_DEPTH_STENCIL_BIND_INFO;
+
+typedef struct _VK_BUFFER_COPY
+{
+    VK_GPU_SIZE                            srcOffset;              // Specified in bytes
+    VK_GPU_SIZE                            destOffset;             // Specified in bytes
+    VK_GPU_SIZE                            copySize;               // Specified in bytes
+} VK_BUFFER_COPY;
+
+typedef struct _VK_IMAGE_MEMORY_BIND_INFO
+{
+    VK_IMAGE_SUBRESOURCE                   subresource;
+    VK_OFFSET3D                            offset;
+    VK_EXTENT3D                            extent;
+} VK_IMAGE_MEMORY_BIND_INFO;
+
+typedef struct _VK_IMAGE_COPY
+{
+    VK_IMAGE_SUBRESOURCE                   srcSubresource;
+    VK_OFFSET3D                            srcOffset;
+    VK_IMAGE_SUBRESOURCE                   destSubresource;
+    VK_OFFSET3D                            destOffset;
+    VK_EXTENT3D                            extent;
+} VK_IMAGE_COPY;
+
+typedef struct _VK_IMAGE_BLIT
+{
+    VK_IMAGE_SUBRESOURCE                   srcSubresource;
+    VK_OFFSET3D                            srcOffset;
+    VK_EXTENT3D                            srcExtent;
+    VK_IMAGE_SUBRESOURCE                   destSubresource;
+    VK_OFFSET3D                            destOffset;
+    VK_EXTENT3D                            destExtent;
+} VK_IMAGE_BLIT;
+
+typedef struct _VK_BUFFER_IMAGE_COPY
+{
+    VK_GPU_SIZE                            bufferOffset;           // Specified in bytes
+    VK_IMAGE_SUBRESOURCE                   imageSubresource;
+    VK_OFFSET3D                            imageOffset;
+    VK_EXTENT3D                            imageExtent;
+} VK_BUFFER_IMAGE_COPY;
+
+typedef struct _VK_IMAGE_RESOLVE
+{
+    VK_IMAGE_SUBRESOURCE                   srcSubresource;
+    VK_OFFSET2D                            srcOffset;
+    VK_IMAGE_SUBRESOURCE                   destSubresource;
+    VK_OFFSET2D                            destOffset;
+    VK_EXTENT2D                            extent;
+} VK_IMAGE_RESOLVE;
+
+typedef struct _VK_SHADER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;              // Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
+    const void*                             pNext;              // Pointer to next structure
+    size_t                                  codeSize;           // Specified in bytes
+    const void*                             pCode;
+    VK_FLAGS                               flags;              // Reserved
+} VK_SHADER_CREATE_INFO;
+
+typedef struct _VK_DESCRIPTOR_SET_LAYOUT_BINDING
+{
+    VK_DESCRIPTOR_TYPE                     descriptorType;
+    uint32_t                                count;
+    VK_FLAGS                               stageFlags;         // VK_SHADER_STAGE_FLAGS
+    const VK_SAMPLER*                      pImmutableSamplers;
+} VK_DESCRIPTOR_SET_LAYOUT_BINDING;
+
+typedef struct _VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                       sType;             // Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+    const void*                              pNext;             // Pointer to next structure
+    uint32_t                                 count;             // Number of bindings in the descriptor set layout
+    const VK_DESCRIPTOR_SET_LAYOUT_BINDING* pBinding;          // Array of descriptor set layout bindings
+} VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
+
+typedef struct _VK_DESCRIPTOR_TYPE_COUNT
+{
+    VK_DESCRIPTOR_TYPE                     type;
+    uint32_t                                count;
+} VK_DESCRIPTOR_TYPE_COUNT;
+
+typedef struct _VK_DESCRIPTOR_POOL_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;              // Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
+    const void*                             pNext;              // Pointer to next structure
+    uint32_t                                count;
+    const VK_DESCRIPTOR_TYPE_COUNT*        pTypeCount;
+} VK_DESCRIPTOR_POOL_CREATE_INFO;
+
+typedef struct _VK_LINK_CONST_BUFFER
+{
+    uint32_t                                    bufferId;
+    size_t                                      bufferSize;
+    const void*                                 pBufferData;
+} VK_LINK_CONST_BUFFER;
+
+typedef struct _VK_SPECIALIZATION_MAP_ENTRY
+{
+    uint32_t                                constantId;         // The SpecConstant ID specified in the BIL
+    uint32_t                                offset;             // Offset of the value in the data block
+} VK_SPECIALIZATION_MAP_ENTRY;
+
+typedef struct _VK_SPECIALIZATION_INFO
+{
+    uint32_t                                mapEntryCount;
+    const VK_SPECIALIZATION_MAP_ENTRY*     pMap;               // mapEntryCount entries
+    const void*                             pData;
+} VK_SPECIALIZATION_INFO;
+
+typedef struct _VK_PIPELINE_SHADER
+{
+    VK_PIPELINE_SHADER_STAGE               stage;
+    VK_SHADER                              shader;
+    uint32_t                                linkConstBufferCount;
+    const VK_LINK_CONST_BUFFER*            pLinkConstBufferInfo;
+    const VK_SPECIALIZATION_INFO*          pSpecializationInfo;
+} VK_PIPELINE_SHADER;
+
+typedef struct _VK_COMPUTE_PIPELINE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_PIPELINE_SHADER                     cs;
+    VK_FLAGS                               flags;      // VK_PIPELINE_CREATE_FLAGS
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN         setLayoutChain; // For local size fields zero is treated an invalid value
+    uint32_t                                localSizeX;
+    uint32_t                                localSizeY;
+    uint32_t                                localSizeZ;
+
+} VK_COMPUTE_PIPELINE_CREATE_INFO;
+
+typedef struct _VK_VERTEX_INPUT_BINDING_DESCRIPTION
+{
+    uint32_t                                binding;        // Vertex buffer binding id
+    uint32_t                                strideInBytes;  // Distance between vertices in bytes (0 = no advancement)
+
+    VK_VERTEX_INPUT_STEP_RATE              stepRate;       // Rate at which binding is incremented
+} VK_VERTEX_INPUT_BINDING_DESCRIPTION;
+
+typedef struct _VK_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION
+{
+    uint32_t                                location;       // location of the shader vertex attrib
+    uint32_t                                binding;        // Vertex buffer binding id
+
+    VK_FORMAT                              format;         // format of source data
+
+    uint32_t                                offsetInBytes;  // Offset of first element in bytes from base of vertex
+} VK_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION;
+
+typedef struct _VK_PIPELINE_VERTEX_INPUT_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                            sType;          // Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO
+    const void*                                   pNext;          // Pointer to next structure
+
+    uint32_t                                      bindingCount;   // number of bindings
+    const VK_VERTEX_INPUT_BINDING_DESCRIPTION*   pVertexBindingDescriptions;
+
+    uint32_t                                      attributeCount; // number of attributes
+    const VK_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION* pVertexAttributeDescriptions;
+} VK_PIPELINE_VERTEX_INPUT_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_IA_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_PRIMITIVE_TOPOLOGY                  topology;
+    bool32_t                                disableVertexReuse;         // optional
+    bool32_t                                primitiveRestartEnable;
+    uint32_t                                primitiveRestartIndex;      // optional (GL45)
+} VK_PIPELINE_IA_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_TESS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                patchControlPoints;
+} VK_PIPELINE_TESS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_VP_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                numViewports;
+    VK_COORDINATE_ORIGIN                   clipOrigin;                 // optional (GL45)
+    VK_DEPTH_MODE                          depthMode;                  // optional (GL45)
+} VK_PIPELINE_VP_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_RS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    bool32_t                                depthClipEnable;
+    bool32_t                                rasterizerDiscardEnable;
+    bool32_t                                programPointSize;           // optional (GL45)
+    VK_COORDINATE_ORIGIN                   pointOrigin;                // optional (GL45)
+    VK_PROVOKING_VERTEX_CONVENTION         provokingVertex;            // optional (GL45)
+    VK_FILL_MODE                           fillMode;                   // optional (GL45)
+    VK_CULL_MODE                           cullMode;
+    VK_FACE_ORIENTATION                    frontFace;
+} VK_PIPELINE_RS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_MS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                samples;
+    bool32_t                                multisampleEnable;          // optional (GL45)
+    bool32_t                                sampleShadingEnable;        // optional (GL45)
+    float                                   minSampleShading;           // optional (GL45)
+    VK_SAMPLE_MASK                         sampleMask;
+} VK_PIPELINE_MS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_CB_ATTACHMENT_STATE
+{
+    bool32_t                                blendEnable;
+    VK_FORMAT                              format;
+    VK_BLEND                               srcBlendColor;
+    VK_BLEND                               destBlendColor;
+    VK_BLEND_FUNC                          blendFuncColor;
+    VK_BLEND                               srcBlendAlpha;
+    VK_BLEND                               destBlendAlpha;
+    VK_BLEND_FUNC                          blendFuncAlpha;
+    uint8_t                                 channelWriteMask;
+} VK_PIPELINE_CB_ATTACHMENT_STATE;
+
+typedef struct _VK_PIPELINE_CB_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    bool32_t                                alphaToCoverageEnable;
+    bool32_t                                logicOpEnable;
+    VK_LOGIC_OP                            logicOp;
+    uint32_t                                attachmentCount;    // # of pAttachments
+    const VK_PIPELINE_CB_ATTACHMENT_STATE* pAttachments;
+} VK_PIPELINE_CB_STATE_CREATE_INFO;
+
+typedef struct _VK_STENCIL_OP_STATE
+{
+    VK_STENCIL_OP                          stencilFailOp;
+    VK_STENCIL_OP                          stencilPassOp;
+    VK_STENCIL_OP                          stencilDepthFailOp;
+    VK_COMPARE_FUNC                        stencilFunc;
+} VK_STENCIL_OP_STATE;
+
+typedef struct _VK_PIPELINE_DS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FORMAT                              format;
+    bool32_t                                depthTestEnable;
+    bool32_t                                depthWriteEnable;
+    VK_COMPARE_FUNC                        depthFunc;
+    bool32_t                                depthBoundsEnable;          // optional (depth_bounds_test)
+    bool32_t                                stencilTestEnable;
+    VK_STENCIL_OP_STATE                    front;
+    VK_STENCIL_OP_STATE                    back;
+} VK_PIPELINE_DS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_SHADER_STAGE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_PIPELINE_SHADER                     shader;
+} VK_PIPELINE_SHADER_STAGE_CREATE_INFO;
+
+typedef struct _VK_GRAPHICS_PIPELINE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FLAGS                               flags;      // VK_PIPELINE_CREATE_FLAGS
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN         pSetLayoutChain;
+} VK_GRAPHICS_PIPELINE_CREATE_INFO;
+
+typedef struct _VK_SAMPLER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;          // Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+    const void*                             pNext;          // Pointer to next structure
+    VK_TEX_FILTER                          magFilter;      // Filter mode for magnification
+    VK_TEX_FILTER                          minFilter;      // Filter mode for minifiation
+    VK_TEX_MIPMAP_MODE                     mipMode;        // Mipmap selection mode
+    VK_TEX_ADDRESS                         addressU;
+    VK_TEX_ADDRESS                         addressV;
+    VK_TEX_ADDRESS                         addressW;
+    float                                   mipLodBias;
+    uint32_t                                maxAnisotropy;
+    VK_COMPARE_FUNC                        compareFunc;
+    float                                   minLod;
+    float                                   maxLod;
+    VK_BORDER_COLOR_TYPE                   borderColorType;
+} VK_SAMPLER_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_VP_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_VP_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                viewportAndScissorCount;  // number of entries in pViewports and pScissors
+    const VK_VIEWPORT*                     pViewports;
+    const VK_RECT*                         pScissors;
+} VK_DYNAMIC_VP_STATE_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_RS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_RS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    float                                   depthBias;
+    float                                   depthBiasClamp;
+    float                                   slopeScaledDepthBias;
+    float                                   pointSize;          // optional (GL45) - Size of points
+    float                                   pointFadeThreshold; // optional (GL45) - Size of point fade threshold
+    float                                   lineWidth;          // optional (GL45) - Width of lines
+} VK_DYNAMIC_RS_STATE_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_CB_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_CB_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    float                                   blendConst[4];
+} VK_DYNAMIC_CB_STATE_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_DS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    float                                   minDepth;               // optional (depth_bounds_test)
+    float                                   maxDepth;               // optional (depth_bounds_test)
+    uint32_t                                stencilReadMask;
+    uint32_t                                stencilWriteMask;
+    uint32_t                                stencilFrontRef;
+    uint32_t                                stencilBackRef;
+} VK_DYNAMIC_DS_STATE_CREATE_INFO;
+
+typedef struct _VK_CMD_BUFFER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                queueNodeIndex;
+    VK_FLAGS                               flags;
+} VK_CMD_BUFFER_CREATE_INFO;
+
+typedef struct _VK_CMD_BUFFER_BEGIN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
+    const void*                             pNext;      // Pointer to next structure
+
+    VK_FLAGS                               flags;      // VK_CMD_BUFFER_BUILD_FLAGS
+} VK_CMD_BUFFER_BEGIN_INFO;
+
+typedef struct _VK_RENDER_PASS_BEGIN
+{
+    VK_RENDER_PASS                         renderPass;
+    VK_FRAMEBUFFER                         framebuffer;
+} VK_RENDER_PASS_BEGIN;
+
+typedef struct _VK_CMD_BUFFER_GRAPHICS_BEGIN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO
+    const void*                             pNext;      // Pointer to next structure
+
+    VK_RENDER_PASS_BEGIN                   renderPassContinue;  // Only needed when a render pass is split across two command buffers
+} VK_CMD_BUFFER_GRAPHICS_BEGIN_INFO;
+
+// Union allowing specification of floating point or raw color data. Actual value selected is based on image being cleared.
+typedef union _VK_CLEAR_COLOR_VALUE
+{
+    float                                   floatColor[4];
+    uint32_t                                rawColor[4];
+} VK_CLEAR_COLOR_VALUE;
+
+typedef struct _VK_CLEAR_COLOR
+{
+    VK_CLEAR_COLOR_VALUE                   color;
+    bool32_t                                useRawValue;
+} VK_CLEAR_COLOR;
+
+typedef struct _VK_RENDER_PASS_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+
+    VK_RECT                                renderArea;
+    uint32_t                                colorAttachmentCount;
+    VK_EXTENT2D                            extent;
+    uint32_t                                sampleCount;
+    uint32_t                                layers;
+    const VK_FORMAT*                       pColorFormats;
+    const VK_IMAGE_LAYOUT*                 pColorLayouts;
+    const VK_ATTACHMENT_LOAD_OP*           pColorLoadOps;
+    const VK_ATTACHMENT_STORE_OP*          pColorStoreOps;
+    const VK_CLEAR_COLOR*                  pColorLoadClearValues;
+    VK_FORMAT                              depthStencilFormat;
+    VK_IMAGE_LAYOUT                        depthStencilLayout;
+    VK_ATTACHMENT_LOAD_OP                  depthLoadOp;
+    float                                   depthLoadClearValue;
+    VK_ATTACHMENT_STORE_OP                 depthStoreOp;
+    VK_ATTACHMENT_LOAD_OP                  stencilLoadOp;
+    uint32_t                                stencilLoadClearValue;
+    VK_ATTACHMENT_STORE_OP                 stencilStoreOp;
+} VK_RENDER_PASS_CREATE_INFO;
+
+typedef struct _VK_EVENT_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FLAGS                               flags;      // Reserved
+} VK_EVENT_CREATE_INFO;
+
+typedef struct _VK_FENCE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FENCE_CREATE_FLAGS                  flags;      // VK_FENCE_CREATE_FLAGS
+} VK_FENCE_CREATE_INFO;
+
+typedef struct _VK_SEMAPHORE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                initialCount;
+    VK_FLAGS                               flags;      // VK_SEMAPHORE_CREATE_FLAGS
+} VK_SEMAPHORE_CREATE_INFO;
+
+typedef struct _VK_SEMAPHORE_OPEN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_SEMAPHORE                           sharedSemaphore;
+} VK_SEMAPHORE_OPEN_INFO;
+
+typedef struct _VK_PIPELINE_STATISTICS_DATA
+{
+    uint64_t                                fsInvocations;            // Fragment shader invocations
+    uint64_t                                cPrimitives;              // Clipper primitives
+    uint64_t                                cInvocations;             // Clipper invocations
+    uint64_t                                vsInvocations;            // Vertex shader invocations
+    uint64_t                                gsInvocations;            // Geometry shader invocations
+    uint64_t                                gsPrimitives;             // Geometry shader primitives
+    uint64_t                                iaPrimitives;             // Input primitives
+    uint64_t                                iaVertices;               // Input vertices
+    uint64_t                                tcsInvocations;           // Tessellation control shader invocations
+    uint64_t                                tesInvocations;           // Tessellation evaluation shader invocations
+    uint64_t                                csInvocations;            // Compute shader invocations
+} VK_PIPELINE_STATISTICS_DATA;
+
+typedef struct _VK_QUERY_POOL_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_QUERY_TYPE                          queryType;
+    uint32_t                                slots;
+} VK_QUERY_POOL_CREATE_INFO;
+
+typedef struct _VK_FRAMEBUFFER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;  // Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
+    const void*                             pNext;  // Pointer to next structure
+
+    uint32_t                                colorAttachmentCount;
+    const VK_COLOR_ATTACHMENT_BIND_INFO*   pColorAttachments;
+    const VK_DEPTH_STENCIL_BIND_INFO*      pDepthStencilAttachment;
+
+    uint32_t                                sampleCount;
+    uint32_t                                width;
+    uint32_t                                height;
+    uint32_t                                layers;
+} VK_FRAMEBUFFER_CREATE_INFO;
+
+typedef struct _VK_DRAW_INDIRECT_CMD
+{
+    uint32_t                                vertexCount;
+    uint32_t                                instanceCount;
+    uint32_t                                firstVertex;
+    uint32_t                                firstInstance;
+} VK_DRAW_INDIRECT_CMD;
+
+typedef struct _VK_DRAW_INDEXED_INDIRECT_CMD
+{
+    uint32_t                                indexCount;
+    uint32_t                                instanceCount;
+    uint32_t                                firstIndex;
+    int32_t                                 vertexOffset;
+    uint32_t                                firstInstance;
+} VK_DRAW_INDEXED_INDIRECT_CMD;
+
+typedef struct _VK_DISPATCH_INDIRECT_CMD
+{
+    uint32_t   x;
+    uint32_t   y;
+    uint32_t   z;
+} VK_DISPATCH_INDIRECT_CMD;
+
+// ------------------------------------------------------------------------------------------------
+// API functions
+typedef VK_RESULT (VKAPI *vkCreateInstanceType)(const VK_INSTANCE_CREATE_INFO* pCreateInfo, VK_INSTANCE* pInstance);
+typedef VK_RESULT (VKAPI *vkDestroyInstanceType)(VK_INSTANCE instance);
+typedef VK_RESULT (VKAPI *vkEnumerateGpusType)(VK_INSTANCE instance, uint32_t maxGpus, uint32_t* pGpuCount, VK_PHYSICAL_GPU* pGpus);
+typedef VK_RESULT (VKAPI *vkGetGpuInfoType)(VK_PHYSICAL_GPU gpu, VK_PHYSICAL_GPU_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef void *     (VKAPI *vkGetProcAddrType)(VK_PHYSICAL_GPU gpu, const char * pName);
+typedef VK_RESULT (VKAPI *vkCreateDeviceType)(VK_PHYSICAL_GPU gpu, const VK_DEVICE_CREATE_INFO* pCreateInfo, VK_DEVICE* pDevice);
+typedef VK_RESULT (VKAPI *vkDestroyDeviceType)(VK_DEVICE device);
+typedef VK_RESULT (VKAPI *vkGetExtensionSupportType)(VK_PHYSICAL_GPU gpu, const char* pExtName);
+typedef VK_RESULT (VKAPI *vkEnumerateLayersType)(VK_PHYSICAL_GPU gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved);
+typedef VK_RESULT (VKAPI *vkGetDeviceQueueType)(VK_DEVICE device, uint32_t queueNodeIndex, uint32_t queueIndex, VK_QUEUE* pQueue);
+typedef VK_RESULT (VKAPI *vkQueueSubmitType)(VK_QUEUE queue, uint32_t cmdBufferCount, const VK_CMD_BUFFER* pCmdBuffers, VK_FENCE fence);
+typedef VK_RESULT (VKAPI *vkQueueAddMemReferenceType)(VK_QUEUE queue, VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkQueueRemoveMemReferenceType)(VK_QUEUE queue, VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkQueueWaitIdleType)(VK_QUEUE queue);
+typedef VK_RESULT (VKAPI *vkDeviceWaitIdleType)(VK_DEVICE device);
+typedef VK_RESULT (VKAPI *vkAllocMemoryType)(VK_DEVICE device, const VK_MEMORY_ALLOC_INFO* pAllocInfo, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkFreeMemoryType)(VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkSetMemoryPriorityType)(VK_GPU_MEMORY mem, VK_MEMORY_PRIORITY priority);
+typedef VK_RESULT (VKAPI *vkMapMemoryType)(VK_GPU_MEMORY mem, VK_FLAGS flags, void** ppData);
+typedef VK_RESULT (VKAPI *vkUnmapMemoryType)(VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkPinSystemMemoryType)(VK_DEVICE device, const void* pSysMem, size_t memSize, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkGetMultiGpuCompatibilityType)(VK_PHYSICAL_GPU gpu0, VK_PHYSICAL_GPU gpu1, VK_GPU_COMPATIBILITY_INFO* pInfo);
+typedef VK_RESULT (VKAPI *vkOpenSharedMemoryType)(VK_DEVICE device, const VK_MEMORY_OPEN_INFO* pOpenInfo, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkOpenSharedSemaphoreType)(VK_DEVICE device, const VK_SEMAPHORE_OPEN_INFO* pOpenInfo, VK_SEMAPHORE* pSemaphore);
+typedef VK_RESULT (VKAPI *vkOpenPeerMemoryType)(VK_DEVICE device, const VK_PEER_MEMORY_OPEN_INFO* pOpenInfo, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkOpenPeerImageType)(VK_DEVICE device, const VK_PEER_IMAGE_OPEN_INFO* pOpenInfo, VK_IMAGE* pImage, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkDestroyObjectType)(VK_OBJECT object);
+typedef VK_RESULT (VKAPI *vkGetObjectInfoType)(VK_BASE_OBJECT object, VK_OBJECT_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkBindObjectMemoryType)(VK_OBJECT object, uint32_t allocationIdx, VK_GPU_MEMORY mem, VK_GPU_SIZE offset);
+typedef VK_RESULT (VKAPI *vkBindObjectMemoryRangeType)(VK_OBJECT object, uint32_t allocationIdx, VK_GPU_SIZE rangeOffset,VK_GPU_SIZE rangeSize, VK_GPU_MEMORY mem, VK_GPU_SIZE memOffset);
+typedef VK_RESULT (VKAPI *vkBindImageMemoryRangeType)(VK_IMAGE image, uint32_t allocationIdx, const VK_IMAGE_MEMORY_BIND_INFO* bindInfo, VK_GPU_MEMORY mem, VK_GPU_SIZE memOffset);
+typedef VK_RESULT (VKAPI *vkCreateFenceType)(VK_DEVICE device, const VK_FENCE_CREATE_INFO* pCreateInfo, VK_FENCE* pFence);
+typedef VK_RESULT (VKAPI *vkResetFencesType)(VK_DEVICE device, uint32_t fenceCount, VK_FENCE* pFences);
+typedef VK_RESULT (VKAPI *vkGetFenceStatusType)(VK_FENCE fence);
+typedef VK_RESULT (VKAPI *vkWaitForFencesType)(VK_DEVICE device, uint32_t fenceCount, const VK_FENCE* pFences, bool32_t waitAll, uint64_t timeout);
+typedef VK_RESULT (VKAPI *vkCreateSemaphoreType)(VK_DEVICE device, const VK_SEMAPHORE_CREATE_INFO* pCreateInfo, VK_SEMAPHORE* pSemaphore);
+typedef VK_RESULT (VKAPI *vkQueueSignalSemaphoreType)(VK_QUEUE queue, VK_SEMAPHORE semaphore);
+typedef VK_RESULT (VKAPI *vkQueueWaitSemaphoreType)(VK_QUEUE queue, VK_SEMAPHORE semaphore);
+typedef VK_RESULT (VKAPI *vkCreateEventType)(VK_DEVICE device, const VK_EVENT_CREATE_INFO* pCreateInfo, VK_EVENT* pEvent);
+typedef VK_RESULT (VKAPI *vkGetEventStatusType)(VK_EVENT event);
+typedef VK_RESULT (VKAPI *vkSetEventType)(VK_EVENT event);
+typedef VK_RESULT (VKAPI *vkResetEventType)(VK_EVENT event);
+typedef VK_RESULT (VKAPI *vkCreateQueryPoolType)(VK_DEVICE device, const VK_QUERY_POOL_CREATE_INFO* pCreateInfo, VK_QUERY_POOL* pQueryPool);
+typedef VK_RESULT (VKAPI *vkGetQueryPoolResultsType)(VK_QUERY_POOL queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkGetFormatInfoType)(VK_DEVICE device, VK_FORMAT format, VK_FORMAT_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkCreateBufferType)(VK_DEVICE device, const VK_BUFFER_CREATE_INFO* pCreateInfo, VK_BUFFER* pBuffer);
+typedef VK_RESULT (VKAPI *vkCreateBufferViewType)(VK_DEVICE device, const VK_BUFFER_VIEW_CREATE_INFO* pCreateInfo, VK_BUFFER_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateImageType)(VK_DEVICE device, const VK_IMAGE_CREATE_INFO* pCreateInfo, VK_IMAGE* pImage);
+typedef VK_RESULT (VKAPI *vkGetImageSubresourceInfoType)(VK_IMAGE image, const VK_IMAGE_SUBRESOURCE* pSubresource, VK_SUBRESOURCE_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkCreateImageViewType)(VK_DEVICE device, const VK_IMAGE_VIEW_CREATE_INFO* pCreateInfo, VK_IMAGE_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateColorAttachmentViewType)(VK_DEVICE device, const VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo, VK_COLOR_ATTACHMENT_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateDepthStencilViewType)(VK_DEVICE device, const VK_DEPTH_STENCIL_VIEW_CREATE_INFO* pCreateInfo, VK_DEPTH_STENCIL_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateShaderType)(VK_DEVICE device, const VK_SHADER_CREATE_INFO* pCreateInfo, VK_SHADER* pShader);
+typedef VK_RESULT (VKAPI *vkCreateGraphicsPipelineType)(VK_DEVICE device, const VK_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkCreateGraphicsPipelineDerivativeType)(VK_DEVICE device, const VK_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo, VK_PIPELINE basePipeline, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkCreateComputePipelineType)(VK_DEVICE device, const VK_COMPUTE_PIPELINE_CREATE_INFO* pCreateInfo, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkStorePipelineType)(VK_PIPELINE pipeline, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkLoadPipelineType)(VK_DEVICE device, size_t dataSize, const void* pData, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkLoadPipelineDerivativeType)(VK_DEVICE device, size_t dataSize, const void* pData, VK_PIPELINE basePipeline, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkCreateSamplerType)(VK_DEVICE device, const VK_SAMPLER_CREATE_INFO* pCreateInfo, VK_SAMPLER* pSampler);
+typedef VK_RESULT (VKAPI *vkCreateDescriptorSetLayoutType)(VK_DEVICE device, const VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo, VK_DESCRIPTOR_SET_LAYOUT* pSetLayout);
+typedef VK_RESULT (VKAPI *vkCreateDescriptorSetLayoutChainType)(VK_DEVICE device, uint32_t setLayoutArrayCount, const VK_DESCRIPTOR_SET_LAYOUT* pSetLayoutArray, VK_DESCRIPTOR_SET_LAYOUT_CHAIN* pLayoutChain);
+typedef VK_RESULT (VKAPI *vkBeginDescriptorPoolUpdateType)(VK_DEVICE device, VK_DESCRIPTOR_UPDATE_MODE updateMode);
+typedef VK_RESULT (VKAPI *vkEndDescriptorPoolUpdateType)(VK_DEVICE device, VK_CMD_BUFFER cmd);
+typedef VK_RESULT (VKAPI *vkCreateDescriptorPoolType)(VK_DEVICE device, VK_DESCRIPTOR_POOL_USAGE poolUsage, uint32_t maxSets, const VK_DESCRIPTOR_POOL_CREATE_INFO* pCreateInfo, VK_DESCRIPTOR_POOL* pDescriptorPool);
+typedef VK_RESULT (VKAPI *vkResetDescriptorPoolType)(VK_DESCRIPTOR_POOL descriptorPool);
+typedef VK_RESULT (VKAPI *vkAllocDescriptorSetsType)(VK_DESCRIPTOR_POOL descriptorPool, VK_DESCRIPTOR_SET_USAGE setUsage, uint32_t count, const VK_DESCRIPTOR_SET_LAYOUT* pSetLayouts, VK_DESCRIPTOR_SET* pDescriptorSets, uint32_t* pCount);
+typedef void       (VKAPI *vkClearDescriptorSetsType)(VK_DESCRIPTOR_POOL descriptorPool, uint32_t count, const VK_DESCRIPTOR_SET* pDescriptorSets);
+typedef void       (VKAPI *vkUpdateDescriptorsType)(VK_DESCRIPTOR_SET descriptorSet, uint32_t updateCount, const void** ppUpdateArray);
+typedef VK_RESULT (VKAPI *vkCreateDynamicViewportStateType)(VK_DEVICE device, const VK_DYNAMIC_VP_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_VP_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateDynamicRasterStateType)(VK_DEVICE device, const VK_DYNAMIC_RS_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_RS_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateDynamicColorBlendStateType)(VK_DEVICE device, const VK_DYNAMIC_CB_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_CB_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateDynamicDepthStencilStateType)(VK_DEVICE device, const VK_DYNAMIC_DS_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_DS_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateCommandBufferType)(VK_DEVICE device, const VK_CMD_BUFFER_CREATE_INFO* pCreateInfo, VK_CMD_BUFFER* pCmdBuffer);
+typedef VK_RESULT (VKAPI *vkBeginCommandBufferType)(VK_CMD_BUFFER cmdBuffer, const VK_CMD_BUFFER_BEGIN_INFO* pBeginInfo);
+typedef VK_RESULT (VKAPI *vkEndCommandBufferType)(VK_CMD_BUFFER cmdBuffer);
+typedef VK_RESULT (VKAPI *vkResetCommandBufferType)(VK_CMD_BUFFER cmdBuffer);
+typedef void       (VKAPI *vkCmdBindPipelineType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, VK_PIPELINE pipeline);
+typedef void       (VKAPI *vkCmdBindDynamicStateObjectType)(VK_CMD_BUFFER cmdBuffer, VK_STATE_BIND_POINT stateBindPoint, VK_DYNAMIC_STATE_OBJECT state);
+typedef void       (VKAPI *vkCmdBindDescriptorSetsType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, VK_DESCRIPTOR_SET_LAYOUT_CHAIN layoutChain, uint32_t layoutChainSlot, uint32_t count, const VK_DESCRIPTOR_SET* pDescriptorSets, const uint32_t* pUserData);
+typedef void       (VKAPI *vkCmdBindIndexBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, VK_INDEX_TYPE indexType);
+typedef void       (VKAPI *vkCmdBindVertexBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, uint32_t binding);
+typedef void       (VKAPI *vkCmdDrawType)(VK_CMD_BUFFER cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount);
+typedef void       (VKAPI *vkCmdDrawIndexedType)(VK_CMD_BUFFER cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount);
+typedef void       (VKAPI *vkCmdDrawIndirectType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, uint32_t count, uint32_t stride);
+typedef void       (VKAPI *vkCmdDrawIndexedIndirectType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, uint32_t count, uint32_t stride);
+typedef void       (VKAPI *vkCmdDispatchType)(VK_CMD_BUFFER cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+typedef void       (VKAPI *vkCmdDispatchIndirectType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset);
+typedef void       (VKAPI *vkCmdCopyBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER srcBuffer, VK_BUFFER destBuffer, uint32_t regionCount, const VK_BUFFER_COPY* pRegions);
+typedef void       (VKAPI *vkCmdCopyImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const VK_IMAGE_COPY* pRegions);
+typedef void       (VKAPI *vkCmdBlitImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const VK_IMAGE_BLIT* pRegions);
+typedef void       (VKAPI *vkCmdCopyBufferToImageType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER srcBuffer, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const VK_BUFFER_IMAGE_COPY* pRegions);
+typedef void       (VKAPI *vkCmdCopyImageToBufferType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_BUFFER destBuffer, uint32_t regionCount, const VK_BUFFER_IMAGE_COPY* pRegions);
+typedef void       (VKAPI *vkCmdCloneImageDataType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout);
+typedef void       (VKAPI *vkCmdUpdateBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset, VK_GPU_SIZE dataSize, const uint32_t* pData);
+typedef void       (VKAPI *vkCmdFillBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset, VK_GPU_SIZE fillSize, uint32_t data);
+typedef void       (VKAPI *vkCmdClearColorImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE image, VK_IMAGE_LAYOUT imageLayout, VK_CLEAR_COLOR color, uint32_t rangeCount, const VK_IMAGE_SUBRESOURCE_RANGE* pRanges);
+typedef void       (VKAPI *vkCmdClearDepthStencilType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE image, VK_IMAGE_LAYOUT imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VK_IMAGE_SUBRESOURCE_RANGE* pRanges);
+typedef void       (VKAPI *vkCmdResolveImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t rectCount, const VK_IMAGE_RESOLVE* pRects);
+typedef void       (VKAPI *vkCmdSetEventType)(VK_CMD_BUFFER cmdBuffer, VK_EVENT event, VK_PIPE_EVENT pipeEvent);
+typedef void       (VKAPI *vkCmdResetEventType)(VK_CMD_BUFFER cmdBuffer, VK_EVENT event, VK_PIPE_EVENT pipeEvent);
+typedef void       (VKAPI *vkCmdWaitEventsType)(VK_CMD_BUFFER cmdBuffer, const VK_EVENT_WAIT_INFO* pWaitInfo);
+typedef void       (VKAPI *vkCmdPipelineBarrierType)(VK_CMD_BUFFER cmdBuffer, const VK_PIPELINE_BARRIER* pBarrier);
+typedef void       (VKAPI *vkCmdBeginQueryType)(VK_CMD_BUFFER cmdBuffer, VK_QUERY_POOL queryPool, uint32_t slot, VK_FLAGS flags);
+typedef void       (VKAPI *vkCmdEndQueryType)(VK_CMD_BUFFER cmdBuffer, VK_QUERY_POOL queryPool, uint32_t slot);
+typedef void       (VKAPI *vkCmdResetQueryPoolType)(VK_CMD_BUFFER cmdBuffer, VK_QUERY_POOL queryPool, uint32_t startQuery, uint32_t queryCount);
+typedef void       (VKAPI *vkCmdWriteTimestampType)(VK_CMD_BUFFER cmdBuffer, VK_TIMESTAMP_TYPE timestampType, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset);
+typedef void       (VKAPI *vkCmdInitAtomicCountersType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData);
+typedef void       (VKAPI *vkCmdLoadAtomicCountersType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VK_BUFFER srcBuffer, VK_GPU_SIZE srcOffset);
+typedef void       (VKAPI *vkCmdSaveAtomicCountersType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset);
+typedef VK_RESULT (VKAPI *vkCreateFramebufferType)(VK_DEVICE device, const VK_FRAMEBUFFER_CREATE_INFO* pCreateInfo, VK_FRAMEBUFFER* pFramebuffer);
+typedef VK_RESULT (VKAPI *vkCreateRenderPassType)(VK_DEVICE device, const VK_RENDER_PASS_CREATE_INFO* pCreateInfo, VK_RENDER_PASS* pRenderPass);
+typedef void       (VKAPI *vkCmdBeginRenderPassType)(VK_CMD_BUFFER cmdBuffer, const VK_RENDER_PASS_BEGIN* pRenderPassBegin);
+typedef void       (VKAPI *vkCmdEndRenderPassType)(VK_CMD_BUFFER cmdBuffer, VK_RENDER_PASS renderPass);
+
+#ifdef VK_PROTOTYPES
+
+// GPU initialization
+
+VK_RESULT VKAPI vkCreateInstance(
+    const VK_INSTANCE_CREATE_INFO*             pCreateInfo,
+    VK_INSTANCE*                               pInstance);
+
+VK_RESULT VKAPI vkDestroyInstance(
+    VK_INSTANCE                                instance);
+
+VK_RESULT VKAPI vkEnumerateGpus(
+    VK_INSTANCE                                instance,
+    uint32_t                                    maxGpus,
+    uint32_t*                                   pGpuCount,
+    VK_PHYSICAL_GPU*                           pGpus);
+
+VK_RESULT VKAPI vkGetGpuInfo(
+    VK_PHYSICAL_GPU                            gpu,
+    VK_PHYSICAL_GPU_INFO_TYPE                  infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+void * VKAPI vkGetProcAddr(
+    VK_PHYSICAL_GPU                            gpu,
+    const char*                                 pName);
+
+// Device functions
+
+VK_RESULT VKAPI vkCreateDevice(
+    VK_PHYSICAL_GPU                            gpu,
+    const VK_DEVICE_CREATE_INFO*               pCreateInfo,
+    VK_DEVICE*                                 pDevice);
+
+VK_RESULT VKAPI vkDestroyDevice(
+    VK_DEVICE                                  device);
+
+// Extension discovery functions
+
+VK_RESULT VKAPI vkGetExtensionSupport(
+    VK_PHYSICAL_GPU                            gpu,
+    const char*                                 pExtName);
+
+// Layer discovery functions
+
+VK_RESULT VKAPI vkEnumerateLayers(
+    VK_PHYSICAL_GPU                            gpu,
+    size_t                                      maxLayerCount,
+    size_t                                      maxStringSize,
+    size_t*                                     pOutLayerCount,
+    char* const*                                pOutLayers,
+    void*                                       pReserved);
+
+// Queue functions
+
+VK_RESULT VKAPI vkGetDeviceQueue(
+    VK_DEVICE                                  device,
+    uint32_t                                    queueNodeIndex,
+    uint32_t                                    queueIndex,
+    VK_QUEUE*                                  pQueue);
+
+VK_RESULT VKAPI vkQueueSubmit(
+    VK_QUEUE                                   queue,
+    uint32_t                                    cmdBufferCount,
+    const VK_CMD_BUFFER*                       pCmdBuffers,
+    VK_FENCE                                   fence);
+
+VK_RESULT VKAPI vkQueueAddMemReference(
+    VK_QUEUE                                   queue,
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkQueueRemoveMemReference(
+    VK_QUEUE                                   queue,
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkQueueWaitIdle(
+    VK_QUEUE                                   queue);
+
+VK_RESULT VKAPI vkDeviceWaitIdle(
+    VK_DEVICE                                  device);
+
+// Memory functions
+
+VK_RESULT VKAPI vkAllocMemory(
+    VK_DEVICE                                  device,
+    const VK_MEMORY_ALLOC_INFO*                pAllocInfo,
+    VK_GPU_MEMORY*                             pMem);
+
+VK_RESULT VKAPI vkFreeMemory(
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkSetMemoryPriority(
+    VK_GPU_MEMORY                              mem,
+    VK_MEMORY_PRIORITY                         priority);
+
+VK_RESULT VKAPI vkMapMemory(
+    VK_GPU_MEMORY                              mem,
+    VK_FLAGS                                   flags,                // Reserved
+    void**                                      ppData);
+
+VK_RESULT VKAPI vkUnmapMemory(
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkPinSystemMemory(
+    VK_DEVICE                                  device,
+    const void*                                 pSysMem,
+    size_t                                      memSize,
+    VK_GPU_MEMORY*                             pMem);
+
+// Multi-device functions
+
+VK_RESULT VKAPI vkGetMultiGpuCompatibility(
+    VK_PHYSICAL_GPU                            gpu0,
+    VK_PHYSICAL_GPU                            gpu1,
+    VK_GPU_COMPATIBILITY_INFO*                 pInfo);
+
+VK_RESULT VKAPI vkOpenSharedMemory(
+    VK_DEVICE                                  device,
+    const VK_MEMORY_OPEN_INFO*                 pOpenInfo,
+    VK_GPU_MEMORY*                             pMem);
+
+VK_RESULT VKAPI vkOpenSharedSemaphore(
+    VK_DEVICE                                  device,
+    const VK_SEMAPHORE_OPEN_INFO*              pOpenInfo,
+    VK_SEMAPHORE*                              pSemaphore);
+
+VK_RESULT VKAPI vkOpenPeerMemory(
+    VK_DEVICE                                  device,
+    const VK_PEER_MEMORY_OPEN_INFO*            pOpenInfo,
+    VK_GPU_MEMORY*                             pMem);
+
+VK_RESULT VKAPI vkOpenPeerImage(
+    VK_DEVICE                                  device,
+    const VK_PEER_IMAGE_OPEN_INFO*             pOpenInfo,
+    VK_IMAGE*                                  pImage,
+    VK_GPU_MEMORY*                             pMem);
+
+// Generic API object functions
+
+VK_RESULT VKAPI vkDestroyObject(
+    VK_OBJECT                                  object);
+
+VK_RESULT VKAPI vkGetObjectInfo(
+    VK_BASE_OBJECT                             object,
+    VK_OBJECT_INFO_TYPE                        infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+VK_RESULT VKAPI vkBindObjectMemory(
+    VK_OBJECT                                  object,
+    uint32_t                                    allocationIdx,
+    VK_GPU_MEMORY                              mem,
+    VK_GPU_SIZE                                memOffset);
+
+VK_RESULT VKAPI vkBindObjectMemoryRange(
+    VK_OBJECT                                  object,
+    uint32_t                                    allocationIdx,
+    VK_GPU_SIZE                                rangeOffset,
+    VK_GPU_SIZE                                rangeSize,
+    VK_GPU_MEMORY                              mem,
+    VK_GPU_SIZE                                memOffset);
+
+VK_RESULT VKAPI vkBindImageMemoryRange(
+    VK_IMAGE                                   image,
+    uint32_t                                    allocationIdx,
+    const VK_IMAGE_MEMORY_BIND_INFO*           bindInfo,
+    VK_GPU_MEMORY                              mem,
+    VK_GPU_SIZE                                memOffset);
+
+// Fence functions
+
+VK_RESULT VKAPI vkCreateFence(
+    VK_DEVICE                                  device,
+    const VK_FENCE_CREATE_INFO*                pCreateInfo,
+    VK_FENCE*                                  pFence);
+
+VK_RESULT VKAPI vkResetFences(
+    VK_DEVICE                                  device,
+    uint32_t                                    fenceCount,
+    VK_FENCE*                                  pFences);
+
+VK_RESULT VKAPI vkGetFenceStatus(
+    VK_FENCE fence);
+
+VK_RESULT VKAPI vkWaitForFences(
+    VK_DEVICE                                  device,
+    uint32_t                                    fenceCount,
+    const VK_FENCE*                            pFences,
+    bool32_t                                    waitAll,
+    uint64_t                                    timeout); // timeout in nanoseconds
+
+// Queue semaphore functions
+
+VK_RESULT VKAPI vkCreateSemaphore(
+    VK_DEVICE                                  device,
+    const VK_SEMAPHORE_CREATE_INFO*            pCreateInfo,
+    VK_SEMAPHORE*                              pSemaphore);
+
+VK_RESULT VKAPI vkQueueSignalSemaphore(
+    VK_QUEUE                                   queue,
+    VK_SEMAPHORE                               semaphore);
+
+VK_RESULT VKAPI vkQueueWaitSemaphore(
+    VK_QUEUE                                   queue,
+    VK_SEMAPHORE                               semaphore);
+
+// Event functions
+
+VK_RESULT VKAPI vkCreateEvent(
+    VK_DEVICE                                  device,
+    const VK_EVENT_CREATE_INFO*                pCreateInfo,
+    VK_EVENT*                                  pEvent);
+
+VK_RESULT VKAPI vkGetEventStatus(
+    VK_EVENT                                   event);
+
+VK_RESULT VKAPI vkSetEvent(
+    VK_EVENT                                   event);
+
+VK_RESULT VKAPI vkResetEvent(
+    VK_EVENT                                   event);
+
+// Query functions
+
+VK_RESULT VKAPI vkCreateQueryPool(
+    VK_DEVICE                                  device,
+    const VK_QUERY_POOL_CREATE_INFO*           pCreateInfo,
+    VK_QUERY_POOL*                             pQueryPool);
+
+VK_RESULT VKAPI vkGetQueryPoolResults(
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    startQuery,
+    uint32_t                                    queryCount,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+// Format capabilities
+
+VK_RESULT VKAPI vkGetFormatInfo(
+    VK_DEVICE                                  device,
+    VK_FORMAT                                  format,
+    VK_FORMAT_INFO_TYPE                        infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+// Buffer functions
+
+VK_RESULT VKAPI vkCreateBuffer(
+    VK_DEVICE                                  device,
+    const VK_BUFFER_CREATE_INFO*               pCreateInfo,
+    VK_BUFFER*                                 pBuffer);
+
+// Buffer view functions
+
+VK_RESULT VKAPI vkCreateBufferView(
+    VK_DEVICE                                  device,
+    const VK_BUFFER_VIEW_CREATE_INFO*          pCreateInfo,
+    VK_BUFFER_VIEW*                            pView);
+
+// Image functions
+
+VK_RESULT VKAPI vkCreateImage(
+    VK_DEVICE                                  device,
+    const VK_IMAGE_CREATE_INFO*                pCreateInfo,
+    VK_IMAGE*                                  pImage);
+
+VK_RESULT VKAPI vkGetImageSubresourceInfo(
+    VK_IMAGE                                   image,
+    const VK_IMAGE_SUBRESOURCE*                pSubresource,
+    VK_SUBRESOURCE_INFO_TYPE                   infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+// Image view functions
+
+VK_RESULT VKAPI vkCreateImageView(
+    VK_DEVICE                                  device,
+    const VK_IMAGE_VIEW_CREATE_INFO*           pCreateInfo,
+    VK_IMAGE_VIEW*                             pView);
+
+VK_RESULT VKAPI vkCreateColorAttachmentView(
+    VK_DEVICE                                  device,
+    const VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo,
+    VK_COLOR_ATTACHMENT_VIEW*                  pView);
+
+VK_RESULT VKAPI vkCreateDepthStencilView(
+    VK_DEVICE                                  device,
+    const VK_DEPTH_STENCIL_VIEW_CREATE_INFO*   pCreateInfo,
+    VK_DEPTH_STENCIL_VIEW*                     pView);
+
+// Shader functions
+
+VK_RESULT VKAPI vkCreateShader(
+    VK_DEVICE                                  device,
+    const VK_SHADER_CREATE_INFO*               pCreateInfo,
+    VK_SHADER*                                 pShader);
+
+// Pipeline functions
+
+VK_RESULT VKAPI vkCreateGraphicsPipeline(
+    VK_DEVICE                                  device,
+    const VK_GRAPHICS_PIPELINE_CREATE_INFO*    pCreateInfo,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkCreateGraphicsPipelineDerivative(
+    VK_DEVICE                                  device,
+    const VK_GRAPHICS_PIPELINE_CREATE_INFO*    pCreateInfo,
+    VK_PIPELINE                                basePipeline,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkCreateComputePipeline(
+    VK_DEVICE                                  device,
+    const VK_COMPUTE_PIPELINE_CREATE_INFO*     pCreateInfo,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkStorePipeline(
+    VK_PIPELINE                                pipeline,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+VK_RESULT VKAPI vkLoadPipeline(
+    VK_DEVICE                                  device,
+    size_t                                      dataSize,
+    const void*                                 pData,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkLoadPipelineDerivative(
+    VK_DEVICE                                  device,
+    size_t                                      dataSize,
+    const void*                                 pData,
+    VK_PIPELINE                                basePipeline,
+    VK_PIPELINE*                               pPipeline);
+
+// Sampler functions
+
+VK_RESULT VKAPI vkCreateSampler(
+    VK_DEVICE                                  device,
+    const VK_SAMPLER_CREATE_INFO*              pCreateInfo,
+    VK_SAMPLER*                                pSampler);
+
+// Descriptor set functions
+
+VK_RESULT VKAPI vkCreateDescriptorSetLayout(
+    VK_DEVICE                                   device,
+    const VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo,
+    VK_DESCRIPTOR_SET_LAYOUT*                   pSetLayout);
+
+VK_RESULT VKAPI vkCreateDescriptorSetLayoutChain(
+    VK_DEVICE                                   device,
+    uint32_t                                     setLayoutArrayCount,
+    const VK_DESCRIPTOR_SET_LAYOUT*             pSetLayoutArray,
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN*             pLayoutChain);
+
+VK_RESULT VKAPI vkBeginDescriptorPoolUpdate(
+    VK_DEVICE                                   device,
+    VK_DESCRIPTOR_UPDATE_MODE                   updateMode);
+
+VK_RESULT VKAPI vkEndDescriptorPoolUpdate(
+    VK_DEVICE                                   device,
+    VK_CMD_BUFFER                               cmd);
+
+VK_RESULT VKAPI vkCreateDescriptorPool(
+    VK_DEVICE                                   device,
+    VK_DESCRIPTOR_POOL_USAGE                    poolUsage,
+    uint32_t                                     maxSets,
+    const VK_DESCRIPTOR_POOL_CREATE_INFO*       pCreateInfo,
+    VK_DESCRIPTOR_POOL*                         pDescriptorPool);
+
+VK_RESULT VKAPI vkResetDescriptorPool(
+    VK_DESCRIPTOR_POOL                          descriptorPool);
+
+VK_RESULT VKAPI vkAllocDescriptorSets(
+    VK_DESCRIPTOR_POOL                          descriptorPool,
+    VK_DESCRIPTOR_SET_USAGE                     setUsage,
+    uint32_t                                     count,
+    const VK_DESCRIPTOR_SET_LAYOUT*             pSetLayouts,
+    VK_DESCRIPTOR_SET*                          pDescriptorSets,
+    uint32_t*                                    pCount);
+
+void VKAPI vkClearDescriptorSets(
+    VK_DESCRIPTOR_POOL                          descriptorPool,
+    uint32_t                                     count,
+    const VK_DESCRIPTOR_SET*                    pDescriptorSets);
+
+void VKAPI vkUpdateDescriptors(
+    VK_DESCRIPTOR_SET                           descriptorSet,
+    uint32_t                                     updateCount,
+    const void**                                 ppUpdateArray);
+
+// State object functions
+
+VK_RESULT VKAPI vkCreateDynamicViewportState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_VP_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_VP_STATE_OBJECT*                pState);
+
+VK_RESULT VKAPI vkCreateDynamicRasterState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_RS_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_RS_STATE_OBJECT*                pState);
+
+VK_RESULT VKAPI vkCreateDynamicColorBlendState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_CB_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_CB_STATE_OBJECT*                pState);
+
+VK_RESULT VKAPI vkCreateDynamicDepthStencilState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_DS_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_DS_STATE_OBJECT*                pState);
+
+// Command buffer functions
+
+VK_RESULT VKAPI vkCreateCommandBuffer(
+    VK_DEVICE                                  device,
+    const VK_CMD_BUFFER_CREATE_INFO*           pCreateInfo,
+    VK_CMD_BUFFER*                             pCmdBuffer);
+
+VK_RESULT VKAPI vkBeginCommandBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_CMD_BUFFER_BEGIN_INFO*            pBeginInfo);
+
+VK_RESULT VKAPI vkEndCommandBuffer(
+    VK_CMD_BUFFER                              cmdBuffer);
+
+VK_RESULT VKAPI vkResetCommandBuffer(
+    VK_CMD_BUFFER                              cmdBuffer);
+
+// Command buffer building functions
+
+void VKAPI vkCmdBindPipeline(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    VK_PIPELINE                                pipeline);
+
+void VKAPI vkCmdBindDynamicStateObject(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_STATE_BIND_POINT                        stateBindPoint,
+    VK_DYNAMIC_STATE_OBJECT                    dynamicState);
+
+void VKAPI vkCmdBindDescriptorSets(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN             layoutChain,
+    uint32_t                                    layoutChainSlot,
+    uint32_t                                    count,
+    const VK_DESCRIPTOR_SET*                   pDescriptorSets,
+    const uint32_t*                             pUserData);
+
+void VKAPI vkCmdBindIndexBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    VK_INDEX_TYPE                              indexType);
+
+void VKAPI vkCmdBindVertexBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    uint32_t                                    binding);
+
+void VKAPI vkCmdDraw(
+    VK_CMD_BUFFER                              cmdBuffer,
+    uint32_t                                    firstVertex,
+    uint32_t                                    vertexCount,
+    uint32_t                                    firstInstance,
+    uint32_t                                    instanceCount);
+
+void VKAPI vkCmdDrawIndexed(
+    VK_CMD_BUFFER                              cmdBuffer,
+    uint32_t                                    firstIndex,
+    uint32_t                                    indexCount,
+    int32_t                                     vertexOffset,
+    uint32_t                                    firstInstance,
+    uint32_t                                    instanceCount);
+
+void VKAPI vkCmdDrawIndirect(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    uint32_t                                    count,
+    uint32_t                                    stride);
+
+void VKAPI vkCmdDrawIndexedIndirect(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    uint32_t                                    count,
+    uint32_t                                    stride);
+
+void VKAPI vkCmdDispatch(
+    VK_CMD_BUFFER                              cmdBuffer,
+    uint32_t                                    x,
+    uint32_t                                    y,
+    uint32_t                                    z);
+
+void VKAPI vkCmdDispatchIndirect(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset);
+
+void VKAPI vkCmdCopyBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  srcBuffer,
+    VK_BUFFER                                  destBuffer,
+    uint32_t                                    regionCount,
+    const VK_BUFFER_COPY*                      pRegions);
+
+void VKAPI vkCmdCopyImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    regionCount,
+    const VK_IMAGE_COPY*                       pRegions);
+
+void VKAPI vkCmdBlitImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    regionCount,
+    const VK_IMAGE_BLIT*                       pRegions);
+
+void VKAPI vkCmdCopyBufferToImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  srcBuffer,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    regionCount,
+    const VK_BUFFER_IMAGE_COPY*                pRegions);
+
+void VKAPI vkCmdCopyImageToBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_BUFFER                                  destBuffer,
+    uint32_t                                    regionCount,
+    const VK_BUFFER_IMAGE_COPY*                pRegions);
+
+void VKAPI vkCmdCloneImageData(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout);
+
+void VKAPI vkCmdUpdateBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset,
+    VK_GPU_SIZE                                dataSize,
+    const uint32_t*                             pData);
+
+void VKAPI vkCmdFillBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset,
+    VK_GPU_SIZE                                fillSize,
+    uint32_t                                    data);
+
+void VKAPI vkCmdClearColorImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   image,
+    VK_IMAGE_LAYOUT                            imageLayout,
+    VK_CLEAR_COLOR                             color,
+    uint32_t                                    rangeCount,
+    const VK_IMAGE_SUBRESOURCE_RANGE*          pRanges);
+
+void VKAPI vkCmdClearDepthStencil(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   image,
+    VK_IMAGE_LAYOUT                            imageLayout,
+    float                                       depth,
+    uint32_t                                    stencil,
+    uint32_t                                    rangeCount,
+    const VK_IMAGE_SUBRESOURCE_RANGE*          pRanges);
+
+void VKAPI vkCmdResolveImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    rectCount,
+    const VK_IMAGE_RESOLVE*                    pRects);
+
+void VKAPI vkCmdSetEvent(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_EVENT                                   event,
+    VK_PIPE_EVENT                              pipeEvent);
+
+void VKAPI vkCmdResetEvent(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_EVENT                                   event,
+    VK_PIPE_EVENT                              pipeEvent);
+
+void VKAPI vkCmdWaitEvents(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_EVENT_WAIT_INFO*                  pWaitInfo);
+
+void VKAPI vkCmdPipelineBarrier(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_PIPELINE_BARRIER*                 pBarrier);
+
+void VKAPI vkCmdBeginQuery(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    slot,
+    VK_FLAGS                                   flags);
+
+void VKAPI vkCmdEndQuery(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    slot);
+
+void VKAPI vkCmdResetQueryPool(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    startQuery,
+    uint32_t                                    queryCount);
+
+void VKAPI vkCmdWriteTimestamp(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_TIMESTAMP_TYPE                          timestampType,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset);
+
+void VKAPI vkCmdInitAtomicCounters(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    uint32_t                                    startCounter,
+    uint32_t                                    counterCount,
+    const uint32_t*                             pData);
+
+void VKAPI vkCmdLoadAtomicCounters(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    uint32_t                                    startCounter,
+    uint32_t                                    counterCount,
+    VK_BUFFER                                  srcBuffer,
+    VK_GPU_SIZE                                srcOffset);
+
+void VKAPI vkCmdSaveAtomicCounters(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    uint32_t                                    startCounter,
+    uint32_t                                    counterCount,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset);
+
+VK_RESULT VKAPI vkCreateFramebuffer(
+    VK_DEVICE                                  device,
+    const VK_FRAMEBUFFER_CREATE_INFO*          pCreateInfo,
+    VK_FRAMEBUFFER*                            pFramebuffer);
+
+VK_RESULT VKAPI vkCreateRenderPass(
+    VK_DEVICE                                  device,
+    const VK_RENDER_PASS_CREATE_INFO*          pCreateInfo,
+    VK_RENDER_PASS*                            pRenderPass);
+
+void VKAPI vkCmdBeginRenderPass(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_RENDER_PASS_BEGIN*                pRenderPassBegin);
+
+void VKAPI vkCmdEndRenderPass(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_RENDER_PASS                             renderPass);
+
+#endif // VK_PROTOTYPES
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // __VULKAN_H__
+
+/******************************************************************************************
+
+    Open Issues + Missing Features
+    ------------------------------
+
+    Here are a few higher level issues that we'd like to fix given time. A feature missing
+    from this header (or the following list) isn't necessarily an indication that we want
+    to drop that feature. Only that we either haven't thought of it or haven't had time
+    to add it yet.
+
+    1) Transform Feedback (XFB)
+
+    OpenGL supports transform feedback (XFB). That is not included in this header, but
+    we feel there is likely value in including it.
+
+    To incorporate trasnform feedback, we could create a new pipeline stage. This would
+    be injected into a PSO by including the following in the chain:
+
+    typedef struct _VK_XFB_CREATE_INFO
+    {
+        VK_STRUCTURE_TYPE    sType;  // Must be VK_STRUCTURE_TYPE_PIPELINE_XFB_CREATE_INFO
+        const void*           pNext;  // Pointer to next structure
+        // More XFB state, if any goes here
+    } VK_DEPTH_STENCIL_VIEW_CREATE_INFO;
+
+    We expect that only the shader-side configuration (via layout qualifiers or their IR
+    equivalent) is used to configure the data written to each stream. When transform
+    feedback is part of the pipeline, transform feedback binding would be available
+    through a new API bind point:
+
+        vkCmdBindTransformFeedbackMemoryView(
+                VK_CMD_BUFFER                              cmdBuffer,
+                VK_PIPELINE_BIND_POINT                     pipelineBindPoint, // = GRAPHICS
+                uint32_t                                    index,
+                const VK_MEMORY_VIEW_ATTACH_INFO*          pMemView);
+
+    2) "Bindless" + support for non-bindless hardware.
+
+    VK doesn't have bindless textures the way that GL does. It has resource descriptor
+    sets, or resource tables. Resource tables can be nested and hold references to more
+    resource tables. They are explicitly sized by the application and have no artificial
+    upper size limit. An application can still attach as many textures as they want to
+    a resource descriptor set, and can modify the set asynchronously to GPU work.
+    Therefore, we can still have "unlimited textures". An application hoping to use
+    bindless can use an index into a large table of textures and achieve the same effect.
+
+    For non-bindless hardware, with fixed (but potentially large) register files for
+    resource bindings, the table approach should still work if a limited size can be
+    reported somehow.
+
+    3) Clean up some remaining Mantle'isms.
+
+    Queue types: It's a bit hand wavey. In Mantle, we have a "universal" queue type that
+    supports compute and graphics and a "compute" queue that only supports compute. Devices
+    must support at least one universal queue and DMA queues are an extension. I would like
+    to do the following (and have attempted to do that here, but am only half done):
+
+        a) Separate out the queue capabilities (compute, DMA, graphics) and allow support
+           for any number of queues with any combination of capabilities each.
+
+        b) Allow compute-only or even DMA-only (like video capture or SDI) devices to
+           be supported.
+
+        c) Allow new queue types to be supported by extensions without having to allocate
+           bits in the bitfield until they're promoted to core.
+
+    Terminology: There are still some references to "targets" (render targets) and other
+    terminology that has been changed from Mantle. Need to do a clean-up pass.
+
+    4) The window system interface is an extension in Mantle. We have not tried to fold
+       any of it into core here. There is no mention of SwapBuffers, presentation, default
+       framebuffers or anything like that. In the extension, presentation is queued up into
+       the graphics queue just like any other command.
+
+*******************************************************************************************/
diff --git a/include/vkDbg.h b/include/vkDbg.h
new file mode 100644
index 0000000..fb22482
--- /dev/null
+++ b/include/vkDbg.h
@@ -0,0 +1,171 @@
+#ifndef __VKDBG_H__
+#define __VKDBG_H__
+
+#include <vulkan.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+typedef enum _VK_DBG_MSG_TYPE
+{
+    VK_DBG_MSG_UNKNOWN      = 0x0,
+    VK_DBG_MSG_ERROR        = 0x1,
+    VK_DBG_MSG_WARNING      = 0x2,
+    VK_DBG_MSG_PERF_WARNING = 0x3,
+
+    VK_DBG_MSG_TYPE_BEGIN_RANGE = VK_DBG_MSG_UNKNOWN,
+    VK_DBG_MSG_TYPE_END_RANGE   = VK_DBG_MSG_PERF_WARNING,
+    VK_NUM_DBG_MSG_TYPE         = (VK_DBG_MSG_TYPE_END_RANGE - VK_DBG_MSG_TYPE_BEGIN_RANGE + 1),
+} VK_DBG_MSG_TYPE;
+
+typedef enum _VK_DBG_MSG_FILTER
+{
+    VK_DBG_MSG_FILTER_NONE     = 0x0,
+    VK_DBG_MSG_FILTER_REPEATED = 0x1,
+    VK_DBG_MSG_FILTER_ALL      = 0x2,
+
+    VK_DBG_MSG_FILTER_BEGIN_RANGE = VK_DBG_MSG_FILTER_NONE,
+    VK_DBG_MSG_FILTER_END_RANGE   = VK_DBG_MSG_FILTER_ALL,
+    VK_NUM_DBG_MSG_FILTER         = (VK_DBG_MSG_FILTER_END_RANGE - VK_DBG_MSG_FILTER_BEGIN_RANGE + 1),
+} VK_DBG_MSG_FILTER;
+
+typedef enum _VK_DBG_GLOBAL_OPTION
+{
+    VK_DBG_OPTION_DEBUG_ECHO_ENABLE = 0x0,
+    VK_DBG_OPTION_BREAK_ON_ERROR    = 0x1,
+    VK_DBG_OPTION_BREAK_ON_WARNING  = 0x2,
+
+    VK_DBG_GLOBAL_OPTION_BEGIN_RANGE = VK_DBG_OPTION_DEBUG_ECHO_ENABLE,
+    VK_DBG_GLOBAL_OPTION_END_RANGE   = VK_DBG_OPTION_BREAK_ON_WARNING,
+    VK_NUM_DBG_GLOBAL_OPTION         = (VK_DBG_GLOBAL_OPTION_END_RANGE - VK_DBG_GLOBAL_OPTION_BEGIN_RANGE + 1),
+} VK_DBG_GLOBAL_OPTION;
+
+typedef enum _VK_DBG_DEVICE_OPTION
+{
+    VK_DBG_OPTION_DISABLE_PIPELINE_LOADS      = 0x0,
+    VK_DBG_OPTION_FORCE_OBJECT_MEMORY_REQS    = 0x1,
+    VK_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT = 0x2,
+
+    VK_DBG_DEVICE_OPTION_BEGIN_RANGE = VK_DBG_OPTION_DISABLE_PIPELINE_LOADS,
+    VK_DBG_DEVICE_OPTION_END_RANGE   = VK_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT,
+    VK_NUM_DBG_DEVICE_OPTION         = (VK_DBG_DEVICE_OPTION_END_RANGE - VK_DBG_DEVICE_OPTION_BEGIN_RANGE + 1),
+} VK_DBG_DEVICE_OPTION;
+
+typedef enum _VK_DBG_OBJECT_TYPE
+{
+    VK_DBG_OBJECT_UNKNOWN                = 0x00,
+    VK_DBG_OBJECT_DEVICE                 = 0x01,
+    VK_DBG_OBJECT_QUEUE                  = 0x02,
+    VK_DBG_OBJECT_GPU_MEMORY             = 0x03,
+    VK_DBG_OBJECT_IMAGE                  = 0x04,
+    VK_DBG_OBJECT_IMAGE_VIEW             = 0x05,
+    VK_DBG_OBJECT_COLOR_TARGET_VIEW      = 0x06,
+    VK_DBG_OBJECT_DEPTH_STENCIL_VIEW     = 0x07,
+    VK_DBG_OBJECT_SHADER                 = 0x08,
+    VK_DBG_OBJECT_GRAPHICS_PIPELINE      = 0x09,
+    VK_DBG_OBJECT_COMPUTE_PIPELINE       = 0x0a,
+    VK_DBG_OBJECT_SAMPLER                = 0x0b,
+    VK_DBG_OBJECT_DESCRIPTOR_SET         = 0x0c,
+    VK_DBG_OBJECT_VIEWPORT_STATE         = 0x0d,
+    VK_DBG_OBJECT_RASTER_STATE           = 0x0e,
+    VK_DBG_OBJECT_MSAA_STATE             = 0x0f,
+    VK_DBG_OBJECT_COLOR_BLEND_STATE      = 0x10,
+    VK_DBG_OBJECT_DEPTH_STENCIL_STATE    = 0x11,
+    VK_DBG_OBJECT_CMD_BUFFER             = 0x12,
+    VK_DBG_OBJECT_FENCE                  = 0x13,
+    VK_DBG_OBJECT_SEMAPHORE              = 0x14,
+    VK_DBG_OBJECT_EVENT                  = 0x15,
+    VK_DBG_OBJECT_QUERY_POOL             = 0x16,
+    VK_DBG_OBJECT_SHARED_GPU_MEMORY      = 0x17,
+    VK_DBG_OBJECT_SHARED_SEMAPHORE       = 0x18,
+    VK_DBG_OBJECT_PEER_GPU_MEMORY        = 0x19,
+    VK_DBG_OBJECT_PEER_IMAGE             = 0x1a,
+    VK_DBG_OBJECT_PINNED_GPU_MEMORY      = 0x1b,
+    VK_DBG_OBJECT_INTERNAL_GPU_MEMORY    = 0x1c,
+    VK_DBG_OBJECT_FRAMEBUFFER            = 0x1d,
+    VK_DBG_OBJECT_RENDER_PASS            = 0x1e,
+
+    VK_DBG_OBJECT_INSTANCE,
+    VK_DBG_OBJECT_BUFFER,
+    VK_DBG_OBJECT_BUFFER_VIEW,
+    VK_DBG_OBJECT_DESCRIPTOR_SET_LAYOUT,
+    VK_DBG_OBJECT_DESCRIPTOR_SET_LAYOUT_CHAIN,
+    VK_DBG_OBJECT_DESCRIPTOR_POOL,
+
+    VK_DBG_OBJECT_TYPE_BEGIN_RANGE = VK_DBG_OBJECT_UNKNOWN,
+    VK_DBG_OBJECT_TYPE_END_RANGE   = VK_DBG_OBJECT_DESCRIPTOR_POOL,
+    VK_NUM_DBG_OBJECT_TYPE         = (VK_DBG_OBJECT_TYPE_END_RANGE - VK_DBG_OBJECT_TYPE_BEGIN_RANGE + 1),
+} VK_DBG_OBJECT_TYPE;
+
+typedef void (VKAPI *VK_DBG_MSG_CALLBACK_FUNCTION)(
+    VK_DBG_MSG_TYPE     msgType,
+    VK_VALIDATION_LEVEL validationLevel,
+    VK_BASE_OBJECT      srcObject,
+    size_t               location,
+    int32_t              msgCode,
+    const char*          pMsg,
+    void*                pUserData);
+
+// Debug functions
+typedef VK_RESULT (VKAPI *vkDbgSetValidationLevelType)(VK_DEVICE device, VK_VALIDATION_LEVEL validationLevel);
+typedef VK_RESULT (VKAPI *vkDbgRegisterMsgCallbackType)(VK_INSTANCE instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData);
+typedef VK_RESULT (VKAPI *vkDbgUnregisterMsgCallbackType)(VK_INSTANCE instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
+typedef VK_RESULT (VKAPI *vkDbgSetMessageFilterType)(VK_DEVICE device, int32_t msgCode, VK_DBG_MSG_FILTER filter);
+typedef VK_RESULT (VKAPI *vkDbgSetObjectTagType)(VK_BASE_OBJECT object, size_t tagSize, const void* pTag);
+typedef VK_RESULT (VKAPI *vkDbgSetGlobalOptionType)(VK_INSTANCE instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData);
+typedef VK_RESULT (VKAPI *vkDbgSetDeviceOptionType)(VK_DEVICE device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData);
+typedef void (VKAPI *vkCmdDbgMarkerBeginType)(VK_CMD_BUFFER cmdBuffer, const char* pMarker);
+typedef void (VKAPI *vkCmdDbgMarkerEndType)(VK_CMD_BUFFER cmdBuffer);
+
+#ifdef VK_PROTOTYPES
+VK_RESULT VKAPI vkDbgSetValidationLevel(
+    VK_DEVICE           device,
+    VK_VALIDATION_LEVEL validationLevel);
+
+VK_RESULT VKAPI vkDbgRegisterMsgCallback(
+    VK_INSTANCE                  instance,
+    VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback,
+    void*                         pUserData);
+
+VK_RESULT VKAPI vkDbgUnregisterMsgCallback(
+    VK_INSTANCE                  instance,
+    VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
+
+VK_RESULT VKAPI vkDbgSetMessageFilter(
+    VK_DEVICE         device,
+    int32_t            msgCode,
+    VK_DBG_MSG_FILTER filter);
+
+VK_RESULT VKAPI vkDbgSetObjectTag(
+    VK_BASE_OBJECT object,
+    size_t          tagSize,
+    const void*     pTag);
+
+VK_RESULT VKAPI vkDbgSetGlobalOption(
+    VK_INSTANCE          instance,
+    VK_DBG_GLOBAL_OPTION dbgOption,
+    size_t                dataSize,
+    const void*           pData);
+
+VK_RESULT VKAPI vkDbgSetDeviceOption(
+    VK_DEVICE            device,
+    VK_DBG_DEVICE_OPTION dbgOption,
+    size_t                dataSize,
+    const void*           pData);
+
+void VKAPI vkCmdDbgMarkerBegin(
+    VK_CMD_BUFFER  cmdBuffer,
+    const char*     pMarker);
+
+void VKAPI vkCmdDbgMarkerEnd(
+    VK_CMD_BUFFER  cmdBuffer);
+
+#endif // VK_PROTOTYPES
+
+#ifdef __cplusplus
+}; // extern "C"
+#endif // __cplusplus
+
+#endif // __VKDBG_H__
diff --git a/include/vkIcd.h b/include/vkIcd.h
new file mode 100644
index 0000000..b7916a8
--- /dev/null
+++ b/include/vkIcd.h
@@ -0,0 +1,32 @@
+#ifndef VKICD_H
+#define VKICD_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "vkPlatform.h"
+
+/*
+ * The ICD must reserve space for a pointer for the loader's dispatch
+ * table, at the start of <each object>.
+ * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
+ */
+
+#define ICD_LOADER_MAGIC   0x01CDC0DE
+
+typedef union _VK_LOADER_DATA {
+  uint32_t loaderMagic;
+  void *loaderData;
+} VK_LOADER_DATA;
+
+static inline void set_loader_magic_value(void *pNewObject) {
+    VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *) pNewObject;
+    loader_info->loaderMagic = ICD_LOADER_MAGIC;
+}
+
+static inline bool valid_loader_magic_value(void *pNewObject) {
+    const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *) pNewObject;
+    return loader_info->loaderMagic == ICD_LOADER_MAGIC;
+}
+
+#endif // VKICD_H
+
diff --git a/include/vkLayer.h b/include/vkLayer.h
new file mode 100644
index 0000000..c3679a0
--- /dev/null
+++ b/include/vkLayer.h
@@ -0,0 +1,187 @@
+/* Need to define dispatch table
+ * Core struct can then have ptr to dispatch table at the top
+ * Along with object ptrs for current and next OBJ
+ */
+#pragma once
+
+#include "vulkan.h"
+#include "vkDbg.h"
+#if defined(__linux__) || defined(XCB_NVIDIA)
+#include "vkWsiX11Ext.h"
+#endif
+#if defined(__GNUC__) && __GNUC__ >= 4
+#  define VK_LAYER_EXPORT __attribute__((visibility("default")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#  define VK_LAYER_EXPORT __attribute__((visibility("default")))
+#else
+#  define VK_LAYER_EXPORT
+#endif
+
+
+typedef struct _VK_BASE_LAYER_OBJECT
+{
+    vkGetProcAddrType pGPA;
+    VK_BASE_OBJECT nextObject;
+    VK_BASE_OBJECT baseObject;
+} VK_BASE_LAYER_OBJECT;
+
+typedef struct _VK_LAYER_DISPATCH_TABLE
+{
+    vkGetProcAddrType GetProcAddr;
+    vkCreateInstanceType CreateInstance;
+    vkDestroyInstanceType DestroyInstance;
+    vkEnumerateGpusType EnumerateGpus;
+    vkGetGpuInfoType GetGpuInfo;
+    vkCreateDeviceType CreateDevice;
+    vkDestroyDeviceType DestroyDevice;
+    vkGetExtensionSupportType GetExtensionSupport;
+    vkEnumerateLayersType EnumerateLayers;
+    vkGetDeviceQueueType GetDeviceQueue;
+    vkQueueSubmitType QueueSubmit;
+    vkQueueAddMemReferenceType QueueAddMemReference;
+    vkQueueRemoveMemReferenceType QueueRemoveMemReference;
+    vkQueueWaitIdleType QueueWaitIdle;
+    vkDeviceWaitIdleType DeviceWaitIdle;
+    vkAllocMemoryType AllocMemory;
+    vkFreeMemoryType FreeMemory;
+    vkSetMemoryPriorityType SetMemoryPriority;
+    vkMapMemoryType MapMemory;
+    vkUnmapMemoryType UnmapMemory;
+    vkPinSystemMemoryType PinSystemMemory;
+    vkGetMultiGpuCompatibilityType GetMultiGpuCompatibility;
+    vkOpenSharedMemoryType OpenSharedMemory;
+    vkOpenSharedSemaphoreType OpenSharedSemaphore;
+    vkOpenPeerMemoryType OpenPeerMemory;
+    vkOpenPeerImageType OpenPeerImage;
+    vkDestroyObjectType DestroyObject;
+    vkGetObjectInfoType GetObjectInfo;
+    vkBindObjectMemoryType BindObjectMemory;
+    vkBindObjectMemoryRangeType BindObjectMemoryRange;
+    vkBindImageMemoryRangeType BindImageMemoryRange;
+    vkCreateFenceType CreateFence;
+    vkGetFenceStatusType GetFenceStatus;
+    vkResetFencesType ResetFences;
+    vkWaitForFencesType WaitForFences;
+    vkCreateSemaphoreType CreateSemaphore;
+    vkQueueSignalSemaphoreType QueueSignalSemaphore;
+    vkQueueWaitSemaphoreType QueueWaitSemaphore;
+    vkCreateEventType CreateEvent;
+    vkGetEventStatusType GetEventStatus;
+    vkSetEventType SetEvent;
+    vkResetEventType ResetEvent;
+    vkCreateQueryPoolType CreateQueryPool;
+    vkGetQueryPoolResultsType GetQueryPoolResults;
+    vkGetFormatInfoType GetFormatInfo;
+    vkCreateBufferType CreateBuffer;
+    vkCreateBufferViewType CreateBufferView;
+    vkCreateImageType CreateImage;
+    vkGetImageSubresourceInfoType GetImageSubresourceInfo;
+    vkCreateImageViewType CreateImageView;
+    vkCreateColorAttachmentViewType CreateColorAttachmentView;
+    vkCreateDepthStencilViewType CreateDepthStencilView;
+    vkCreateShaderType CreateShader;
+    vkCreateGraphicsPipelineType CreateGraphicsPipeline;
+    vkCreateGraphicsPipelineDerivativeType CreateGraphicsPipelineDerivative;
+    vkCreateComputePipelineType CreateComputePipeline;
+    vkStorePipelineType StorePipeline;
+    vkLoadPipelineType LoadPipeline;
+    vkLoadPipelineDerivativeType LoadPipelineDerivative;
+    vkCreateSamplerType CreateSampler;
+    vkCreateDescriptorSetLayoutType CreateDescriptorSetLayout;
+    vkCreateDescriptorSetLayoutChainType CreateDescriptorSetLayoutChain;
+    vkBeginDescriptorPoolUpdateType BeginDescriptorPoolUpdate;
+    vkEndDescriptorPoolUpdateType EndDescriptorPoolUpdate;
+    vkCreateDescriptorPoolType CreateDescriptorPool;
+    vkResetDescriptorPoolType ResetDescriptorPool;
+    vkAllocDescriptorSetsType AllocDescriptorSets;
+    vkClearDescriptorSetsType ClearDescriptorSets;
+    vkUpdateDescriptorsType UpdateDescriptors;
+    vkCreateDynamicViewportStateType CreateDynamicViewportState;
+    vkCreateDynamicRasterStateType CreateDynamicRasterState;
+    vkCreateDynamicColorBlendStateType CreateDynamicColorBlendState;
+    vkCreateDynamicDepthStencilStateType CreateDynamicDepthStencilState;
+    vkCreateCommandBufferType CreateCommandBuffer;
+    vkBeginCommandBufferType BeginCommandBuffer;
+    vkEndCommandBufferType EndCommandBuffer;
+    vkResetCommandBufferType ResetCommandBuffer;
+    vkCmdBindPipelineType CmdBindPipeline;
+    vkCmdBindDynamicStateObjectType CmdBindDynamicStateObject;
+    vkCmdBindDescriptorSetsType CmdBindDescriptorSets;
+    vkCmdBindVertexBufferType CmdBindVertexBuffer;
+    vkCmdBindIndexBufferType CmdBindIndexBuffer;
+    vkCmdDrawType CmdDraw;
+    vkCmdDrawIndexedType CmdDrawIndexed;
+    vkCmdDrawIndirectType CmdDrawIndirect;
+    vkCmdDrawIndexedIndirectType CmdDrawIndexedIndirect;
+    vkCmdDispatchType CmdDispatch;
+    vkCmdDispatchIndirectType CmdDispatchIndirect;
+    vkCmdCopyBufferType CmdCopyBuffer;
+    vkCmdCopyImageType CmdCopyImage;
+    vkCmdBlitImageType CmdBlitImage;
+    vkCmdCopyBufferToImageType CmdCopyBufferToImage;
+    vkCmdCopyImageToBufferType CmdCopyImageToBuffer;
+    vkCmdCloneImageDataType CmdCloneImageData;
+    vkCmdUpdateBufferType CmdUpdateBuffer;
+    vkCmdFillBufferType CmdFillBuffer;
+    vkCmdClearColorImageType CmdClearColorImage;
+    vkCmdClearDepthStencilType CmdClearDepthStencil;
+    vkCmdResolveImageType CmdResolveImage;
+    vkCmdSetEventType CmdSetEvent;
+    vkCmdResetEventType CmdResetEvent;
+    vkCmdWaitEventsType CmdWaitEvents;
+    vkCmdPipelineBarrierType CmdPipelineBarrier;
+    vkCmdBeginQueryType CmdBeginQuery;
+    vkCmdEndQueryType CmdEndQuery;
+    vkCmdResetQueryPoolType CmdResetQueryPool;
+    vkCmdWriteTimestampType CmdWriteTimestamp;
+    vkCmdInitAtomicCountersType CmdInitAtomicCounters;
+    vkCmdLoadAtomicCountersType CmdLoadAtomicCounters;
+    vkCmdSaveAtomicCountersType CmdSaveAtomicCounters;
+    vkCreateFramebufferType CreateFramebuffer;
+    vkCreateRenderPassType CreateRenderPass;
+    vkCmdBeginRenderPassType CmdBeginRenderPass;
+    vkCmdEndRenderPassType CmdEndRenderPass;
+    vkDbgSetValidationLevelType DbgSetValidationLevel;
+    vkDbgRegisterMsgCallbackType DbgRegisterMsgCallback;
+    vkDbgUnregisterMsgCallbackType DbgUnregisterMsgCallback;
+    vkDbgSetMessageFilterType DbgSetMessageFilter;
+    vkDbgSetObjectTagType DbgSetObjectTag;
+    vkDbgSetGlobalOptionType DbgSetGlobalOption;
+    vkDbgSetDeviceOptionType DbgSetDeviceOption;
+    vkCmdDbgMarkerBeginType CmdDbgMarkerBegin;
+    vkCmdDbgMarkerEndType CmdDbgMarkerEnd;
+#if defined(__linux__) || defined(XCB_NVIDIA)
+    vkWsiX11AssociateConnectionType WsiX11AssociateConnection;
+    vkWsiX11GetMSCType WsiX11GetMSC;
+    vkWsiX11CreatePresentableImageType WsiX11CreatePresentableImage;
+    vkWsiX11QueuePresentType WsiX11QueuePresent;
+#endif // WIN32
+} VK_LAYER_DISPATCH_TABLE;
+
+// LL node for tree of dbg callback functions
+typedef struct _VK_LAYER_DBG_FUNCTION_NODE
+{
+    VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback;
+    void *pUserData;
+    struct _VK_LAYER_DBG_FUNCTION_NODE *pNext;
+} VK_LAYER_DBG_FUNCTION_NODE;
+
+typedef enum _VK_LAYER_DBG_ACTION
+{
+    VK_DBG_LAYER_ACTION_IGNORE = 0x0,
+    VK_DBG_LAYER_ACTION_CALLBACK = 0x1,
+    VK_DBG_LAYER_ACTION_LOG_MSG = 0x2,
+    VK_DBG_LAYER_ACTION_BREAK = 0x4
+} VK_LAYER_DBG_ACTION;
+
+typedef enum _VK_LAYER_DBG_REPORT_LEVEL
+{
+
+    VK_DBG_LAYER_LEVEL_INFO = 0,
+    VK_DBG_LAYER_LEVEL_WARN,
+    VK_DBG_LAYER_LEVEL_PERF_WARN,
+    VK_DBG_LAYER_LEVEL_ERROR,
+    VK_DBG_LAYER_LEVEL_NONE,
+} VK_LAYER_DBG_REPORT_LEVEL;
+// ------------------------------------------------------------------------------------------------
+// API functions
diff --git a/include/vkPlatform.h b/include/vkPlatform.h
new file mode 100644
index 0000000..526a1de
--- /dev/null
+++ b/include/vkPlatform.h
@@ -0,0 +1,90 @@
+//
+// File: vkPlatform.h
+//
+/*
+** Copyright (c) 2014 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+
+#ifndef __VKPLATFORM_H__
+#define __VKPLATFORM_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+/*
+***************************************************************************************************
+*   Platform-specific directives and type declarations
+***************************************************************************************************
+*/
+
+#if defined(_WIN32)
+    // Ensure we don't pick up min/max macros from Winddef.h
+    #define NOMINMAX
+
+    // On Windows, VKAPI should equate to the __stdcall convention
+    #define VKAPI   __stdcall
+
+    // C99:
+#ifndef __cplusplus
+    #undef inline
+    #define inline __inline
+#endif // __cplusplus
+#elif defined(__GNUC__)
+    // On other platforms using GCC, VKAPI stays undefined
+    #define VKAPI
+#else
+    // Unsupported Platform!
+    #error "Unsupported OS Platform detected!"
+#endif
+
+#include <stddef.h>
+
+#if !defined(VK_NO_STDINT_H)
+    #if defined(_MSC_VER) && (_MSC_VER < 1600)
+        typedef signed   __int8  int8_t;
+        typedef unsigned __int8  uint8_t;
+        typedef signed   __int16 int16_t;
+        typedef unsigned __int16 uint16_t;
+        typedef signed   __int32 int32_t;
+        typedef unsigned __int32 uint32_t;
+        typedef signed   __int64 int64_t;
+        typedef unsigned __int64 uint64_t;
+    #else
+        #include <stdint.h>
+    #endif
+#endif // !defined(VK_NO_STDINT_H)
+
+typedef uint64_t   VK_GPU_SIZE;
+typedef uint32_t   bool32_t;
+
+typedef uint32_t   VK_SAMPLE_MASK;
+typedef uint32_t   VK_FLAGS;
+typedef int32_t    VK_ENUM;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // __VKPLATFORM_H__
diff --git a/include/vkWsiWinExt.h b/include/vkWsiWinExt.h
new file mode 100644
index 0000000..f3ee0f3
--- /dev/null
+++ b/include/vkWsiWinExt.h
@@ -0,0 +1,14 @@
+/* IN DEVELOPMENT.  DO NOT SHIP. */
+
+#ifndef __VKWSIWINEXT_H__
+#define __VKWSIWINEXT_H__
+
+// This is just to get windows to build.
+// Need to replace with the declarations for Windows wsi.
+typedef void VK_WSI_X11_CONNECTION_INFO;
+typedef unsigned int xcb_window_t;
+typedef unsigned int xcb_randr_crtc_t;
+typedef void VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO;
+typedef void VK_WSI_X11_PRESENT_INFO;
+
+#endif // __VKWSIWINEXT_H__
diff --git a/include/vkWsiX11Ext.h b/include/vkWsiX11Ext.h
new file mode 100644
index 0000000..f704637
--- /dev/null
+++ b/include/vkWsiX11Ext.h
@@ -0,0 +1,143 @@
+/* IN DEVELOPMENT.  DO NOT SHIP. */
+
+#ifndef __VKWSIX11EXT_H__
+#define __VKWSIX11EXT_H__
+
+#include <xcb/xcb.h>
+#include <xcb/randr.h>
+#include "vulkan.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+typedef struct _VK_WSI_X11_CONNECTION_INFO {
+    xcb_connection_t*                           pConnection;
+    xcb_window_t                                root;
+    xcb_randr_provider_t                        provider;
+} VK_WSI_X11_CONNECTION_INFO;
+
+typedef struct _VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO
+{
+    VK_FORMAT          format;
+    VK_FLAGS           usage;           // VK_IMAGE_USAGE_FLAGS
+    VK_EXTENT2D        extent;
+    VK_FLAGS           flags;
+} VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO;
+
+typedef struct _VK_WSI_X11_PRESENT_INFO
+{
+    /* which window to present to */
+    xcb_window_t destWindow;
+    VK_IMAGE srcImage;
+
+    /**
+     * After the command buffers in the queue have been completed, if the MSC
+     * of \p crtc is less than or equal to \p target_msc, wait until it
+     * reaches \p target_msc.
+     *
+     * If the current MSC of \p crtc is greater than \p target_msc, adjust
+     * \p target_msc as following:
+     *
+     *   if (divisor) {
+     *       target_msc = crtc_msc - (crtc_msc % divisor) + remainder;
+     *       if (target_msc < crtc_msc)
+     *           target_msc += divisor;
+     *   } else {
+     *       target_msc = crtc_msc;
+     *   }
+     *
+     * In other words, either set \p target_msc to an absolute value (require
+     * vkWsiX11GetMSC(), potentially a round-trip to the server, to get the
+     * current MSC first), or set \p target_msc to zero and set a "swap
+     * interval".
+     *
+     * \p crtc can be XCB_NONE.  In that case, a suitable CRTC is picked based
+     * on \p destWindow.
+     */
+    xcb_randr_crtc_t crtc;
+    uint64_t target_msc;
+    uint64_t divisor;
+    uint64_t remainder;
+
+    /**
+     * After waiting for the current and target MSCs to match, the
+     * presentation is scheduled.  When \p async is false, it will occur the
+     * next time current MSC is incremented.  When \p async is true, it will
+     * occur as soon as possible.
+     */
+    bool32_t async;
+
+    /**
+     * When \p flip is false, the contents of \p srcImage are copied to
+     * \p destWindow when the presentation occurs.  When \p flip is true,
+     * \p srcImage is made the front buffer of \p destWindow.
+     *
+     * An error may be returned if \p flip is true but \p destWindow can not
+     * be flipped to.
+     */
+    bool32_t flip;
+} VK_WSI_X11_PRESENT_INFO;
+
+typedef VK_RESULT (VKAPI *vkWsiX11AssociateConnectionType)(VK_PHYSICAL_GPU gpu, const VK_WSI_X11_CONNECTION_INFO* pConnectionInfo);
+typedef VK_RESULT (VKAPI *vkWsiX11GetMSCType)(VK_DEVICE device, xcb_window_t window, xcb_randr_crtc_t crtc, uint64_t* pMsc);
+typedef VK_RESULT (VKAPI *vkWsiX11CreatePresentableImageType)(VK_DEVICE device, const VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO* pCreateInfo, VK_IMAGE* pImage, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkWsiX11QueuePresentType)(VK_QUEUE queue, const VK_WSI_X11_PRESENT_INFO* pPresentInfo, VK_FENCE fence);
+
+/**
+ * Associate an X11 connection with a GPU.  This should be done before device
+ * creation.  If the device is already created,
+ * VK_ERROR_DEVICE_ALREADY_CREATED is returned.
+ *
+ * Truth is, given a connection, we could find the associated GPU.  But
+ * without having a GPU as the first parameter, the loader could not find the
+ * dispatch table.
+ *
+ * This function is available when vkGetExtensionSupport says "VK_WSI_X11"
+ * is supported.
+ */
+VK_RESULT VKAPI vkWsiX11AssociateConnection(
+    VK_PHYSICAL_GPU                            gpu,
+    const VK_WSI_X11_CONNECTION_INFO*          pConnectionInfo);
+
+/**
+ * Return the current MSC (Media Stream Counter, incremented for each vblank)
+ * of \p crtc.  If crtc is \p XCB_NONE, a suitable CRTC is picked based on \p
+ * win.
+ */
+VK_RESULT VKAPI vkWsiX11GetMSC(
+    VK_DEVICE                                  device,
+    xcb_window_t                                window,
+    xcb_randr_crtc_t                            crtc,
+    uint64_t*                                   pMsc);
+
+/**
+ * Create an VK_IMAGE that can be presented.  An VK_GPU_MEMORY is created
+ * and bound automatically.  The memory returned can only be used in
+ * vkQueue[Add|Remove]MemReference.  Destroying the memory or binding another memory to the
+ * image is not allowed.
+ */
+VK_RESULT VKAPI vkWsiX11CreatePresentableImage(
+    VK_DEVICE                                  device,
+    const VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO* pCreateInfo,
+    VK_IMAGE*                                  pImage,
+    VK_GPU_MEMORY*                             pMem);
+
+/**
+ * Present an image to an X11 window.  The presentation always occurs after
+ * the command buffers in the queue have been completed, subject to other
+ * parameters specified in VK_WSI_X11_PRESENT_INFO.
+ *
+ * Fence is reached when the presentation occurs.
+ */
+VK_RESULT VKAPI vkWsiX11QueuePresent(
+    VK_QUEUE                                   queue,
+    const VK_WSI_X11_PRESENT_INFO*             pPresentInfo,
+    VK_FENCE                                   fence);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // __VKWSIX11EXT_H__
diff --git a/include/vulkan.h b/include/vulkan.h
new file mode 100644
index 0000000..b78a56c
--- /dev/null
+++ b/include/vulkan.h
@@ -0,0 +1,3135 @@
+//
+// File: vulkan.h
+//
+/*
+** Copyright (c) 2014 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#ifndef __VULKAN_H__
+#define __VULKAN_H__
+
+#define VK_MAKE_VERSION(major, minor, patch) \
+    ((major << 22) | (minor << 12) | patch)
+
+#include "vkPlatform.h"
+
+// VK API version supported by this file
+#define VK_API_VERSION VK_MAKE_VERSION(0, 67, 0)
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+/*
+***************************************************************************************************
+*   Core VK API
+***************************************************************************************************
+*/
+
+#ifdef __cplusplus
+    #define VK_DEFINE_HANDLE(_obj) struct _obj##_T {char _dummy;}; typedef _obj##_T* _obj;
+    #define VK_DEFINE_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
+#else // __cplusplus
+    #define VK_DEFINE_HANDLE(_obj) typedef void* _obj;
+    #define VK_DEFINE_SUBCLASS_HANDLE(_obj, _base) typedef void* _obj;
+#endif // __cplusplus
+
+VK_DEFINE_HANDLE(VK_INSTANCE)
+VK_DEFINE_HANDLE(VK_PHYSICAL_GPU)
+VK_DEFINE_HANDLE(VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DEVICE, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_QUEUE, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_GPU_MEMORY, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_OBJECT, VK_BASE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_BUFFER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_BUFFER_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_IMAGE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_IMAGE_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_COLOR_ATTACHMENT_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DEPTH_STENCIL_VIEW, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_SHADER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_PIPELINE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_SAMPLER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_SET, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_SET_LAYOUT, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_SET_LAYOUT_CHAIN, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DESCRIPTOR_POOL, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_STATE_OBJECT, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_VP_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_RS_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_CB_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_DYNAMIC_DS_STATE_OBJECT, VK_DYNAMIC_STATE_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_CMD_BUFFER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_FENCE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_SEMAPHORE, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_EVENT, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_QUERY_POOL, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_FRAMEBUFFER, VK_OBJECT)
+VK_DEFINE_SUBCLASS_HANDLE(VK_RENDER_PASS, VK_OBJECT)
+
+#define VK_MAX_PHYSICAL_GPUS       16
+#define VK_MAX_PHYSICAL_GPU_NAME   256
+
+#define VK_LOD_CLAMP_NONE       MAX_FLOAT
+#define VK_LAST_MIP_OR_SLICE    0xffffffff
+
+#define VK_TRUE  1
+#define VK_FALSE 0
+
+#define VK_NULL_HANDLE 0
+
+// This macro defines INT_MAX in enumerations to force compilers to use 32 bits
+// to represent them. This may or may not be necessary on some compilers. The
+// option to compile it out may allow compilers that warn about missing enumerants
+// in switch statements to be silenced.
+#define VK_MAX_ENUM(T) T##_MAX_ENUM = 0x7FFFFFFF
+
+// ------------------------------------------------------------------------------------------------
+// Enumerations
+
+
+typedef enum _VK_MEMORY_PRIORITY
+{
+    VK_MEMORY_PRIORITY_UNUSED                              = 0x0,
+    VK_MEMORY_PRIORITY_VERY_LOW                            = 0x1,
+    VK_MEMORY_PRIORITY_LOW                                 = 0x2,
+    VK_MEMORY_PRIORITY_NORMAL                              = 0x3,
+    VK_MEMORY_PRIORITY_HIGH                                = 0x4,
+    VK_MEMORY_PRIORITY_VERY_HIGH                           = 0x5,
+
+    VK_MEMORY_PRIORITY_BEGIN_RANGE                         = VK_MEMORY_PRIORITY_UNUSED,
+    VK_MEMORY_PRIORITY_END_RANGE                           = VK_MEMORY_PRIORITY_VERY_HIGH,
+    VK_NUM_MEMORY_PRIORITY                                 = (VK_MEMORY_PRIORITY_END_RANGE - VK_MEMORY_PRIORITY_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_MEMORY_PRIORITY)
+} VK_MEMORY_PRIORITY;
+
+typedef enum _VK_IMAGE_LAYOUT
+{
+    VK_IMAGE_LAYOUT_UNDEFINED                              = 0x00000000,   // Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
+    VK_IMAGE_LAYOUT_GENERAL                                = 0x00000001,   // General layout when image can be used for any kind of access
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL               = 0x00000002,   // Optimal layout when image is only used for color attachment read/write
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL       = 0x00000003,   // Optimal layout when image is only used for depth/stencil attachment read/write
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL        = 0x00000004,   // Optimal layout when image is used for read only depth/stencil attachment and shader access
+    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL               = 0x00000005,   // Optimal layout when image is used for read only shader access
+    VK_IMAGE_LAYOUT_CLEAR_OPTIMAL                          = 0x00000006,   // Optimal layout when image is used only for clear operations
+    VK_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL                = 0x00000007,   // Optimal layout when image is used only as source of transfer operations
+    VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL           = 0x00000008,   // Optimal layout when image is used only as destination of transfer operations
+
+    VK_IMAGE_LAYOUT_BEGIN_RANGE                            = VK_IMAGE_LAYOUT_UNDEFINED,
+    VK_IMAGE_LAYOUT_END_RANGE                              = VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL,
+    VK_NUM_IMAGE_LAYOUT                                    = (VK_IMAGE_LAYOUT_END_RANGE - VK_IMAGE_LAYOUT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_LAYOUT)
+} VK_IMAGE_LAYOUT;
+
+typedef enum _VK_PIPE_EVENT
+{
+    VK_PIPE_EVENT_TOP_OF_PIPE                              = 0x00000001,   // Set event before the GPU starts processing subsequent command
+    VK_PIPE_EVENT_VERTEX_PROCESSING_COMPLETE               = 0x00000002,   // Set event when all pending vertex processing is complete
+    VK_PIPE_EVENT_LOCAL_FRAGMENT_PROCESSING_COMPLETE       = 0x00000003,   // Set event when all pending fragment shader executions are complete, within each fragment location
+    VK_PIPE_EVENT_FRAGMENT_PROCESSING_COMPLETE             = 0x00000004,   // Set event when all pending fragment shader executions are complete
+    VK_PIPE_EVENT_GRAPHICS_PIPELINE_COMPLETE               = 0x00000005,   // Set event when all pending graphics operations are complete
+    VK_PIPE_EVENT_COMPUTE_PIPELINE_COMPLETE                = 0x00000006,   // Set event when all pending compute operations are complete
+    VK_PIPE_EVENT_TRANSFER_COMPLETE                        = 0x00000007,   // Set event when all pending transfer operations are complete
+    VK_PIPE_EVENT_GPU_COMMANDS_COMPLETE                    = 0x00000008,   // Set event when all pending GPU work is complete
+
+    VK_PIPE_EVENT_BEGIN_RANGE                              = VK_PIPE_EVENT_TOP_OF_PIPE,
+    VK_PIPE_EVENT_END_RANGE                                = VK_PIPE_EVENT_GPU_COMMANDS_COMPLETE,
+    VK_NUM_PIPE_EVENT                                      = (VK_PIPE_EVENT_END_RANGE - VK_PIPE_EVENT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PIPE_EVENT)
+} VK_PIPE_EVENT;
+
+typedef enum _VK_WAIT_EVENT
+{
+    VK_WAIT_EVENT_TOP_OF_PIPE                              = 0x00000001,   // Wait event before the GPU starts processing subsequent commands
+    VK_WAIT_EVENT_BEFORE_RASTERIZATION                     = 0x00000002,   // Wait event before rasterizing subsequent primitives
+
+    VK_WAIT_EVENT_BEGIN_RANGE                              = VK_WAIT_EVENT_TOP_OF_PIPE,
+    VK_WAIT_EVENT_END_RANGE                                = VK_WAIT_EVENT_BEFORE_RASTERIZATION,
+    VK_NUM_WAIT_EVENT                                      = (VK_WAIT_EVENT_END_RANGE - VK_WAIT_EVENT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_WAIT_EVENT)
+} VK_WAIT_EVENT;
+
+typedef enum _VK_MEMORY_OUTPUT_FLAGS
+{
+    VK_MEMORY_OUTPUT_CPU_WRITE_BIT                         = 0x00000001,   // Controls output coherency of CPU writes
+    VK_MEMORY_OUTPUT_SHADER_WRITE_BIT                      = 0x00000002,   // Controls output coherency of generic shader writes
+    VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT                  = 0x00000004,   // Controls output coherency of color attachment writes
+    VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT          = 0x00000008,   // Controls output coherency of depth/stencil attachment writes
+    VK_MEMORY_OUTPUT_COPY_BIT                              = 0x00000010,   // Controls output coherency of copy operations
+    VK_MAX_ENUM(_VK_MEMORY_OUTPUT_FLAGS)
+} VK_MEMORY_OUTPUT_FLAGS;
+
+typedef enum _VK_MEMORY_INPUT_FLAGS
+{
+    VK_MEMORY_INPUT_CPU_READ_BIT                           = 0x00000001,   // Controls input coherency of CPU reads
+    VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT                   = 0x00000002,   // Controls input coherency of indirect command reads
+    VK_MEMORY_INPUT_INDEX_FETCH_BIT                        = 0x00000004,   // Controls input coherency of index fetches
+    VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT             = 0x00000008,   // Controls input coherency of vertex attribute fetches
+    VK_MEMORY_INPUT_UNIFORM_READ_BIT                       = 0x00000010,   // Controls input coherency of uniform buffer reads
+    VK_MEMORY_INPUT_SHADER_READ_BIT                        = 0x00000020,   // Controls input coherency of generic shader reads
+    VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT                   = 0x00000040,   // Controls input coherency of color attachment reads
+    VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT           = 0x00000080,   // Controls input coherency of depth/stencil attachment reads
+    VK_MEMORY_INPUT_COPY_BIT                               = 0x00000100,   // Controls input coherency of copy operations
+    VK_MAX_ENUM(_VK_MEMORY_INPUT_FLAGS)
+} VK_MEMORY_INPUT_FLAGS;
+
+typedef enum _VK_ATTACHMENT_LOAD_OP
+{
+    VK_ATTACHMENT_LOAD_OP_LOAD                             = 0x00000000,
+    VK_ATTACHMENT_LOAD_OP_CLEAR                            = 0x00000001,
+    VK_ATTACHMENT_LOAD_OP_DONT_CARE                        = 0x00000002,
+
+    VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE                      = VK_ATTACHMENT_LOAD_OP_LOAD,
+    VK_ATTACHMENT_LOAD_OP_END_RANGE                        = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+    VK_NUM_ATTACHMENT_LOAD_OP                              = (VK_ATTACHMENT_LOAD_OP_END_RANGE - VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_ATTACHMENT_LOAD_OP)
+} VK_ATTACHMENT_LOAD_OP;
+
+typedef enum _VK_ATTACHMENT_STORE_OP
+{
+    VK_ATTACHMENT_STORE_OP_STORE                           = 0x00000000,
+    VK_ATTACHMENT_STORE_OP_RESOLVE_MSAA                    = 0x00000001,
+    VK_ATTACHMENT_STORE_OP_DONT_CARE                       = 0x00000002,
+
+    VK_ATTACHMENT_STORE_OP_BEGIN_RANGE                     = VK_ATTACHMENT_STORE_OP_STORE,
+    VK_ATTACHMENT_STORE_OP_END_RANGE                       = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+    VK_NUM_ATTACHMENT_STORE_OP                             = (VK_ATTACHMENT_STORE_OP_END_RANGE - VK_ATTACHMENT_STORE_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_ATTACHMENT_STORE_OP)
+} VK_ATTACHMENT_STORE_OP;
+
+typedef enum _VK_IMAGE_TYPE
+{
+    VK_IMAGE_1D                                            = 0x00000000,
+    VK_IMAGE_2D                                            = 0x00000001,
+    VK_IMAGE_3D                                            = 0x00000002,
+
+    VK_IMAGE_TYPE_BEGIN_RANGE                              = VK_IMAGE_1D,
+    VK_IMAGE_TYPE_END_RANGE                                = VK_IMAGE_3D,
+    VK_NUM_IMAGE_TYPE                                      = (VK_IMAGE_TYPE_END_RANGE - VK_IMAGE_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_TYPE)
+} VK_IMAGE_TYPE;
+
+typedef enum _VK_IMAGE_TILING
+{
+    VK_LINEAR_TILING                                       = 0x00000000,
+    VK_OPTIMAL_TILING                                      = 0x00000001,
+
+    VK_IMAGE_TILING_BEGIN_RANGE                            = VK_LINEAR_TILING,
+    VK_IMAGE_TILING_END_RANGE                              = VK_OPTIMAL_TILING,
+    VK_NUM_IMAGE_TILING                                    = (VK_IMAGE_TILING_END_RANGE - VK_IMAGE_TILING_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_TILING)
+} VK_IMAGE_TILING;
+
+typedef enum _VK_IMAGE_VIEW_TYPE
+{
+    VK_IMAGE_VIEW_1D                                       = 0x00000000,
+    VK_IMAGE_VIEW_2D                                       = 0x00000001,
+    VK_IMAGE_VIEW_3D                                       = 0x00000002,
+    VK_IMAGE_VIEW_CUBE                                     = 0x00000003,
+
+    VK_IMAGE_VIEW_TYPE_BEGIN_RANGE                         = VK_IMAGE_VIEW_1D,
+    VK_IMAGE_VIEW_TYPE_END_RANGE                           = VK_IMAGE_VIEW_CUBE,
+    VK_NUM_IMAGE_VIEW_TYPE                                 = (VK_IMAGE_VIEW_TYPE_END_RANGE - VK_IMAGE_VIEW_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_VIEW_TYPE)
+} VK_IMAGE_VIEW_TYPE;
+
+typedef enum _VK_IMAGE_ASPECT
+{
+    VK_IMAGE_ASPECT_COLOR                                  = 0x00000000,
+    VK_IMAGE_ASPECT_DEPTH                                  = 0x00000001,
+    VK_IMAGE_ASPECT_STENCIL                                = 0x00000002,
+
+    VK_IMAGE_ASPECT_BEGIN_RANGE                            = VK_IMAGE_ASPECT_COLOR,
+    VK_IMAGE_ASPECT_END_RANGE                              = VK_IMAGE_ASPECT_STENCIL,
+    VK_NUM_IMAGE_ASPECT                                    = (VK_IMAGE_ASPECT_END_RANGE - VK_IMAGE_ASPECT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_ASPECT)
+} VK_IMAGE_ASPECT;
+
+typedef enum _VK_CHANNEL_SWIZZLE
+{
+    VK_CHANNEL_SWIZZLE_ZERO                                = 0x00000000,
+    VK_CHANNEL_SWIZZLE_ONE                                 = 0x00000001,
+    VK_CHANNEL_SWIZZLE_R                                   = 0x00000002,
+    VK_CHANNEL_SWIZZLE_G                                   = 0x00000003,
+    VK_CHANNEL_SWIZZLE_B                                   = 0x00000004,
+    VK_CHANNEL_SWIZZLE_A                                   = 0x00000005,
+
+    VK_CHANNEL_SWIZZLE_BEGIN_RANGE                         = VK_CHANNEL_SWIZZLE_ZERO,
+    VK_CHANNEL_SWIZZLE_END_RANGE                           = VK_CHANNEL_SWIZZLE_A,
+    VK_NUM_CHANNEL_SWIZZLE                                 = (VK_CHANNEL_SWIZZLE_END_RANGE - VK_CHANNEL_SWIZZLE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_CHANNEL_SWIZZLE)
+} VK_CHANNEL_SWIZZLE;
+
+typedef enum _VK_DESCRIPTOR_TYPE
+{
+    VK_DESCRIPTOR_TYPE_SAMPLER                             = 0x00000000,
+    VK_DESCRIPTOR_TYPE_SAMPLER_TEXTURE                     = 0x00000001,
+    VK_DESCRIPTOR_TYPE_TEXTURE                             = 0x00000002,
+    VK_DESCRIPTOR_TYPE_TEXTURE_BUFFER                      = 0x00000003,
+    VK_DESCRIPTOR_TYPE_IMAGE                               = 0x00000004,
+    VK_DESCRIPTOR_TYPE_IMAGE_BUFFER                        = 0x00000005,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER                      = 0x00000006,
+    VK_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER               = 0x00000007,
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC              = 0x00000008,
+    VK_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER_DYNAMIC       = 0x00000009,
+
+    VK_DESCRIPTOR_TYPE_BEGIN_RANGE                         = VK_DESCRIPTOR_TYPE_SAMPLER,
+    VK_DESCRIPTOR_TYPE_END_RANGE                           = VK_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER_DYNAMIC,
+    VK_NUM_DESCRIPTOR_TYPE                                 = (VK_DESCRIPTOR_TYPE_END_RANGE - VK_DESCRIPTOR_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_TYPE)
+} VK_DESCRIPTOR_TYPE;
+
+typedef enum _VK_DESCRIPTOR_POOL_USAGE
+{
+    VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT                      = 0x00000000,
+    VK_DESCRIPTOR_POOL_USAGE_DYNAMIC                       = 0x00000001,
+
+    VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE                   = VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT,
+    VK_DESCRIPTOR_POOL_USAGE_END_RANGE                     = VK_DESCRIPTOR_POOL_USAGE_DYNAMIC,
+    VK_NUM_DESCRIPTOR_POOL_USAGE                           = (VK_DESCRIPTOR_POOL_USAGE_END_RANGE - VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_POOL_USAGE)
+} VK_DESCRIPTOR_POOL_USAGE;
+
+typedef enum _VK_DESCRIPTOR_UPDATE_MODE
+{
+    VK_DESCRIPTOR_UDPATE_MODE_COPY                         = 0x00000000,
+    VK_DESCRIPTOR_UPDATE_MODE_FASTEST                      = 0x00000001,
+
+    VK_DESCRIPTOR_UPDATE_MODE_BEGIN_RANGE                  = VK_DESCRIPTOR_UDPATE_MODE_COPY,
+    VK_DESCRIPTOR_UPDATE_MODE_END_RANGE                    = VK_DESCRIPTOR_UPDATE_MODE_FASTEST,
+    VK_NUM_DESCRIPTOR_UPDATE_MODE                          = (VK_DESCRIPTOR_UPDATE_MODE_END_RANGE - VK_DESCRIPTOR_UPDATE_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_UPDATE_MODE)
+} VK_DESCRIPTOR_UPDATE_MODE;
+
+typedef enum _VK_DESCRIPTOR_SET_USAGE
+{
+    VK_DESCRIPTOR_SET_USAGE_ONE_SHOT                       = 0x00000000,
+    VK_DESCRIPTOR_SET_USAGE_STATIC                         = 0x00000001,
+
+    VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE                    = VK_DESCRIPTOR_SET_USAGE_ONE_SHOT,
+    VK_DESCRIPTOR_SET_USAGE_END_RANGE                      = VK_DESCRIPTOR_SET_USAGE_STATIC,
+    VK_NUM_DESCRIPTOR_SET_USAGE                            = (VK_DESCRIPTOR_SET_USAGE_END_RANGE - VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DESCRIPTOR_SET_USAGE)
+} VK_DESCRIPTOR_SET_USAGE;
+
+typedef enum _VK_QUERY_TYPE
+{
+    VK_QUERY_OCCLUSION                                     = 0x00000000,
+    VK_QUERY_PIPELINE_STATISTICS                           = 0x00000001,
+
+    VK_QUERY_TYPE_BEGIN_RANGE                              = VK_QUERY_OCCLUSION,
+    VK_QUERY_TYPE_END_RANGE                                = VK_QUERY_PIPELINE_STATISTICS,
+    VK_NUM_QUERY_TYPE                                      = (VK_QUERY_TYPE_END_RANGE - VK_QUERY_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_QUERY_TYPE)
+} VK_QUERY_TYPE;
+
+typedef enum _VK_TIMESTAMP_TYPE
+{
+    VK_TIMESTAMP_TOP                                       = 0x00000000,
+    VK_TIMESTAMP_BOTTOM                                    = 0x00000001,
+
+    VK_TIMESTAMP_TYPE_BEGIN_RANGE                          = VK_TIMESTAMP_TOP,
+    VK_TIMESTAMP_TYPE_END_RANGE                            = VK_TIMESTAMP_BOTTOM,
+    VK_NUM_TIMESTAMP_TYPE                                  = (VK_TIMESTAMP_TYPE_END_RANGE - VK_TIMESTAMP_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TIMESTEAMP_TYPE)
+} VK_TIMESTAMP_TYPE;
+
+typedef enum _VK_BORDER_COLOR_TYPE
+{
+    VK_BORDER_COLOR_OPAQUE_WHITE                           = 0x00000000,
+    VK_BORDER_COLOR_TRANSPARENT_BLACK                      = 0x00000001,
+    VK_BORDER_COLOR_OPAQUE_BLACK                           = 0x00000002,
+
+    VK_BORDER_COLOR_TYPE_BEGIN_RANGE                       = VK_BORDER_COLOR_OPAQUE_WHITE,
+    VK_BORDER_COLOR_TYPE_END_RANGE                         = VK_BORDER_COLOR_OPAQUE_BLACK,
+    VK_NUM_BORDER_COLOR_TYPE                               = (VK_BORDER_COLOR_TYPE_END_RANGE - VK_BORDER_COLOR_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BORDER_COLOR_TYPE)
+} VK_BORDER_COLOR_TYPE;
+
+typedef enum _VK_PIPELINE_BIND_POINT
+{
+    VK_PIPELINE_BIND_POINT_COMPUTE                         = 0x00000000,
+    VK_PIPELINE_BIND_POINT_GRAPHICS                        = 0x00000001,
+
+    VK_PIPELINE_BIND_POINT_BEGIN_RANGE                     = VK_PIPELINE_BIND_POINT_COMPUTE,
+    VK_PIPELINE_BIND_POINT_END_RANGE                       = VK_PIPELINE_BIND_POINT_GRAPHICS,
+    VK_NUM_PIPELINE_BIND_POINT                             = (VK_PIPELINE_BIND_POINT_END_RANGE - VK_PIPELINE_BIND_POINT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PIPELINE_BIND_POINT)
+} VK_PIPELINE_BIND_POINT;
+
+typedef enum _VK_STATE_BIND_POINT
+{
+    VK_STATE_BIND_VIEWPORT                                 = 0x00000000,
+    VK_STATE_BIND_RASTER                                   = 0x00000001,
+    VK_STATE_BIND_COLOR_BLEND                              = 0x00000002,
+    VK_STATE_BIND_DEPTH_STENCIL                            = 0x00000003,
+
+    VK_STATE_BIND_POINT_BEGIN_RANGE                        = VK_STATE_BIND_VIEWPORT,
+    VK_STATE_BIND_POINT_END_RANGE                          = VK_STATE_BIND_DEPTH_STENCIL,
+    VK_NUM_STATE_BIND_POINT                                = (VK_STATE_BIND_POINT_END_RANGE - VK_STATE_BIND_POINT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_STATE_BIND_POINT)
+} VK_STATE_BIND_POINT;
+
+typedef enum _VK_PRIMITIVE_TOPOLOGY
+{
+    VK_TOPOLOGY_POINT_LIST                                 = 0x00000000,
+    VK_TOPOLOGY_LINE_LIST                                  = 0x00000001,
+    VK_TOPOLOGY_LINE_STRIP                                 = 0x00000002,
+    VK_TOPOLOGY_TRIANGLE_LIST                              = 0x00000003,
+    VK_TOPOLOGY_TRIANGLE_STRIP                             = 0x00000004,
+    VK_TOPOLOGY_TRIANGLE_FAN                               = 0x00000005,
+    VK_TOPOLOGY_LINE_LIST_ADJ                              = 0x00000006,
+    VK_TOPOLOGY_LINE_STRIP_ADJ                             = 0x00000007,
+    VK_TOPOLOGY_TRIANGLE_LIST_ADJ                          = 0x00000008,
+    VK_TOPOLOGY_TRIANGLE_STRIP_ADJ                         = 0x00000009,
+    VK_TOPOLOGY_PATCH                                      = 0x0000000a,
+
+    VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE                      = VK_TOPOLOGY_POINT_LIST,
+    VK_PRIMITIVE_TOPOLOGY_END_RANGE                        = VK_TOPOLOGY_PATCH,
+    VK_NUM_PRIMITIVE_TOPOLOGY                              = (VK_PRIMITIVE_TOPOLOGY_END_RANGE - VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PRIMITIVE_TOPOLOGY)
+} VK_PRIMITIVE_TOPOLOGY;
+
+typedef enum _VK_INDEX_TYPE
+{
+    VK_INDEX_8                                             = 0x00000000,
+    VK_INDEX_16                                            = 0x00000001,
+    VK_INDEX_32                                            = 0x00000002,
+
+    VK_INDEX_TYPE_BEGIN_RANGE                              = VK_INDEX_8,
+    VK_INDEX_TYPE_END_RANGE                                = VK_INDEX_32,
+    VK_NUM_INDEX_TYPE                                      = (VK_INDEX_TYPE_END_RANGE - VK_INDEX_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_INDEX_TYPE)
+} VK_INDEX_TYPE;
+
+typedef enum _VK_TEX_FILTER
+{
+    VK_TEX_FILTER_NEAREST                                  = 0,
+    VK_TEX_FILTER_LINEAR                                   = 1,
+
+    VK_TEX_FILTER_BEGIN_RANGE                              = VK_TEX_FILTER_NEAREST,
+    VK_TEX_FILTER_END_RANGE                                = VK_TEX_FILTER_LINEAR,
+    VK_NUM_TEX_FILTER                                      = (VK_TEX_FILTER_END_RANGE - VK_TEX_FILTER_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TEX_FILTER)
+} VK_TEX_FILTER;
+
+typedef enum _VK_TEX_MIPMAP_MODE
+{
+    VK_TEX_MIPMAP_BASE                                     = 0,        // Always choose base level
+    VK_TEX_MIPMAP_NEAREST                                  = 1,        // Choose nearest mip level
+    VK_TEX_MIPMAP_LINEAR                                   = 2,        // Linear filter between mip levels
+
+    VK_TEX_MIPMAP_BEGIN_RANGE                              = VK_TEX_MIPMAP_BASE,
+    VK_TEX_MIPMAP_END_RANGE                                = VK_TEX_MIPMAP_LINEAR,
+    VK_NUM_TEX_MIPMAP                                      = (VK_TEX_MIPMAP_END_RANGE - VK_TEX_MIPMAP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TEX_MIPMAP_MODE)
+} VK_TEX_MIPMAP_MODE;
+
+typedef enum _VK_TEX_ADDRESS
+{
+    VK_TEX_ADDRESS_WRAP                                    = 0x00000000,
+    VK_TEX_ADDRESS_MIRROR                                  = 0x00000001,
+    VK_TEX_ADDRESS_CLAMP                                   = 0x00000002,
+    VK_TEX_ADDRESS_MIRROR_ONCE                             = 0x00000003,
+    VK_TEX_ADDRESS_CLAMP_BORDER                            = 0x00000004,
+
+    VK_TEX_ADDRESS_BEGIN_RANGE                             = VK_TEX_ADDRESS_WRAP,
+    VK_TEX_ADDRESS_END_RANGE                               = VK_TEX_ADDRESS_CLAMP_BORDER,
+    VK_NUM_TEX_ADDRESS                                     = (VK_TEX_ADDRESS_END_RANGE - VK_TEX_ADDRESS_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_TEX_ADDRESS)
+} VK_TEX_ADDRESS;
+
+typedef enum _VK_COMPARE_FUNC
+{
+    VK_COMPARE_NEVER                                       = 0x00000000,
+    VK_COMPARE_LESS                                        = 0x00000001,
+    VK_COMPARE_EQUAL                                       = 0x00000002,
+    VK_COMPARE_LESS_EQUAL                                  = 0x00000003,
+    VK_COMPARE_GREATER                                     = 0x00000004,
+    VK_COMPARE_NOT_EQUAL                                   = 0x00000005,
+    VK_COMPARE_GREATER_EQUAL                               = 0x00000006,
+    VK_COMPARE_ALWAYS                                      = 0x00000007,
+
+    VK_COMPARE_FUNC_BEGIN_RANGE                            = VK_COMPARE_NEVER,
+    VK_COMPARE_FUNC_END_RANGE                              = VK_COMPARE_ALWAYS,
+    VK_NUM_COMPARE_FUNC                                    = (VK_COMPARE_FUNC_END_RANGE - VK_COMPARE_FUNC_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_COMPARE_FUNC)
+} VK_COMPARE_FUNC;
+
+typedef enum _VK_FILL_MODE
+{
+    VK_FILL_POINTS                                         = 0x00000000,
+    VK_FILL_WIREFRAME                                      = 0x00000001,
+    VK_FILL_SOLID                                          = 0x00000002,
+
+    VK_FILL_MODE_BEGIN_RANGE                               = VK_FILL_POINTS,
+    VK_FILL_MODE_END_RANGE                                 = VK_FILL_SOLID,
+    VK_NUM_FILL_MODE                                       = (VK_FILL_MODE_END_RANGE - VK_FILL_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FILL_MODE)
+} VK_FILL_MODE;
+
+typedef enum _VK_CULL_MODE
+{
+    VK_CULL_NONE                                           = 0x00000000,
+    VK_CULL_FRONT                                          = 0x00000001,
+    VK_CULL_BACK                                           = 0x00000002,
+    VK_CULL_FRONT_AND_BACK                                 = 0x00000003,
+
+    VK_CULL_MODE_BEGIN_RANGE                               = VK_CULL_NONE,
+    VK_CULL_MODE_END_RANGE                                 = VK_CULL_FRONT_AND_BACK,
+    VK_NUM_CULL_MODE                                       = (VK_CULL_MODE_END_RANGE - VK_CULL_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_CULL_MODE)
+} VK_CULL_MODE;
+
+typedef enum _VK_FACE_ORIENTATION
+{
+    VK_FRONT_FACE_CCW                                      = 0x00000000,
+    VK_FRONT_FACE_CW                                       = 0x00000001,
+
+    VK_FACE_ORIENTATION_BEGIN_RANGE                        = VK_FRONT_FACE_CCW,
+    VK_FACE_ORIENTATION_END_RANGE                          = VK_FRONT_FACE_CW,
+    VK_NUM_FACE_ORIENTATION                                = (VK_FACE_ORIENTATION_END_RANGE - VK_FACE_ORIENTATION_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FACE_ORIENTATION)
+} VK_FACE_ORIENTATION;
+
+typedef enum _VK_PROVOKING_VERTEX_CONVENTION
+{
+    VK_PROVOKING_VERTEX_FIRST                              = 0x00000000,
+    VK_PROVOKING_VERTEX_LAST                               = 0x00000001,
+
+    VK_PROVOKING_VERTEX_BEGIN_RANGE                        = VK_PROVOKING_VERTEX_FIRST,
+    VK_PROVOKING_VERTEX_END_RANGE                          = VK_PROVOKING_VERTEX_LAST,
+    VK_NUM_PROVOKING_VERTEX_CONVENTION                     = (VK_PROVOKING_VERTEX_END_RANGE - VK_PROVOKING_VERTEX_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PROVOKING_VERTEX_CONVENTION)
+} VK_PROVOKING_VERTEX_CONVENTION;
+
+typedef enum _VK_COORDINATE_ORIGIN
+{
+    VK_COORDINATE_ORIGIN_UPPER_LEFT                        = 0x00000000,
+    VK_COORDINATE_ORIGIN_LOWER_LEFT                        = 0x00000001,
+
+    VK_COORDINATE_ORIGIN_BEGIN_RANGE                       = VK_COORDINATE_ORIGIN_UPPER_LEFT,
+    VK_COORDINATE_ORIGIN_END_RANGE                         = VK_COORDINATE_ORIGIN_LOWER_LEFT,
+    VK_NUM_COORDINATE_ORIGIN                               = (VK_COORDINATE_ORIGIN_END_RANGE - VK_COORDINATE_ORIGIN_END_RANGE + 1),
+    VK_MAX_ENUM(_VK_COORDINATE_ORIGIN)
+} VK_COORDINATE_ORIGIN;
+
+typedef enum _VK_DEPTH_MODE
+{
+    VK_DEPTH_MODE_ZERO_TO_ONE                              = 0x00000000,
+    VK_DEPTH_MODE_NEGATIVE_ONE_TO_ONE                      = 0x00000001,
+
+    VK_DEPTH_MODE_BEGIN_RANGE                              = VK_DEPTH_MODE_ZERO_TO_ONE,
+    VK_DEPTH_MODE_END_RANGE                                = VK_DEPTH_MODE_NEGATIVE_ONE_TO_ONE,
+    VK_NUM_DEPTH_MODE                                      = (VK_DEPTH_MODE_END_RANGE - VK_DEPTH_MODE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_DEPTH_MODE)
+} VK_DEPTH_MODE;
+
+typedef enum _VK_BLEND
+{
+    VK_BLEND_ZERO                                          = 0x00000000,
+    VK_BLEND_ONE                                           = 0x00000001,
+    VK_BLEND_SRC_COLOR                                     = 0x00000002,
+    VK_BLEND_ONE_MINUS_SRC_COLOR                           = 0x00000003,
+    VK_BLEND_DEST_COLOR                                    = 0x00000004,
+    VK_BLEND_ONE_MINUS_DEST_COLOR                          = 0x00000005,
+    VK_BLEND_SRC_ALPHA                                     = 0x00000006,
+    VK_BLEND_ONE_MINUS_SRC_ALPHA                           = 0x00000007,
+    VK_BLEND_DEST_ALPHA                                    = 0x00000008,
+    VK_BLEND_ONE_MINUS_DEST_ALPHA                          = 0x00000009,
+    VK_BLEND_CONSTANT_COLOR                                = 0x0000000a,
+    VK_BLEND_ONE_MINUS_CONSTANT_COLOR                      = 0x0000000b,
+    VK_BLEND_CONSTANT_ALPHA                                = 0x0000000c,
+    VK_BLEND_ONE_MINUS_CONSTANT_ALPHA                      = 0x0000000d,
+    VK_BLEND_SRC_ALPHA_SATURATE                            = 0x0000000e,
+    VK_BLEND_SRC1_COLOR                                    = 0x0000000f,
+    VK_BLEND_ONE_MINUS_SRC1_COLOR                          = 0x00000010,
+    VK_BLEND_SRC1_ALPHA                                    = 0x00000011,
+    VK_BLEND_ONE_MINUS_SRC1_ALPHA                          = 0x00000012,
+
+    VK_BLEND_BEGIN_RANGE                                   = VK_BLEND_ZERO,
+    VK_BLEND_END_RANGE                                     = VK_BLEND_ONE_MINUS_SRC1_ALPHA,
+    VK_NUM_BLEND                                           = (VK_BLEND_END_RANGE - VK_BLEND_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BLEND)
+} VK_BLEND;
+
+typedef enum _VK_BLEND_FUNC
+{
+    VK_BLEND_FUNC_ADD                                      = 0x00000000,
+    VK_BLEND_FUNC_SUBTRACT                                 = 0x00000001,
+    VK_BLEND_FUNC_REVERSE_SUBTRACT                         = 0x00000002,
+    VK_BLEND_FUNC_MIN                                      = 0x00000003,
+    VK_BLEND_FUNC_MAX                                      = 0x00000004,
+
+    VK_BLEND_FUNC_BEGIN_RANGE                              = VK_BLEND_FUNC_ADD,
+    VK_BLEND_FUNC_END_RANGE                                = VK_BLEND_FUNC_MAX,
+    VK_NUM_BLEND_FUNC                                      = (VK_BLEND_FUNC_END_RANGE - VK_BLEND_FUNC_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BLEND_FUNC)
+} VK_BLEND_FUNC;
+
+typedef enum _VK_STENCIL_OP
+{
+    VK_STENCIL_OP_KEEP                                     = 0x00000000,
+    VK_STENCIL_OP_ZERO                                     = 0x00000001,
+    VK_STENCIL_OP_REPLACE                                  = 0x00000002,
+    VK_STENCIL_OP_INC_CLAMP                                = 0x00000003,
+    VK_STENCIL_OP_DEC_CLAMP                                = 0x00000004,
+    VK_STENCIL_OP_INVERT                                   = 0x00000005,
+    VK_STENCIL_OP_INC_WRAP                                 = 0x00000006,
+    VK_STENCIL_OP_DEC_WRAP                                 = 0x00000007,
+
+    VK_STENCIL_OP_BEGIN_RANGE                              = VK_STENCIL_OP_KEEP,
+    VK_STENCIL_OP_END_RANGE                                = VK_STENCIL_OP_DEC_WRAP,
+    VK_NUM_STENCIL_OP                                      = (VK_STENCIL_OP_END_RANGE - VK_STENCIL_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_STENCIL_OP)
+} VK_STENCIL_OP;
+
+typedef enum _VK_LOGIC_OP
+{
+    VK_LOGIC_OP_COPY                                       = 0x00000000,
+    VK_LOGIC_OP_CLEAR                                      = 0x00000001,
+    VK_LOGIC_OP_AND                                        = 0x00000002,
+    VK_LOGIC_OP_AND_REVERSE                                = 0x00000003,
+    VK_LOGIC_OP_AND_INVERTED                               = 0x00000004,
+    VK_LOGIC_OP_NOOP                                       = 0x00000005,
+    VK_LOGIC_OP_XOR                                        = 0x00000006,
+    VK_LOGIC_OP_OR                                         = 0x00000007,
+    VK_LOGIC_OP_NOR                                        = 0x00000008,
+    VK_LOGIC_OP_EQUIV                                      = 0x00000009,
+    VK_LOGIC_OP_INVERT                                     = 0x0000000a,
+    VK_LOGIC_OP_OR_REVERSE                                 = 0x0000000b,
+    VK_LOGIC_OP_COPY_INVERTED                              = 0x0000000c,
+    VK_LOGIC_OP_OR_INVERTED                                = 0x0000000d,
+    VK_LOGIC_OP_NAND                                       = 0x0000000e,
+    VK_LOGIC_OP_SET                                        = 0x0000000f,
+
+    VK_LOGIC_OP_BEGIN_RANGE                                = VK_LOGIC_OP_COPY,
+    VK_LOGIC_OP_END_RANGE                                  = VK_LOGIC_OP_SET,
+    VK_NUM_LOGIC_OP                                        = (VK_LOGIC_OP_END_RANGE - VK_LOGIC_OP_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_LOGIC_OP)
+} VK_LOGIC_OP;
+
+typedef enum _VK_SYSTEM_ALLOC_TYPE
+{
+    VK_SYSTEM_ALLOC_API_OBJECT                             = 0x00000000,
+    VK_SYSTEM_ALLOC_INTERNAL                               = 0x00000001,
+    VK_SYSTEM_ALLOC_INTERNAL_TEMP                          = 0x00000002,
+    VK_SYSTEM_ALLOC_INTERNAL_SHADER                        = 0x00000003,
+    VK_SYSTEM_ALLOC_DEBUG                                  = 0x00000004,
+
+    VK_SYSTEM_ALLOC_BEGIN_RANGE                            = VK_SYSTEM_ALLOC_API_OBJECT,
+    VK_SYSTEM_ALLOC_END_RANGE                              = VK_SYSTEM_ALLOC_DEBUG,
+    VK_NUM_SYSTEM_ALLOC_TYPE                               = (VK_SYSTEM_ALLOC_END_RANGE - VK_SYSTEM_ALLOC_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_SYSTEM_ALLOC_TYPE)
+} VK_SYSTEM_ALLOC_TYPE;
+
+typedef enum _VK_PHYSICAL_GPU_TYPE
+{
+    VK_GPU_TYPE_OTHER                                      = 0x00000000,
+    VK_GPU_TYPE_INTEGRATED                                 = 0x00000001,
+    VK_GPU_TYPE_DISCRETE                                   = 0x00000002,
+    VK_GPU_TYPE_VIRTUAL                                    = 0x00000003,
+
+    VK_PHYSICAL_GPU_TYPE_BEGIN_RANGE                       = VK_GPU_TYPE_OTHER,
+    VK_PHYSICAL_GPU_TYPE_END_RANGE                         = VK_GPU_TYPE_VIRTUAL,
+    VK_NUM_PHYSICAL_GPU_TYPE                               = (VK_PHYSICAL_GPU_TYPE_END_RANGE - VK_PHYSICAL_GPU_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PHYSICAL_GPU_TYPE)
+} VK_PHYSICAL_GPU_TYPE;
+
+typedef enum _VK_PHYSICAL_GPU_INFO_TYPE
+{
+    // Info type for vkGetGpuInfo()
+    VK_INFO_TYPE_PHYSICAL_GPU_PROPERTIES                   = 0x00000000,
+    VK_INFO_TYPE_PHYSICAL_GPU_PERFORMANCE                  = 0x00000001,
+    VK_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES             = 0x00000002,
+    VK_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES            = 0x00000003,
+
+    VK_INFO_TYPE_PHYSICAL_GPU_BEGIN_RANGE                  = VK_INFO_TYPE_PHYSICAL_GPU_PROPERTIES,
+    VK_INFO_TYPE_PHYSICAL_GPU_END_RANGE                    = VK_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES,
+    VK_NUM_INFO_TYPE_PHYSICAL_GPU                          = (VK_INFO_TYPE_PHYSICAL_GPU_END_RANGE - VK_INFO_TYPE_PHYSICAL_GPU_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PHYSICAL_GPU_INFO_TYPE)
+} VK_PHYSICAL_GPU_INFO_TYPE;
+
+typedef enum _VK_FORMAT_INFO_TYPE
+{
+    // Info type for vkGetFormatInfo()
+    VK_INFO_TYPE_FORMAT_PROPERTIES                         = 0x00000000,
+
+    VK_INFO_TYPE_FORMAT_BEGIN_RANGE                        = VK_INFO_TYPE_FORMAT_PROPERTIES,
+    VK_INFO_TYPE_FORMAT_END_RANGE                          = VK_INFO_TYPE_FORMAT_PROPERTIES,
+    VK_NUM_INFO_TYPE_FORMAT                                 = (VK_INFO_TYPE_FORMAT_END_RANGE - VK_INFO_TYPE_FORMAT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FORMAT_INFO_TYPE)
+} VK_FORMAT_INFO_TYPE;
+
+typedef enum _VK_SUBRESOURCE_INFO_TYPE
+{
+    // Info type for vkGetImageSubresourceInfo()
+    VK_INFO_TYPE_SUBRESOURCE_LAYOUT                        = 0x00000000,
+
+    VK_INFO_TYPE_SUBRESOURCE_BEGIN_RANGE                   = VK_INFO_TYPE_SUBRESOURCE_LAYOUT,
+    VK_INFO_TYPE_SUBRESOURCE_END_RANGE                     = VK_INFO_TYPE_SUBRESOURCE_LAYOUT,
+    VK_NUM_INFO_TYPE_SUBRESOURCE                           = (VK_INFO_TYPE_SUBRESOURCE_END_RANGE - VK_INFO_TYPE_SUBRESOURCE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_SUBRESOURCE_INFO_TYPE)
+} VK_SUBRESOURCE_INFO_TYPE;
+
+typedef enum _VK_OBJECT_INFO_TYPE
+{
+    // Info type for vkGetObjectInfo()
+    VK_INFO_TYPE_MEMORY_ALLOCATION_COUNT                   = 0x00000000,
+    VK_INFO_TYPE_MEMORY_REQUIREMENTS                       = 0x00000001,
+    VK_INFO_TYPE_BUFFER_MEMORY_REQUIREMENTS                = 0x00000002,
+    VK_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS                 = 0x00000003,
+
+    VK_INFO_TYPE_BEGIN_RANGE                               = VK_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
+    VK_INFO_TYPE_END_RANGE                                 = VK_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS,
+    VK_NUM_INFO_TYPE                                       = (VK_INFO_TYPE_END_RANGE - VK_INFO_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_OBJECT_INFO_TYPE)
+} VK_OBJECT_INFO_TYPE;
+
+typedef enum _VK_VALIDATION_LEVEL
+{
+    VK_VALIDATION_LEVEL_0                                  = 0x00000000,
+    VK_VALIDATION_LEVEL_1                                  = 0x00000001,
+    VK_VALIDATION_LEVEL_2                                  = 0x00000002,
+    VK_VALIDATION_LEVEL_3                                  = 0x00000003,
+    VK_VALIDATION_LEVEL_4                                  = 0x00000004,
+
+    VK_VALIDATION_LEVEL_BEGIN_RANGE                        = VK_VALIDATION_LEVEL_0,
+    VK_VALIDATION_LEVEL_END_RANGE                          = VK_VALIDATION_LEVEL_4,
+    VK_NUM_VALIDATION_LEVEL                                = (VK_VALIDATION_LEVEL_END_RANGE - VK_VALIDATION_LEVEL_BEGIN_RANGE + 1),
+
+    VK_MAX_ENUM(_VK_VALIDATION_LEVEL)
+} VK_VALIDATION_LEVEL;
+
+// ------------------------------------------------------------------------------------------------
+// Error and return codes
+
+typedef enum _VK_RESULT
+{
+    // Return codes for successful operation execution (>= 0)
+    VK_SUCCESS                                             = 0x0000000,
+    VK_UNSUPPORTED                                         = 0x0000001,
+    VK_NOT_READY                                           = 0x0000002,
+    VK_TIMEOUT                                             = 0x0000003,
+    VK_EVENT_SET                                           = 0x0000004,
+    VK_EVENT_RESET                                         = 0x0000005,
+
+    // Error codes (negative values)
+    VK_ERROR_UNKNOWN                                       = -(0x00000001),
+    VK_ERROR_UNAVAILABLE                                   = -(0x00000002),
+    VK_ERROR_INITIALIZATION_FAILED                         = -(0x00000003),
+    VK_ERROR_OUT_OF_MEMORY                                 = -(0x00000004),
+    VK_ERROR_OUT_OF_GPU_MEMORY                             = -(0x00000005),
+    VK_ERROR_DEVICE_ALREADY_CREATED                        = -(0x00000006),
+    VK_ERROR_DEVICE_LOST                                   = -(0x00000007),
+    VK_ERROR_INVALID_POINTER                               = -(0x00000008),
+    VK_ERROR_INVALID_VALUE                                 = -(0x00000009),
+    VK_ERROR_INVALID_HANDLE                                = -(0x0000000A),
+    VK_ERROR_INVALID_ORDINAL                               = -(0x0000000B),
+    VK_ERROR_INVALID_MEMORY_SIZE                           = -(0x0000000C),
+    VK_ERROR_INVALID_EXTENSION                             = -(0x0000000D),
+    VK_ERROR_INVALID_FLAGS                                 = -(0x0000000E),
+    VK_ERROR_INVALID_ALIGNMENT                             = -(0x0000000F),
+    VK_ERROR_INVALID_FORMAT                                = -(0x00000010),
+    VK_ERROR_INVALID_IMAGE                                 = -(0x00000011),
+    VK_ERROR_INVALID_DESCRIPTOR_SET_DATA                   = -(0x00000012),
+    VK_ERROR_INVALID_QUEUE_TYPE                            = -(0x00000013),
+    VK_ERROR_INVALID_OBJECT_TYPE                           = -(0x00000014),
+    VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION                 = -(0x00000015),
+    VK_ERROR_BAD_SHADER_CODE                               = -(0x00000016),
+    VK_ERROR_BAD_PIPELINE_DATA                             = -(0x00000017),
+    VK_ERROR_TOO_MANY_MEMORY_REFERENCES                    = -(0x00000018),
+    VK_ERROR_NOT_MAPPABLE                                  = -(0x00000019),
+    VK_ERROR_MEMORY_MAP_FAILED                             = -(0x0000001A),
+    VK_ERROR_MEMORY_UNMAP_FAILED                           = -(0x0000001B),
+    VK_ERROR_INCOMPATIBLE_DEVICE                           = -(0x0000001C),
+    VK_ERROR_INCOMPATIBLE_DRIVER                           = -(0x0000001D),
+    VK_ERROR_INCOMPLETE_COMMAND_BUFFER                     = -(0x0000001E),
+    VK_ERROR_BUILDING_COMMAND_BUFFER                       = -(0x0000001F),
+    VK_ERROR_MEMORY_NOT_BOUND                              = -(0x00000020),
+    VK_ERROR_INCOMPATIBLE_QUEUE                            = -(0x00000021),
+    VK_ERROR_NOT_SHAREABLE                                 = -(0x00000022),
+    VK_MAX_ENUM(_VK_RESULT_CODE)
+} VK_RESULT;
+
+// ------------------------------------------------------------------------------------------------
+// VK format definitions
+
+typedef enum _VK_VERTEX_INPUT_STEP_RATE
+{
+    VK_VERTEX_INPUT_STEP_RATE_VERTEX                       = 0x0,
+    VK_VERTEX_INPUT_STEP_RATE_INSTANCE                     = 0x1,
+    VK_VERTEX_INPUT_STEP_RATE_DRAW                         = 0x2,  //Optional
+
+    VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE                  = VK_VERTEX_INPUT_STEP_RATE_VERTEX,
+    VK_VERTEX_INPUT_STEP_RATE_END_RANGE                    = VK_VERTEX_INPUT_STEP_RATE_DRAW,
+    VK_NUM_VERTEX_INPUT_STEP_RATE                          = (VK_VERTEX_INPUT_STEP_RATE_END_RANGE - VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_VERTEX_INPUT_STEP_RATE)
+} VK_VERTEX_INPUT_STEP_RATE;
+
+typedef enum _VK_FORMAT
+{
+    VK_FMT_UNDEFINED                                       = 0x00000000,
+    VK_FMT_R4G4_UNORM                                      = 0x00000001,
+    VK_FMT_R4G4_USCALED                                    = 0x00000002,
+    VK_FMT_R4G4B4A4_UNORM                                  = 0x00000003,
+    VK_FMT_R4G4B4A4_USCALED                                = 0x00000004,
+    VK_FMT_R5G6B5_UNORM                                    = 0x00000005,
+    VK_FMT_R5G6B5_USCALED                                  = 0x00000006,
+    VK_FMT_R5G5B5A1_UNORM                                  = 0x00000007,
+    VK_FMT_R5G5B5A1_USCALED                                = 0x00000008,
+    VK_FMT_R8_UNORM                                        = 0x00000009,
+    VK_FMT_R8_SNORM                                        = 0x0000000A,
+    VK_FMT_R8_USCALED                                      = 0x0000000B,
+    VK_FMT_R8_SSCALED                                      = 0x0000000C,
+    VK_FMT_R8_UINT                                         = 0x0000000D,
+    VK_FMT_R8_SINT                                         = 0x0000000E,
+    VK_FMT_R8_SRGB                                         = 0x0000000F,
+    VK_FMT_R8G8_UNORM                                      = 0x00000010,
+    VK_FMT_R8G8_SNORM                                      = 0x00000011,
+    VK_FMT_R8G8_USCALED                                    = 0x00000012,
+    VK_FMT_R8G8_SSCALED                                    = 0x00000013,
+    VK_FMT_R8G8_UINT                                       = 0x00000014,
+    VK_FMT_R8G8_SINT                                       = 0x00000015,
+    VK_FMT_R8G8_SRGB                                       = 0x00000016,
+    VK_FMT_R8G8B8_UNORM                                    = 0x00000017,
+    VK_FMT_R8G8B8_SNORM                                    = 0x00000018,
+    VK_FMT_R8G8B8_USCALED                                  = 0x00000019,
+    VK_FMT_R8G8B8_SSCALED                                  = 0x0000001A,
+    VK_FMT_R8G8B8_UINT                                     = 0x0000001B,
+    VK_FMT_R8G8B8_SINT                                     = 0x0000001C,
+    VK_FMT_R8G8B8_SRGB                                     = 0x0000001D,
+    VK_FMT_R8G8B8A8_UNORM                                  = 0x0000001E,
+    VK_FMT_R8G8B8A8_SNORM                                  = 0x0000001F,
+    VK_FMT_R8G8B8A8_USCALED                                = 0x00000020,
+    VK_FMT_R8G8B8A8_SSCALED                                = 0x00000021,
+    VK_FMT_R8G8B8A8_UINT                                   = 0x00000022,
+    VK_FMT_R8G8B8A8_SINT                                   = 0x00000023,
+    VK_FMT_R8G8B8A8_SRGB                                   = 0x00000024,
+    VK_FMT_R10G10B10A2_UNORM                               = 0x00000025,
+    VK_FMT_R10G10B10A2_SNORM                               = 0x00000026,
+    VK_FMT_R10G10B10A2_USCALED                             = 0x00000027,
+    VK_FMT_R10G10B10A2_SSCALED                             = 0x00000028,
+    VK_FMT_R10G10B10A2_UINT                                = 0x00000029,
+    VK_FMT_R10G10B10A2_SINT                                = 0x0000002A,
+    VK_FMT_R16_UNORM                                       = 0x0000002B,
+    VK_FMT_R16_SNORM                                       = 0x0000002C,
+    VK_FMT_R16_USCALED                                     = 0x0000002D,
+    VK_FMT_R16_SSCALED                                     = 0x0000002E,
+    VK_FMT_R16_UINT                                        = 0x0000002F,
+    VK_FMT_R16_SINT                                        = 0x00000030,
+    VK_FMT_R16_SFLOAT                                      = 0x00000031,
+    VK_FMT_R16G16_UNORM                                    = 0x00000032,
+    VK_FMT_R16G16_SNORM                                    = 0x00000033,
+    VK_FMT_R16G16_USCALED                                  = 0x00000034,
+    VK_FMT_R16G16_SSCALED                                  = 0x00000035,
+    VK_FMT_R16G16_UINT                                     = 0x00000036,
+    VK_FMT_R16G16_SINT                                     = 0x00000037,
+    VK_FMT_R16G16_SFLOAT                                   = 0x00000038,
+    VK_FMT_R16G16B16_UNORM                                 = 0x00000039,
+    VK_FMT_R16G16B16_SNORM                                 = 0x0000003A,
+    VK_FMT_R16G16B16_USCALED                               = 0x0000003B,
+    VK_FMT_R16G16B16_SSCALED                               = 0x0000003C,
+    VK_FMT_R16G16B16_UINT                                  = 0x0000003D,
+    VK_FMT_R16G16B16_SINT                                  = 0x0000003E,
+    VK_FMT_R16G16B16_SFLOAT                                = 0x0000003F,
+    VK_FMT_R16G16B16A16_UNORM                              = 0x00000040,
+    VK_FMT_R16G16B16A16_SNORM                              = 0x00000041,
+    VK_FMT_R16G16B16A16_USCALED                            = 0x00000042,
+    VK_FMT_R16G16B16A16_SSCALED                            = 0x00000043,
+    VK_FMT_R16G16B16A16_UINT                               = 0x00000044,
+    VK_FMT_R16G16B16A16_SINT                               = 0x00000045,
+    VK_FMT_R16G16B16A16_SFLOAT                             = 0x00000046,
+    VK_FMT_R32_UINT                                        = 0x00000047,
+    VK_FMT_R32_SINT                                        = 0x00000048,
+    VK_FMT_R32_SFLOAT                                      = 0x00000049,
+    VK_FMT_R32G32_UINT                                     = 0x0000004A,
+    VK_FMT_R32G32_SINT                                     = 0x0000004B,
+    VK_FMT_R32G32_SFLOAT                                   = 0x0000004C,
+    VK_FMT_R32G32B32_UINT                                  = 0x0000004D,
+    VK_FMT_R32G32B32_SINT                                  = 0x0000004E,
+    VK_FMT_R32G32B32_SFLOAT                                = 0x0000004F,
+    VK_FMT_R32G32B32A32_UINT                               = 0x00000050,
+    VK_FMT_R32G32B32A32_SINT                               = 0x00000051,
+    VK_FMT_R32G32B32A32_SFLOAT                             = 0x00000052,
+    VK_FMT_R64_SFLOAT                                      = 0x00000053,
+    VK_FMT_R64G64_SFLOAT                                   = 0x00000054,
+    VK_FMT_R64G64B64_SFLOAT                                = 0x00000055,
+    VK_FMT_R64G64B64A64_SFLOAT                             = 0x00000056,
+    VK_FMT_R11G11B10_UFLOAT                                = 0x00000057,
+    VK_FMT_R9G9B9E5_UFLOAT                                 = 0x00000058,
+    VK_FMT_D16_UNORM                                       = 0x00000059,
+    VK_FMT_D24_UNORM                                       = 0x0000005A,
+    VK_FMT_D32_SFLOAT                                      = 0x0000005B,
+    VK_FMT_S8_UINT                                         = 0x0000005C,
+    VK_FMT_D16_UNORM_S8_UINT                               = 0x0000005D,
+    VK_FMT_D24_UNORM_S8_UINT                               = 0x0000005E,
+    VK_FMT_D32_SFLOAT_S8_UINT                              = 0x0000005F,
+    VK_FMT_BC1_RGB_UNORM                                   = 0x00000060,
+    VK_FMT_BC1_RGB_SRGB                                    = 0x00000061,
+    VK_FMT_BC1_RGBA_UNORM                                  = 0x00000062,
+    VK_FMT_BC1_RGBA_SRGB                                   = 0x00000063,
+    VK_FMT_BC2_UNORM                                       = 0x00000064,
+    VK_FMT_BC2_SRGB                                        = 0x00000065,
+    VK_FMT_BC3_UNORM                                       = 0x00000066,
+    VK_FMT_BC3_SRGB                                        = 0x00000067,
+    VK_FMT_BC4_UNORM                                       = 0x00000068,
+    VK_FMT_BC4_SNORM                                       = 0x00000069,
+    VK_FMT_BC5_UNORM                                       = 0x0000006A,
+    VK_FMT_BC5_SNORM                                       = 0x0000006B,
+    VK_FMT_BC6H_UFLOAT                                     = 0x0000006C,
+    VK_FMT_BC6H_SFLOAT                                     = 0x0000006D,
+    VK_FMT_BC7_UNORM                                       = 0x0000006E,
+    VK_FMT_BC7_SRGB                                        = 0x0000006F,
+    VK_FMT_ETC2_R8G8B8_UNORM                               = 0x00000070,
+    VK_FMT_ETC2_R8G8B8_SRGB                                = 0x00000071,
+    VK_FMT_ETC2_R8G8B8A1_UNORM                             = 0x00000072,
+    VK_FMT_ETC2_R8G8B8A1_SRGB                              = 0x00000073,
+    VK_FMT_ETC2_R8G8B8A8_UNORM                             = 0x00000074,
+    VK_FMT_ETC2_R8G8B8A8_SRGB                              = 0x00000075,
+    VK_FMT_EAC_R11_UNORM                                   = 0x00000076,
+    VK_FMT_EAC_R11_SNORM                                   = 0x00000077,
+    VK_FMT_EAC_R11G11_UNORM                                = 0x00000078,
+    VK_FMT_EAC_R11G11_SNORM                                = 0x00000079,
+    VK_FMT_ASTC_4x4_UNORM                                  = 0x0000007A,
+    VK_FMT_ASTC_4x4_SRGB                                   = 0x0000007B,
+    VK_FMT_ASTC_5x4_UNORM                                  = 0x0000007C,
+    VK_FMT_ASTC_5x4_SRGB                                   = 0x0000007D,
+    VK_FMT_ASTC_5x5_UNORM                                  = 0x0000007E,
+    VK_FMT_ASTC_5x5_SRGB                                   = 0x0000007F,
+    VK_FMT_ASTC_6x5_UNORM                                  = 0x00000080,
+    VK_FMT_ASTC_6x5_SRGB                                   = 0x00000081,
+    VK_FMT_ASTC_6x6_UNORM                                  = 0x00000082,
+    VK_FMT_ASTC_6x6_SRGB                                   = 0x00000083,
+    VK_FMT_ASTC_8x5_UNORM                                  = 0x00000084,
+    VK_FMT_ASTC_8x5_SRGB                                   = 0x00000085,
+    VK_FMT_ASTC_8x6_UNORM                                  = 0x00000086,
+    VK_FMT_ASTC_8x6_SRGB                                   = 0x00000087,
+    VK_FMT_ASTC_8x8_UNORM                                  = 0x00000088,
+    VK_FMT_ASTC_8x8_SRGB                                   = 0x00000089,
+    VK_FMT_ASTC_10x5_UNORM                                 = 0x0000008A,
+    VK_FMT_ASTC_10x5_SRGB                                  = 0x0000008B,
+    VK_FMT_ASTC_10x6_UNORM                                 = 0x0000008C,
+    VK_FMT_ASTC_10x6_SRGB                                  = 0x0000008D,
+    VK_FMT_ASTC_10x8_UNORM                                 = 0x0000008E,
+    VK_FMT_ASTC_10x8_SRGB                                  = 0x0000008F,
+    VK_FMT_ASTC_10x10_UNORM                                = 0x00000090,
+    VK_FMT_ASTC_10x10_SRGB                                 = 0x00000091,
+    VK_FMT_ASTC_12x10_UNORM                                = 0x00000092,
+    VK_FMT_ASTC_12x10_SRGB                                 = 0x00000093,
+    VK_FMT_ASTC_12x12_UNORM                                = 0x00000094,
+    VK_FMT_ASTC_12x12_SRGB                                 = 0x00000095,
+    VK_FMT_B4G4R4A4_UNORM                                  = 0x00000096,
+    VK_FMT_B5G5R5A1_UNORM                                  = 0x00000097,
+    VK_FMT_B5G6R5_UNORM                                    = 0x00000098,
+    VK_FMT_B5G6R5_USCALED                                  = 0x00000099,
+    VK_FMT_B8G8R8_UNORM                                    = 0x0000009A,
+    VK_FMT_B8G8R8_SNORM                                    = 0x0000009B,
+    VK_FMT_B8G8R8_USCALED                                  = 0x0000009C,
+    VK_FMT_B8G8R8_SSCALED                                  = 0x0000009D,
+    VK_FMT_B8G8R8_UINT                                     = 0x0000009E,
+    VK_FMT_B8G8R8_SINT                                     = 0x0000009F,
+    VK_FMT_B8G8R8_SRGB                                     = 0x000000A0,
+    VK_FMT_B8G8R8A8_UNORM                                  = 0x000000A1,
+    VK_FMT_B8G8R8A8_SNORM                                  = 0x000000A2,
+    VK_FMT_B8G8R8A8_USCALED                                = 0x000000A3,
+    VK_FMT_B8G8R8A8_SSCALED                                = 0x000000A4,
+    VK_FMT_B8G8R8A8_UINT                                   = 0x000000A5,
+    VK_FMT_B8G8R8A8_SINT                                   = 0x000000A6,
+    VK_FMT_B8G8R8A8_SRGB                                   = 0x000000A7,
+    VK_FMT_B10G10R10A2_UNORM                               = 0x000000A8,
+    VK_FMT_B10G10R10A2_SNORM                               = 0x000000A9,
+    VK_FMT_B10G10R10A2_USCALED                             = 0x000000AA,
+    VK_FMT_B10G10R10A2_SSCALED                             = 0x000000AB,
+    VK_FMT_B10G10R10A2_UINT                                = 0x000000AC,
+    VK_FMT_B10G10R10A2_SINT                                = 0x000000AD,
+
+    VK_FMT_BEGIN_RANGE                                     = VK_FMT_UNDEFINED,
+    VK_FMT_END_RANGE                                       = VK_FMT_B10G10R10A2_SINT,
+    VK_NUM_FMT                                             = (VK_FMT_END_RANGE - VK_FMT_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_FORMAT)
+} VK_FORMAT;
+
+// Shader stage enumerant
+typedef enum _VK_PIPELINE_SHADER_STAGE
+{
+    VK_SHADER_STAGE_VERTEX                                 = 0,
+    VK_SHADER_STAGE_TESS_CONTROL                           = 1,
+    VK_SHADER_STAGE_TESS_EVALUATION                        = 2,
+    VK_SHADER_STAGE_GEOMETRY                               = 3,
+    VK_SHADER_STAGE_FRAGMENT                               = 4,
+    VK_SHADER_STAGE_COMPUTE                                = 5,
+
+    VK_SHADER_STAGE_BEGIN_RANGE                            = VK_SHADER_STAGE_VERTEX,
+    VK_SHADER_STAGE_END_RANGE                              = VK_SHADER_STAGE_COMPUTE,
+    VK_NUM_SHADER_STAGE                                    = (VK_SHADER_STAGE_END_RANGE - VK_SHADER_STAGE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_PIPELINE_SHADER_STAGE)
+} VK_PIPELINE_SHADER_STAGE;
+
+typedef enum _VK_SHADER_STAGE_FLAGS
+{
+    VK_SHADER_STAGE_FLAGS_VERTEX_BIT                        = 0x00000001,
+    VK_SHADER_STAGE_FLAGS_TESS_CONTROL_BIT                  = 0x00000002,
+    VK_SHADER_STAGE_FLAGS_TESS_EVALUATION_BIT               = 0x00000004,
+    VK_SHADER_STAGE_FLAGS_GEOMETRY_BIT                      = 0x00000008,
+    VK_SHADER_STAGE_FLAGS_FRAGMENT_BIT                      = 0x00000010,
+    VK_SHADER_STAGE_FLAGS_COMPUTE_BIT                       = 0x00000020,
+
+    VK_SHADER_STAGE_FLAGS_ALL                               = 0x7FFFFFFF,
+    VK_MAX_ENUM(_VK_SHADER_STAGE_FLAGS)
+} VK_SHADER_STAGE_FLAGS;
+
+// Structure type enumerant
+typedef enum _VK_STRUCTURE_TYPE
+{
+    VK_STRUCTURE_TYPE_APPLICATION_INFO                     = 0,
+    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                   = 1,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                    = 2,
+    VK_STRUCTURE_TYPE_MEMORY_OPEN_INFO                     = 4,
+    VK_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO                = 5,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO              = 6,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO               = 7,
+    VK_STRUCTURE_TYPE_EVENT_WAIT_INFO                      = 8,
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO               = 9,
+    VK_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO    = 10,
+    VK_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO       = 11,
+    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO                   = 12,
+    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO         = 13,
+    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                  = 14,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO    = 15,
+    VK_STRUCTURE_TYPE_DYNAMIC_VP_STATE_CREATE_INFO         = 16,
+    VK_STRUCTURE_TYPE_DYNAMIC_RS_STATE_CREATE_INFO         = 17,
+    VK_STRUCTURE_TYPE_DYNAMIC_CB_STATE_CREATE_INFO         = 18,
+    VK_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO         = 19,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO               = 20,
+    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                    = 21,
+    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                    = 22,
+    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                = 23,
+    VK_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO                  = 24,
+    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO               = 25,
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO    = 26,
+    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO        = 27,
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO    = 28,
+    VK_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO        = 29,
+    VK_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO      = 30,
+    VK_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO        = 31,
+    VK_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO        = 32,
+    VK_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO        = 33,
+    VK_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO        = 34,
+    VK_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO        = 35,
+    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                    = 36,
+    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                   = 37,
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO              = 38,
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO              = 39,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                = 40,
+    VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO       = 41,
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO              = 42,
+    VK_STRUCTURE_TYPE_LAYER_CREATE_INFO                    = 43,
+    VK_STRUCTURE_TYPE_PIPELINE_BARRIER                     = 44,
+    VK_STRUCTURE_TYPE_MEMORY_BARRIER                       = 45,
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                = 46,
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                 = 47,
+    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO          = 48,
+    VK_STRUCTURE_TYPE_UPDATE_SAMPLERS                      = 49,
+    VK_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES              = 50,
+    VK_STRUCTURE_TYPE_UPDATE_IMAGES                        = 51,
+    VK_STRUCTURE_TYPE_UPDATE_BUFFERS                       = 52,
+    VK_STRUCTURE_TYPE_UPDATE_AS_COPY                       = 53,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO             = 54,
+    VK_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO              = 55,
+    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                 = 56,
+    VK_STRUCTURE_TYPE_BEGIN_RANGE                          = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+    VK_STRUCTURE_TYPE_END_RANGE                            = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+    VK_NUM_STRUCTURE_TYPE                                  = (VK_STRUCTURE_TYPE_END_RANGE - VK_STRUCTURE_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_STRUCTURE_TYPE)
+} VK_STRUCTURE_TYPE;
+
+// ------------------------------------------------------------------------------------------------
+// Flags
+
+// Device creation flags
+typedef enum _VK_DEVICE_CREATE_FLAGS
+{
+    VK_DEVICE_CREATE_VALIDATION_BIT                        = 0x00000001,
+    VK_DEVICE_CREATE_MGPU_IQ_MATCH_BIT                     = 0x00000002,
+    VK_MAX_ENUM(_VK_DEVICE_CREATE_FLAGS)
+} VK_DEVICE_CREATE_FLAGS;
+
+// Queue capabilities
+typedef enum _VK_QUEUE_FLAGS
+{
+    VK_QUEUE_GRAPHICS_BIT                                  = 0x00000001,   // Queue supports graphics operations
+    VK_QUEUE_COMPUTE_BIT                                   = 0x00000002,   // Queue supports compute operations
+    VK_QUEUE_DMA_BIT                                       = 0x00000004,   // Queue supports DMA operations
+    VK_QUEUE_EXTENDED_BIT                                  = 0x40000000,   // Extended queue
+    VK_MAX_ENUM(_VK_QUEUE_FLAGS)
+} VK_QUEUE_FLAGS;
+
+// memory properties passed into vkAllocMemory().
+typedef enum _VK_MEMORY_PROPERTY_FLAGS
+{
+    VK_MEMORY_PROPERTY_GPU_ONLY                            = 0x00000000,   // If not set, then allocate memory on device (GPU)
+    VK_MEMORY_PROPERTY_CPU_VISIBLE_BIT                     = 0x00000001,
+    VK_MEMORY_PROPERTY_CPU_GPU_COHERENT_BIT                = 0x00000002,
+    VK_MEMORY_PROPERTY_CPU_UNCACHED_BIT                    = 0x00000004,
+    VK_MEMORY_PROPERTY_CPU_WRITE_COMBINED_BIT              = 0x00000008,
+    VK_MEMORY_PROPERTY_PREFER_CPU_LOCAL                    = 0x00000010,   // all else being equal, prefer CPU access
+    VK_MEMORY_PROPERTY_SHAREABLE_BIT                       = 0x00000020,
+    VK_MAX_ENUM(_VK_MEMORY_PROPERTY_FLAGS)
+} VK_MEMORY_PROPERTY_FLAGS;
+
+typedef enum _VK_MEMORY_TYPE
+{
+    VK_MEMORY_TYPE_OTHER                                   = 0x00000000,   // device memory that is not any of the others
+    VK_MEMORY_TYPE_BUFFER                                  = 0x00000001,   // memory for buffers and associated information
+    VK_MEMORY_TYPE_IMAGE                                   = 0x00000002,   // memory for images and associated information
+
+    VK_MEMORY_TYPE_BEGIN_RANGE                             = VK_MEMORY_TYPE_OTHER,
+    VK_MEMORY_TYPE_END_RANGE                               = VK_MEMORY_TYPE_IMAGE,
+    VK_NUM_MEMORY_TYPE                                     = (VK_MEMORY_TYPE_END_RANGE - VK_MEMORY_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_MEMORY_TYPE)
+} VK_MEMORY_TYPE;
+
+// Buffer and buffer allocation usage flags
+typedef enum _VK_BUFFER_USAGE_FLAGS
+{
+    VK_BUFFER_USAGE_GENERAL                                = 0x00000000,   // no special usage
+    VK_BUFFER_USAGE_SHADER_ACCESS_READ_BIT                 = 0x00000001,   // Shader read (e.g. TBO, image buffer, UBO, SSBO)
+    VK_BUFFER_USAGE_SHADER_ACCESS_WRITE_BIT                = 0x00000002,   // Shader write (e.g. image buffer, SSBO)
+    VK_BUFFER_USAGE_SHADER_ACCESS_ATOMIC_BIT               = 0x00000004,   // Shader atomic operations (e.g. image buffer, SSBO)
+    VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT                    = 0x00000008,   // used as a source for copies
+    VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT               = 0x00000010,   // used as a destination for copies
+    VK_BUFFER_USAGE_UNIFORM_READ_BIT                       = 0x00000020,   // Uniform read (UBO)
+    VK_BUFFER_USAGE_INDEX_FETCH_BIT                        = 0x00000040,   // Fixed function index fetch (index buffer)
+    VK_BUFFER_USAGE_VERTEX_FETCH_BIT                       = 0x00000080,   // Fixed function vertex fetch (VBO)
+    VK_BUFFER_USAGE_SHADER_STORAGE_BIT                     = 0x00000100,   // Shader storage buffer (SSBO)
+    VK_BUFFER_USAGE_INDIRECT_PARAMETER_FETCH_BIT           = 0x00000200,   // Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
+    VK_BUFFER_USAGE_TEXTURE_BUFFER_BIT                     = 0x00000400,   // texture buffer (TBO)
+    VK_BUFFER_USAGE_IMAGE_BUFFER_BIT                       = 0x00000800,   // image buffer (load/store)
+    VK_MAX_ENUM(_VK_BUFFER_USAGE_FLAGS)
+} VK_BUFFER_USAGE_FLAGS;
+
+// Buffer flags
+typedef enum _VK_BUFFER_CREATE_FLAGS
+{
+    VK_BUFFER_CREATE_SHAREABLE_BIT                         = 0x00000001,
+    VK_BUFFER_CREATE_SPARSE_BIT                            = 0x00000002,
+    VK_MAX_ENUM(_VK_BUFFER_CREATE_FLAGS)
+} VK_BUFFER_CREATE_FLAGS;
+
+typedef enum _VK_BUFFER_VIEW_TYPE
+{
+    VK_BUFFER_VIEW_RAW                                     = 0x00000000,   // Raw buffer without special structure (e.g. UBO, SSBO, indirect and parameter buffers)
+    VK_BUFFER_VIEW_TYPED                                   = 0x00000001,   // Typed buffer, format and channels are used (TBO, image buffer)
+
+    VK_BUFFER_VIEW_TYPE_BEGIN_RANGE                        = VK_BUFFER_VIEW_RAW,
+    VK_BUFFER_VIEW_TYPE_END_RANGE                          = VK_BUFFER_VIEW_TYPED,
+    VK_NUM_BUFFER_VIEW_TYPE                                = (VK_BUFFER_VIEW_TYPE_END_RANGE - VK_BUFFER_VIEW_TYPE_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_BUFFER_VIEW_TYPE)
+} VK_BUFFER_VIEW_TYPE;
+
+
+// Images memory allocations can be used for resources of a given format class.
+typedef enum _VK_IMAGE_FORMAT_CLASS
+{
+    VK_IMAGE_FORMAT_CLASS_128_BITS                         = 1,  // color formats
+    VK_IMAGE_FORMAT_CLASS_96_BITS                          = 2,
+    VK_IMAGE_FORMAT_CLASS_64_BITS                          = 3,
+    VK_IMAGE_FORMAT_CLASS_48_BITS                          = 4,
+    VK_IMAGE_FORMAT_CLASS_32_BITS                          = 5,
+    VK_IMAGE_FORMAT_CLASS_24_BITS                          = 6,
+    VK_IMAGE_FORMAT_CLASS_16_BITS                          = 7,
+    VK_IMAGE_FORMAT_CLASS_8_BITS                           = 8,
+    VK_IMAGE_FORMAT_CLASS_128_BIT_BLOCK                    = 9,  // 128-bit block compressed formats
+    VK_IMAGE_FORMAT_CLASS_64_BIT_BLOCK                     = 10, // 64-bit block compressed formats
+    VK_IMAGE_FORMAT_CLASS_D32                              = 11, // D32_SFLOAT
+    VK_IMAGE_FORMAT_CLASS_D24                              = 12, // D24_UNORM
+    VK_IMAGE_FORMAT_CLASS_D16                              = 13, // D16_UNORM
+    VK_IMAGE_FORMAT_CLASS_S8                               = 14, // S8_UINT
+    VK_IMAGE_FORMAT_CLASS_D32S8                            = 15, // D32_SFLOAT_S8_UINT
+    VK_IMAGE_FORMAT_CLASS_D24S8                            = 16, // D24_UNORM_S8_UINT
+    VK_IMAGE_FORMAT_CLASS_D16S8                            = 17, // D16_UNORM_S8_UINT
+    VK_IMAGE_FORMAT_CLASS_LINEAR                           = 18, // used for pitch-linear (transparent) textures
+
+    VK_IMAGE_FORMAT_CLASS_BEGIN_RANGE                      = VK_IMAGE_FORMAT_CLASS_128_BITS,
+    VK_IMAGE_FORMAT_CLASS_END_RANGE                        = VK_IMAGE_FORMAT_CLASS_LINEAR,
+    VK_NUM_IMAGE_FORMAT_CLASS                              = (VK_IMAGE_FORMAT_CLASS_END_RANGE - VK_IMAGE_FORMAT_CLASS_BEGIN_RANGE + 1),
+    VK_MAX_ENUM(_VK_IMAGE_FORMAT_CLASS)
+} VK_IMAGE_FORMAT_CLASS;
+
+// Image and image allocation usage flags
+typedef enum _VK_IMAGE_USAGE_FLAGS
+{
+    VK_IMAGE_USAGE_GENERAL                                 = 0x00000000,   // no special usage
+    VK_IMAGE_USAGE_SHADER_ACCESS_READ_BIT                  = 0x00000001,   // shader read (e.g. texture, image)
+    VK_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT                 = 0x00000002,   // shader write (e.g. image)
+    VK_IMAGE_USAGE_SHADER_ACCESS_ATOMIC_BIT                = 0x00000004,   // shader atomic operations (e.g. image)
+    VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT                     = 0x00000008,   // used as a source for copies
+    VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT                = 0x00000010,   // used as a destination for copies
+    VK_IMAGE_USAGE_TEXTURE_BIT                             = 0x00000020,   // opaque texture (2d, 3d, etc.)
+    VK_IMAGE_USAGE_IMAGE_BIT                               = 0x00000040,   // opaque image (2d, 3d, etc.)
+    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                    = 0x00000080,   // framebuffer color attachment
+    VK_IMAGE_USAGE_DEPTH_STENCIL_BIT                       = 0x00000100,   // framebuffer depth/stencil
+    VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                = 0x00000200,   // image data not needed outside of rendering.
+    VK_MAX_ENUM(_VK_IMAGE_USAGE_FLAGS)
+} VK_IMAGE_USAGE_FLAGS;
+
+// Image flags
+typedef enum _VK_IMAGE_CREATE_FLAGS
+{
+    VK_IMAGE_CREATE_INVARIANT_DATA_BIT                     = 0x00000001,
+    VK_IMAGE_CREATE_CLONEABLE_BIT                          = 0x00000002,
+    VK_IMAGE_CREATE_SHAREABLE_BIT                          = 0x00000004,
+    VK_IMAGE_CREATE_SPARSE_BIT                             = 0x00000008,
+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                     = 0x00000010,   // Allows image views to have different format than the base image
+    VK_MAX_ENUM(_VK_IMAGE_CREATE_FLAGS)
+} VK_IMAGE_CREATE_FLAGS;
+
+// Depth-stencil view creation flags
+typedef enum _VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS
+{
+    VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT       = 0x00000001,
+    VK_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT     = 0x00000002,
+    VK_MAX_ENUM(_VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS)
+} VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS;
+
+// Pipeline creation flags
+typedef enum _VK_PIPELINE_CREATE_FLAGS
+{
+    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT            = 0x00000001,
+    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT               = 0x00000002,
+    VK_MAX_ENUM(_VK_PIPELINE_CREATE_FLAGS)
+} VK_PIPELINE_CREATE_FLAGS;
+
+// Fence creation flags
+typedef enum _VK_FENCE_CREATE_FLAGS
+{
+    VK_FENCE_CREATE_SIGNALED_BIT                           = 0x00000001,
+    VK_MAX_ENUM(_VK_FENCE_CREATE_FLAGS)
+} VK_FENCE_CREATE_FLAGS;
+
+// Semaphore creation flags
+typedef enum _VK_SEMAPHORE_CREATE_FLAGS
+{
+    VK_SEMAPHORE_CREATE_SHAREABLE_BIT                      = 0x00000001,
+    VK_MAX_ENUM(_VK_SEMAPHORE_CREATE_FLAGS)
+} VK_SEMAPHORE_CREATE_FLAGS;
+
+// Format capability flags
+typedef enum _VK_FORMAT_FEATURE_FLAGS
+{
+    VK_FORMAT_IMAGE_SHADER_READ_BIT                        = 0x00000001,
+    VK_FORMAT_IMAGE_SHADER_WRITE_BIT                       = 0x00000002,
+    VK_FORMAT_IMAGE_COPY_BIT                               = 0x00000004,
+    VK_FORMAT_MEMORY_SHADER_ACCESS_BIT                     = 0x00000008,
+    VK_FORMAT_COLOR_ATTACHMENT_WRITE_BIT                   = 0x00000010,
+    VK_FORMAT_COLOR_ATTACHMENT_BLEND_BIT                   = 0x00000020,
+    VK_FORMAT_DEPTH_ATTACHMENT_BIT                         = 0x00000040,
+    VK_FORMAT_STENCIL_ATTACHMENT_BIT                       = 0x00000080,
+    VK_FORMAT_MSAA_ATTACHMENT_BIT                          = 0x00000100,
+    VK_FORMAT_CONVERSION_BIT                               = 0x00000200,
+    VK_MAX_ENUM(_VK_FORMAT_FEATURE_FLAGS)
+} VK_FORMAT_FEATURE_FLAGS;
+
+// Query flags
+typedef enum _VK_QUERY_CONTROL_FLAGS
+{
+    VK_QUERY_IMPRECISE_DATA_BIT                            = 0x00000001,
+    VK_MAX_ENUM(_VK_QUERY_CONTROL_FLAGS)
+} VK_QUERY_CONTROL_FLAGS;
+
+// GPU compatibility flags
+typedef enum _VK_GPU_COMPATIBILITY_FLAGS
+{
+    VK_GPU_COMPAT_ASIC_FEATURES_BIT                        = 0x00000001,
+    VK_GPU_COMPAT_IQ_MATCH_BIT                             = 0x00000002,
+    VK_GPU_COMPAT_PEER_TRANSFER_BIT                        = 0x00000004,
+    VK_GPU_COMPAT_SHARED_MEMORY_BIT                        = 0x00000008,
+    VK_GPU_COMPAT_SHARED_SYNC_BIT                          = 0x00000010,
+    VK_GPU_COMPAT_SHARED_GPU0_DISPLAY_BIT                  = 0x00000020,
+    VK_GPU_COMPAT_SHARED_GPU1_DISPLAY_BIT                  = 0x00000040,
+    VK_MAX_ENUM(_VK_GPU_COMPATIBILITY_FLAGS)
+} VK_GPU_COMPATIBILITY_FLAGS;
+
+// Command buffer building flags
+typedef enum _VK_CMD_BUFFER_BUILD_FLAGS
+{
+    VK_CMD_BUFFER_OPTIMIZE_GPU_SMALL_BATCH_BIT             = 0x00000001,
+    VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT             = 0x00000002,
+    VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT             = 0x00000004,
+    VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT       = 0x00000008,
+    VK_MAX_ENUM(_VK_CMD_BUFFER_BUILD_FLAGS)
+} VK_CMD_BUFFER_BUILD_FLAGS;
+
+// ------------------------------------------------------------------------------------------------
+// VK structures
+
+typedef struct _VK_OFFSET2D
+{
+    int32_t                                 x;
+    int32_t                                 y;
+} VK_OFFSET2D;
+
+typedef struct _VK_OFFSET3D
+{
+    int32_t                                 x;
+    int32_t                                 y;
+    int32_t                                 z;
+} VK_OFFSET3D;
+
+typedef struct _VK_EXTENT2D
+{
+    int32_t                                 width;
+    int32_t                                 height;
+} VK_EXTENT2D;
+
+typedef struct _VK_EXTENT3D
+{
+    int32_t                                 width;
+    int32_t                                 height;
+    int32_t                                 depth;
+} VK_EXTENT3D;
+
+typedef struct _VK_VIEWPORT
+{
+    float                                   originX;
+    float                                   originY;
+    float                                   width;
+    float                                   height;
+    float                                   minDepth;
+    float                                   maxDepth;
+} VK_VIEWPORT;
+
+typedef struct _VK_RECT
+{
+    VK_OFFSET2D                            offset;
+    VK_EXTENT2D                            extent;
+} VK_RECT;
+
+typedef struct _VK_CHANNEL_MAPPING
+{
+    VK_CHANNEL_SWIZZLE                     r;
+    VK_CHANNEL_SWIZZLE                     g;
+    VK_CHANNEL_SWIZZLE                     b;
+    VK_CHANNEL_SWIZZLE                     a;
+} VK_CHANNEL_MAPPING;
+
+typedef struct _VK_PHYSICAL_GPU_PROPERTIES
+{
+    uint32_t                                apiVersion;
+    uint32_t                                driverVersion;
+    uint32_t                                vendorId;
+    uint32_t                                deviceId;
+    VK_PHYSICAL_GPU_TYPE                   gpuType;
+    char                                    gpuName[VK_MAX_PHYSICAL_GPU_NAME];
+    VK_GPU_SIZE                            maxInlineMemoryUpdateSize;
+    uint32_t                                maxBoundDescriptorSets;
+    uint32_t                                maxThreadGroupSize;
+    uint64_t                                timestampFrequency;
+    bool32_t                                multiColorAttachmentClears;
+    uint32_t                                maxDescriptorSets;              // at least 2?
+    uint32_t                                maxViewports;                   // at least 16?
+    uint32_t                                maxColorAttachments;            // at least 8?
+} VK_PHYSICAL_GPU_PROPERTIES;
+
+typedef struct _VK_PHYSICAL_GPU_PERFORMANCE
+{
+    float                                   maxGpuClock;
+    float                                   aluPerClock;
+    float                                   texPerClock;
+    float                                   primsPerClock;
+    float                                   pixelsPerClock;
+} VK_PHYSICAL_GPU_PERFORMANCE;
+
+typedef struct _VK_GPU_COMPATIBILITY_INFO
+{
+    VK_FLAGS                               compatibilityFlags; // VK_GPU_COMPATIBILITY_FLAGS
+} VK_GPU_COMPATIBILITY_INFO;
+
+typedef struct _VK_APPLICATION_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;              // Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
+    const void*                             pNext;              // Next structure in chain
+    const char*                             pAppName;
+    uint32_t                                appVersion;
+    const char*                             pEngineName;
+    uint32_t                                engineVersion;
+    uint32_t                                apiVersion;
+} VK_APPLICATION_INFO;
+
+typedef void* (VKAPI *VK_ALLOC_FUNCTION)(
+    void*                                   pUserData,
+    size_t                                  size,
+    size_t                                  alignment,
+    VK_SYSTEM_ALLOC_TYPE                   allocType);
+
+typedef void (VKAPI *VK_FREE_FUNCTION)(
+    void*                                   pUserData,
+    void*                                   pMem);
+
+typedef struct _VK_ALLOC_CALLBACKS
+{
+    void*                                   pUserData;
+    VK_ALLOC_FUNCTION                      pfnAlloc;
+    VK_FREE_FUNCTION                       pfnFree;
+} VK_ALLOC_CALLBACKS;
+
+typedef struct _VK_DEVICE_QUEUE_CREATE_INFO
+{
+    uint32_t                                queueNodeIndex;
+    uint32_t                                queueCount;
+} VK_DEVICE_QUEUE_CREATE_INFO;
+
+typedef struct _VK_DEVICE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                queueRecordCount;
+    const VK_DEVICE_QUEUE_CREATE_INFO*     pRequestedQueues;
+    uint32_t                                extensionCount;
+    const char*const*                       ppEnabledExtensionNames;
+    VK_VALIDATION_LEVEL                    maxValidationLevel;
+    VK_FLAGS                               flags;                      // VK_DEVICE_CREATE_FLAGS
+} VK_DEVICE_CREATE_INFO;
+
+typedef struct _VK_INSTANCE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    const VK_APPLICATION_INFO*             pAppInfo;
+    const VK_ALLOC_CALLBACKS*              pAllocCb;
+    uint32_t                                extensionCount;
+    const char*const*                       ppEnabledExtensionNames;    // layer or extension name to be enabled
+} VK_INSTANCE_CREATE_INFO;
+
+// can be added to VK_DEVICE_CREATE_INFO or VK_INSTANCE_CREATE_INFO via pNext
+typedef struct _VK_LAYER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Should be VK_STRUCTURE_TYPE_LAYER_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                layerCount;
+    const char *const*                      ppActiveLayerNames;         // layer name from the layer's vkEnumerateLayers())
+} VK_LAYER_CREATE_INFO;
+
+typedef struct _VK_PHYSICAL_GPU_QUEUE_PROPERTIES
+{
+    VK_FLAGS                               queueFlags;                 // VK_QUEUE_FLAGS
+    uint32_t                                queueCount;
+    uint32_t                                maxAtomicCounters;
+    bool32_t                                supportsTimestamps;
+    uint32_t                                maxMemReferences;           // Tells how many memory references can be active for the given queue
+} VK_PHYSICAL_GPU_QUEUE_PROPERTIES;
+
+typedef struct _VK_PHYSICAL_GPU_MEMORY_PROPERTIES
+{
+    bool32_t                                supportsMigration;
+    bool32_t                                supportsPinning;
+} VK_PHYSICAL_GPU_MEMORY_PROPERTIES;
+
+typedef struct _VK_MEMORY_ALLOC_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_GPU_SIZE                            allocationSize;             // Size of memory allocation
+    VK_FLAGS                               memProps;                   // VK_MEMORY_PROPERTY_FLAGS
+    VK_MEMORY_TYPE                         memType;
+    VK_MEMORY_PRIORITY                     memPriority;
+} VK_MEMORY_ALLOC_INFO;
+
+// This structure is included in the VK_MEMORY_ALLOC_INFO chain
+// for memory regions allocated for buffer usage.
+typedef struct _VK_MEMORY_ALLOC_BUFFER_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_FLAGS                               usage;                      // VK_BUFFER_USAGE_FLAGS
+} VK_MEMORY_ALLOC_BUFFER_INFO;
+
+// This structure is included in the VK_MEMORY_ALLOC_INFO chain
+// for memory regions allocated for image usage.
+typedef struct _VK_MEMORY_ALLOC_IMAGE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_FLAGS                               usage;                      // VK_IMAGE_USAGE_FLAGS
+    VK_IMAGE_FORMAT_CLASS                  formatClass;
+    uint32_t                                samples;
+} VK_MEMORY_ALLOC_IMAGE_INFO;
+
+typedef struct _VK_MEMORY_OPEN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_OPEN_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_GPU_MEMORY                          sharedMem;
+} VK_MEMORY_OPEN_INFO;
+
+typedef struct _VK_PEER_MEMORY_OPEN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_GPU_MEMORY                          originalMem;
+} VK_PEER_MEMORY_OPEN_INFO;
+
+typedef struct _VK_MEMORY_REQUIREMENTS
+{
+    VK_GPU_SIZE                            size;                       // Specified in bytes
+    VK_GPU_SIZE                            alignment;                  // Specified in bytes
+    VK_GPU_SIZE                            granularity;                // Granularity on which vkBindObjectMemoryRange can bind sub-ranges of memory specified in bytes (usually the page size)
+    VK_FLAGS                               memProps;                   // VK_MEMORY_PROPERTY_FLAGS
+    VK_MEMORY_TYPE                         memType;
+} VK_MEMORY_REQUIREMENTS;
+
+typedef struct _VK_BUFFER_MEMORY_REQUIREMENTS
+{
+    VK_FLAGS                               usage;                      // VK_BUFFER_USAGE_FLAGS
+} VK_BUFFER_MEMORY_REQUIREMENTS;
+
+typedef struct _VK_IMAGE_MEMORY_REQUIREMENTS
+{
+    VK_FLAGS                               usage;                      // VK_IMAGE_USAGE_FLAGS
+    VK_IMAGE_FORMAT_CLASS                  formatClass;
+    uint32_t                                samples;
+} VK_IMAGE_MEMORY_REQUIREMENTS;
+
+typedef struct _VK_FORMAT_PROPERTIES
+{
+    VK_FLAGS                               linearTilingFeatures;      // VK_FORMAT_FEATURE_FLAGS
+    VK_FLAGS                               optimalTilingFeatures;     // VK_FORMAT_FEATURE_FLAGS
+} VK_FORMAT_PROPERTIES;
+
+typedef struct _VK_BUFFER_VIEW_ATTACH_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_BUFFER_VIEW                         view;
+} VK_BUFFER_VIEW_ATTACH_INFO;
+
+typedef struct _VK_IMAGE_VIEW_ATTACH_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO
+    const void*                             pNext;                      // Pointer to next structure
+    VK_IMAGE_VIEW                          view;
+    VK_IMAGE_LAYOUT                        layout;
+} VK_IMAGE_VIEW_ATTACH_INFO;
+
+typedef struct _VK_UPDATE_SAMPLERS
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_UPDATE_SAMPLERS
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                binding;                    // Binding of the sampler (array)
+    uint32_t                                arrayIndex;                 // First element of the array to update or zero otherwise
+    uint32_t                                count;                      // Number of elements to update
+    const VK_SAMPLER*                      pSamplers;
+} VK_UPDATE_SAMPLERS;
+
+typedef struct _VK_SAMPLER_IMAGE_VIEW_INFO
+{
+    VK_SAMPLER                             sampler;
+    const VK_IMAGE_VIEW_ATTACH_INFO*       pImageView;
+} VK_SAMPLER_IMAGE_VIEW_INFO;
+
+typedef struct _VK_UPDATE_SAMPLER_TEXTURES
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES
+    const void*                             pNext;                      // Pointer to next structure
+    uint32_t                                binding;                    // Binding of the combined texture sampler (array)
+    uint32_t                                arrayIndex;                 // First element of the array to update or zero otherwise
+    uint32_t                                count;                      // Number of elements to update
+    const VK_SAMPLER_IMAGE_VIEW_INFO*      pSamplerImageViews;
+} VK_UPDATE_SAMPLER_TEXTURES;
+
+typedef struct _VK_UPDATE_IMAGES
+{
+    VK_STRUCTURE_TYPE                       sType;                     // Must be VK_STRUCTURE_TYPE_UPDATE_IMAGES
+    const void*                              pNext;                     // Pointer to next structure
+    VK_DESCRIPTOR_TYPE                      descriptorType;
+    uint32_t                                 binding;                   // Binding of the image (array)
+    uint32_t                                 arrayIndex;                // First element of the array to update or zero otherwise
+    uint32_t                                 count;                     // Number of elements to update
+    const VK_IMAGE_VIEW_ATTACH_INFO*        pImageViews;
+} VK_UPDATE_IMAGES;
+
+typedef struct _VK_UPDATE_BUFFERS
+{
+    VK_STRUCTURE_TYPE                        sType;                    // Must be VK_STRUCTURE_TYPE_UPDATE_BUFFERS
+    const void*                               pNext;                    // Pointer to next structure
+    VK_DESCRIPTOR_TYPE                       descriptorType;
+    uint32_t                                  binding;                  // Binding of the buffer (array)
+    uint32_t                                  arrayIndex;               // First element of the array to update or zero otherwise
+    uint32_t                                  count;                    // Number of elements to update
+    const VK_BUFFER_VIEW_ATTACH_INFO*        pBufferViews;
+} VK_UPDATE_BUFFERS;
+
+typedef struct _VK_UPDATE_AS_COPY
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_UPDATE_AS_COPY
+    const void*                             pNext;                      // Pointer to next structure
+    VK_DESCRIPTOR_TYPE                     descriptorType;
+    VK_DESCRIPTOR_SET                      descriptorSet;
+    uint32_t                                binding;
+    uint32_t                                arrayElement;
+    uint32_t                                count;
+} VK_UPDATE_AS_COPY;
+
+typedef struct _VK_BUFFER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+    VK_GPU_SIZE                            size;                       // Specified in bytes
+    VK_FLAGS                               usage;                      // VK_BUFFER_USAGE_FLAGS
+    VK_FLAGS                               flags;                      // VK_BUFFER_CREATE_FLAGS
+} VK_BUFFER_CREATE_INFO;
+
+typedef struct _VK_BUFFER_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+    VK_BUFFER                              buffer;
+    VK_BUFFER_VIEW_TYPE                    viewType;
+    VK_FORMAT                              format;                     // Optionally specifies format of elements
+    VK_GPU_SIZE                            offset;                     // Specified in bytes
+    VK_GPU_SIZE                            range;                      // View size specified in bytes
+} VK_BUFFER_VIEW_CREATE_INFO;
+
+typedef struct _VK_IMAGE_SUBRESOURCE
+{
+    VK_IMAGE_ASPECT                        aspect;
+    uint32_t                                mipLevel;
+    uint32_t                                arraySlice;
+} VK_IMAGE_SUBRESOURCE;
+
+typedef struct _VK_IMAGE_SUBRESOURCE_RANGE
+{
+    VK_IMAGE_ASPECT                        aspect;
+    uint32_t                                baseMipLevel;
+    uint32_t                                mipLevels;
+    uint32_t                                baseArraySlice;
+    uint32_t                                arraySize;
+} VK_IMAGE_SUBRESOURCE_RANGE;
+
+typedef struct _VK_EVENT_WAIT_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_EVENT_WAIT_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+
+    uint32_t                                eventCount;                 // Number of events to wait on
+    const VK_EVENT*                        pEvents;                    // Array of event objects to wait on
+
+    VK_WAIT_EVENT                          waitEvent;                  // Pipeline event where the wait should happen
+
+    uint32_t                                memBarrierCount;            // Number of memory barriers
+    const void**                            ppMemBarriers;              // Array of pointers to memory barriers (any of them can be either VK_MEMORY_BARRIER, VK_BUFFER_MEMORY_BARRIER, or VK_IMAGE_MEMORY_BARRIER)
+} VK_EVENT_WAIT_INFO;
+
+typedef struct _VK_PIPELINE_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_PIPELINE_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    uint32_t                                eventCount;                 // Number of events to wait on
+    const VK_PIPE_EVENT*                   pEvents;                    // Array of pipeline events to wait on
+
+    VK_WAIT_EVENT                          waitEvent;                  // Pipeline event where the wait should happen
+
+    uint32_t                                memBarrierCount;            // Number of memory barriers
+    const void**                            ppMemBarriers;              // Array of pointers to memory barriers (any of them can be either VK_MEMORY_BARRIER, VK_BUFFER_MEMORY_BARRIER, or VK_IMAGE_MEMORY_BARRIER)
+} VK_PIPELINE_BARRIER;
+
+typedef struct _VK_MEMORY_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    VK_FLAGS                               outputMask;                 // Outputs the barrier should sync (see VK_MEMORY_OUTPUT_FLAGS)
+    VK_FLAGS                               inputMask;                  // Inputs the barrier should sync to (see VK_MEMORY_INPUT_FLAGS)
+} VK_MEMORY_BARRIER;
+
+typedef struct _VK_BUFFER_MEMORY_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    VK_FLAGS                               outputMask;                 // Outputs the barrier should sync (see VK_MEMORY_OUTPUT_FLAGS)
+    VK_FLAGS                               inputMask;                  // Inputs the barrier should sync to (see VK_MEMORY_INPUT_FLAGS)
+
+    VK_BUFFER                              buffer;                     // Buffer to sync
+
+    VK_GPU_SIZE                            offset;                     // Offset within the buffer to sync
+    VK_GPU_SIZE                            size;                       // Amount of bytes to sync
+} VK_BUFFER_MEMORY_BARRIER;
+
+typedef struct _VK_IMAGE_MEMORY_BARRIER
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
+    const void*                             pNext;                      // Pointer to next structure.
+
+    VK_FLAGS                               outputMask;                 // Outputs the barrier should sync (see VK_MEMORY_OUTPUT_FLAGS)
+    VK_FLAGS                               inputMask;                  // Inputs the barrier should sync to (see VK_MEMORY_INPUT_FLAGS)
+
+    VK_IMAGE_LAYOUT                        oldLayout;                  // Current layout of the image
+    VK_IMAGE_LAYOUT                        newLayout;                  // New layout to transition the image to
+
+    VK_IMAGE                               image;                      // Image to sync
+
+    VK_IMAGE_SUBRESOURCE_RANGE             subresourceRange;           // Subresource range to sync
+} VK_IMAGE_MEMORY_BARRIER;
+
+typedef struct _VK_IMAGE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                      // Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
+    const void*                             pNext;                      // Pointer to next structure.
+    VK_IMAGE_TYPE                          imageType;
+    VK_FORMAT                              format;
+    VK_EXTENT3D                            extent;
+    uint32_t                                mipLevels;
+    uint32_t                                arraySize;
+    uint32_t                                samples;
+    VK_IMAGE_TILING                        tiling;
+    VK_FLAGS                               usage;                      // VK_IMAGE_USAGE_FLAGS
+    VK_FLAGS                               flags;                      // VK_IMAGE_CREATE_FLAGS
+} VK_IMAGE_CREATE_INFO;
+
+typedef struct _VK_PEER_IMAGE_OPEN_INFO
+{
+    VK_IMAGE                               originalImage;
+} VK_PEER_IMAGE_OPEN_INFO;
+
+typedef struct _VK_SUBRESOURCE_LAYOUT
+{
+    VK_GPU_SIZE                            offset;                 // Specified in bytes
+    VK_GPU_SIZE                            size;                   // Specified in bytes
+    VK_GPU_SIZE                            rowPitch;               // Specified in bytes
+    VK_GPU_SIZE                            depthPitch;             // Specified in bytes
+} VK_SUBRESOURCE_LAYOUT;
+
+typedef struct _VK_IMAGE_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                  // Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
+    const void*                             pNext;                  // Pointer to next structure
+    VK_IMAGE                               image;
+    VK_IMAGE_VIEW_TYPE                     viewType;
+    VK_FORMAT                              format;
+    VK_CHANNEL_MAPPING                     channels;
+    VK_IMAGE_SUBRESOURCE_RANGE             subresourceRange;
+    float                                   minLod;
+} VK_IMAGE_VIEW_CREATE_INFO;
+
+typedef struct _VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                  // Must be VK_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO
+    const void*                             pNext;                  // Pointer to next structure
+    VK_IMAGE                               image;
+    VK_FORMAT                              format;
+    uint32_t                                mipLevel;
+    uint32_t                                baseArraySlice;
+    uint32_t                                arraySize;
+    VK_IMAGE                               msaaResolveImage;
+    VK_IMAGE_SUBRESOURCE_RANGE             msaaResolveSubResource;
+} VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO;
+
+typedef struct _VK_DEPTH_STENCIL_VIEW_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;                  // Must be VK_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO
+    const void*                             pNext;                  // Pointer to next structure
+    VK_IMAGE                               image;
+    uint32_t                                mipLevel;
+    uint32_t                                baseArraySlice;
+    uint32_t                                arraySize;
+    VK_IMAGE                               msaaResolveImage;
+    VK_IMAGE_SUBRESOURCE_RANGE             msaaResolveSubResource;
+    VK_FLAGS                               flags;                  // VK_DEPTH_STENCIL_VIEW_CREATE_FLAGS
+} VK_DEPTH_STENCIL_VIEW_CREATE_INFO;
+
+typedef struct _VK_COLOR_ATTACHMENT_BIND_INFO
+{
+    VK_COLOR_ATTACHMENT_VIEW               view;
+    VK_IMAGE_LAYOUT                        layout;
+} VK_COLOR_ATTACHMENT_BIND_INFO;
+
+typedef struct _VK_DEPTH_STENCIL_BIND_INFO
+{
+    VK_DEPTH_STENCIL_VIEW                  view;
+    VK_IMAGE_LAYOUT                        layout;
+} VK_DEPTH_STENCIL_BIND_INFO;
+
+typedef struct _VK_BUFFER_COPY
+{
+    VK_GPU_SIZE                            srcOffset;              // Specified in bytes
+    VK_GPU_SIZE                            destOffset;             // Specified in bytes
+    VK_GPU_SIZE                            copySize;               // Specified in bytes
+} VK_BUFFER_COPY;
+
+typedef struct _VK_IMAGE_MEMORY_BIND_INFO
+{
+    VK_IMAGE_SUBRESOURCE                   subresource;
+    VK_OFFSET3D                            offset;
+    VK_EXTENT3D                            extent;
+} VK_IMAGE_MEMORY_BIND_INFO;
+
+typedef struct _VK_IMAGE_COPY
+{
+    VK_IMAGE_SUBRESOURCE                   srcSubresource;
+    VK_OFFSET3D                            srcOffset;
+    VK_IMAGE_SUBRESOURCE                   destSubresource;
+    VK_OFFSET3D                            destOffset;
+    VK_EXTENT3D                            extent;
+} VK_IMAGE_COPY;
+
+typedef struct _VK_IMAGE_BLIT
+{
+    VK_IMAGE_SUBRESOURCE                   srcSubresource;
+    VK_OFFSET3D                            srcOffset;
+    VK_EXTENT3D                            srcExtent;
+    VK_IMAGE_SUBRESOURCE                   destSubresource;
+    VK_OFFSET3D                            destOffset;
+    VK_EXTENT3D                            destExtent;
+} VK_IMAGE_BLIT;
+
+typedef struct _VK_BUFFER_IMAGE_COPY
+{
+    VK_GPU_SIZE                            bufferOffset;           // Specified in bytes
+    VK_IMAGE_SUBRESOURCE                   imageSubresource;
+    VK_OFFSET3D                            imageOffset;
+    VK_EXTENT3D                            imageExtent;
+} VK_BUFFER_IMAGE_COPY;
+
+typedef struct _VK_IMAGE_RESOLVE
+{
+    VK_IMAGE_SUBRESOURCE                   srcSubresource;
+    VK_OFFSET2D                            srcOffset;
+    VK_IMAGE_SUBRESOURCE                   destSubresource;
+    VK_OFFSET2D                            destOffset;
+    VK_EXTENT2D                            extent;
+} VK_IMAGE_RESOLVE;
+
+typedef struct _VK_SHADER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;              // Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
+    const void*                             pNext;              // Pointer to next structure
+    size_t                                  codeSize;           // Specified in bytes
+    const void*                             pCode;
+    VK_FLAGS                               flags;              // Reserved
+} VK_SHADER_CREATE_INFO;
+
+typedef struct _VK_DESCRIPTOR_SET_LAYOUT_BINDING
+{
+    VK_DESCRIPTOR_TYPE                     descriptorType;
+    uint32_t                                count;
+    VK_FLAGS                               stageFlags;         // VK_SHADER_STAGE_FLAGS
+    const VK_SAMPLER*                      pImmutableSamplers;
+} VK_DESCRIPTOR_SET_LAYOUT_BINDING;
+
+typedef struct _VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                       sType;             // Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+    const void*                              pNext;             // Pointer to next structure
+    uint32_t                                 count;             // Number of bindings in the descriptor set layout
+    const VK_DESCRIPTOR_SET_LAYOUT_BINDING* pBinding;          // Array of descriptor set layout bindings
+} VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
+
+typedef struct _VK_DESCRIPTOR_TYPE_COUNT
+{
+    VK_DESCRIPTOR_TYPE                     type;
+    uint32_t                                count;
+} VK_DESCRIPTOR_TYPE_COUNT;
+
+typedef struct _VK_DESCRIPTOR_POOL_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;              // Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
+    const void*                             pNext;              // Pointer to next structure
+    uint32_t                                count;
+    const VK_DESCRIPTOR_TYPE_COUNT*        pTypeCount;
+} VK_DESCRIPTOR_POOL_CREATE_INFO;
+
+typedef struct _VK_LINK_CONST_BUFFER
+{
+    uint32_t                                    bufferId;
+    size_t                                      bufferSize;
+    const void*                                 pBufferData;
+} VK_LINK_CONST_BUFFER;
+
+typedef struct _VK_SPECIALIZATION_MAP_ENTRY
+{
+    uint32_t                                constantId;         // The SpecConstant ID specified in the BIL
+    uint32_t                                offset;             // Offset of the value in the data block
+} VK_SPECIALIZATION_MAP_ENTRY;
+
+typedef struct _VK_SPECIALIZATION_INFO
+{
+    uint32_t                                mapEntryCount;
+    const VK_SPECIALIZATION_MAP_ENTRY*     pMap;               // mapEntryCount entries
+    const void*                             pData;
+} VK_SPECIALIZATION_INFO;
+
+typedef struct _VK_PIPELINE_SHADER
+{
+    VK_PIPELINE_SHADER_STAGE               stage;
+    VK_SHADER                              shader;
+    uint32_t                                linkConstBufferCount;
+    const VK_LINK_CONST_BUFFER*            pLinkConstBufferInfo;
+    const VK_SPECIALIZATION_INFO*          pSpecializationInfo;
+} VK_PIPELINE_SHADER;
+
+typedef struct _VK_COMPUTE_PIPELINE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_PIPELINE_SHADER                     cs;
+    VK_FLAGS                               flags;      // VK_PIPELINE_CREATE_FLAGS
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN         setLayoutChain; // For local size fields zero is treated an invalid value
+    uint32_t                                localSizeX;
+    uint32_t                                localSizeY;
+    uint32_t                                localSizeZ;
+
+} VK_COMPUTE_PIPELINE_CREATE_INFO;
+
+typedef struct _VK_VERTEX_INPUT_BINDING_DESCRIPTION
+{
+    uint32_t                                binding;        // Vertex buffer binding id
+    uint32_t                                strideInBytes;  // Distance between vertices in bytes (0 = no advancement)
+
+    VK_VERTEX_INPUT_STEP_RATE              stepRate;       // Rate at which binding is incremented
+} VK_VERTEX_INPUT_BINDING_DESCRIPTION;
+
+typedef struct _VK_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION
+{
+    uint32_t                                location;       // location of the shader vertex attrib
+    uint32_t                                binding;        // Vertex buffer binding id
+
+    VK_FORMAT                              format;         // format of source data
+
+    uint32_t                                offsetInBytes;  // Offset of first element in bytes from base of vertex
+} VK_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION;
+
+typedef struct _VK_PIPELINE_VERTEX_INPUT_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                            sType;          // Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO
+    const void*                                   pNext;          // Pointer to next structure
+
+    uint32_t                                      bindingCount;   // number of bindings
+    const VK_VERTEX_INPUT_BINDING_DESCRIPTION*   pVertexBindingDescriptions;
+
+    uint32_t                                      attributeCount; // number of attributes
+    const VK_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION* pVertexAttributeDescriptions;
+} VK_PIPELINE_VERTEX_INPUT_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_IA_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_PRIMITIVE_TOPOLOGY                  topology;
+    bool32_t                                disableVertexReuse;         // optional
+    bool32_t                                primitiveRestartEnable;
+    uint32_t                                primitiveRestartIndex;      // optional (GL45)
+} VK_PIPELINE_IA_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_TESS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                patchControlPoints;
+} VK_PIPELINE_TESS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_VP_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                numViewports;
+    VK_COORDINATE_ORIGIN                   clipOrigin;                 // optional (GL45)
+    VK_DEPTH_MODE                          depthMode;                  // optional (GL45)
+} VK_PIPELINE_VP_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_RS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    bool32_t                                depthClipEnable;
+    bool32_t                                rasterizerDiscardEnable;
+    bool32_t                                programPointSize;           // optional (GL45)
+    VK_COORDINATE_ORIGIN                   pointOrigin;                // optional (GL45)
+    VK_PROVOKING_VERTEX_CONVENTION         provokingVertex;            // optional (GL45)
+    VK_FILL_MODE                           fillMode;                   // optional (GL45)
+    VK_CULL_MODE                           cullMode;
+    VK_FACE_ORIENTATION                    frontFace;
+} VK_PIPELINE_RS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_MS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                samples;
+    bool32_t                                multisampleEnable;          // optional (GL45)
+    bool32_t                                sampleShadingEnable;        // optional (GL45)
+    float                                   minSampleShading;           // optional (GL45)
+    VK_SAMPLE_MASK                         sampleMask;
+} VK_PIPELINE_MS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_CB_ATTACHMENT_STATE
+{
+    bool32_t                                blendEnable;
+    VK_FORMAT                              format;
+    VK_BLEND                               srcBlendColor;
+    VK_BLEND                               destBlendColor;
+    VK_BLEND_FUNC                          blendFuncColor;
+    VK_BLEND                               srcBlendAlpha;
+    VK_BLEND                               destBlendAlpha;
+    VK_BLEND_FUNC                          blendFuncAlpha;
+    uint8_t                                 channelWriteMask;
+} VK_PIPELINE_CB_ATTACHMENT_STATE;
+
+typedef struct _VK_PIPELINE_CB_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    bool32_t                                alphaToCoverageEnable;
+    bool32_t                                logicOpEnable;
+    VK_LOGIC_OP                            logicOp;
+    uint32_t                                attachmentCount;    // # of pAttachments
+    const VK_PIPELINE_CB_ATTACHMENT_STATE* pAttachments;
+} VK_PIPELINE_CB_STATE_CREATE_INFO;
+
+typedef struct _VK_STENCIL_OP_STATE
+{
+    VK_STENCIL_OP                          stencilFailOp;
+    VK_STENCIL_OP                          stencilPassOp;
+    VK_STENCIL_OP                          stencilDepthFailOp;
+    VK_COMPARE_FUNC                        stencilFunc;
+} VK_STENCIL_OP_STATE;
+
+typedef struct _VK_PIPELINE_DS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FORMAT                              format;
+    bool32_t                                depthTestEnable;
+    bool32_t                                depthWriteEnable;
+    VK_COMPARE_FUNC                        depthFunc;
+    bool32_t                                depthBoundsEnable;          // optional (depth_bounds_test)
+    bool32_t                                stencilTestEnable;
+    VK_STENCIL_OP_STATE                    front;
+    VK_STENCIL_OP_STATE                    back;
+} VK_PIPELINE_DS_STATE_CREATE_INFO;
+
+typedef struct _VK_PIPELINE_SHADER_STAGE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_PIPELINE_SHADER                     shader;
+} VK_PIPELINE_SHADER_STAGE_CREATE_INFO;
+
+typedef struct _VK_GRAPHICS_PIPELINE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FLAGS                               flags;      // VK_PIPELINE_CREATE_FLAGS
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN         pSetLayoutChain;
+} VK_GRAPHICS_PIPELINE_CREATE_INFO;
+
+typedef struct _VK_SAMPLER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;          // Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+    const void*                             pNext;          // Pointer to next structure
+    VK_TEX_FILTER                          magFilter;      // Filter mode for magnification
+    VK_TEX_FILTER                          minFilter;      // Filter mode for minifiation
+    VK_TEX_MIPMAP_MODE                     mipMode;        // Mipmap selection mode
+    VK_TEX_ADDRESS                         addressU;
+    VK_TEX_ADDRESS                         addressV;
+    VK_TEX_ADDRESS                         addressW;
+    float                                   mipLodBias;
+    uint32_t                                maxAnisotropy;
+    VK_COMPARE_FUNC                        compareFunc;
+    float                                   minLod;
+    float                                   maxLod;
+    VK_BORDER_COLOR_TYPE                   borderColorType;
+} VK_SAMPLER_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_VP_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_VP_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                viewportAndScissorCount;  // number of entries in pViewports and pScissors
+    const VK_VIEWPORT*                     pViewports;
+    const VK_RECT*                         pScissors;
+} VK_DYNAMIC_VP_STATE_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_RS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_RS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    float                                   depthBias;
+    float                                   depthBiasClamp;
+    float                                   slopeScaledDepthBias;
+    float                                   pointSize;          // optional (GL45) - Size of points
+    float                                   pointFadeThreshold; // optional (GL45) - Size of point fade threshold
+    float                                   lineWidth;          // optional (GL45) - Width of lines
+} VK_DYNAMIC_RS_STATE_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_CB_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_CB_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    float                                   blendConst[4];
+} VK_DYNAMIC_CB_STATE_CREATE_INFO;
+
+typedef struct _VK_DYNAMIC_DS_STATE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    float                                   minDepth;               // optional (depth_bounds_test)
+    float                                   maxDepth;               // optional (depth_bounds_test)
+    uint32_t                                stencilReadMask;
+    uint32_t                                stencilWriteMask;
+    uint32_t                                stencilFrontRef;
+    uint32_t                                stencilBackRef;
+} VK_DYNAMIC_DS_STATE_CREATE_INFO;
+
+typedef struct _VK_CMD_BUFFER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                queueNodeIndex;
+    VK_FLAGS                               flags;
+} VK_CMD_BUFFER_CREATE_INFO;
+
+typedef struct _VK_CMD_BUFFER_BEGIN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
+    const void*                             pNext;      // Pointer to next structure
+
+    VK_FLAGS                               flags;      // VK_CMD_BUFFER_BUILD_FLAGS
+} VK_CMD_BUFFER_BEGIN_INFO;
+
+typedef struct _VK_RENDER_PASS_BEGIN
+{
+    VK_RENDER_PASS                         renderPass;
+    VK_FRAMEBUFFER                         framebuffer;
+} VK_RENDER_PASS_BEGIN;
+
+typedef struct _VK_CMD_BUFFER_GRAPHICS_BEGIN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO
+    const void*                             pNext;      // Pointer to next structure
+
+    VK_RENDER_PASS_BEGIN                   renderPassContinue;  // Only needed when a render pass is split across two command buffers
+} VK_CMD_BUFFER_GRAPHICS_BEGIN_INFO;
+
+// Union allowing specification of floating point or raw color data. Actual value selected is based on image being cleared.
+typedef union _VK_CLEAR_COLOR_VALUE
+{
+    float                                   floatColor[4];
+    uint32_t                                rawColor[4];
+} VK_CLEAR_COLOR_VALUE;
+
+typedef struct _VK_CLEAR_COLOR
+{
+    VK_CLEAR_COLOR_VALUE                   color;
+    bool32_t                                useRawValue;
+} VK_CLEAR_COLOR;
+
+typedef struct _VK_RENDER_PASS_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+
+    VK_RECT                                renderArea;
+    uint32_t                                colorAttachmentCount;
+    VK_EXTENT2D                            extent;
+    uint32_t                                sampleCount;
+    uint32_t                                layers;
+    const VK_FORMAT*                       pColorFormats;
+    const VK_IMAGE_LAYOUT*                 pColorLayouts;
+    const VK_ATTACHMENT_LOAD_OP*           pColorLoadOps;
+    const VK_ATTACHMENT_STORE_OP*          pColorStoreOps;
+    const VK_CLEAR_COLOR*                  pColorLoadClearValues;
+    VK_FORMAT                              depthStencilFormat;
+    VK_IMAGE_LAYOUT                        depthStencilLayout;
+    VK_ATTACHMENT_LOAD_OP                  depthLoadOp;
+    float                                   depthLoadClearValue;
+    VK_ATTACHMENT_STORE_OP                 depthStoreOp;
+    VK_ATTACHMENT_LOAD_OP                  stencilLoadOp;
+    uint32_t                                stencilLoadClearValue;
+    VK_ATTACHMENT_STORE_OP                 stencilStoreOp;
+} VK_RENDER_PASS_CREATE_INFO;
+
+typedef struct _VK_EVENT_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FLAGS                               flags;      // Reserved
+} VK_EVENT_CREATE_INFO;
+
+typedef struct _VK_FENCE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_FENCE_CREATE_FLAGS                  flags;      // VK_FENCE_CREATE_FLAGS
+} VK_FENCE_CREATE_INFO;
+
+typedef struct _VK_SEMAPHORE_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    uint32_t                                initialCount;
+    VK_FLAGS                               flags;      // VK_SEMAPHORE_CREATE_FLAGS
+} VK_SEMAPHORE_CREATE_INFO;
+
+typedef struct _VK_SEMAPHORE_OPEN_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_SEMAPHORE                           sharedSemaphore;
+} VK_SEMAPHORE_OPEN_INFO;
+
+typedef struct _VK_PIPELINE_STATISTICS_DATA
+{
+    uint64_t                                fsInvocations;            // Fragment shader invocations
+    uint64_t                                cPrimitives;              // Clipper primitives
+    uint64_t                                cInvocations;             // Clipper invocations
+    uint64_t                                vsInvocations;            // Vertex shader invocations
+    uint64_t                                gsInvocations;            // Geometry shader invocations
+    uint64_t                                gsPrimitives;             // Geometry shader primitives
+    uint64_t                                iaPrimitives;             // Input primitives
+    uint64_t                                iaVertices;               // Input vertices
+    uint64_t                                tcsInvocations;           // Tessellation control shader invocations
+    uint64_t                                tesInvocations;           // Tessellation evaluation shader invocations
+    uint64_t                                csInvocations;            // Compute shader invocations
+} VK_PIPELINE_STATISTICS_DATA;
+
+typedef struct _VK_QUERY_POOL_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;      // Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
+    const void*                             pNext;      // Pointer to next structure
+    VK_QUERY_TYPE                          queryType;
+    uint32_t                                slots;
+} VK_QUERY_POOL_CREATE_INFO;
+
+typedef struct _VK_FRAMEBUFFER_CREATE_INFO
+{
+    VK_STRUCTURE_TYPE                      sType;  // Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
+    const void*                             pNext;  // Pointer to next structure
+
+    uint32_t                                colorAttachmentCount;
+    const VK_COLOR_ATTACHMENT_BIND_INFO*   pColorAttachments;
+    const VK_DEPTH_STENCIL_BIND_INFO*      pDepthStencilAttachment;
+
+    uint32_t                                sampleCount;
+    uint32_t                                width;
+    uint32_t                                height;
+    uint32_t                                layers;
+} VK_FRAMEBUFFER_CREATE_INFO;
+
+typedef struct _VK_DRAW_INDIRECT_CMD
+{
+    uint32_t                                vertexCount;
+    uint32_t                                instanceCount;
+    uint32_t                                firstVertex;
+    uint32_t                                firstInstance;
+} VK_DRAW_INDIRECT_CMD;
+
+typedef struct _VK_DRAW_INDEXED_INDIRECT_CMD
+{
+    uint32_t                                indexCount;
+    uint32_t                                instanceCount;
+    uint32_t                                firstIndex;
+    int32_t                                 vertexOffset;
+    uint32_t                                firstInstance;
+} VK_DRAW_INDEXED_INDIRECT_CMD;
+
+typedef struct _VK_DISPATCH_INDIRECT_CMD
+{
+    uint32_t   x;
+    uint32_t   y;
+    uint32_t   z;
+} VK_DISPATCH_INDIRECT_CMD;
+
+// ------------------------------------------------------------------------------------------------
+// API functions
+typedef VK_RESULT (VKAPI *vkCreateInstanceType)(const VK_INSTANCE_CREATE_INFO* pCreateInfo, VK_INSTANCE* pInstance);
+typedef VK_RESULT (VKAPI *vkDestroyInstanceType)(VK_INSTANCE instance);
+typedef VK_RESULT (VKAPI *vkEnumerateGpusType)(VK_INSTANCE instance, uint32_t maxGpus, uint32_t* pGpuCount, VK_PHYSICAL_GPU* pGpus);
+typedef VK_RESULT (VKAPI *vkGetGpuInfoType)(VK_PHYSICAL_GPU gpu, VK_PHYSICAL_GPU_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef void *     (VKAPI *vkGetProcAddrType)(VK_PHYSICAL_GPU gpu, const char * pName);
+typedef VK_RESULT (VKAPI *vkCreateDeviceType)(VK_PHYSICAL_GPU gpu, const VK_DEVICE_CREATE_INFO* pCreateInfo, VK_DEVICE* pDevice);
+typedef VK_RESULT (VKAPI *vkDestroyDeviceType)(VK_DEVICE device);
+typedef VK_RESULT (VKAPI *vkGetExtensionSupportType)(VK_PHYSICAL_GPU gpu, const char* pExtName);
+typedef VK_RESULT (VKAPI *vkEnumerateLayersType)(VK_PHYSICAL_GPU gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved);
+typedef VK_RESULT (VKAPI *vkGetDeviceQueueType)(VK_DEVICE device, uint32_t queueNodeIndex, uint32_t queueIndex, VK_QUEUE* pQueue);
+typedef VK_RESULT (VKAPI *vkQueueSubmitType)(VK_QUEUE queue, uint32_t cmdBufferCount, const VK_CMD_BUFFER* pCmdBuffers, VK_FENCE fence);
+typedef VK_RESULT (VKAPI *vkQueueAddMemReferenceType)(VK_QUEUE queue, VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkQueueRemoveMemReferenceType)(VK_QUEUE queue, VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkQueueWaitIdleType)(VK_QUEUE queue);
+typedef VK_RESULT (VKAPI *vkDeviceWaitIdleType)(VK_DEVICE device);
+typedef VK_RESULT (VKAPI *vkAllocMemoryType)(VK_DEVICE device, const VK_MEMORY_ALLOC_INFO* pAllocInfo, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkFreeMemoryType)(VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkSetMemoryPriorityType)(VK_GPU_MEMORY mem, VK_MEMORY_PRIORITY priority);
+typedef VK_RESULT (VKAPI *vkMapMemoryType)(VK_GPU_MEMORY mem, VK_FLAGS flags, void** ppData);
+typedef VK_RESULT (VKAPI *vkUnmapMemoryType)(VK_GPU_MEMORY mem);
+typedef VK_RESULT (VKAPI *vkPinSystemMemoryType)(VK_DEVICE device, const void* pSysMem, size_t memSize, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkGetMultiGpuCompatibilityType)(VK_PHYSICAL_GPU gpu0, VK_PHYSICAL_GPU gpu1, VK_GPU_COMPATIBILITY_INFO* pInfo);
+typedef VK_RESULT (VKAPI *vkOpenSharedMemoryType)(VK_DEVICE device, const VK_MEMORY_OPEN_INFO* pOpenInfo, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkOpenSharedSemaphoreType)(VK_DEVICE device, const VK_SEMAPHORE_OPEN_INFO* pOpenInfo, VK_SEMAPHORE* pSemaphore);
+typedef VK_RESULT (VKAPI *vkOpenPeerMemoryType)(VK_DEVICE device, const VK_PEER_MEMORY_OPEN_INFO* pOpenInfo, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkOpenPeerImageType)(VK_DEVICE device, const VK_PEER_IMAGE_OPEN_INFO* pOpenInfo, VK_IMAGE* pImage, VK_GPU_MEMORY* pMem);
+typedef VK_RESULT (VKAPI *vkDestroyObjectType)(VK_OBJECT object);
+typedef VK_RESULT (VKAPI *vkGetObjectInfoType)(VK_BASE_OBJECT object, VK_OBJECT_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkBindObjectMemoryType)(VK_OBJECT object, uint32_t allocationIdx, VK_GPU_MEMORY mem, VK_GPU_SIZE offset);
+typedef VK_RESULT (VKAPI *vkBindObjectMemoryRangeType)(VK_OBJECT object, uint32_t allocationIdx, VK_GPU_SIZE rangeOffset,VK_GPU_SIZE rangeSize, VK_GPU_MEMORY mem, VK_GPU_SIZE memOffset);
+typedef VK_RESULT (VKAPI *vkBindImageMemoryRangeType)(VK_IMAGE image, uint32_t allocationIdx, const VK_IMAGE_MEMORY_BIND_INFO* bindInfo, VK_GPU_MEMORY mem, VK_GPU_SIZE memOffset);
+typedef VK_RESULT (VKAPI *vkCreateFenceType)(VK_DEVICE device, const VK_FENCE_CREATE_INFO* pCreateInfo, VK_FENCE* pFence);
+typedef VK_RESULT (VKAPI *vkResetFencesType)(VK_DEVICE device, uint32_t fenceCount, VK_FENCE* pFences);
+typedef VK_RESULT (VKAPI *vkGetFenceStatusType)(VK_FENCE fence);
+typedef VK_RESULT (VKAPI *vkWaitForFencesType)(VK_DEVICE device, uint32_t fenceCount, const VK_FENCE* pFences, bool32_t waitAll, uint64_t timeout);
+typedef VK_RESULT (VKAPI *vkCreateSemaphoreType)(VK_DEVICE device, const VK_SEMAPHORE_CREATE_INFO* pCreateInfo, VK_SEMAPHORE* pSemaphore);
+typedef VK_RESULT (VKAPI *vkQueueSignalSemaphoreType)(VK_QUEUE queue, VK_SEMAPHORE semaphore);
+typedef VK_RESULT (VKAPI *vkQueueWaitSemaphoreType)(VK_QUEUE queue, VK_SEMAPHORE semaphore);
+typedef VK_RESULT (VKAPI *vkCreateEventType)(VK_DEVICE device, const VK_EVENT_CREATE_INFO* pCreateInfo, VK_EVENT* pEvent);
+typedef VK_RESULT (VKAPI *vkGetEventStatusType)(VK_EVENT event);
+typedef VK_RESULT (VKAPI *vkSetEventType)(VK_EVENT event);
+typedef VK_RESULT (VKAPI *vkResetEventType)(VK_EVENT event);
+typedef VK_RESULT (VKAPI *vkCreateQueryPoolType)(VK_DEVICE device, const VK_QUERY_POOL_CREATE_INFO* pCreateInfo, VK_QUERY_POOL* pQueryPool);
+typedef VK_RESULT (VKAPI *vkGetQueryPoolResultsType)(VK_QUERY_POOL queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkGetFormatInfoType)(VK_DEVICE device, VK_FORMAT format, VK_FORMAT_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkCreateBufferType)(VK_DEVICE device, const VK_BUFFER_CREATE_INFO* pCreateInfo, VK_BUFFER* pBuffer);
+typedef VK_RESULT (VKAPI *vkCreateBufferViewType)(VK_DEVICE device, const VK_BUFFER_VIEW_CREATE_INFO* pCreateInfo, VK_BUFFER_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateImageType)(VK_DEVICE device, const VK_IMAGE_CREATE_INFO* pCreateInfo, VK_IMAGE* pImage);
+typedef VK_RESULT (VKAPI *vkGetImageSubresourceInfoType)(VK_IMAGE image, const VK_IMAGE_SUBRESOURCE* pSubresource, VK_SUBRESOURCE_INFO_TYPE infoType, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkCreateImageViewType)(VK_DEVICE device, const VK_IMAGE_VIEW_CREATE_INFO* pCreateInfo, VK_IMAGE_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateColorAttachmentViewType)(VK_DEVICE device, const VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo, VK_COLOR_ATTACHMENT_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateDepthStencilViewType)(VK_DEVICE device, const VK_DEPTH_STENCIL_VIEW_CREATE_INFO* pCreateInfo, VK_DEPTH_STENCIL_VIEW* pView);
+typedef VK_RESULT (VKAPI *vkCreateShaderType)(VK_DEVICE device, const VK_SHADER_CREATE_INFO* pCreateInfo, VK_SHADER* pShader);
+typedef VK_RESULT (VKAPI *vkCreateGraphicsPipelineType)(VK_DEVICE device, const VK_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkCreateGraphicsPipelineDerivativeType)(VK_DEVICE device, const VK_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo, VK_PIPELINE basePipeline, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkCreateComputePipelineType)(VK_DEVICE device, const VK_COMPUTE_PIPELINE_CREATE_INFO* pCreateInfo, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkStorePipelineType)(VK_PIPELINE pipeline, size_t* pDataSize, void* pData);
+typedef VK_RESULT (VKAPI *vkLoadPipelineType)(VK_DEVICE device, size_t dataSize, const void* pData, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkLoadPipelineDerivativeType)(VK_DEVICE device, size_t dataSize, const void* pData, VK_PIPELINE basePipeline, VK_PIPELINE* pPipeline);
+typedef VK_RESULT (VKAPI *vkCreateSamplerType)(VK_DEVICE device, const VK_SAMPLER_CREATE_INFO* pCreateInfo, VK_SAMPLER* pSampler);
+typedef VK_RESULT (VKAPI *vkCreateDescriptorSetLayoutType)(VK_DEVICE device, const VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo, VK_DESCRIPTOR_SET_LAYOUT* pSetLayout);
+typedef VK_RESULT (VKAPI *vkCreateDescriptorSetLayoutChainType)(VK_DEVICE device, uint32_t setLayoutArrayCount, const VK_DESCRIPTOR_SET_LAYOUT* pSetLayoutArray, VK_DESCRIPTOR_SET_LAYOUT_CHAIN* pLayoutChain);
+typedef VK_RESULT (VKAPI *vkBeginDescriptorPoolUpdateType)(VK_DEVICE device, VK_DESCRIPTOR_UPDATE_MODE updateMode);
+typedef VK_RESULT (VKAPI *vkEndDescriptorPoolUpdateType)(VK_DEVICE device, VK_CMD_BUFFER cmd);
+typedef VK_RESULT (VKAPI *vkCreateDescriptorPoolType)(VK_DEVICE device, VK_DESCRIPTOR_POOL_USAGE poolUsage, uint32_t maxSets, const VK_DESCRIPTOR_POOL_CREATE_INFO* pCreateInfo, VK_DESCRIPTOR_POOL* pDescriptorPool);
+typedef VK_RESULT (VKAPI *vkResetDescriptorPoolType)(VK_DESCRIPTOR_POOL descriptorPool);
+typedef VK_RESULT (VKAPI *vkAllocDescriptorSetsType)(VK_DESCRIPTOR_POOL descriptorPool, VK_DESCRIPTOR_SET_USAGE setUsage, uint32_t count, const VK_DESCRIPTOR_SET_LAYOUT* pSetLayouts, VK_DESCRIPTOR_SET* pDescriptorSets, uint32_t* pCount);
+typedef void       (VKAPI *vkClearDescriptorSetsType)(VK_DESCRIPTOR_POOL descriptorPool, uint32_t count, const VK_DESCRIPTOR_SET* pDescriptorSets);
+typedef void       (VKAPI *vkUpdateDescriptorsType)(VK_DESCRIPTOR_SET descriptorSet, uint32_t updateCount, const void** ppUpdateArray);
+typedef VK_RESULT (VKAPI *vkCreateDynamicViewportStateType)(VK_DEVICE device, const VK_DYNAMIC_VP_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_VP_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateDynamicRasterStateType)(VK_DEVICE device, const VK_DYNAMIC_RS_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_RS_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateDynamicColorBlendStateType)(VK_DEVICE device, const VK_DYNAMIC_CB_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_CB_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateDynamicDepthStencilStateType)(VK_DEVICE device, const VK_DYNAMIC_DS_STATE_CREATE_INFO* pCreateInfo, VK_DYNAMIC_DS_STATE_OBJECT* pState);
+typedef VK_RESULT (VKAPI *vkCreateCommandBufferType)(VK_DEVICE device, const VK_CMD_BUFFER_CREATE_INFO* pCreateInfo, VK_CMD_BUFFER* pCmdBuffer);
+typedef VK_RESULT (VKAPI *vkBeginCommandBufferType)(VK_CMD_BUFFER cmdBuffer, const VK_CMD_BUFFER_BEGIN_INFO* pBeginInfo);
+typedef VK_RESULT (VKAPI *vkEndCommandBufferType)(VK_CMD_BUFFER cmdBuffer);
+typedef VK_RESULT (VKAPI *vkResetCommandBufferType)(VK_CMD_BUFFER cmdBuffer);
+typedef void       (VKAPI *vkCmdBindPipelineType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, VK_PIPELINE pipeline);
+typedef void       (VKAPI *vkCmdBindDynamicStateObjectType)(VK_CMD_BUFFER cmdBuffer, VK_STATE_BIND_POINT stateBindPoint, VK_DYNAMIC_STATE_OBJECT state);
+typedef void       (VKAPI *vkCmdBindDescriptorSetsType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, VK_DESCRIPTOR_SET_LAYOUT_CHAIN layoutChain, uint32_t layoutChainSlot, uint32_t count, const VK_DESCRIPTOR_SET* pDescriptorSets, const uint32_t* pUserData);
+typedef void       (VKAPI *vkCmdBindIndexBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, VK_INDEX_TYPE indexType);
+typedef void       (VKAPI *vkCmdBindVertexBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, uint32_t binding);
+typedef void       (VKAPI *vkCmdDrawType)(VK_CMD_BUFFER cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount);
+typedef void       (VKAPI *vkCmdDrawIndexedType)(VK_CMD_BUFFER cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount);
+typedef void       (VKAPI *vkCmdDrawIndirectType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, uint32_t count, uint32_t stride);
+typedef void       (VKAPI *vkCmdDrawIndexedIndirectType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset, uint32_t count, uint32_t stride);
+typedef void       (VKAPI *vkCmdDispatchType)(VK_CMD_BUFFER cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+typedef void       (VKAPI *vkCmdDispatchIndirectType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER buffer, VK_GPU_SIZE offset);
+typedef void       (VKAPI *vkCmdCopyBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER srcBuffer, VK_BUFFER destBuffer, uint32_t regionCount, const VK_BUFFER_COPY* pRegions);
+typedef void       (VKAPI *vkCmdCopyImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const VK_IMAGE_COPY* pRegions);
+typedef void       (VKAPI *vkCmdBlitImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const VK_IMAGE_BLIT* pRegions);
+typedef void       (VKAPI *vkCmdCopyBufferToImageType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER srcBuffer, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const VK_BUFFER_IMAGE_COPY* pRegions);
+typedef void       (VKAPI *vkCmdCopyImageToBufferType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_BUFFER destBuffer, uint32_t regionCount, const VK_BUFFER_IMAGE_COPY* pRegions);
+typedef void       (VKAPI *vkCmdCloneImageDataType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout);
+typedef void       (VKAPI *vkCmdUpdateBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset, VK_GPU_SIZE dataSize, const uint32_t* pData);
+typedef void       (VKAPI *vkCmdFillBufferType)(VK_CMD_BUFFER cmdBuffer, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset, VK_GPU_SIZE fillSize, uint32_t data);
+typedef void       (VKAPI *vkCmdClearColorImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE image, VK_IMAGE_LAYOUT imageLayout, VK_CLEAR_COLOR color, uint32_t rangeCount, const VK_IMAGE_SUBRESOURCE_RANGE* pRanges);
+typedef void       (VKAPI *vkCmdClearDepthStencilType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE image, VK_IMAGE_LAYOUT imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VK_IMAGE_SUBRESOURCE_RANGE* pRanges);
+typedef void       (VKAPI *vkCmdResolveImageType)(VK_CMD_BUFFER cmdBuffer, VK_IMAGE srcImage, VK_IMAGE_LAYOUT srcImageLayout, VK_IMAGE destImage, VK_IMAGE_LAYOUT destImageLayout, uint32_t rectCount, const VK_IMAGE_RESOLVE* pRects);
+typedef void       (VKAPI *vkCmdSetEventType)(VK_CMD_BUFFER cmdBuffer, VK_EVENT event, VK_PIPE_EVENT pipeEvent);
+typedef void       (VKAPI *vkCmdResetEventType)(VK_CMD_BUFFER cmdBuffer, VK_EVENT event, VK_PIPE_EVENT pipeEvent);
+typedef void       (VKAPI *vkCmdWaitEventsType)(VK_CMD_BUFFER cmdBuffer, const VK_EVENT_WAIT_INFO* pWaitInfo);
+typedef void       (VKAPI *vkCmdPipelineBarrierType)(VK_CMD_BUFFER cmdBuffer, const VK_PIPELINE_BARRIER* pBarrier);
+typedef void       (VKAPI *vkCmdBeginQueryType)(VK_CMD_BUFFER cmdBuffer, VK_QUERY_POOL queryPool, uint32_t slot, VK_FLAGS flags);
+typedef void       (VKAPI *vkCmdEndQueryType)(VK_CMD_BUFFER cmdBuffer, VK_QUERY_POOL queryPool, uint32_t slot);
+typedef void       (VKAPI *vkCmdResetQueryPoolType)(VK_CMD_BUFFER cmdBuffer, VK_QUERY_POOL queryPool, uint32_t startQuery, uint32_t queryCount);
+typedef void       (VKAPI *vkCmdWriteTimestampType)(VK_CMD_BUFFER cmdBuffer, VK_TIMESTAMP_TYPE timestampType, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset);
+typedef void       (VKAPI *vkCmdInitAtomicCountersType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData);
+typedef void       (VKAPI *vkCmdLoadAtomicCountersType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VK_BUFFER srcBuffer, VK_GPU_SIZE srcOffset);
+typedef void       (VKAPI *vkCmdSaveAtomicCountersType)(VK_CMD_BUFFER cmdBuffer, VK_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VK_BUFFER destBuffer, VK_GPU_SIZE destOffset);
+typedef VK_RESULT (VKAPI *vkCreateFramebufferType)(VK_DEVICE device, const VK_FRAMEBUFFER_CREATE_INFO* pCreateInfo, VK_FRAMEBUFFER* pFramebuffer);
+typedef VK_RESULT (VKAPI *vkCreateRenderPassType)(VK_DEVICE device, const VK_RENDER_PASS_CREATE_INFO* pCreateInfo, VK_RENDER_PASS* pRenderPass);
+typedef void       (VKAPI *vkCmdBeginRenderPassType)(VK_CMD_BUFFER cmdBuffer, const VK_RENDER_PASS_BEGIN* pRenderPassBegin);
+typedef void       (VKAPI *vkCmdEndRenderPassType)(VK_CMD_BUFFER cmdBuffer, VK_RENDER_PASS renderPass);
+
+#ifdef VK_PROTOTYPES
+
+// GPU initialization
+
+VK_RESULT VKAPI vkCreateInstance(
+    const VK_INSTANCE_CREATE_INFO*             pCreateInfo,
+    VK_INSTANCE*                               pInstance);
+
+VK_RESULT VKAPI vkDestroyInstance(
+    VK_INSTANCE                                instance);
+
+VK_RESULT VKAPI vkEnumerateGpus(
+    VK_INSTANCE                                instance,
+    uint32_t                                    maxGpus,
+    uint32_t*                                   pGpuCount,
+    VK_PHYSICAL_GPU*                           pGpus);
+
+VK_RESULT VKAPI vkGetGpuInfo(
+    VK_PHYSICAL_GPU                            gpu,
+    VK_PHYSICAL_GPU_INFO_TYPE                  infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+void * VKAPI vkGetProcAddr(
+    VK_PHYSICAL_GPU                            gpu,
+    const char*                                 pName);
+
+// Device functions
+
+VK_RESULT VKAPI vkCreateDevice(
+    VK_PHYSICAL_GPU                            gpu,
+    const VK_DEVICE_CREATE_INFO*               pCreateInfo,
+    VK_DEVICE*                                 pDevice);
+
+VK_RESULT VKAPI vkDestroyDevice(
+    VK_DEVICE                                  device);
+
+// Extension discovery functions
+
+VK_RESULT VKAPI vkGetExtensionSupport(
+    VK_PHYSICAL_GPU                            gpu,
+    const char*                                 pExtName);
+
+// Layer discovery functions
+
+VK_RESULT VKAPI vkEnumerateLayers(
+    VK_PHYSICAL_GPU                            gpu,
+    size_t                                      maxLayerCount,
+    size_t                                      maxStringSize,
+    size_t*                                     pOutLayerCount,
+    char* const*                                pOutLayers,
+    void*                                       pReserved);
+
+// Queue functions
+
+VK_RESULT VKAPI vkGetDeviceQueue(
+    VK_DEVICE                                  device,
+    uint32_t                                    queueNodeIndex,
+    uint32_t                                    queueIndex,
+    VK_QUEUE*                                  pQueue);
+
+VK_RESULT VKAPI vkQueueSubmit(
+    VK_QUEUE                                   queue,
+    uint32_t                                    cmdBufferCount,
+    const VK_CMD_BUFFER*                       pCmdBuffers,
+    VK_FENCE                                   fence);
+
+VK_RESULT VKAPI vkQueueAddMemReference(
+    VK_QUEUE                                   queue,
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkQueueRemoveMemReference(
+    VK_QUEUE                                   queue,
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkQueueWaitIdle(
+    VK_QUEUE                                   queue);
+
+VK_RESULT VKAPI vkDeviceWaitIdle(
+    VK_DEVICE                                  device);
+
+// Memory functions
+
+VK_RESULT VKAPI vkAllocMemory(
+    VK_DEVICE                                  device,
+    const VK_MEMORY_ALLOC_INFO*                pAllocInfo,
+    VK_GPU_MEMORY*                             pMem);
+
+VK_RESULT VKAPI vkFreeMemory(
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkSetMemoryPriority(
+    VK_GPU_MEMORY                              mem,
+    VK_MEMORY_PRIORITY                         priority);
+
+VK_RESULT VKAPI vkMapMemory(
+    VK_GPU_MEMORY                              mem,
+    VK_FLAGS                                   flags,                // Reserved
+    void**                                      ppData);
+
+VK_RESULT VKAPI vkUnmapMemory(
+    VK_GPU_MEMORY                              mem);
+
+VK_RESULT VKAPI vkPinSystemMemory(
+    VK_DEVICE                                  device,
+    const void*                                 pSysMem,
+    size_t                                      memSize,
+    VK_GPU_MEMORY*                             pMem);
+
+// Multi-device functions
+
+VK_RESULT VKAPI vkGetMultiGpuCompatibility(
+    VK_PHYSICAL_GPU                            gpu0,
+    VK_PHYSICAL_GPU                            gpu1,
+    VK_GPU_COMPATIBILITY_INFO*                 pInfo);
+
+VK_RESULT VKAPI vkOpenSharedMemory(
+    VK_DEVICE                                  device,
+    const VK_MEMORY_OPEN_INFO*                 pOpenInfo,
+    VK_GPU_MEMORY*                             pMem);
+
+VK_RESULT VKAPI vkOpenSharedSemaphore(
+    VK_DEVICE                                  device,
+    const VK_SEMAPHORE_OPEN_INFO*              pOpenInfo,
+    VK_SEMAPHORE*                              pSemaphore);
+
+VK_RESULT VKAPI vkOpenPeerMemory(
+    VK_DEVICE                                  device,
+    const VK_PEER_MEMORY_OPEN_INFO*            pOpenInfo,
+    VK_GPU_MEMORY*                             pMem);
+
+VK_RESULT VKAPI vkOpenPeerImage(
+    VK_DEVICE                                  device,
+    const VK_PEER_IMAGE_OPEN_INFO*             pOpenInfo,
+    VK_IMAGE*                                  pImage,
+    VK_GPU_MEMORY*                             pMem);
+
+// Generic API object functions
+
+VK_RESULT VKAPI vkDestroyObject(
+    VK_OBJECT                                  object);
+
+VK_RESULT VKAPI vkGetObjectInfo(
+    VK_BASE_OBJECT                             object,
+    VK_OBJECT_INFO_TYPE                        infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+VK_RESULT VKAPI vkBindObjectMemory(
+    VK_OBJECT                                  object,
+    uint32_t                                    allocationIdx,
+    VK_GPU_MEMORY                              mem,
+    VK_GPU_SIZE                                memOffset);
+
+VK_RESULT VKAPI vkBindObjectMemoryRange(
+    VK_OBJECT                                  object,
+    uint32_t                                    allocationIdx,
+    VK_GPU_SIZE                                rangeOffset,
+    VK_GPU_SIZE                                rangeSize,
+    VK_GPU_MEMORY                              mem,
+    VK_GPU_SIZE                                memOffset);
+
+VK_RESULT VKAPI vkBindImageMemoryRange(
+    VK_IMAGE                                   image,
+    uint32_t                                    allocationIdx,
+    const VK_IMAGE_MEMORY_BIND_INFO*           bindInfo,
+    VK_GPU_MEMORY                              mem,
+    VK_GPU_SIZE                                memOffset);
+
+// Fence functions
+
+VK_RESULT VKAPI vkCreateFence(
+    VK_DEVICE                                  device,
+    const VK_FENCE_CREATE_INFO*                pCreateInfo,
+    VK_FENCE*                                  pFence);
+
+VK_RESULT VKAPI vkResetFences(
+    VK_DEVICE                                  device,
+    uint32_t                                    fenceCount,
+    VK_FENCE*                                  pFences);
+
+VK_RESULT VKAPI vkGetFenceStatus(
+    VK_FENCE fence);
+
+VK_RESULT VKAPI vkWaitForFences(
+    VK_DEVICE                                  device,
+    uint32_t                                    fenceCount,
+    const VK_FENCE*                            pFences,
+    bool32_t                                    waitAll,
+    uint64_t                                    timeout); // timeout in nanoseconds
+
+// Queue semaphore functions
+
+VK_RESULT VKAPI vkCreateSemaphore(
+    VK_DEVICE                                  device,
+    const VK_SEMAPHORE_CREATE_INFO*            pCreateInfo,
+    VK_SEMAPHORE*                              pSemaphore);
+
+VK_RESULT VKAPI vkQueueSignalSemaphore(
+    VK_QUEUE                                   queue,
+    VK_SEMAPHORE                               semaphore);
+
+VK_RESULT VKAPI vkQueueWaitSemaphore(
+    VK_QUEUE                                   queue,
+    VK_SEMAPHORE                               semaphore);
+
+// Event functions
+
+VK_RESULT VKAPI vkCreateEvent(
+    VK_DEVICE                                  device,
+    const VK_EVENT_CREATE_INFO*                pCreateInfo,
+    VK_EVENT*                                  pEvent);
+
+VK_RESULT VKAPI vkGetEventStatus(
+    VK_EVENT                                   event);
+
+VK_RESULT VKAPI vkSetEvent(
+    VK_EVENT                                   event);
+
+VK_RESULT VKAPI vkResetEvent(
+    VK_EVENT                                   event);
+
+// Query functions
+
+VK_RESULT VKAPI vkCreateQueryPool(
+    VK_DEVICE                                  device,
+    const VK_QUERY_POOL_CREATE_INFO*           pCreateInfo,
+    VK_QUERY_POOL*                             pQueryPool);
+
+VK_RESULT VKAPI vkGetQueryPoolResults(
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    startQuery,
+    uint32_t                                    queryCount,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+// Format capabilities
+
+VK_RESULT VKAPI vkGetFormatInfo(
+    VK_DEVICE                                  device,
+    VK_FORMAT                                  format,
+    VK_FORMAT_INFO_TYPE                        infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+// Buffer functions
+
+VK_RESULT VKAPI vkCreateBuffer(
+    VK_DEVICE                                  device,
+    const VK_BUFFER_CREATE_INFO*               pCreateInfo,
+    VK_BUFFER*                                 pBuffer);
+
+// Buffer view functions
+
+VK_RESULT VKAPI vkCreateBufferView(
+    VK_DEVICE                                  device,
+    const VK_BUFFER_VIEW_CREATE_INFO*          pCreateInfo,
+    VK_BUFFER_VIEW*                            pView);
+
+// Image functions
+
+VK_RESULT VKAPI vkCreateImage(
+    VK_DEVICE                                  device,
+    const VK_IMAGE_CREATE_INFO*                pCreateInfo,
+    VK_IMAGE*                                  pImage);
+
+VK_RESULT VKAPI vkGetImageSubresourceInfo(
+    VK_IMAGE                                   image,
+    const VK_IMAGE_SUBRESOURCE*                pSubresource,
+    VK_SUBRESOURCE_INFO_TYPE                   infoType,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+// Image view functions
+
+VK_RESULT VKAPI vkCreateImageView(
+    VK_DEVICE                                  device,
+    const VK_IMAGE_VIEW_CREATE_INFO*           pCreateInfo,
+    VK_IMAGE_VIEW*                             pView);
+
+VK_RESULT VKAPI vkCreateColorAttachmentView(
+    VK_DEVICE                                  device,
+    const VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo,
+    VK_COLOR_ATTACHMENT_VIEW*                  pView);
+
+VK_RESULT VKAPI vkCreateDepthStencilView(
+    VK_DEVICE                                  device,
+    const VK_DEPTH_STENCIL_VIEW_CREATE_INFO*   pCreateInfo,
+    VK_DEPTH_STENCIL_VIEW*                     pView);
+
+// Shader functions
+
+VK_RESULT VKAPI vkCreateShader(
+    VK_DEVICE                                  device,
+    const VK_SHADER_CREATE_INFO*               pCreateInfo,
+    VK_SHADER*                                 pShader);
+
+// Pipeline functions
+
+VK_RESULT VKAPI vkCreateGraphicsPipeline(
+    VK_DEVICE                                  device,
+    const VK_GRAPHICS_PIPELINE_CREATE_INFO*    pCreateInfo,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkCreateGraphicsPipelineDerivative(
+    VK_DEVICE                                  device,
+    const VK_GRAPHICS_PIPELINE_CREATE_INFO*    pCreateInfo,
+    VK_PIPELINE                                basePipeline,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkCreateComputePipeline(
+    VK_DEVICE                                  device,
+    const VK_COMPUTE_PIPELINE_CREATE_INFO*     pCreateInfo,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkStorePipeline(
+    VK_PIPELINE                                pipeline,
+    size_t*                                     pDataSize,
+    void*                                       pData);
+
+VK_RESULT VKAPI vkLoadPipeline(
+    VK_DEVICE                                  device,
+    size_t                                      dataSize,
+    const void*                                 pData,
+    VK_PIPELINE*                               pPipeline);
+
+VK_RESULT VKAPI vkLoadPipelineDerivative(
+    VK_DEVICE                                  device,
+    size_t                                      dataSize,
+    const void*                                 pData,
+    VK_PIPELINE                                basePipeline,
+    VK_PIPELINE*                               pPipeline);
+
+// Sampler functions
+
+VK_RESULT VKAPI vkCreateSampler(
+    VK_DEVICE                                  device,
+    const VK_SAMPLER_CREATE_INFO*              pCreateInfo,
+    VK_SAMPLER*                                pSampler);
+
+// Descriptor set functions
+
+VK_RESULT VKAPI vkCreateDescriptorSetLayout(
+    VK_DEVICE                                   device,
+    const VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo,
+    VK_DESCRIPTOR_SET_LAYOUT*                   pSetLayout);
+
+VK_RESULT VKAPI vkCreateDescriptorSetLayoutChain(
+    VK_DEVICE                                   device,
+    uint32_t                                     setLayoutArrayCount,
+    const VK_DESCRIPTOR_SET_LAYOUT*             pSetLayoutArray,
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN*             pLayoutChain);
+
+VK_RESULT VKAPI vkBeginDescriptorPoolUpdate(
+    VK_DEVICE                                   device,
+    VK_DESCRIPTOR_UPDATE_MODE                   updateMode);
+
+VK_RESULT VKAPI vkEndDescriptorPoolUpdate(
+    VK_DEVICE                                   device,
+    VK_CMD_BUFFER                               cmd);
+
+VK_RESULT VKAPI vkCreateDescriptorPool(
+    VK_DEVICE                                   device,
+    VK_DESCRIPTOR_POOL_USAGE                    poolUsage,
+    uint32_t                                     maxSets,
+    const VK_DESCRIPTOR_POOL_CREATE_INFO*       pCreateInfo,
+    VK_DESCRIPTOR_POOL*                         pDescriptorPool);
+
+VK_RESULT VKAPI vkResetDescriptorPool(
+    VK_DESCRIPTOR_POOL                          descriptorPool);
+
+VK_RESULT VKAPI vkAllocDescriptorSets(
+    VK_DESCRIPTOR_POOL                          descriptorPool,
+    VK_DESCRIPTOR_SET_USAGE                     setUsage,
+    uint32_t                                     count,
+    const VK_DESCRIPTOR_SET_LAYOUT*             pSetLayouts,
+    VK_DESCRIPTOR_SET*                          pDescriptorSets,
+    uint32_t*                                    pCount);
+
+void VKAPI vkClearDescriptorSets(
+    VK_DESCRIPTOR_POOL                          descriptorPool,
+    uint32_t                                     count,
+    const VK_DESCRIPTOR_SET*                    pDescriptorSets);
+
+void VKAPI vkUpdateDescriptors(
+    VK_DESCRIPTOR_SET                           descriptorSet,
+    uint32_t                                     updateCount,
+    const void**                                 ppUpdateArray);
+
+// State object functions
+
+VK_RESULT VKAPI vkCreateDynamicViewportState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_VP_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_VP_STATE_OBJECT*                pState);
+
+VK_RESULT VKAPI vkCreateDynamicRasterState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_RS_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_RS_STATE_OBJECT*                pState);
+
+VK_RESULT VKAPI vkCreateDynamicColorBlendState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_CB_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_CB_STATE_OBJECT*                pState);
+
+VK_RESULT VKAPI vkCreateDynamicDepthStencilState(
+    VK_DEVICE                                  device,
+    const VK_DYNAMIC_DS_STATE_CREATE_INFO*     pCreateInfo,
+    VK_DYNAMIC_DS_STATE_OBJECT*                pState);
+
+// Command buffer functions
+
+VK_RESULT VKAPI vkCreateCommandBuffer(
+    VK_DEVICE                                  device,
+    const VK_CMD_BUFFER_CREATE_INFO*           pCreateInfo,
+    VK_CMD_BUFFER*                             pCmdBuffer);
+
+VK_RESULT VKAPI vkBeginCommandBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_CMD_BUFFER_BEGIN_INFO*            pBeginInfo);
+
+VK_RESULT VKAPI vkEndCommandBuffer(
+    VK_CMD_BUFFER                              cmdBuffer);
+
+VK_RESULT VKAPI vkResetCommandBuffer(
+    VK_CMD_BUFFER                              cmdBuffer);
+
+// Command buffer building functions
+
+void VKAPI vkCmdBindPipeline(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    VK_PIPELINE                                pipeline);
+
+void VKAPI vkCmdBindDynamicStateObject(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_STATE_BIND_POINT                        stateBindPoint,
+    VK_DYNAMIC_STATE_OBJECT                    dynamicState);
+
+void VKAPI vkCmdBindDescriptorSets(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    VK_DESCRIPTOR_SET_LAYOUT_CHAIN             layoutChain,
+    uint32_t                                    layoutChainSlot,
+    uint32_t                                    count,
+    const VK_DESCRIPTOR_SET*                   pDescriptorSets,
+    const uint32_t*                             pUserData);
+
+void VKAPI vkCmdBindIndexBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    VK_INDEX_TYPE                              indexType);
+
+void VKAPI vkCmdBindVertexBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    uint32_t                                    binding);
+
+void VKAPI vkCmdDraw(
+    VK_CMD_BUFFER                              cmdBuffer,
+    uint32_t                                    firstVertex,
+    uint32_t                                    vertexCount,
+    uint32_t                                    firstInstance,
+    uint32_t                                    instanceCount);
+
+void VKAPI vkCmdDrawIndexed(
+    VK_CMD_BUFFER                              cmdBuffer,
+    uint32_t                                    firstIndex,
+    uint32_t                                    indexCount,
+    int32_t                                     vertexOffset,
+    uint32_t                                    firstInstance,
+    uint32_t                                    instanceCount);
+
+void VKAPI vkCmdDrawIndirect(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    uint32_t                                    count,
+    uint32_t                                    stride);
+
+void VKAPI vkCmdDrawIndexedIndirect(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset,
+    uint32_t                                    count,
+    uint32_t                                    stride);
+
+void VKAPI vkCmdDispatch(
+    VK_CMD_BUFFER                              cmdBuffer,
+    uint32_t                                    x,
+    uint32_t                                    y,
+    uint32_t                                    z);
+
+void VKAPI vkCmdDispatchIndirect(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  buffer,
+    VK_GPU_SIZE                                offset);
+
+void VKAPI vkCmdCopyBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  srcBuffer,
+    VK_BUFFER                                  destBuffer,
+    uint32_t                                    regionCount,
+    const VK_BUFFER_COPY*                      pRegions);
+
+void VKAPI vkCmdCopyImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    regionCount,
+    const VK_IMAGE_COPY*                       pRegions);
+
+void VKAPI vkCmdBlitImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    regionCount,
+    const VK_IMAGE_BLIT*                       pRegions);
+
+void VKAPI vkCmdCopyBufferToImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  srcBuffer,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    regionCount,
+    const VK_BUFFER_IMAGE_COPY*                pRegions);
+
+void VKAPI vkCmdCopyImageToBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_BUFFER                                  destBuffer,
+    uint32_t                                    regionCount,
+    const VK_BUFFER_IMAGE_COPY*                pRegions);
+
+void VKAPI vkCmdCloneImageData(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout);
+
+void VKAPI vkCmdUpdateBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset,
+    VK_GPU_SIZE                                dataSize,
+    const uint32_t*                             pData);
+
+void VKAPI vkCmdFillBuffer(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset,
+    VK_GPU_SIZE                                fillSize,
+    uint32_t                                    data);
+
+void VKAPI vkCmdClearColorImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   image,
+    VK_IMAGE_LAYOUT                            imageLayout,
+    VK_CLEAR_COLOR                             color,
+    uint32_t                                    rangeCount,
+    const VK_IMAGE_SUBRESOURCE_RANGE*          pRanges);
+
+void VKAPI vkCmdClearDepthStencil(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   image,
+    VK_IMAGE_LAYOUT                            imageLayout,
+    float                                       depth,
+    uint32_t                                    stencil,
+    uint32_t                                    rangeCount,
+    const VK_IMAGE_SUBRESOURCE_RANGE*          pRanges);
+
+void VKAPI vkCmdResolveImage(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_IMAGE                                   srcImage,
+    VK_IMAGE_LAYOUT                            srcImageLayout,
+    VK_IMAGE                                   destImage,
+    VK_IMAGE_LAYOUT                            destImageLayout,
+    uint32_t                                    rectCount,
+    const VK_IMAGE_RESOLVE*                    pRects);
+
+void VKAPI vkCmdSetEvent(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_EVENT                                   event,
+    VK_PIPE_EVENT                              pipeEvent);
+
+void VKAPI vkCmdResetEvent(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_EVENT                                   event,
+    VK_PIPE_EVENT                              pipeEvent);
+
+void VKAPI vkCmdWaitEvents(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_EVENT_WAIT_INFO*                  pWaitInfo);
+
+void VKAPI vkCmdPipelineBarrier(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_PIPELINE_BARRIER*                 pBarrier);
+
+void VKAPI vkCmdBeginQuery(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    slot,
+    VK_FLAGS                                   flags);
+
+void VKAPI vkCmdEndQuery(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    slot);
+
+void VKAPI vkCmdResetQueryPool(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_QUERY_POOL                              queryPool,
+    uint32_t                                    startQuery,
+    uint32_t                                    queryCount);
+
+void VKAPI vkCmdWriteTimestamp(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_TIMESTAMP_TYPE                          timestampType,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset);
+
+void VKAPI vkCmdInitAtomicCounters(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    uint32_t                                    startCounter,
+    uint32_t                                    counterCount,
+    const uint32_t*                             pData);
+
+void VKAPI vkCmdLoadAtomicCounters(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    uint32_t                                    startCounter,
+    uint32_t                                    counterCount,
+    VK_BUFFER                                  srcBuffer,
+    VK_GPU_SIZE                                srcOffset);
+
+void VKAPI vkCmdSaveAtomicCounters(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_PIPELINE_BIND_POINT                     pipelineBindPoint,
+    uint32_t                                    startCounter,
+    uint32_t                                    counterCount,
+    VK_BUFFER                                  destBuffer,
+    VK_GPU_SIZE                                destOffset);
+
+VK_RESULT VKAPI vkCreateFramebuffer(
+    VK_DEVICE                                  device,
+    const VK_FRAMEBUFFER_CREATE_INFO*          pCreateInfo,
+    VK_FRAMEBUFFER*                            pFramebuffer);
+
+VK_RESULT VKAPI vkCreateRenderPass(
+    VK_DEVICE                                  device,
+    const VK_RENDER_PASS_CREATE_INFO*          pCreateInfo,
+    VK_RENDER_PASS*                            pRenderPass);
+
+void VKAPI vkCmdBeginRenderPass(
+    VK_CMD_BUFFER                              cmdBuffer,
+    const VK_RENDER_PASS_BEGIN*                pRenderPassBegin);
+
+void VKAPI vkCmdEndRenderPass(
+    VK_CMD_BUFFER                              cmdBuffer,
+    VK_RENDER_PASS                             renderPass);
+
+#endif // VK_PROTOTYPES
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // __VULKAN_H__
+
+/******************************************************************************************
+
+    Open Issues + Missing Features
+    ------------------------------
+
+    Here are a few higher level issues that we'd like to fix given time. A feature missing
+    from this header (or the following list) isn't necessarily an indication that we want
+    to drop that feature. Only that we either haven't thought of it or haven't had time
+    to add it yet.
+
+    1) Transform Feedback (XFB)
+
+    OpenGL supports transform feedback (XFB). That is not included in this header, but
+    we feel there is likely value in including it.
+
+    To incorporate trasnform feedback, we could create a new pipeline stage. This would
+    be injected into a PSO by including the following in the chain:
+
+    typedef struct _VK_XFB_CREATE_INFO
+    {
+        VK_STRUCTURE_TYPE    sType;  // Must be VK_STRUCTURE_TYPE_PIPELINE_XFB_CREATE_INFO
+        const void*           pNext;  // Pointer to next structure
+        // More XFB state, if any goes here
+    } VK_DEPTH_STENCIL_VIEW_CREATE_INFO;
+
+    We expect that only the shader-side configuration (via layout qualifiers or their IR
+    equivalent) is used to configure the data written to each stream. When transform
+    feedback is part of the pipeline, transform feedback binding would be available
+    through a new API bind point:
+
+        vkCmdBindTransformFeedbackMemoryView(
+                VK_CMD_BUFFER                              cmdBuffer,
+                VK_PIPELINE_BIND_POINT                     pipelineBindPoint, // = GRAPHICS
+                uint32_t                                    index,
+                const VK_MEMORY_VIEW_ATTACH_INFO*          pMemView);
+
+    2) "Bindless" + support for non-bindless hardware.
+
+    VK doesn't have bindless textures the way that GL does. It has resource descriptor
+    sets, or resource tables. Resource tables can be nested and hold references to more
+    resource tables. They are explicitly sized by the application and have no artificial
+    upper size limit. An application can still attach as many textures as they want to
+    a resource descriptor set, and can modify the set asynchronously to GPU work.
+    Therefore, we can still have "unlimited textures". An application hoping to use
+    bindless can use an index into a large table of textures and achieve the same effect.
+
+    For non-bindless hardware, with fixed (but potentially large) register files for
+    resource bindings, the table approach should still work if a limited size can be
+    reported somehow.
+
+    3) Clean up some remaining Mantle'isms.
+
+    Queue types: It's a bit hand wavey. In Mantle, we have a "universal" queue type that
+    supports compute and graphics and a "compute" queue that only supports compute. Devices
+    must support at least one universal queue and DMA queues are an extension. I would like
+    to do the following (and have attempted to do that here, but am only half done):
+
+        a) Separate out the queue capabilities (compute, DMA, graphics) and allow support
+           for any number of queues with any combination of capabilities each.
+
+        b) Allow compute-only or even DMA-only (like video capture or SDI) devices to
+           be supported.
+
+        c) Allow new queue types to be supported by extensions without having to allocate
+           bits in the bitfield until they're promoted to core.
+
+    Terminology: There are still some references to "targets" (render targets) and other
+    terminology that has been changed from Mantle. Need to do a clean-up pass.
+
+    4) The window system interface is an extension in Mantle. We have not tried to fold
+       any of it into core here. There is no mention of SwapBuffers, presentation, default
+       framebuffers or anything like that. In the extension, presentation is queued up into
+       the graphics queue just like any other command.
+
+*******************************************************************************************/
