OSDN Git Service

vulkan: Add SDK 0.9 to 0.10 patch stack
authorJesse Hall <jessehall@google.com>
Tue, 1 Dec 2015 05:53:42 +0000 (21:53 -0800)
committerJesse Hall <jessehall@google.com>
Mon, 25 Jan 2016 21:49:31 +0000 (13:49 -0800)
Change-Id: I7aaae7966b7a64c2d56f0933b811400a7c892cd6
(cherry picked from commit 7f8155bd9e394073415bc565efca3cd6e2969d5b)

31 files changed:
vulkan/patches/README
vulkan/patches/frameworks_native-sdk_0.10/0001-vulkan-Update-from-version-0.172.2-to-0.174.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0002-vulkan-Update-from-version-0.174.0-to-0.177.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0003-vulkan-Update-from-version-0.177.0-to-0.179.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0004-vulkan-Update-from-version-0.179.0-to-0.180.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0005-vulkan-Update-from-version-0.180.0-to-0.181.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0006-vulkan-Update-from-version-0.181.0-to-0.183.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0007-vulkan-Implement-VkSurfaceKHR-and-use-vulkanext.h.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0008-vulkan-Update-from-version-0.183.0-to-0.184.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0009-vulkan.api-Distinguish-Vk-Flags-from-Vk-FlagBits.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0010-vulkan-Update-from-version-0.184.0-to-0.185.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0011-vulkan-Update-from-version-0.185.0-to-0.186.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0012-vulkan-Update-from-version-0.186.0-to-0.188.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0013-vulkan-Update-from-version-0.188.0-to-0.189.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0014-vulkan-Update-from-version-0.189.0-to-0.190.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0015-vulkan-Update-from-version-0.190.0-to-0.192.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0016-vulkan-Update-from-version-0.192.0-to-0.193.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0017-vulkan-Update-from-version-0.193.0-to-0.194.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0018-vulkan-Update-from-version-0.194.0-to-0.196.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0019-vulkan-Update-from-version-0.196.0-to-0.197.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0020-vulkan-Update-from-version-0.197.0-to-0.198.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0021-vulkan-Update-from-version-0.198.0-to-0.200.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0022-vulkan-Update-from-version-0.200.0-to-0.202.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0023-vulkan-Update-from-version-0.202.0-to-0.203.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0024-vulkan-Update-from-version-0.203.0-to-0.204.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0025-vulkan-Update-from-version-0.204.0-to-0.205.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0026-vulkan-Update-from-version-0.205.0-to-0.206.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0027-vulkan-Update-from-version-0.206.0-to-0.209.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0028-vulkan-Update-from-version-0.209.0-to-0.210.0.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0029-vulkan-Assign-enums-to-the-correct-extension.patch [new file with mode: 0644]
vulkan/patches/frameworks_native-sdk_0.10/0030-vulkan-Update-from-version-0.210.0-to-0.210.1.patch [new file with mode: 0644]

index d424dd8..a458d94 100644 (file)
@@ -12,6 +12,12 @@ $ git am $VULKAN_PATCHES/$PATCH_DIR/*
 
 frameworks_base-apk_library_dir
 -------------------------------
+This branch is for frameworks/native. It changes all the Vulkan components to
+use the SDK 0.10 version of the API and extensions.
+
+
+frameworks_base-apk_library_dir
+-------------------------------
 This branch is for $TOP/frameworks/base. It modifies the framework to
 inform the Vulkan loader, during activity startup, where the
 activity's native library directory. The loader will search this
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0001-vulkan-Update-from-version-0.172.2-to-0.174.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0001-vulkan-Update-from-version-0.172.2-to-0.174.0.patch
new file mode 100644 (file)
index 0000000..b4845c3
--- /dev/null
@@ -0,0 +1,505 @@
+From 72fe8189a53dfd3a54dc22d33b3ffe67bab93090 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Thu, 19 Nov 2015 21:32:50 -0800
+Subject: [PATCH 01/30] vulkan: Update from version 0.172.2 to 0.174.0
+
+Change-Id: If89614476735e5fb83cbeb4cf473e32e6f0cc386
+---
+ vulkan/api/vulkan.api              | 92 ++++++++++++++++----------------------
+ vulkan/include/vulkan/vulkan.h     | 92 ++++++++++++++++++--------------------
+ vulkan/libvulkan/entry.cpp         |  9 +---
+ vulkan/libvulkan/get_proc_addr.cpp | 17 +++----
+ vulkan/libvulkan/loader.h          |  3 +-
+ vulkan/nulldrv/null_driver.cpp     |  5 +--
+ vulkan/nulldrv/null_driver.h       |  3 +-
+ vulkan/nulldrv/null_driver_gen.cpp |  3 +-
+ 8 files changed, 94 insertions(+), 130 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 7616740..7ab0e86 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,8 +27,8 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 170
+-define VERSION_PATCH 2
++define VERSION_MINOR 174
++define VERSION_PATCH 0
+ // API limits
+ define VK_MAX_PHYSICAL_DEVICE_NAME 256
+@@ -538,8 +538,8 @@ enum VkFormat {
+ /// Shader stage enumerant
+ enum VkShaderStage {
+     VK_SHADER_STAGE_VERTEX                                  = 0x00000000,
+-    VK_SHADER_STAGE_TESS_CONTROL                            = 0x00000001,
+-    VK_SHADER_STAGE_TESS_EVALUATION                         = 0x00000002,
++    VK_SHADER_STAGE_TESSELLATION_CONTROL                    = 0x00000001,
++    VK_SHADER_STAGE_TESSELLATION_EVALUATION                 = 0x00000002,
+     VK_SHADER_STAGE_GEOMETRY                                = 0x00000003,
+     VK_SHADER_STAGE_FRAGMENT                                = 0x00000004,
+     VK_SHADER_STAGE_COMPUTE                                 = 0x00000005,
+@@ -750,8 +750,8 @@ bitfield VkBufferCreateFlags {
+ /// Shader stage flags
+ bitfield VkShaderStageFlags {
+     VK_SHADER_STAGE_VERTEX_BIT                              = 0x00000001,
+-    VK_SHADER_STAGE_TESS_CONTROL_BIT                        = 0x00000002,
+-    VK_SHADER_STAGE_TESS_EVALUATION_BIT                     = 0x00000004,
++    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT                = 0x00000002,
++    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT             = 0x00000004,
+     VK_SHADER_STAGE_GEOMETRY_BIT                            = 0x00000008,
+     VK_SHADER_STAGE_FRAGMENT_BIT                            = 0x00000010,
+     VK_SHADER_STAGE_COMPUTE_BIT                             = 0x00000020,
+@@ -867,17 +867,17 @@ bitfield VkCmdBufferOptimizeFlags {
+ /// Pipeline statistics flags
+ bitfield VkQueryPipelineStatisticFlags {
+-    VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT             = 0x00000001,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT           = 0x00000002,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT          = 0x00000004,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT          = 0x00000008,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT           = 0x00000010,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT           = 0x00000020,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT            = 0x00000040,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT          = 0x00000080,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT             = 0x00000100,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT         = 0x00000200,  /// Optional
+-    VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT          = 0x00000400,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT                     = 0x00000001,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT                   = 0x00000002,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT                   = 0x00000004,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT                 = 0x00000008,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT                  = 0x00000010,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT                        = 0x00000020,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT                         = 0x00000040,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT                 = 0x00000080,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT         = 0x00000100,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT  = 0x00000200,  /// Optional
++    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT                  = 0x00000400,  /// Optional
+ }
+ /// Memory mapping flags
+@@ -910,8 +910,8 @@ bitfield VkPipelineStageFlags {
+     VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                     = 0x00000002,  /// Draw/DispatchIndirect command fetch
+     VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                      = 0x00000004,  /// Vertex/index fetch
+     VK_PIPELINE_STAGE_VERTEX_SHADER_BIT                     = 0x00000008,  /// Vertex shading
+-    VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT               = 0x00000010,  /// Tessellation control shading
+-    VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT            = 0x00000020,  /// Tessellation evaluation shading
++    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT       = 0x00000010,  /// Tessellation control shading
++    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT    = 0x00000020,  /// Tessellation evaluation shading
+     VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT                   = 0x00000040,  /// Geometry shading
+     VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT                   = 0x00000080,  /// Fragment shading
+     VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT              = 0x00000100,  /// Early fragment (depth/stencil) tests
+@@ -1085,7 +1085,7 @@ class VkDeviceQueueCreateInfo {
+ class VkDeviceCreateInfo {
+     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
+-    u32                                         queueRecordCount
++    u32                                         requestedQueueRecordCount
+     const VkDeviceQueueCreateInfo*              pRequestedQueues
+     u32                                         layerCount
+     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
+@@ -1503,7 +1503,7 @@ class VkPipelineViewportStateCreateInfo {
+ class VkPipelineRasterStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+-    VkBool32                                    depthClipEnable
++    VkBool32                                    depthClampEnable
+     VkBool32                                    rasterizerDiscardEnable
+     VkFillMode                                  fillMode                   /// optional (GL45)
+     VkCullMode                                  cullMode
+@@ -1696,6 +1696,12 @@ class VkClearValue {
+     VkClearDepthStencilValue                    depthStencil
+ }
++class VkClearAttachment {
++    VkImageAspectFlags                          aspectMask
++    u32                                         colorAttachment
++    VkClearValue                                clearValue
++}
++
+ class VkAttachmentDescription {
+     VkStructureType                             sType           /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION
+     const void*                                 pNext           /// Pointer to next structure
+@@ -1776,7 +1782,7 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    dualSourceBlend                           /// blend operations which take two sources
+     VkBool32                                    logicOp                                   /// logic operations
+     VkBool32                                    multiDrawIndirect                         /// multi draw indirect
+-    VkBool32                                    depthClip                                 /// depth clipping
++    VkBool32                                    depthClamp                                /// depth clamping
+     VkBool32                                    depthBiasClamp                            /// depth bias clamping
+     VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
+     VkBool32                                    depthBounds                               /// depth bounds test
+@@ -1857,14 +1863,14 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxVertexInputBindingStride               /// max vertex input binding stride
+     u32                                         maxVertexOutputComponents                 /// max num of output components written by vertex shader
+     /// tessellation control stage limits
+-    u32                                         maxTessGenLevel                           /// max level supported by tess primitive generator
+-    u32                                         maxTessPatchSize                          /// max patch size (vertices)
+-    u32                                         maxTessControlPerVertexInputComponents    /// max num of input components per-vertex in TCS
+-    u32                                         maxTessControlPerVertexOutputComponents   /// max num of output components per-vertex in TCS
+-    u32                                         maxTessControlPerPatchOutputComponents    /// max num of output components per-patch in TCS
+-    u32                                         maxTessControlTotalOutputComponents       /// max total num of per-vertex and per-patch output components in TCS
+-    u32                                         maxTessEvaluationInputComponents          /// max num of input components per vertex in TES
+-    u32                                         maxTessEvaluationOutputComponents         /// max num of output components per vertex in TES
++    u32                                         maxTessellationGenLevel                         /// max level supported by tess primitive generator
++    u32                                         maxTessellationPatchSize                        /// max patch size (vertices)
++    u32                                         maxTessellationControlPerVertexInputComponents  /// max num of input components per-vertex in TCS
++    u32                                         maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
++    u32                                         maxTessellationControlPerPatchOutputComponents  /// max num of output components per-patch in TCS
++    u32                                         maxTessellationControlTotalOutputComponents     /// max total num of per-vertex and per-patch output components in TCS
++    u32                                         maxTessellationEvaluationInputComponents        /// max num of input components per vertex in TES
++    u32                                         maxTessellationEvaluationOutputComponents       /// max num of output components per vertex in TES
+     /// geometry stage limits
+     u32                                         maxGeometryShaderInvocations              /// max invocation count supported in geometry shader
+     u32                                         maxGeometryInputComponents                /// max num of input components read in geometry stage
+@@ -4063,30 +4069,10 @@ cmd void vkCmdClearDepthStencilImage(
+ }
+ @threadSafety("app")
+-cmd void vkCmdClearColorAttachment(
+-        VkCmdBuffer                                 cmdBuffer,
+-        u32                                         colorAttachment,
+-        VkImageLayout                               imageLayout,
+-        const VkClearColorValue*                    pColor,
+-        u32                                         rectCount,
+-        const VkRect3D*                             pRects) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-
+-    rects := pRects[0:rectCount]
+-    for i in (0 .. rectCount) {
+-        rect := rects[i]
+-    }
+-
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
+-}
+-
+-@threadSafety("app")
+-cmd void vkCmdClearDepthStencilAttachment(
++cmd void vkCmdClearAttachments(
+         VkCmdBuffer                                 cmdBuffer,
+-        VkImageAspectFlags                          aspectMask,
+-        VkImageLayout                               imageLayout,
+-        const VkClearDepthStencilValue*             pDepthStencil,
++        u32                                         attachmentCount,
++        const VkClearAttachment*                    pAttachments,
+         u32                                         rectCount,
+         const VkRect3D*                             pRects) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 03bcefe..5d884cd 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 170, 2)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 174, 0)
+ #if defined(__cplusplus) && (_MSC_VER >= 1800 || __cplusplus >= 201103L)
+@@ -511,8 +511,8 @@ typedef enum {
+ typedef enum {
+     VK_SHADER_STAGE_VERTEX = 0,
+-    VK_SHADER_STAGE_TESS_CONTROL = 1,
+-    VK_SHADER_STAGE_TESS_EVALUATION = 2,
++    VK_SHADER_STAGE_TESSELLATION_CONTROL = 1,
++    VK_SHADER_STAGE_TESSELLATION_EVALUATION = 2,
+     VK_SHADER_STAGE_GEOMETRY = 3,
+     VK_SHADER_STAGE_FRAGMENT = 4,
+     VK_SHADER_STAGE_COMPUTE = 5,
+@@ -924,17 +924,17 @@ typedef VkFlags VkSemaphoreCreateFlags;
+ typedef VkFlags VkEventCreateFlags;
+ typedef enum {
+-    VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT = 0x00000001,
+-    VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT = 0x00000002,
+-    VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT = 0x00000004,
+-    VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT = 0x00000008,
+-    VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT = 0x00000010,
+-    VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT = 0x00000020,
+-    VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT = 0x00000040,
+-    VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT = 0x00000080,
+-    VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT = 0x00000100,
+-    VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT = 0x00000200,
+-    VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT = 0x00000400,
++    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
++    VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
++    VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
++    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
++    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
++    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
++    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
++    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
++    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
++    VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
++    VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
+ } VkQueryPipelineStatisticFlagBits;
+ typedef VkFlags VkQueryPipelineStatisticFlags;
+@@ -1000,8 +1000,8 @@ typedef VkFlags VkPipelineCreateFlags;
+ typedef enum {
+     VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+-    VK_SHADER_STAGE_TESS_CONTROL_BIT = 0x00000002,
+-    VK_SHADER_STAGE_TESS_EVALUATION_BIT = 0x00000004,
++    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
++    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+     VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+     VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+     VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+@@ -1024,8 +1024,8 @@ typedef enum {
+     VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
+     VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
+     VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
+-    VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT = 0x00000010,
+-    VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT = 0x00000020,
++    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
++    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
+     VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
+     VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
+     VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
+@@ -1150,7 +1150,7 @@ typedef struct {
+     VkBool32                                    dualSourceBlend;
+     VkBool32                                    logicOp;
+     VkBool32                                    multiDrawIndirect;
+-    VkBool32                                    depthClip;
++    VkBool32                                    depthClamp;
+     VkBool32                                    depthBiasClamp;
+     VkBool32                                    fillModeNonSolid;
+     VkBool32                                    depthBounds;
+@@ -1246,14 +1246,14 @@ typedef struct {
+     uint32_t                                    maxVertexInputAttributeOffset;
+     uint32_t                                    maxVertexInputBindingStride;
+     uint32_t                                    maxVertexOutputComponents;
+-    uint32_t                                    maxTessGenLevel;
+-    uint32_t                                    maxTessPatchSize;
+-    uint32_t                                    maxTessControlPerVertexInputComponents;
+-    uint32_t                                    maxTessControlPerVertexOutputComponents;
+-    uint32_t                                    maxTessControlPerPatchOutputComponents;
+-    uint32_t                                    maxTessControlTotalOutputComponents;
+-    uint32_t                                    maxTessEvaluationInputComponents;
+-    uint32_t                                    maxTessEvaluationOutputComponents;
++    uint32_t                                    maxTessellationGenLevel;
++    uint32_t                                    maxTessellationPatchSize;
++    uint32_t                                    maxTessellationControlPerVertexInputComponents;
++    uint32_t                                    maxTessellationControlPerVertexOutputComponents;
++    uint32_t                                    maxTessellationControlPerPatchOutputComponents;
++    uint32_t                                    maxTessellationControlTotalOutputComponents;
++    uint32_t                                    maxTessellationEvaluationInputComponents;
++    uint32_t                                    maxTessellationEvaluationOutputComponents;
+     uint32_t                                    maxGeometryShaderInvocations;
+     uint32_t                                    maxGeometryInputComponents;
+     uint32_t                                    maxGeometryOutputComponents;
+@@ -1366,7 +1366,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    uint32_t                                    queueRecordCount;
++    uint32_t                                    requestedQueueCount;
+     const VkDeviceQueueCreateInfo*              pRequestedQueues;
+     uint32_t                                    layerCount;
+     const char*const*                           ppEnabledLayerNames;
+@@ -1665,7 +1665,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkBool32                                    depthClipEnable;
++    VkBool32                                    depthClampEnable;
+     VkBool32                                    rasterizerDiscardEnable;
+     VkFillMode                                  fillMode;
+     VkCullMode                                  cullMode;
+@@ -2013,6 +2013,17 @@ typedef struct {
+     uint32_t                                    stencil;
+ } VkClearDepthStencilValue;
++typedef union {
++    VkClearColorValue                           color;
++    VkClearDepthStencilValue                    depthStencil;
++} VkClearValue;
++
++typedef struct {
++    VkImageAspectFlags                          aspectMask;
++    uint32_t                                    colorAttachment;
++    VkClearValue                                clearValue;
++} VkClearAttachment;
++
+ typedef struct {
+     VkOffset3D                                  offset;
+     VkExtent3D                                  extent;
+@@ -2026,11 +2037,6 @@ typedef struct {
+     VkExtent3D                                  extent;
+ } VkImageResolve;
+-typedef union {
+-    VkClearColorValue                           color;
+-    VkClearDepthStencilValue                    depthStencil;
+-} VkClearValue;
+-
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+@@ -2223,8 +2229,7 @@ typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer dest
+ typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
+ typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+ typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-typedef void (VKAPI *PFN_vkCmdClearColorAttachment)(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects);
+-typedef void (VKAPI *PFN_vkCmdClearDepthStencilAttachment)(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rectCount, const VkRect3D* pRects);
++typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects);
+ typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+ typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+@@ -2916,19 +2921,10 @@ void VKAPI vkCmdClearDepthStencilImage(
+     uint32_t                                    rangeCount,
+     const VkImageSubresourceRange*              pRanges);
+-void VKAPI vkCmdClearColorAttachment(
+-    VkCmdBuffer                                 cmdBuffer,
+-    uint32_t                                    colorAttachment,
+-    VkImageLayout                               imageLayout,
+-    const VkClearColorValue*                    pColor,
+-    uint32_t                                    rectCount,
+-    const VkRect3D*                             pRects);
+-
+-void VKAPI vkCmdClearDepthStencilAttachment(
++void VKAPI vkCmdClearAttachments(
+     VkCmdBuffer                                 cmdBuffer,
+-    VkImageAspectFlags                          aspectMask,
+-    VkImageLayout                               imageLayout,
+-    const VkClearDepthStencilValue*             pDepthStencil,
++    uint32_t                                    attachmentCount,
++    const VkClearAttachment*                    pAttachments,
+     uint32_t                                    rectCount,
+     const VkRect3D*                             pRects);
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 2f7583d..4027f9a 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -682,13 +682,8 @@ void vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLa
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects) {
+-    GetVtbl(cmdBuffer).CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
+-}
+-
+-__attribute__((visibility("default")))
+-void vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rectCount, const VkRect3D* pRects) {
+-    GetVtbl(cmdBuffer).CmdClearDepthStencilAttachment(cmdBuffer, aspectMask, imageLayout, pDepthStencil, rectCount, pRects);
++void vkCmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects) {
++    GetVtbl(cmdBuffer).CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index 4f37c9c..bd16ac5 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -81,9 +81,8 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindPipeline)},
+     {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindVertexBuffers)},
+     {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBlitImage)},
+-    {"vkCmdClearColorAttachment", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorAttachment)},
++    {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearAttachments)},
+     {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorImage)},
+-    {"vkCmdClearDepthStencilAttachment", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilAttachment)},
+     {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilImage)},
+     {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBuffer)},
+     {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBufferToImage)},
+@@ -242,9 +241,8 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
+     {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
+     {"vkCmdBlitImage", offsetof(DeviceVtbl, CmdBlitImage)},
+-    {"vkCmdClearColorAttachment", offsetof(DeviceVtbl, CmdClearColorAttachment)},
++    {"vkCmdClearAttachments", offsetof(DeviceVtbl, CmdClearAttachments)},
+     {"vkCmdClearColorImage", offsetof(DeviceVtbl, CmdClearColorImage)},
+-    {"vkCmdClearDepthStencilAttachment", offsetof(DeviceVtbl, CmdClearDepthStencilAttachment)},
+     {"vkCmdClearDepthStencilImage", offsetof(DeviceVtbl, CmdClearDepthStencilImage)},
+     {"vkCmdCopyBuffer", offsetof(DeviceVtbl, CmdCopyBuffer)},
+     {"vkCmdCopyBufferToImage", offsetof(DeviceVtbl, CmdCopyBufferToImage)},
+@@ -1063,14 +1061,9 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkCmdClearDepthStencilImage");
+         success = false;
+     }
+-    vtbl.CmdClearColorAttachment = reinterpret_cast<PFN_vkCmdClearColorAttachment>(get_proc_addr(device, "vkCmdClearColorAttachment"));
+-    if (UNLIKELY(!vtbl.CmdClearColorAttachment)) {
+-        ALOGE("missing device proc: %s", "vkCmdClearColorAttachment");
+-        success = false;
+-    }
+-    vtbl.CmdClearDepthStencilAttachment = reinterpret_cast<PFN_vkCmdClearDepthStencilAttachment>(get_proc_addr(device, "vkCmdClearDepthStencilAttachment"));
+-    if (UNLIKELY(!vtbl.CmdClearDepthStencilAttachment)) {
+-        ALOGE("missing device proc: %s", "vkCmdClearDepthStencilAttachment");
++    vtbl.CmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(get_proc_addr(device, "vkCmdClearAttachments"));
++    if (UNLIKELY(!vtbl.CmdClearAttachments)) {
++        ALOGE("missing device proc: %s", "vkCmdClearAttachments");
+         success = false;
+     }
+     vtbl.CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(get_proc_addr(device, "vkCmdResolveImage"));
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 6999e1e..1ffbdd5 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -173,8 +173,7 @@ struct DeviceVtbl {
+     PFN_vkCmdFillBuffer CmdFillBuffer;
+     PFN_vkCmdClearColorImage CmdClearColorImage;
+     PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
+-    PFN_vkCmdClearColorAttachment CmdClearColorAttachment;
+-    PFN_vkCmdClearDepthStencilAttachment CmdClearDepthStencilAttachment;
++    PFN_vkCmdClearAttachments CmdClearAttachments;
+     PFN_vkCmdResolveImage CmdResolveImage;
+     PFN_vkCmdSetEvent CmdSetEvent;
+     PFN_vkCmdResetEvent CmdResetEvent;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 053e403..9d028eb 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -1019,10 +1019,7 @@ void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imag
+ void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+ }
+-void CmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects) {
+-}
+-
+-void CmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rectCount, const VkRect3D* pRects) {
++void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects) {
+ }
+ void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 808673a..4940148 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -154,8 +154,7 @@ void CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize de
+ void CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
+ void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+ void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-void CmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects);
+-void CmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rectCount, const VkRect3D* pRects);
++void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects);
+ void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+ void CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index ac6d50f..7f6ae8e 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -79,9 +79,8 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdBindPipeline>(CmdBindPipeline))},
+     {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdBindVertexBuffers>(CmdBindVertexBuffers))},
+     {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdBlitImage>(CmdBlitImage))},
+-    {"vkCmdClearColorAttachment", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdClearColorAttachment>(CmdClearColorAttachment))},
++    {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdClearAttachments>(CmdClearAttachments))},
+     {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdClearColorImage>(CmdClearColorImage))},
+-    {"vkCmdClearDepthStencilAttachment", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdClearDepthStencilAttachment>(CmdClearDepthStencilAttachment))},
+     {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdClearDepthStencilImage>(CmdClearDepthStencilImage))},
+     {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdCopyBuffer>(CmdCopyBuffer))},
+     {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdCopyBufferToImage>(CmdCopyBufferToImage))},
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0002-vulkan-Update-from-version-0.174.0-to-0.177.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0002-vulkan-Update-from-version-0.174.0-to-0.177.0.patch
new file mode 100644 (file)
index 0000000..1dba313
--- /dev/null
@@ -0,0 +1,206 @@
+From 8ce9e519e5af3e2310765825115ffc3a65af818c Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Thu, 19 Nov 2015 21:51:33 -0800
+Subject: [PATCH 02/30] vulkan: Update from version 0.174.0 to 0.177.0
+
+Change-Id: I4b837c0bdb4fd6120688e8389ab8591178d370fb
+---
+ vulkan/api/templates/vulkan_h.tmpl |  2 +-
+ vulkan/api/vulkan.api              | 12 +++++-------
+ vulkan/include/vulkan/vulkan.h     | 25 ++++++++++---------------
+ vulkan/nulldrv/null_driver.cpp     |  2 +-
+ vulkan/tools/vkinfo.cpp            |  6 ++----
+ 5 files changed, 19 insertions(+), 28 deletions(-)
+
+diff --git a/vulkan/api/templates/vulkan_h.tmpl b/vulkan/api/templates/vulkan_h.tmpl
+index 2dee541..c55107d 100644
+--- a/vulkan/api/templates/vulkan_h.tmpl
++++ b/vulkan/api/templates/vulkan_h.tmpl
+@@ -53,7 +53,7 @@ extern "C" {
+ #define VK_API_VERSION \
+     VK_MAKE_VERSION({{Global "VERSION_MAJOR"}}, {{Global "VERSION_MINOR"}}, {{Global "VERSION_PATCH"}})
+ ¶
+-#if defined(__cplusplus) && (_MSC_VER >= 1800 || __cplusplus >= 201103L)
++#if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800 || __cplusplus >= 201103L)
+     #define VK_NULL_HANDLE nullptr
+ #else
+     #define VK_NULL_HANDLE 0
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 7ab0e86..2b499fd 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 174
++define VERSION_MINOR 177
+ define VERSION_PATCH 0
+ // API limits
+@@ -695,8 +695,7 @@ bitfield VkMemoryPropertyFlags {
+     VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT                = 0x00000002,    /// Memory may not have i/o coherency so vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
+                                                                              /// vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
+     VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT                    = 0x00000004,    /// Memory should not be cached by the host
+-    VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT              = 0x00000008,    /// Memory should support host write combining
+-    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000010,    /// Memory may be allocated by the driver when it is required
++    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000008,    /// Memory may be allocated by the driver when it is required
+ }
+ /// Memory heap flags
+@@ -932,7 +931,6 @@ bitfield VkAttachmentDescriptionFlags {
+ /// Subpass description flags
+ bitfield VkSubpassDescriptionFlags {
+-    VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT                  = 0x00000001,
+ }
+ /// Command pool creation flags
+@@ -1108,7 +1106,7 @@ class VkInstanceCreateInfo {
+ class VkQueueFamilyProperties {
+     VkQueueFlags                                queueFlags                 /// Queue flags
+     u32                                         queueCount
+-    VkBool32                                    supportsTimestamps
++    u32                                         timestampValidBits
+ }
+ class VkPhysicalDeviceMemoryProperties {
+@@ -1522,6 +1520,8 @@ class VkPipelineMultisampleStateCreateInfo {
+     VkBool32                                    sampleShadingEnable        /// optional (GL45)
+     f32                                         minSampleShading           /// optional (GL45)
+     const VkSampleMask*                         pSampleMask
++    VkBool32                                    alphaToCoverageEnable
++    VkBool32                                    alphaToOneEnable
+ }
+ class VkPipelineColorBlendAttachmentState {
+@@ -1538,8 +1538,6 @@ class VkPipelineColorBlendAttachmentState {
+ class VkPipelineColorBlendStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+-    VkBool32                                    alphaToCoverageEnable
+-    VkBool32                                    alphaToOneEnable
+     VkBool32                                    logicOpEnable
+     VkLogicOp                                   logicOp
+     u32                                         attachmentCount    /// # of pAttachments
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 5d884cd..124d088 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,10 +41,10 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 174, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 177, 0)
+-#if defined(__cplusplus) && (_MSC_VER >= 1800 || __cplusplus >= 201103L)
++#if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+     #define VK_NULL_HANDLE nullptr
+ #else
+     #define VK_NULL_HANDLE 0
+@@ -711,10 +711,10 @@ typedef enum {
+     VK_TEX_ADDRESS_MODE_CLAMP = 2,
+     VK_TEX_ADDRESS_MODE_MIRROR_ONCE = 3,
+     VK_TEX_ADDRESS_MODE_CLAMP_BORDER = 4,
+-    VK_TEX_ADDRESS_BEGIN_RANGE = VK_TEX_ADDRESS_MODE_WRAP,
+-    VK_TEX_ADDRESS_END_RANGE = VK_TEX_ADDRESS_MODE_CLAMP_BORDER,
+-    VK_TEX_ADDRESS_NUM = (VK_TEX_ADDRESS_MODE_CLAMP_BORDER - VK_TEX_ADDRESS_MODE_WRAP + 1),
+-    VK_TEX_ADDRESS_MAX_ENUM = 0x7FFFFFFF
++    VK_TEX_ADDRESS_MODE_BEGIN_RANGE = VK_TEX_ADDRESS_MODE_WRAP,
++    VK_TEX_ADDRESS_MODE_END_RANGE = VK_TEX_ADDRESS_MODE_CLAMP_BORDER,
++    VK_TEX_ADDRESS_MODE_NUM = (VK_TEX_ADDRESS_MODE_CLAMP_BORDER - VK_TEX_ADDRESS_MODE_WRAP + 1),
++    VK_TEX_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkTexAddressMode;
+ typedef enum {
+@@ -893,8 +893,7 @@ typedef enum {
+     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000001,
+     VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT = 0x00000002,
+     VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT = 0x00000004,
+-    VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT = 0x00000008,
+-    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
++    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000008,
+ } VkMemoryPropertyFlagBits;
+ typedef VkFlags VkMemoryPropertyFlags;
+@@ -1013,10 +1012,6 @@ typedef enum {
+     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+ } VkAttachmentDescriptionFlagBits;
+ typedef VkFlags VkAttachmentDescriptionFlags;
+-
+-typedef enum {
+-    VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT = 0x00000001,
+-} VkSubpassDescriptionFlagBits;
+ typedef VkFlags VkSubpassDescriptionFlags;
+ typedef enum {
+@@ -1336,7 +1331,7 @@ typedef struct {
+ typedef struct {
+     VkQueueFlags                                queueFlags;
+     uint32_t                                    queueCount;
+-    VkBool32                                    supportsTimestamps;
++    uint32_t                                    timestampValidBits;
+ } VkQueueFamilyProperties;
+ typedef struct {
+@@ -1684,6 +1679,8 @@ typedef struct {
+     VkBool32                                    sampleShadingEnable;
+     float                                       minSampleShading;
+     const VkSampleMask*                         pSampleMask;
++    VkBool32                                    alphaToCoverageEnable;
++    VkBool32                                    alphaToOneEnable;
+ } VkPipelineMultisampleStateCreateInfo;
+ typedef struct {
+@@ -1724,8 +1721,6 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkBool32                                    alphaToCoverageEnable;
+-    VkBool32                                    alphaToOneEnable;
+     VkBool32                                    logicOpEnable;
+     VkLogicOp                                   logicOp;
+     uint32_t                                    attachmentCount;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 9d028eb..8992db4 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -288,7 +288,7 @@ VkResult GetPhysicalDeviceQueueFamilyProperties(
+         properties->queueFlags =
+             VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_DMA_BIT;
+         properties->queueCount = 1;
+-        properties->supportsTimestamps = VK_FALSE;
++        properties->timestampValidBits = 64;
+     }
+     *count = 1;
+     return VK_SUCCESS;
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 583e607..2af04ad 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -124,8 +124,6 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+                 strbuf << " NON_COHERENT";
+             if ((flags & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT) != 0)
+                 strbuf << " UNCACHED";
+-            if ((flags & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT) != 0)
+-                strbuf << " WRITE_COMBINED";
+             if ((flags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0)
+                 strbuf << " LAZILY_ALLOCATED";
+             printf("       Type %u: %s\n", type, strbuf.str().c_str());
+@@ -154,9 +152,9 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+             queue_flags &= ~flag;
+             sep = "+";
+         }
+-        printf("     Queue Family %u: %2ux %s timestamps:%s\n", family,
++        printf("     Queue Family %u: %2ux %s timestamps:%ub\n", family,
+                qprops.queueCount, strbuf.str().c_str(),
+-               qprops.supportsTimestamps ? "YES" : "NO");
++               qprops.timestampValidBits);
+         strbuf.str(std::string());
+     }
+ }
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0003-vulkan-Update-from-version-0.177.0-to-0.179.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0003-vulkan-Update-from-version-0.177.0-to-0.179.0.patch
new file mode 100644 (file)
index 0000000..b447e96
--- /dev/null
@@ -0,0 +1,1092 @@
+From 88b01c7acbc82f42d074c4484954388167f03add Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Thu, 19 Nov 2015 22:17:28 -0800
+Subject: [PATCH 03/30] vulkan: Update from version 0.177.0 to 0.179.0
+
+Change-Id: I4d596efec04a712d7b38323e012282fe9f98192b
+---
+ vulkan/api/vulkan.api              | 61 +++++++++++-------------------------
+ vulkan/include/vulkan/vulkan.h     | 64 ++++++++++++++++++++------------------
+ vulkan/libvulkan/entry.cpp         | 60 +++++++++++++++++------------------
+ vulkan/libvulkan/loader.cpp        | 62 ++++++++++++++++--------------------
+ vulkan/libvulkan/loader.h          |  8 ++---
+ vulkan/libvulkan/swapchain.cpp     |  3 +-
+ vulkan/nulldrv/null_driver.cpp     | 56 ++++++++++++---------------------
+ vulkan/nulldrv/null_driver.h       | 30 +++++++++---------
+ vulkan/nulldrv/null_driver_gen.cpp |  2 +-
+ vulkan/tools/vkinfo.cpp            | 20 ++++--------
+ 10 files changed, 154 insertions(+), 212 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 2b499fd..7844f63 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 177
++define VERSION_MINOR 179
+ define VERSION_PATCH 0
+ // API limits
+@@ -621,7 +621,8 @@ enum VkResult {
+     VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB,
+     VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA,
+     VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9,
+-    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF8,
++    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
++    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
+ }
+ enum VkDynamicState {
+@@ -2157,18 +2158,16 @@ cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
+     return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceProperties(
++cmd void vkGetPhysicalDeviceProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkPhysicalDeviceProperties*                 pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     properties := ?
+     pProperties[0] = properties
+-
+-    return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceQueueFamilyProperties(
++cmd void vkGetPhysicalDeviceQueueFamilyProperties(
+         VkPhysicalDevice                            physicalDevice,
+         u32*                                        pCount,
+         VkQueueFamilyProperties*                    pQueueFamilyProperties) {
+@@ -2187,32 +2186,27 @@ cmd VkResult vkGetPhysicalDeviceQueueFamilyProperties(
+     //     count := ?
+     //     pCount[0] = count
+     // }
+-    return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceMemoryProperties(
++cmd void vkGetPhysicalDeviceMemoryProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkPhysicalDeviceMemoryProperties*           pMemoryProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     memoryProperties := ?
+     pMemoryProperties[0] = memoryProperties
+-
+-    return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceFeatures(
++cmd void vkGetPhysicalDeviceFeatures(
+         VkPhysicalDevice                            physicalDevice,
+         VkPhysicalDeviceFeatures*                   pFeatures) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     features := ?
+     pFeatures[0] = features
+-
+-    return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceFormatProperties(
++cmd void vkGetPhysicalDeviceFormatProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkFormat                                    format,
+         VkFormatProperties*                         pFormatProperties) {
+@@ -2220,11 +2214,9 @@ cmd VkResult vkGetPhysicalDeviceFormatProperties(
+     formatProperties := ?
+     pFormatProperties[0] = formatProperties
+-
+-    return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
++cmd void vkGetPhysicalDeviceImageFormatProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkFormat                                    format,
+         VkImageType                                 type,
+@@ -2236,8 +2228,6 @@ cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
+     imageFormatProperties := ?
+     pImageFormatProperties[0] = imageFormatProperties
+-
+-    return ?
+ }
+@@ -2340,7 +2330,7 @@ cmd VkResult vkEnumerateDeviceExtensionProperties(
+ // Queue functions
+ @threadSafety("system")
+-cmd VkResult vkGetDeviceQueue(
++cmd void vkGetDeviceQueue(
+         VkDevice                                    device,
+         u32                                         queueFamilyIndex,
+         u32                                         queueIndex,
+@@ -2353,8 +2343,6 @@ cmd VkResult vkGetDeviceQueue(
+     if !(queue in State.Queues) {
+         State.Queues[queue] = new!QueueObject(device: device)
+     }
+-
+-    return ?
+ }
+ @threadSafety("app")
+@@ -2499,7 +2487,7 @@ cmd VkResult vkInvalidateMappedMemoryRanges(
+ // Memory management API functions
+-cmd VkResult vkGetDeviceMemoryCommitment(
++cmd void vkGetDeviceMemoryCommitment(
+         VkDevice                                    device,
+         VkDeviceMemory                              memory,
+         VkDeviceSize*                               pCommittedMemoryInBytes) {
+@@ -2512,19 +2500,15 @@ cmd VkResult vkGetDeviceMemoryCommitment(
+     committedMemoryInBytes := ?
+     pCommittedMemoryInBytes[0] = committedMemoryInBytes
+-
+-    return ?
+ }
+-cmd VkResult vkGetBufferMemoryRequirements(
++cmd void vkGetBufferMemoryRequirements(
+         VkDevice                                    device,
+         VkBuffer                                    buffer,
+         VkMemoryRequirements*                       pMemoryRequirements) {
+     deviceObject := GetDevice(device)
+     bufferObject := GetBuffer(buffer)
+     assert(bufferObject.device == device)
+-
+-    return ?
+ }
+ cmd VkResult vkBindBufferMemory(
+@@ -2554,15 +2538,13 @@ cmd VkResult vkBindBufferMemory(
+     return ?
+ }
+-cmd VkResult vkGetImageMemoryRequirements(
++cmd void vkGetImageMemoryRequirements(
+         VkDevice                                    device,
+         VkImage                                     image,
+         VkMemoryRequirements*                       pMemoryRequirements) {
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+     assert(imageObject.device == device)
+-
+-    return ?
+ }
+ cmd VkResult vkBindImageMemory(
+@@ -2592,7 +2574,7 @@ cmd VkResult vkBindImageMemory(
+     return ?
+ }
+-cmd VkResult vkGetImageSparseMemoryRequirements(
++cmd void vkGetImageSparseMemoryRequirements(
+         VkDevice                                    device,
+         VkImage                                     image,
+         u32*                                        pNumRequirements,
+@@ -2600,11 +2582,9 @@ cmd VkResult vkGetImageSparseMemoryRequirements(
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+     assert(imageObject.device == device)
+-
+-    return ?
+ }
+-cmd VkResult vkGetPhysicalDeviceSparseImageFormatProperties(
++cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkFormat                                    format,
+         VkImageType                                 type,
+@@ -2614,8 +2594,6 @@ cmd VkResult vkGetPhysicalDeviceSparseImageFormatProperties(
+         u32*                                        pNumProperties,
+         VkSparseImageFormatProperties*              pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+-
+-    return ?
+ }
+ cmd VkResult vkQueueBindSparseBufferMemory(
+@@ -2985,7 +2963,7 @@ cmd void vkDestroyImage(
+     State.Images[image] = null
+ }
+-cmd VkResult vkGetImageSubresourceLayout(
++cmd void vkGetImageSubresourceLayout(
+         VkDevice                                    device,
+         VkImage                                     image,
+         const VkImageSubresource*                   pSubresource,
+@@ -2993,8 +2971,6 @@ cmd VkResult vkGetImageSubresourceLayout(
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+     assert(imageObject.device == device)
+-
+-    return ?
+ }
+@@ -3122,6 +3098,7 @@ cmd platform.size_t vkGetPipelineCacheSize(
+ cmd VkResult vkGetPipelineCacheData(
+         VkDevice                                    device,
+         VkPipelineCache                             pipelineCache,
++        platform.size_t                             dataSize,
+         void*                                       pData) {
+     deviceObject := GetDevice(device)
+     pipelineCacheObject := GetPipelineCache(pipelineCache)
+@@ -3458,7 +3435,7 @@ cmd void vkDestroyRenderPass(
+     State.RenderPasses[renderPass] = null
+ }
+-cmd VkResult vkGetRenderAreaGranularity(
++cmd void vkGetRenderAreaGranularity(
+         VkDevice                                    device,
+         VkRenderPass                                renderPass,
+         VkExtent2D*                                 pGranularity) {
+@@ -3467,8 +3444,6 @@ cmd VkResult vkGetRenderAreaGranularity(
+     granularity := ?
+     pGranularity[0] = granularity
+-
+-    return ?
+ }
+ // Command pool functions
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 124d088..eb427f8 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 177, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 179, 0)
+ #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+@@ -152,7 +152,8 @@ typedef enum {
+     VK_ERROR_MEMORY_MAP_FAILED = -5,
+     VK_ERROR_LAYER_NOT_PRESENT = -6,
+     VK_ERROR_EXTENSION_NOT_PRESENT = -7,
+-    VK_ERROR_INCOMPATIBLE_DRIVER = -8,
++    VK_ERROR_FEATURE_NOT_PRESENT = -8,
++    VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+     VK_RESULT_BEGIN_RANGE = VK_ERROR_INCOMPATIBLE_DRIVER,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+     VK_RESULT_NUM = (VK_INCOMPLETE - VK_ERROR_INCOMPATIBLE_DRIVER + 1),
+@@ -2099,12 +2100,12 @@ typedef struct {
+ typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance);
+ typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance);
+ typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+ typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+ typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+ typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
+@@ -2113,7 +2114,7 @@ typedef VkResult (VKAPI *PFN_vkEnumerateInstanceExtensionProperties)(const char*
+ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pCount, VkLayerProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
++typedef void (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+ typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
+ typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
+@@ -2123,13 +2124,13 @@ typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory mem, V
+ typedef void (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory mem);
+ typedef VkResult (VKAPI *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+ typedef VkResult (VKAPI *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+-typedef VkResult (VKAPI *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
++typedef void (VKAPI *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+ typedef VkResult (VKAPI *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset);
+ typedef VkResult (VKAPI *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset);
+-typedef VkResult (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+-typedef VkResult (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+-typedef VkResult (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
++typedef void (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
++typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
++typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+ typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageOpaqueMemory)(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+ typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo);
+@@ -2156,7 +2157,7 @@ typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBuffer
+ typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView);
+ typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
+ typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image);
+-typedef VkResult (VKAPI *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
++typedef void (VKAPI *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+ typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView);
+ typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView);
+ typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule);
+@@ -2166,7 +2167,7 @@ typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader);
+ typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
+ typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache);
+ typedef size_t (VKAPI *PFN_vkGetPipelineCacheSize)(VkDevice device, VkPipelineCache pipelineCache);
+-typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, void* pData);
++typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData);
+ typedef VkResult (VKAPI *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+ typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+ typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+@@ -2187,7 +2188,7 @@ typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFrame
+ typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer);
+ typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
+ typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass);
+-typedef VkResult (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
++typedef void (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+ typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
+ typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool);
+ typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+@@ -2254,16 +2255,16 @@ VkResult VKAPI vkEnumeratePhysicalDevices(
+     uint32_t*                                   pPhysicalDeviceCount,
+     VkPhysicalDevice*                           pPhysicalDevices);
+-VkResult VKAPI vkGetPhysicalDeviceFeatures(
++void VKAPI vkGetPhysicalDeviceFeatures(
+     VkPhysicalDevice                            physicalDevice,
+     VkPhysicalDeviceFeatures*                   pFeatures);
+-VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
++void VKAPI vkGetPhysicalDeviceFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkFormatProperties*                         pFormatProperties);
+-VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
++void VKAPI vkGetPhysicalDeviceImageFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkImageType                                 type,
+@@ -2272,16 +2273,16 @@ VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
+     VkImageCreateFlags                          flags,
+     VkImageFormatProperties*                    pImageFormatProperties);
+-VkResult VKAPI vkGetPhysicalDeviceProperties(
++void VKAPI vkGetPhysicalDeviceProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkPhysicalDeviceProperties*                 pProperties);
+-VkResult VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
++void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t*                                   pCount,
+     VkQueueFamilyProperties*                    pQueueFamilyProperties);
+-VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
++void VKAPI vkGetPhysicalDeviceMemoryProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
+@@ -2321,7 +2322,7 @@ VkResult VKAPI vkEnumerateDeviceLayerProperties(
+     uint32_t*                                   pCount,
+     VkLayerProperties*                          pProperties);
+-VkResult VKAPI vkGetDeviceQueue(
++void VKAPI vkGetDeviceQueue(
+     VkDevice                                    device,
+     uint32_t                                    queueFamilyIndex,
+     uint32_t                                    queueIndex,
+@@ -2370,7 +2371,7 @@ VkResult VKAPI vkInvalidateMappedMemoryRanges(
+     uint32_t                                    memRangeCount,
+     const VkMappedMemoryRange*                  pMemRanges);
+-VkResult VKAPI vkGetDeviceMemoryCommitment(
++void VKAPI vkGetDeviceMemoryCommitment(
+     VkDevice                                    device,
+     VkDeviceMemory                              memory,
+     VkDeviceSize*                               pCommittedMemoryInBytes);
+@@ -2387,23 +2388,23 @@ VkResult VKAPI vkBindImageMemory(
+     VkDeviceMemory                              mem,
+     VkDeviceSize                                memOffset);
+-VkResult VKAPI vkGetBufferMemoryRequirements(
++void VKAPI vkGetBufferMemoryRequirements(
+     VkDevice                                    device,
+     VkBuffer                                    buffer,
+     VkMemoryRequirements*                       pMemoryRequirements);
+-VkResult VKAPI vkGetImageMemoryRequirements(
++void VKAPI vkGetImageMemoryRequirements(
+     VkDevice                                    device,
+     VkImage                                     image,
+     VkMemoryRequirements*                       pMemoryRequirements);
+-VkResult VKAPI vkGetImageSparseMemoryRequirements(
++void VKAPI vkGetImageSparseMemoryRequirements(
+     VkDevice                                    device,
+     VkImage                                     image,
+     uint32_t*                                   pNumRequirements,
+     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
+-VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
++void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkImageType                                 type,
+@@ -2539,7 +2540,7 @@ void VKAPI vkDestroyImage(
+     VkDevice                                    device,
+     VkImage                                     image);
+-VkResult VKAPI vkGetImageSubresourceLayout(
++void VKAPI vkGetImageSubresourceLayout(
+     VkDevice                                    device,
+     VkImage                                     image,
+     const VkImageSubresource*                   pSubresource,
+@@ -2588,6 +2589,7 @@ size_t VKAPI vkGetPipelineCacheSize(
+ VkResult VKAPI vkGetPipelineCacheData(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
++    size_t                                      dataSize,
+     void*                                       pData);
+ VkResult VKAPI vkMergePipelineCaches(
+@@ -2693,7 +2695,7 @@ void VKAPI vkDestroyRenderPass(
+     VkDevice                                    device,
+     VkRenderPass                                renderPass);
+-VkResult VKAPI vkGetRenderAreaGranularity(
++void VKAPI vkGetRenderAreaGranularity(
+     VkDevice                                    device,
+     VkRenderPass                                renderPass,
+     VkExtent2D*                                 pGranularity);
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 4027f9a..b7c4848 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -67,33 +67,33 @@ PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance, const char* pName)
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceProperties(physicalDevice, pProperties);
++void vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceProperties(physicalDevice, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueFamilyProperties);
++void vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueFamilyProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
++void vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
++void vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
++void vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
++void vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
+ }
+ __attribute__((visibility("default")))
+@@ -127,8 +127,8 @@ VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, c
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue) {
+-    return vulkan::GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
++void vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue) {
++    vulkan::GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
+ }
+ __attribute__((visibility("default")))
+@@ -177,13 +177,13 @@ VkResult vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount,
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
+-    return GetVtbl(device).GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
++void vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
++    GetVtbl(device).GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) {
+-    return GetVtbl(device).GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
++void vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) {
++    GetVtbl(device).GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+@@ -192,8 +192,8 @@ VkResult vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) {
+-    return GetVtbl(device).GetImageMemoryRequirements(device, image, pMemoryRequirements);
++void vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) {
++    GetVtbl(device).GetImageMemoryRequirements(device, image, pMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+@@ -202,13 +202,13 @@ VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, V
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
+-    return GetVtbl(device).GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
++void vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
++    GetVtbl(device).GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
++void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
+ }
+ __attribute__((visibility("default")))
+@@ -342,8 +342,8 @@ void vkDestroyImage(VkDevice device, VkImage image) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
+-    return GetVtbl(device).GetImageSubresourceLayout(device, image, pSubresource, pLayout);
++void vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
++    GetVtbl(device).GetImageSubresourceLayout(device, image, pSubresource, pLayout);
+ }
+ __attribute__((visibility("default")))
+@@ -392,8 +392,8 @@ size_t vkGetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData) {
+-    return GetVtbl(device).GetPipelineCacheData(device, pipelineCache, pData);
++VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData) {
++    return GetVtbl(device).GetPipelineCacheData(device, pipelineCache, dataSize, pData);
+ }
+ __attribute__((visibility("default")))
+@@ -497,8 +497,8 @@ void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
+-    return GetVtbl(device).GetRenderAreaGranularity(device, renderPass, pGranularity);
++void vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
++    GetVtbl(device).GetRenderAreaGranularity(device, renderPass, pGranularity);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index fe33114..ba2f5cf 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -649,21 +649,19 @@ VkResult EnumeratePhysicalDevicesBottom(VkInstance instance,
+     return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceFeaturesBottom(VkPhysicalDevice pdev,
+-                                         VkPhysicalDeviceFeatures* features) {
+-    return GetVtbl(pdev)
+-        ->instance->drv.vtbl.GetPhysicalDeviceFeatures(pdev, features);
++void GetPhysicalDeviceFeaturesBottom(VkPhysicalDevice pdev,
++                                     VkPhysicalDeviceFeatures* features) {
++    GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceFeatures(pdev, features);
+ }
+-VkResult GetPhysicalDeviceFormatPropertiesBottom(
+-    VkPhysicalDevice pdev,
+-    VkFormat format,
+-    VkFormatProperties* properties) {
+-    return GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceFormatProperties(
++void GetPhysicalDeviceFormatPropertiesBottom(VkPhysicalDevice pdev,
++                                             VkFormat format,
++                                             VkFormatProperties* properties) {
++    GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceFormatProperties(
+         pdev, format, properties);
+ }
+-VkResult GetPhysicalDeviceImageFormatPropertiesBottom(
++void GetPhysicalDeviceImageFormatPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkFormat format,
+     VkImageType type,
+@@ -671,31 +669,28 @@ VkResult GetPhysicalDeviceImageFormatPropertiesBottom(
+     VkImageUsageFlags usage,
+     VkImageCreateFlags flags,
+     VkImageFormatProperties* properties) {
+-    return GetVtbl(pdev)
+-        ->instance->drv.vtbl.GetPhysicalDeviceImageFormatProperties(
+-            pdev, format, type, tiling, usage, flags, properties);
++    GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceImageFormatProperties(
++        pdev, format, type, tiling, usage, flags, properties);
+ }
+-VkResult GetPhysicalDevicePropertiesBottom(
+-    VkPhysicalDevice pdev,
+-    VkPhysicalDeviceProperties* properties) {
+-    return GetVtbl(pdev)
++void GetPhysicalDevicePropertiesBottom(VkPhysicalDevice pdev,
++                                       VkPhysicalDeviceProperties* properties) {
++    GetVtbl(pdev)
+         ->instance->drv.vtbl.GetPhysicalDeviceProperties(pdev, properties);
+ }
+-VkResult GetPhysicalDeviceQueueFamilyPropertiesBottom(
++void GetPhysicalDeviceQueueFamilyPropertiesBottom(
+     VkPhysicalDevice pdev,
+     uint32_t* pCount,
+     VkQueueFamilyProperties* properties) {
+-    return GetVtbl(pdev)
+-        ->instance->drv.vtbl.GetPhysicalDeviceQueueFamilyProperties(
+-            pdev, pCount, properties);
++    GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceQueueFamilyProperties(
++        pdev, pCount, properties);
+ }
+-VkResult GetPhysicalDeviceMemoryPropertiesBottom(
++void GetPhysicalDeviceMemoryPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkPhysicalDeviceMemoryProperties* properties) {
+-    return GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceMemoryProperties(
++    GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceMemoryProperties(
+         pdev, properties);
+ }
+@@ -815,7 +810,7 @@ VkResult EnumerateDeviceLayerPropertiesBottom(VkPhysicalDevice pdev,
+         pdev, properties_count, properties);
+ }
+-VkResult GetPhysicalDeviceSparseImageFormatPropertiesBottom(
++void GetPhysicalDeviceSparseImageFormatPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkFormat format,
+     VkImageType type,
+@@ -824,7 +819,7 @@ VkResult GetPhysicalDeviceSparseImageFormatPropertiesBottom(
+     VkImageTiling tiling,
+     uint32_t* properties_count,
+     VkSparseImageFormatProperties* properties) {
+-    return GetVtbl(pdev)
++    GetVtbl(pdev)
+         ->instance->drv.vtbl.GetPhysicalDeviceSparseImageFormatProperties(
+             pdev, format, type, samples, usage, tiling, properties_count,
+             properties);
+@@ -1061,25 +1056,20 @@ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* name) {
+     return GetSpecificDeviceProcAddr(GetVtbl(device), name);
+ }
+-VkResult GetDeviceQueue(VkDevice drv_device,
+-                        uint32_t family,
+-                        uint32_t index,
+-                        VkQueue* out_queue) {
++void GetDeviceQueue(VkDevice drv_device,
++                    uint32_t family,
++                    uint32_t index,
++                    VkQueue* out_queue) {
+     VkResult result;
+     VkQueue queue;
+     const DeviceVtbl* vtbl = GetVtbl(drv_device);
+-    result = vtbl->GetDeviceQueue(drv_device, family, index, &queue);
+-    if (result != VK_SUCCESS)
+-        return result;
++    vtbl->GetDeviceQueue(drv_device, family, index, &queue);
+     hwvulkan_dispatch_t* dispatch =
+         reinterpret_cast<hwvulkan_dispatch_t*>(queue);
+-    if (dispatch->magic != HWVULKAN_DISPATCH_MAGIC && dispatch->vtbl != vtbl) {
++    if (dispatch->magic != HWVULKAN_DISPATCH_MAGIC && dispatch->vtbl != vtbl)
+         ALOGE("invalid VkQueue dispatch magic: 0x%" PRIxPTR, dispatch->magic);
+-        return VK_ERROR_INITIALIZATION_FAILED;
+-    }
+     dispatch->vtbl = vtbl;
+     *out_queue = queue;
+-    return VK_SUCCESS;
+ }
+ VkResult CreateCommandBuffer(VkDevice drv_device,
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 1ffbdd5..fcaec61 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -221,10 +221,10 @@ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+                         VkInstance* instance);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice drv_device, const char* name);
+-VkResult GetDeviceQueue(VkDevice drv_device,
+-                        uint32_t family,
+-                        uint32_t index,
+-                        VkQueue* out_queue);
++void GetDeviceQueue(VkDevice drv_device,
++                    uint32_t family,
++                    uint32_t index,
++                    VkQueue* out_queue);
+ VkResult CreateCommandBuffer(VkDevice device,
+                              const VkCmdBufferCreateInfo* create_info,
+                              VkCmdBuffer* out_cmdbuf);
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 53c13a9..02d9515 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -311,8 +311,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     std::shared_ptr<ANativeWindow> window = InitSharedPtr(
+         device, static_cast<ANativeWindow*>(
+                     reinterpret_cast<const VkSurfaceDescriptionWindowKHR*>(
+-                        create_info->pSurfaceDescription)
+-                        ->pPlatformWindow));
++                        create_info->pSurfaceDescription)->pPlatformWindow));
+     // TODO(jessehall): Create and use NATIVE_WINDOW_API_VULKAN.
+     err = native_window_api_connect(window.get(), NATIVE_WINDOW_API_EGL);
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 8992db4..0d1b468 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -265,8 +265,8 @@ VkResult EnumeratePhysicalDevices(VkInstance instance,
+     return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
+-                                     VkPhysicalDeviceProperties* properties) {
++void GetPhysicalDeviceProperties(VkPhysicalDevice,
++                                 VkPhysicalDeviceProperties* properties) {
+     properties->apiVersion = VK_API_VERSION;
+     properties->driverVersion = VK_MAKE_VERSION(0, 0, 1);
+     properties->vendorId = 0;
+@@ -275,26 +275,22 @@ VkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
+     strcpy(properties->deviceName, "Android Vulkan Null Driver");
+     memset(properties->pipelineCacheUUID, 0,
+            sizeof(properties->pipelineCacheUUID));
+-    return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceQueueFamilyProperties(
++void GetPhysicalDeviceQueueFamilyProperties(
+     VkPhysicalDevice,
+     uint32_t* count,
+     VkQueueFamilyProperties* properties) {
+     if (properties) {
+-        if (*count < 1)
+-            return VK_INCOMPLETE;
+         properties->queueFlags =
+             VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_DMA_BIT;
+         properties->queueCount = 1;
+         properties->timestampValidBits = 64;
+     }
+     *count = 1;
+-    return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceMemoryProperties(
++void GetPhysicalDeviceMemoryProperties(
+     VkPhysicalDevice,
+     VkPhysicalDeviceMemoryProperties* properties) {
+     properties->memoryTypeCount = 1;
+@@ -304,7 +300,6 @@ VkResult GetPhysicalDeviceMemoryProperties(
+     properties->memoryHeapCount = 1;
+     properties->memoryHeaps[0].size = kMaxDeviceMemory;
+     properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL_BIT;
+-    return VK_SUCCESS;
+ }
+ // -----------------------------------------------------------------------------
+@@ -337,9 +332,8 @@ void DestroyDevice(VkDevice device) {
+     alloc->pfnFree(alloc->pUserData, device);
+ }
+-VkResult GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
++void GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
+     *queue = &device->queue;
+-    return VK_SUCCESS;
+ }
+ // -----------------------------------------------------------------------------
+@@ -443,14 +437,13 @@ VkResult CreateBuffer(VkDevice device,
+     return VK_SUCCESS;
+ }
+-VkResult GetBufferMemoryRequirements(VkDevice,
+-                                     VkBuffer buffer_handle,
+-                                     VkMemoryRequirements* requirements) {
++void GetBufferMemoryRequirements(VkDevice,
++                                 VkBuffer buffer_handle,
++                                 VkMemoryRequirements* requirements) {
+     Buffer* buffer = GetObjectFromHandle(buffer_handle);
+     requirements->size = buffer->size;
+     requirements->alignment = 16;  // allow fast Neon/SSE memcpy
+     requirements->memoryTypeBits = 0x1;
+-    return VK_SUCCESS;
+ }
+ void DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
+@@ -502,14 +495,13 @@ VkResult CreateImage(VkDevice device,
+     return VK_SUCCESS;
+ }
+-VkResult GetImageMemoryRequirements(VkDevice,
+-                                    VkImage image_handle,
+-                                    VkMemoryRequirements* requirements) {
++void GetImageMemoryRequirements(VkDevice,
++                                VkImage image_handle,
++                                VkMemoryRequirements* requirements) {
+     Image* image = GetObjectFromHandle(image_handle);
+     requirements->size = image->size;
+     requirements->alignment = 16;  // allow fast Neon/SSE memcpy
+     requirements->memoryTypeBits = 0x1;
+-    return VK_SUCCESS;
+ }
+ void DestroyImage(VkDevice device, VkImage image_handle) {
+@@ -690,19 +682,16 @@ VkResult QueueSignalReleaseImageANDROID(VkQueue, VkImage, int* fence) {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wunused-parameter"
+-VkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
++void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
++void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
++void GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
+@@ -747,9 +736,8 @@ VkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, c
+     return VK_SUCCESS;
+ }
+-VkResult GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
++void GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+ VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) {
+@@ -760,14 +748,12 @@ VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkD
+     return VK_SUCCESS;
+ }
+-VkResult GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
++void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+-VkResult GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
++void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+ VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
+@@ -842,9 +828,8 @@ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t st
+ void DestroyBufferView(VkDevice device, VkBufferView bufferView) {
+ }
+-VkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
++void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+ void DestroyImageView(VkDevice device, VkImageView imageView) {
+@@ -864,7 +849,7 @@ size_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
+     return VK_SUCCESS;
+ }
+-VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData) {
++VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+@@ -909,9 +894,8 @@ void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
+ void DestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
+ }
+-VkResult GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
++void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+ }
+ void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 4940148..2679777 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -29,12 +29,12 @@ PFN_vkVoidFunction LookupDeviceProcAddr(const char* name);
+ // clang-format off
+ void DestroyInstance(VkInstance instance);
+ VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+-VkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+-VkResult GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+-VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+-VkResult GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+-VkResult GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+-VkResult GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
++void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
++void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
++void GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
++void GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
++void GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
++void GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
+ VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
+@@ -43,7 +43,7 @@ VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t*
+ VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
+ VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
+-VkResult GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
++void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+ VkResult QueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence);
+ VkResult QueueWaitIdle(VkQueue queue);
+ VkResult DeviceWaitIdle(VkDevice device);
+@@ -53,13 +53,13 @@ VkResult MapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkD
+ void UnmapMemory(VkDevice device, VkDeviceMemory mem);
+ VkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+ VkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+-VkResult GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
++void GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+ VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset);
+ VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset);
+-VkResult GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+-VkResult GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+-VkResult GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-VkResult GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
++void GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
++void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
++void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
++void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+ VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+ VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+ VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo);
+@@ -86,7 +86,7 @@ VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreate
+ void DestroyBufferView(VkDevice device, VkBufferView bufferView);
+ VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
+ void DestroyImage(VkDevice device, VkImage image);
+-VkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
++void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+ VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView);
+ void DestroyImageView(VkDevice device, VkImageView imageView);
+ VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule);
+@@ -96,7 +96,7 @@ void DestroyShader(VkDevice device, VkShader shader);
+ VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
+ void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache);
+ size_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache);
+-VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData);
++VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData);
+ VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+ VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+ VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+@@ -117,7 +117,7 @@ VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCrea
+ void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer);
+ VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
+ void DestroyRenderPass(VkDevice device, VkRenderPass renderPass);
+-VkResult GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
++void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+ VkResult CreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
+ void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool);
+ VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index 7f6ae8e..e86a795 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -31,7 +31,7 @@ struct NameProcEntry {
+ };
+ template <size_t N>
+-PFN_vkVoidFunction LookupProcAddr(const NameProcEntry (&table)[N],
++PFN_vkVoidFunction LookupProcAddr(const NameProcEntry(&table)[N],
+                                   const char* name) {
+     auto entry = std::lower_bound(table, table + N, name,
+                                   [](const NameProcEntry& e, const char* n) {
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 2af04ad..50c3789 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -90,9 +90,7 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+     std::ostringstream strbuf;
+     VkPhysicalDeviceProperties props;
+-    result = vkGetPhysicalDeviceProperties(pdev, &props);
+-    if (result != VK_SUCCESS)
+-        die("vkGetPhysicalDeviceProperties", result);
++    vkGetPhysicalDeviceProperties(pdev, &props);
+     printf("  %u: \"%s\" (%s) %u.%u.%u/%#x [%04x:%04x]\n", idx,
+            props.deviceName, VkPhysicalDeviceTypeStr(props.deviceType),
+            (props.apiVersion >> 22) & 0x3FF, (props.apiVersion >> 12) & 0x3FF,
+@@ -100,9 +98,7 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+            props.deviceId);
+     VkPhysicalDeviceMemoryProperties mem_props;
+-    result = vkGetPhysicalDeviceMemoryProperties(pdev, &mem_props);
+-    if (result != VK_SUCCESS)
+-        die("vkGetPhysicalDeviceMemoryProperties", result);
++    vkGetPhysicalDeviceMemoryProperties(pdev, &mem_props);
+     for (uint32_t heap = 0; heap < mem_props.memoryHeapCount; heap++) {
+         if ((mem_props.memoryHeaps[heap].flags &
+              VK_MEMORY_HEAP_HOST_LOCAL_BIT) != 0)
+@@ -132,16 +128,12 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+     }
+     uint32_t num_queue_families;
+-    result = vkGetPhysicalDeviceQueueFamilyProperties(pdev, &num_queue_families,
+-                                                      nullptr);
+-    if (result != VK_SUCCESS)
+-        die("vkGetPhysicalDeviceQueueFamilyProperties (count)", result);
++    vkGetPhysicalDeviceQueueFamilyProperties(pdev, &num_queue_families,
++                                             nullptr);
+     std::vector<VkQueueFamilyProperties> queue_family_properties(
+         num_queue_families);
+-    result = vkGetPhysicalDeviceQueueFamilyProperties(
+-        pdev, &num_queue_families, queue_family_properties.data());
+-    if (result != VK_SUCCESS)
+-        die("vkGetPhysicalDeviceQueueFamilyProperties (values)", result);
++    vkGetPhysicalDeviceQueueFamilyProperties(pdev, &num_queue_families,
++                                             queue_family_properties.data());
+     for (uint32_t family = 0; family < num_queue_families; family++) {
+         const VkQueueFamilyProperties& qprops = queue_family_properties[family];
+         const char* sep = "";
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0004-vulkan-Update-from-version-0.179.0-to-0.180.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0004-vulkan-Update-from-version-0.179.0-to-0.180.0.patch
new file mode 100644 (file)
index 0000000..f1bb009
--- /dev/null
@@ -0,0 +1,186 @@
+From 167ad20ec48e513fc70447a517d807f082bce6eb Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Thu, 19 Nov 2015 22:30:07 -0800
+Subject: [PATCH 04/30] vulkan: Update from version 0.179.0 to 0.180.0
+
+Change-Id: I2cbf4a8b065e8150734d76d614ab0850bc8324dc
+---
+ vulkan/api/vulkan.api          | 33 +++++++++++++++++++++------------
+ vulkan/include/vulkan/vulkan.h | 19 ++++++++++++++-----
+ vulkan/libvulkan/entry.cpp     |  4 ++--
+ vulkan/nulldrv/null_driver.cpp |  2 +-
+ vulkan/nulldrv/null_driver.h   |  2 +-
+ 5 files changed, 39 insertions(+), 21 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 7844f63..669a64e 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 179
++define VERSION_MINOR 180
+ define VERSION_PATCH 0
+ // API limits
+@@ -1058,6 +1058,15 @@ class VkLayerProperties {
+     char[VK_MAX_DESCRIPTION]                    description        /// Free-form description of the layer
+ }
++class VkSubmitInfo {
++    u32                                         waitSemCount
++    const VkSemaphore*                          pWaitSemaphores
++    u32                                         cmdBufferCount
++    const VkCmdBuffer*                          pCommandBuffers
++    u32                                         signalSemCount
++    const VkSemaphore*                          pSignalSemaphores
++}
++
+ class VkApplicationInfo {
+     VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
+     const void*                                 pNext              /// Next structure in chain
+@@ -2348,8 +2357,8 @@ cmd void vkGetDeviceQueue(
+ @threadSafety("app")
+ cmd VkResult vkQueueSubmit(
+         VkQueue                                     queue,
+-        u32                                         cmdBufferCount,
+-        const VkCmdBuffer*                          pCmdBuffers,
++        u32                                         submitCount,
++        const VkSubmitInfo*                         pSubmitInfo,
+         VkFence                                     fence) {
+     queueObject := GetQueue(queue)
+@@ -2358,15 +2367,15 @@ cmd VkResult vkQueueSubmit(
+         assert(fenceObject.device == queueObject.device)
+     }
+-    cmdBuffers := pCmdBuffers[0:cmdBufferCount]
+-    for i in (0 .. cmdBufferCount) {
+-        cmdBuffer := cmdBuffers[i]
+-        cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-        assert(cmdBufferObject.device == queueObject.device)
+-
+-        validate("QueueCheck", cmdBufferObject.queueFlags in queueObject.flags,
+-            "vkQueueSubmit: enqueued cmdBuffer requires missing queue capabilities.")
+-    }
++    // cmdBuffers := pCmdBuffers[0:cmdBufferCount]
++    // for i in (0 .. cmdBufferCount) {
++    //    cmdBuffer := cmdBuffers[i]
++    //    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    //    assert(cmdBufferObject.device == queueObject.device)
++    //
++    //    validate("QueueCheck", cmdBufferObject.queueFlags in queueObject.flags,
++    //        "vkQueueSubmit: enqueued cmdBuffer requires missing queue capabilities.")
++    // }
+     return ?
+ }
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index eb427f8..3706b34 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 179, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 180, 0)
+ #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+@@ -97,12 +97,12 @@ VK_DEFINE_HANDLE(VkInstance)
+ VK_DEFINE_HANDLE(VkPhysicalDevice)
+ VK_DEFINE_HANDLE(VkDevice)
+ VK_DEFINE_HANDLE(VkQueue)
++VK_DEFINE_NONDISP_HANDLE(VkSemaphore)
+ VK_DEFINE_HANDLE(VkCmdBuffer)
+ VK_DEFINE_NONDISP_HANDLE(VkFence)
+ VK_DEFINE_NONDISP_HANDLE(VkDeviceMemory)
+ VK_DEFINE_NONDISP_HANDLE(VkBuffer)
+ VK_DEFINE_NONDISP_HANDLE(VkImage)
+-VK_DEFINE_NONDISP_HANDLE(VkSemaphore)
+ VK_DEFINE_NONDISP_HANDLE(VkEvent)
+ VK_DEFINE_NONDISP_HANDLE(VkQueryPool)
+ VK_DEFINE_NONDISP_HANDLE(VkBufferView)
+@@ -1384,6 +1384,15 @@ typedef struct {
+ } VkLayerProperties;
+ typedef struct {
++    uint32_t                                    waitSemCount;
++    const VkSemaphore*                          pWaitSemaphores;
++    uint32_t                                    cmdBufferCount;
++    const VkCmdBuffer*                          pCommandBuffers;
++    uint32_t                                    signalSemCount;
++    const VkSemaphore*                          pSignalSemaphores;
++} VkSubmitInfo;
++
++typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDeviceSize                                allocationSize;
+@@ -2115,7 +2124,7 @@ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDev
+ typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pCount, VkLayerProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
+ typedef void (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+-typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence);
++typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
+ typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
+ typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem);
+@@ -2330,8 +2339,8 @@ void VKAPI vkGetDeviceQueue(
+ VkResult VKAPI vkQueueSubmit(
+     VkQueue                                     queue,
+-    uint32_t                                    cmdBufferCount,
+-    const VkCmdBuffer*                          pCmdBuffers,
++    uint32_t                                    submitCount,
++    const VkSubmitInfo*                         pSubmitInfo,
+     VkFence                                     fence);
+ VkResult VKAPI vkQueueWaitIdle(
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index b7c4848..2bf6aae 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -132,8 +132,8 @@ void vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queue
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) {
+-    return GetVtbl(queue).QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
++VkResult vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence) {
++    return GetVtbl(queue).QueueSubmit(queue, submitCount, pSubmitInfo, fence);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 0d1b468..2bef297 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -709,7 +709,7 @@ VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, con
+     return VK_SUCCESS;
+ }
+-VkResult QueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) {
++VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence) {
+     return VK_SUCCESS;
+ }
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 2679777..a1d1e05 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -44,7 +44,7 @@ VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, con
+ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
+ VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
+ void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+-VkResult QueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence);
++VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
+ VkResult QueueWaitIdle(VkQueue queue);
+ VkResult DeviceWaitIdle(VkDevice device);
+ VkResult AllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem);
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0005-vulkan-Update-from-version-0.180.0-to-0.181.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0005-vulkan-Update-from-version-0.180.0-to-0.181.0.patch
new file mode 100644 (file)
index 0000000..b2c5693
--- /dev/null
@@ -0,0 +1,614 @@
+From 5a0357fbe23928c47bb3e817bd3bb6635f2f1f08 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Thu, 19 Nov 2015 22:48:02 -0800
+Subject: [PATCH 05/30] vulkan: Update from version 0.180.0 to 0.181.0
+
+Change-Id: I4a7e216d9966f2dcf873bcb952472463dfb59f95
+---
+ vulkan/api/vulkan.api          |  88 ++++++++++++---------------
+ vulkan/include/vulkan/vulkan.h | 132 +++++++++++++++++------------------------
+ vulkan/libvulkan/entry.cpp     |   2 +-
+ vulkan/libvulkan/swapchain.cpp |   2 +-
+ vulkan/nulldrv/null_driver.cpp |   6 +-
+ vulkan/nulldrv/null_driver.h   |   2 +-
+ vulkan/tools/vkinfo.cpp        |   1 -
+ 7 files changed, 98 insertions(+), 135 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 669a64e..fbd1d9d 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 180
++define VERSION_MINOR 181
+ define VERSION_PATCH 0
+ // API limits
+@@ -135,13 +135,6 @@ enum VkImageViewType {
+     VK_IMAGE_VIEW_TYPE_CUBE_ARRAY                           = 0x00000006,
+ }
+-enum VkImageAspect {
+-    VK_IMAGE_ASPECT_COLOR                                   = 0x00000000,
+-    VK_IMAGE_ASPECT_DEPTH                                   = 0x00000001,
+-    VK_IMAGE_ASPECT_STENCIL                                 = 0x00000002,
+-    VK_IMAGE_ASPECT_METADATA                                = 0x00000003,
+-}
+-
+ enum VkCmdBufferLevel {
+     VK_CMD_BUFFER_LEVEL_PRIMARY                             = 0x00000000,
+     VK_CMD_BUFFER_LEVEL_SECONDARY                           = 0x00000001,
+@@ -535,16 +528,6 @@ enum VkFormat {
+     VK_FORMAT_B10G10R10A2_SINT                              = 0x000000AD,
+ }
+-/// Shader stage enumerant
+-enum VkShaderStage {
+-    VK_SHADER_STAGE_VERTEX                                  = 0x00000000,
+-    VK_SHADER_STAGE_TESSELLATION_CONTROL                    = 0x00000001,
+-    VK_SHADER_STAGE_TESSELLATION_EVALUATION                 = 0x00000002,
+-    VK_SHADER_STAGE_GEOMETRY                                = 0x00000003,
+-    VK_SHADER_STAGE_FRAGMENT                                = 0x00000004,
+-    VK_SHADER_STAGE_COMPUTE                                 = 0x00000005,
+-}
+-
+ /// Structure type enumerant
+ enum VkStructureType {
+     VK_STRUCTURE_TYPE_APPLICATION_INFO                          = 0,
+@@ -606,12 +589,11 @@ enum VkRenderPassContents {
+ enum VkResult {
+     // Return codes for successful operation execution (positive values)
+     VK_SUCCESS                                              = 0x00000000,
+-    VK_UNSUPPORTED                                          = 0x00000001,
+-    VK_NOT_READY                                            = 0x00000002,
+-    VK_TIMEOUT                                              = 0x00000003,
+-    VK_EVENT_SET                                            = 0x00000004,
+-    VK_EVENT_RESET                                          = 0x00000005,
+-    VK_INCOMPLETE                                           = 0x00000006,
++    VK_NOT_READY                                            = 0x00000001,
++    VK_TIMEOUT                                              = 0x00000002,
++    VK_EVENT_SET                                            = 0x00000003,
++    VK_EVENT_RESET                                          = 0x00000004,
++    VK_INCOMPLETE                                           = 0x00000005,
+     // Error codes (negative values)
+     VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF,
+@@ -856,13 +838,11 @@ bitfield VkEventCreateFlags {
+ bitfield VkCmdBufferCreateFlags {
+ }
+-/// Command buffer optimization flags
+-bitfield VkCmdBufferOptimizeFlags {
+-    VK_CMD_BUFFER_OPTIMIZE_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_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT          = 0x00000010,  /// Only one call to the secondary command buffer will exist at any given time
++/// Command buffer usage flags
++bitfield VkCmdBufferUsageFlags {
++    VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT                 = 0x00000001,
++    VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT            = 0x00000002,
++    VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT                = 0x00000004,
+ }
+ /// Pipeline statistics flags
+@@ -1022,9 +1002,10 @@ class VkRect2D {
+     VkExtent2D                                  extent
+ }
+-class VkRect3D {
+-    VkOffset3D                                  offset
+-    VkExtent3D                                  extent
++class VkClearRect {
++    VkRect2D                                    rect
++    u32                                         baseArrayLayer
++    u32                                         numLayers
+ }
+ class VkChannelMapping {
+@@ -1140,7 +1121,7 @@ class VkMemoryRequirements {
+ }
+ class VkSparseImageFormatProperties {
+-    VkImageAspect                               aspect
++    VkImageAspectFlags                          aspect
+     VkExtent3D                                  imageGranularity
+     VkSparseImageFormatFlags                    flags
+ }
+@@ -1180,23 +1161,28 @@ class VkFormatProperties {
+ class VkImageFormatProperties {
+     VkExtent3D                                  maxExtent                  /// max image dimensions for this resource type
+     u32                                         maxMipLevels               /// max number of mipmap levels for this resource type
+-    u32                                         maxArraySize               /// max array size for this resource type
++    u32                                         maxArrayLayers             /// max array layers for this resource type
+     VkSampleCountFlags                          sampleCounts               /// supported sample counts for this resource type
+     VkDeviceSize                                maxResourceSize            /// max size (in bytes) of this resource type
+ }
++class VkDescriptorImageInfo {
++    VkSampler                                   sampler
++    VkImageView                                 imageView
++    VkImageLayout                               imageLayout
++}
++
+ class VkDescriptorBufferInfo {
+     VkBuffer                                    buffer                     /// Buffer used for this descriptor when the descriptor is UNIFORM_BUFFER[_DYNAMIC]
+     VkDeviceSize                                offset                     /// Base offset from buffer start in bytes to update in the descriptor set.
+     VkDeviceSize                                range                      /// Size in bytes of the buffer resource for this descriptor update.
+ }
++@union
+ class VkDescriptorInfo {
+-    VkBufferView                                bufferView                 /// Buffer view to write to the descriptor (in case it's a buffer descriptor, otherwise should be VK_NULL_HANDLE)
+-    VkSampler                                   sampler                    /// Sampler to write to the descriptor (in case it's a SAMPLER or COMBINED_IMAGE_SAMPLER descriptor, otherwise should be VK_NULL_HANDLE)
+-    VkImageView                                 imageView                  /// Image view to write to the descriptor (in case it's a SAMPLED_IMAGE, STORAGE_IMAGE, COMBINED_IMAGE_SAMPLER, or INPUT_ATTACHMENT descriptor, otherwise should be VK_NULL_HANDLE)
+-    VkImageLayout                               imageLayout                /// Layout the image is expected to be in when accessed using this descriptor (only used if imageView is not VK_NULL_HANDLE)
++    VkDescriptorImageInfo                       imageInfo
+     VkDescriptorBufferInfo                      bufferInfo                 /// Raw buffer, size and offset for UNIFORM_BUFFER[_DYNAMIC] or STORAGE_BUFFER[_DYNAMIC] descriptor types. Ignored otherwise.
++    VkBufferView                                texelBufferView
+ }
+ class VkWriteDescriptorSet {
+@@ -1243,7 +1229,7 @@ class VkBufferViewCreateInfo {
+ }
+ class VkImageSubresource {
+-    VkImageAspect                               aspect
++    VkImageAspectFlags                          aspect
+     u32                                         mipLevel
+     u32                                         arrayLayer
+ }
+@@ -1251,9 +1237,9 @@ class VkImageSubresource {
+ class VkImageSubresourceRange {
+     VkImageAspectFlags                          aspectMask
+     u32                                         baseMipLevel
+-    u32                                         mipLevels
++    u32                                         numLevels
+     u32                                         baseArrayLayer
+-    u32                                         arraySize
++    u32                                         numLayers
+ }
+ class VkMemoryBarrier {
+@@ -1295,7 +1281,7 @@ class VkImageCreateInfo {
+     VkFormat                                    format
+     VkExtent3D                                  extent
+     u32                                         mipLevels
+-    u32                                         arraySize
++    u32                                         arrayLayers
+     u32                                         samples
+     VkImageTiling                               tiling
+     VkImageUsageFlags                           usage                      /// Image usage flags
+@@ -1348,10 +1334,10 @@ class VkSparseImageMemoryBindInfo {
+ }
+ class VkImageSubresourceCopy {
+-    VkImageAspect                               aspect
++    VkImageAspectFlags                          aspect
+     u32                                         mipLevel
+-    u32                                         arrayLayer
+-    u32                                         arraySize
++    u32                                         baseArrayLayer
++    u32                                         numLayers
+ }
+ class VkImageCopy {
+@@ -1402,7 +1388,7 @@ class VkShaderCreateInfo {
+     VkShaderModule                              module             /// Module containing entry point
+     const char*                                 pName              /// Null-terminated entry point name
+     VkShaderCreateFlags                         flags              /// Reserved
+-    VkShaderStage                               stage
++    VkShaderStageFlags                          stage
+ }
+ class VkDescriptorSetLayoutBinding {
+@@ -1449,7 +1435,7 @@ class VkSpecializationInfo {
+ class VkPipelineShaderStageCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+-    VkShaderStage                               stage
++    VkShaderStageFlags                          stage
+     VkShader                                    shader
+     const VkSpecializationInfo*                 pSpecializationInfo
+ }
+@@ -1668,7 +1654,7 @@ class VkCmdBufferCreateInfo {
+ class VkCmdBufferBeginInfo {
+     VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
+     const void*                                 pNext       /// Pointer to next structure
+-    VkCmdBufferOptimizeFlags                    flags       /// Command buffer optimization flags
++    VkCmdBufferUsageFlags                       flags       /// Command buffer usage flags
+     VkRenderPass                                renderPass  /// Render pass for secondary command buffers
+     u32                                         subpass
+     VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
+@@ -4056,7 +4042,7 @@ cmd void vkCmdClearAttachments(
+         u32                                         attachmentCount,
+         const VkClearAttachment*                    pAttachments,
+         u32                                         rectCount,
+-        const VkRect3D*                             pRects) {
++        const VkClearRect*                          pRects) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     rects := pRects[0:rectCount]
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 3706b34..475ebec 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 180, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 181, 0)
+ #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+@@ -139,12 +139,11 @@ VK_DEFINE_NONDISP_HANDLE(VkCmdPool)
+ typedef enum {
+     VK_SUCCESS = 0,
+-    VK_UNSUPPORTED = 1,
+-    VK_NOT_READY = 2,
+-    VK_TIMEOUT = 3,
+-    VK_EVENT_SET = 4,
+-    VK_EVENT_RESET = 5,
+-    VK_INCOMPLETE = 6,
++    VK_NOT_READY = 1,
++    VK_TIMEOUT = 2,
++    VK_EVENT_SET = 3,
++    VK_EVENT_RESET = 4,
++    VK_INCOMPLETE = 5,
+     VK_ERROR_OUT_OF_HOST_MEMORY = -1,
+     VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
+     VK_ERROR_INITIALIZATION_FAILED = -3,
+@@ -439,17 +438,6 @@ typedef enum {
+ } VkPhysicalDeviceType;
+ typedef enum {
+-    VK_IMAGE_ASPECT_COLOR = 0,
+-    VK_IMAGE_ASPECT_DEPTH = 1,
+-    VK_IMAGE_ASPECT_STENCIL = 2,
+-    VK_IMAGE_ASPECT_METADATA = 3,
+-    VK_IMAGE_ASPECT_BEGIN_RANGE = VK_IMAGE_ASPECT_COLOR,
+-    VK_IMAGE_ASPECT_END_RANGE = VK_IMAGE_ASPECT_METADATA,
+-    VK_IMAGE_ASPECT_NUM = (VK_IMAGE_ASPECT_METADATA - VK_IMAGE_ASPECT_COLOR + 1),
+-    VK_IMAGE_ASPECT_MAX_ENUM = 0x7FFFFFFF
+-} VkImageAspect;
+-
+-typedef enum {
+     VK_QUERY_TYPE_OCCLUSION = 0,
+     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
+     VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
+@@ -511,19 +499,6 @@ typedef enum {
+ } VkChannelSwizzle;
+ typedef enum {
+-    VK_SHADER_STAGE_VERTEX = 0,
+-    VK_SHADER_STAGE_TESSELLATION_CONTROL = 1,
+-    VK_SHADER_STAGE_TESSELLATION_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_SHADER_STAGE_NUM = (VK_SHADER_STAGE_COMPUTE - VK_SHADER_STAGE_VERTEX + 1),
+-    VK_SHADER_STAGE_MAX_ENUM = 0x7FFFFFFF
+-} VkShaderStage;
+-
+-typedef enum {
+     VK_VERTEX_INPUT_STEP_RATE_VERTEX = 0,
+     VK_VERTEX_INPUT_STEP_RATE_INSTANCE = 1,
+     VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_STEP_RATE_VERTEX,
+@@ -905,6 +880,13 @@ typedef VkFlags VkMemoryHeapFlags;
+ typedef VkFlags VkMemoryMapFlags;
+ typedef enum {
++    VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
++    VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
++    VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
++    VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
++} VkImageAspectFlagBits;
++
++typedef enum {
+     VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT = 0x00000001,
+     VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+     VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT = 0x00000004,
+@@ -966,13 +948,6 @@ typedef enum {
+     VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+ } VkBufferCreateFlagBits;
+ typedef VkFlags VkBufferCreateFlags;
+-
+-typedef enum {
+-    VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
+-    VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
+-    VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
+-    VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
+-} VkImageAspectFlagBits;
+ typedef VkFlags VkImageAspectFlags;
+ typedef enum {
+@@ -984,6 +959,16 @@ typedef VkFlags VkShaderModuleCreateFlags;
+ typedef VkFlags VkShaderCreateFlags;
+ typedef enum {
++    VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
++    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
++    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
++    VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
++    VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
++    VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
++    VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
++} VkShaderStageFlagBits;
++
++typedef enum {
+     VK_CHANNEL_R_BIT = 0x00000001,
+     VK_CHANNEL_G_BIT = 0x00000002,
+     VK_CHANNEL_B_BIT = 0x00000004,
+@@ -997,16 +982,6 @@ typedef enum {
+     VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+ } VkPipelineCreateFlagBits;
+ typedef VkFlags VkPipelineCreateFlags;
+-
+-typedef enum {
+-    VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+-    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
+-    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+-    VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+-    VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+-    VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+-    VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+-} VkShaderStageFlagBits;
+ typedef VkFlags VkShaderStageFlags;
+ typedef enum {
+@@ -1071,13 +1046,11 @@ typedef VkFlags VkCmdPoolResetFlags;
+ typedef VkFlags VkCmdBufferCreateFlags;
+ typedef enum {
+-    VK_CMD_BUFFER_OPTIMIZE_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_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT = 0x00000010,
+-} VkCmdBufferOptimizeFlagBits;
+-typedef VkFlags VkCmdBufferOptimizeFlags;
++    VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
++    VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
++    VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
++} VkCmdBufferUsageFlagBits;
++typedef VkFlags VkCmdBufferUsageFlags;
+ typedef enum {
+     VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+@@ -1204,7 +1177,7 @@ typedef struct {
+ typedef struct {
+     VkExtent3D                                  maxExtent;
+     uint32_t                                    maxMipLevels;
+-    uint32_t                                    maxArraySize;
++    uint32_t                                    maxArrayLayers;
+     VkSampleCountFlags                          sampleCounts;
+     VkDeviceSize                                maxResourceSize;
+ } VkImageFormatProperties;
+@@ -1414,7 +1387,7 @@ typedef struct {
+ } VkMemoryRequirements;
+ typedef struct {
+-    VkImageAspect                               aspect;
++    VkImageAspectFlagBits                       aspect;
+     VkExtent3D                                  imageGranularity;
+     VkSparseImageFormatFlags                    flags;
+ } VkSparseImageFormatProperties;
+@@ -1436,7 +1409,7 @@ typedef struct {
+ } VkSparseMemoryBindInfo;
+ typedef struct {
+-    VkImageAspect                               aspect;
++    VkImageAspectFlagBits                       aspect;
+     uint32_t                                    mipLevel;
+     uint32_t                                    arrayLayer;
+ } VkImageSubresource;
+@@ -1509,7 +1482,7 @@ typedef struct {
+     VkFormat                                    format;
+     VkExtent3D                                  extent;
+     uint32_t                                    mipLevels;
+-    uint32_t                                    arraySize;
++    uint32_t                                    arrayLayers;
+     uint32_t                                    samples;
+     VkImageTiling                               tiling;
+     VkImageUsageFlags                           usage;
+@@ -1537,9 +1510,9 @@ typedef struct {
+ typedef struct {
+     VkImageAspectFlags                          aspectMask;
+     uint32_t                                    baseMipLevel;
+-    uint32_t                                    mipLevels;
++    uint32_t                                    numLevels;
+     uint32_t                                    baseArrayLayer;
+-    uint32_t                                    arraySize;
++    uint32_t                                    numLayers;
+ } VkImageSubresourceRange;
+ typedef struct {
+@@ -1567,7 +1540,7 @@ typedef struct {
+     VkShaderModule                              module;
+     const char*                                 pName;
+     VkShaderCreateFlags                         flags;
+-    VkShaderStage                               stage;
++    VkShaderStageFlagBits                       stage;
+ } VkShaderCreateInfo;
+ typedef struct {
+@@ -1594,7 +1567,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkShaderStage                               stage;
++    VkShaderStageFlagBits                       stage;
+     VkShader                                    shader;
+     const VkSpecializationInfo*                 pSpecializationInfo;
+ } VkPipelineShaderStageCreateInfo;
+@@ -1840,17 +1813,21 @@ typedef struct {
+ } VkDescriptorPoolCreateInfo;
+ typedef struct {
++    VkSampler                                   sampler;
++    VkImageView                                 imageView;
++    VkImageLayout                               imageLayout;
++} VkDescriptorImageInfo;
++
++typedef struct {
+     VkBuffer                                    buffer;
+     VkDeviceSize                                offset;
+     VkDeviceSize                                range;
+ } VkDescriptorBufferInfo;
+-typedef struct {
+-    VkBufferView                                bufferView;
+-    VkSampler                                   sampler;
+-    VkImageView                                 imageView;
+-    VkImageLayout                               imageLayout;
++typedef union {
++    VkDescriptorImageInfo                       imageInfo;
+     VkDescriptorBufferInfo                      bufferInfo;
++    VkBufferView                                texelBufferView;
+ } VkDescriptorInfo;
+ typedef struct {
+@@ -1962,7 +1939,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkCmdBufferOptimizeFlags                    flags;
++    VkCmdBufferUsageFlags                       flags;
+     VkRenderPass                                renderPass;
+     uint32_t                                    subpass;
+     VkFramebuffer                               framebuffer;
+@@ -1975,10 +1952,10 @@ typedef struct {
+ } VkBufferCopy;
+ typedef struct {
+-    VkImageAspect                               aspect;
++    VkImageAspectFlags                          aspect;
+     uint32_t                                    mipLevel;
+-    uint32_t                                    arrayLayer;
+-    uint32_t                                    arraySize;
++    uint32_t                                    baseArrayLayer;
++    uint32_t                                    numLayers;
+ } VkImageSubresourceCopy;
+ typedef struct {
+@@ -2030,9 +2007,10 @@ typedef struct {
+ } VkClearAttachment;
+ typedef struct {
+-    VkOffset3D                                  offset;
+-    VkExtent3D                                  extent;
+-} VkRect3D;
++    VkRect2D                                    rect;
++    uint32_t                                    baseArrayLayer;
++    uint32_t                                    numLayers;
++} VkClearRect;
+ typedef struct {
+     VkImageSubresourceCopy                      srcSubresource;
+@@ -2234,7 +2212,7 @@ typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer dest
+ typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
+ typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+ typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects);
++typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+ typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+ typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+@@ -2932,7 +2910,7 @@ void VKAPI vkCmdClearAttachments(
+     uint32_t                                    attachmentCount,
+     const VkClearAttachment*                    pAttachments,
+     uint32_t                                    rectCount,
+-    const VkRect3D*                             pRects);
++    const VkClearRect*                          pRects);
+ void VKAPI vkCmdResolveImage(
+     VkCmdBuffer                                 cmdBuffer,
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 2bf6aae..da3837e 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -682,7 +682,7 @@ void vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLa
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects) {
++void vkCmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
+     GetVtbl(cmdBuffer).CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
+ }
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 02d9515..70c0e33 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -421,7 +421,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         .format = VK_FORMAT_R8G8B8A8_UNORM,  // TODO(jessehall)
+         .extent = {0, 0, 1},
+         .mipLevels = 1,
+-        .arraySize = 1,
++        .arrayLayers = 1,
+         .samples = 1,
+         .tiling = VK_IMAGE_TILING_OPTIMAL,
+         .usage = create_info->imageUsageFlags,
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 2bef297..f07dfa7 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -473,12 +473,12 @@ VkResult CreateImage(VkDevice device,
+         ALOGE("CreateImage: not yet implemented: type=%d format=%d mips=%u",
+               create_info->imageType, create_info->format,
+               create_info->mipLevels);
+-        return VK_UNSUPPORTED;
++        return VK_ERROR_OUT_OF_HOST_MEMORY;
+     }
+     VkDeviceSize size =
+         VkDeviceSize(create_info->extent.width * create_info->extent.height) *
+-        create_info->arraySize * create_info->samples * 4u;
++        create_info->arrayLayers * create_info->samples * 4u;
+     ALOGW_IF(size > kMaxDeviceMemory,
+              "CreateImage: image size 0x%" PRIx64
+              " exceeds max device memory size 0x%" PRIx64,
+@@ -1003,7 +1003,7 @@ void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imag
+ void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+ }
+-void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects) {
++void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
+ }
+ void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index a1d1e05..655a414 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -154,7 +154,7 @@ void CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize de
+ void CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
+ void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+ void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects);
++void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+ void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+ void CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 50c3789..918df47 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -32,7 +32,6 @@ namespace {
+     switch (result) {
+         // clang-format off
+         case VK_SUCCESS: result_str = "VK_SUCCESS"; break;
+-        case VK_UNSUPPORTED: result_str = "VK_UNSUPPORTED"; break;
+         case VK_NOT_READY: result_str = "VK_NOT_READY"; break;
+         case VK_TIMEOUT: result_str = "VK_TIMEOUT"; break;
+         case VK_EVENT_SET: result_str = "VK_EVENT_SET"; break;
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0006-vulkan-Update-from-version-0.181.0-to-0.183.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0006-vulkan-Update-from-version-0.181.0-to-0.183.0.patch
new file mode 100644 (file)
index 0000000..7d7da37
--- /dev/null
@@ -0,0 +1,960 @@
+From 727d614d172fd03c033739b9a76873f9d46f8f5e Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Fri, 20 Nov 2015 14:17:03 -0800
+Subject: [PATCH 06/30] vulkan: Update from version 0.181.0 to 0.183.0
+
+Change-Id: I721bfc6891974e2bab7dce7e92e7884de360412a
+---
+ vulkan/api/vulkan.api              | 129 ++++++++++++++++++++-----------------
+ vulkan/include/vulkan/vulkan.h     | 105 ++++++++++++++----------------
+ vulkan/libvulkan/entry.cpp         |  16 ++---
+ vulkan/libvulkan/get_proc_addr.cpp |  20 +++---
+ vulkan/libvulkan/loader.cpp        |  31 ++++-----
+ vulkan/libvulkan/loader.h          |  10 +--
+ vulkan/nulldrv/null_driver.cpp     |  57 ++++++++++------
+ vulkan/nulldrv/null_driver.h       |   8 +--
+ vulkan/nulldrv/null_driver_gen.cpp |   4 +-
+ 9 files changed, 199 insertions(+), 181 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index fbd1d9d..175e353 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 181
++define VERSION_MINOR 183
+ define VERSION_PATCH 0
+ // API limits
+@@ -163,16 +163,6 @@ enum VkDescriptorType {
+     VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT                     = 0x0000000a,
+ }
+-enum VkDescriptorPoolUsage {
+-    VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT                       = 0x00000000,
+-    VK_DESCRIPTOR_POOL_USAGE_DYNAMIC                        = 0x00000001,
+-}
+-
+-enum VkDescriptorSetUsage {
+-    VK_DESCRIPTOR_SET_USAGE_ONE_SHOT                        = 0x00000000,
+-    VK_DESCRIPTOR_SET_USAGE_STATIC                          = 0x00000001,
+-}
+-
+ enum VkQueryType {
+     VK_QUERY_TYPE_OCCLUSION                                 = 0x00000000,
+     VK_QUERY_TYPE_PIPELINE_STATISTICS                       = 0x00000001, /// Optional
+@@ -539,7 +529,7 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 6,
+     VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 7,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 8,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO                    = 9,
++    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO                     = 9,
+     VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                         = 10,
+     VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 11,
+     VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 12,
+@@ -577,6 +567,7 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO                      = 44,
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 45,
+     VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 46,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 47,
+ }
+ enum VkRenderPassContents {
+@@ -741,6 +732,15 @@ bitfield VkShaderStageFlags {
+     VK_SHADER_STAGE_ALL                                     = 0x7FFFFFFF,
+ }
++/// Descriptor pool create flags
++bitfield VkDescriptorPoolCreateFlags {
++    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT       = 0x00000001,
++}
++
++/// Descriptor pool reset flags
++bitfield VkDescriptorPoolResetFlags {
++}
++
+ /// Image usage flags
+ bitfield VkImageUsageFlags {
+     VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT                      = 0x00000001,    /// Can be used as a source of transfer operations
+@@ -834,10 +834,6 @@ bitfield VkShaderCreateFlags {
+ bitfield VkEventCreateFlags {
+ }
+-/// Command buffer creation flags
+-bitfield VkCmdBufferCreateFlags {
+-}
+-
+ /// Command buffer usage flags
+ bitfield VkCmdBufferUsageFlags {
+     VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT                 = 0x00000001,
+@@ -1069,6 +1065,7 @@ class VkDeviceQueueCreateInfo {
+     const void*                                 pNext                     /// Pointer to next structure
+     u32                                         queueFamilyIndex
+     u32                                         queueCount
++    const f32*                                  pQueuePriorities
+ }
+ class VkDeviceCreateInfo {
+@@ -1178,13 +1175,6 @@ class VkDescriptorBufferInfo {
+     VkDeviceSize                                range                      /// Size in bytes of the buffer resource for this descriptor update.
+ }
+-@union
+-class VkDescriptorInfo {
+-    VkDescriptorImageInfo                       imageInfo
+-    VkDescriptorBufferInfo                      bufferInfo                 /// Raw buffer, size and offset for UNIFORM_BUFFER[_DYNAMIC] or STORAGE_BUFFER[_DYNAMIC] descriptor types. Ignored otherwise.
+-    VkBufferView                                texelBufferView
+-}
+-
+ class VkWriteDescriptorSet {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
+     const void*                                 pNext                      /// Pointer to next structure
+@@ -1193,7 +1183,9 @@ class VkWriteDescriptorSet {
+     u32                                         destArrayElement           /// Array element within the destination binding to write
+     u32                                         count                      /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
+     VkDescriptorType                            descriptorType             /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
+-    const VkDescriptorInfo*                     pDescriptors               /// Array of info structures describing the descriptors to write
++    const VkDescriptorImageInfo*                pImageInfo
++    const VkDescriptorBufferInfo*               pBufferInfo
++    const VkBufferView*                         pTexelBufferView
+ }
+ class VkCopyDescriptorSet {
+@@ -1413,12 +1405,20 @@ class VkDescriptorTypeCount {
+ class VkDescriptorPoolCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+-    VkDescriptorPoolUsage                       poolUsage
++    VkDescriptorPoolCreateFlags                 flags
+     u32                                         maxSets
+     u32                                         count
+     const VkDescriptorTypeCount*                pTypeCount
+ }
++class VkDescriptorSetAllocInfo {
++    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
++    const void*                                 pNext              /// Pointer to next structure
++    VkDescriptorPool                            descriptorPool
++    u32                                         count
++    const VkDescriptorSetLayout*                pSetLayouts
++}
++
+ class VkSpecializationMapEntry {
+     u32                                         constantId         /// The SpecConstant ID specified in the BIL
+     platform.size_t                             size               /// Size in bytes of the SpecConstant
+@@ -1643,12 +1643,12 @@ class VkCmdPoolCreateInfo {
+     VkCmdPoolCreateFlags                        flags            /// Command pool creation flags
+ }
+-class VkCmdBufferCreateInfo {
+-    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
++class VkCmdBufferAllocInfo {
++    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO
+     const void*                                 pNext      /// Pointer to next structure
+     VkCmdPool                                   cmdPool
+     VkCmdBufferLevel                            level
+-    VkCmdBufferCreateFlags                      flags      /// Command buffer creation flags
++    u32                                         count
+ }
+ class VkCmdBufferBeginInfo {
+@@ -1782,6 +1782,9 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    depthBounds                               /// depth bounds test
+     VkBool32                                    wideLines                                 /// lines with width greater than 1
+     VkBool32                                    largePoints                               /// points with size greater than 1
++    VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
++    VkBool32                                    multiViewport
++    VkBool32                                    samplerAnisotropy
+     VkBool32                                    textureCompressionETC2                    /// ETC texture compression formats
+     VkBool32                                    textureCompressionASTC_LDR                /// ASTC LDR texture compression formats
+     VkBool32                                    textureCompressionBC                      /// BC1-7 texture compressed formats
+@@ -1807,7 +1810,6 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    shaderInt16                               /// 16-bit integers in shaders
+     VkBool32                                    shaderResourceResidency                   /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
+     VkBool32                                    shaderResourceMinLOD                      /// shader can use texture operations that specify minimum resource LOD
+-    VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
+     VkBool32                                    sparseBinding                             /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
+     VkBool32                                    sparseResidencyBuffer                     /// Sparse resources support: GPU can access partially resident buffers
+     VkBool32                                    sparseResidencyImage2D                    /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
+@@ -1828,8 +1830,8 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxImageArrayLayers                       /// max layers for image arrays
+     VkSampleCountFlags                          sampleCounts                              /// sample counts supported for all images supporting rendering and sampling
+     u32                                         maxTexelBufferSize                        /// max texel buffer size (bytes)
+-    u32                                         maxUniformBufferSize                      /// max uniform buffer size (bytes)
+-    u32                                         maxStorageBufferSize                      /// max storage buffer size (bytes)
++    u32                                         maxUniformBufferRange                     /// max uniform buffer size (bytes)
++    u32                                         maxStorageBufferRange                     /// max storage buffer size (bytes)
+     u32                                         maxPushConstantsSize                      /// max size of the push constants pool (bytes)
+     /// memory limits
+     u32                                         maxMemoryAllocationCount                  /// max number of device memory allocations supported
+@@ -1837,7 +1839,6 @@ class VkPhysicalDeviceLimits {
+     VkDeviceSize                                sparseAddressSpaceSize                    /// Total address space available for sparse allocations (bytes)
+     /// descriptor set limits
+     u32                                         maxBoundDescriptorSets                    /// max number of descriptors sets that can be bound to a pipeline
+-    u32                                         maxDescriptorSets                         /// max number of allocated descriptor sets
+     u32                                         maxPerStageDescriptorSamplers             /// max num of samplers allowed per-stage in a descriptor set
+     u32                                         maxPerStageDescriptorUniformBuffers       /// max num of uniform buffers allowed per-stage in a descriptor set
+     u32                                         maxPerStageDescriptorStorageBuffers       /// max num of storage buffers allowed per-stage in a descriptor set
+@@ -1873,8 +1874,8 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxGeometryTotalOutputComponents          /// max total num of components (all vertices) written in geometry stage
+     /// fragment stage limits
+     u32                                         maxFragmentInputComponents                /// max num of input compontents read in fragment stage
+-    u32                                         maxFragmentOutputBuffers                  /// max num of output buffers written in fragment stage
+-    u32                                         maxFragmentDualSourceBuffers              /// max num of output buffers written when using dual source blending
++    u32                                         maxFragmentOutputAttachments              /// max num of output attachments written in fragment stage
++    u32                                         maxFragmentDualSourceAttachments          /// max num of output attachments written when using dual source blending
+     u32                                         maxFragmentCombinedOutputResources        /// max total num of storage buffers, storage images and output buffers
+     /// compute stage limits
+     u32                                         maxComputeSharedMemorySize                /// max total storage size of work group local storage (bytes)
+@@ -1903,9 +1904,9 @@ class VkPhysicalDeviceLimits {
+     u32                                         minUniformBufferOffsetAlignment           /// min required alignment for uniform buffer sizes and offsets (bytes)
+     u32                                         minStorageBufferOffsetAlignment           /// min required alignment for storage buffer offsets (bytes)
+-    u32                                         minTexelOffset                            /// min texel offset for OpTextureSampleOffset
++    s32                                         minTexelOffset                            /// min texel offset for OpTextureSampleOffset
+     u32                                         maxTexelOffset                            /// max texel offset for OpTextureSampleOffset
+-    u32                                         minTexelGatherOffset                      /// min texel offset for OpTextureGatherOffset
++    s32                                         minTexelGatherOffset                      /// min texel offset for OpTextureGatherOffset
+     u32                                         maxTexelGatherOffset                      /// max texel offset for OpTextureGatherOffset
+     f32                                         minInterpolationOffset                    /// furthest negative offset for interpolateAtOffset
+     f32                                         maxInterpolationOffset                    /// furthest positive offset for interpolateAtOffset
+@@ -1931,6 +1932,8 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxCullDistances                          /// max number of cull distances
+     u32                                         maxCombinedClipAndCullDistances           /// max combined number of user clipping
++    u32                                         discreteQueuePriorities
++
+     f32[2]                                      pointSizeRange                            /// range (min,max) of supported point sizes
+     f32[2]                                      lineWidthRange                            /// range (min,max) of supported line widths
+     f32                                         pointSizeGranularity                      /// granularity of supported point sizes
+@@ -3294,7 +3297,8 @@ cmd void vkDestroyDescriptorPool(
+ @threadSafety("app")
+ cmd VkResult vkResetDescriptorPool(
+         VkDevice                                    device,
+-        VkDescriptorPool                            descriptorPool) {
++        VkDescriptorPool                            descriptorPool,
++        VkDescriptorPoolResetFlags                  flags) {
+     deviceObject := GetDevice(device)
+     descriptorPoolObject := GetDescriptorPool(descriptorPool)
+     assert(descriptorPoolObject.device == device)
+@@ -3305,23 +3309,21 @@ cmd VkResult vkResetDescriptorPool(
+ @threadSafety("app")
+ cmd VkResult vkAllocDescriptorSets(
+         VkDevice                                    device,
+-        VkDescriptorPool                            descriptorPool,
+-        VkDescriptorSetUsage                        setUsage,
+-        u32                                         count,
+-        const VkDescriptorSetLayout*                pSetLayouts,
++        const VkDescriptorSetAllocInfo*             pAllocInfo,
+         VkDescriptorSet*                            pDescriptorSets) {
+     deviceObject := GetDevice(device)
+-    descriptorPoolObject := GetDescriptorPool(descriptorPool)
++    allocInfo := pAllocInfo[0]
++    descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
+-    setLayouts := pSetLayouts[0:count]
+-    for i in (0 .. count) {
++    setLayouts := allocInfo.pSetLayouts[0:allocInfo.count]
++    for i in (0 .. allocInfo.count) {
+         setLayout := setLayouts[i]
+         setLayoutObject := GetDescriptorSetLayout(setLayout)
+         assert(setLayoutObject.device == device)
+     }
+-    descriptorSets := pDescriptorSets[0:count]
+-    for i in (0 .. count) {
++    descriptorSets := pDescriptorSets[0:allocInfo.count]
++    for i in (0 .. allocInfo.count) {
+         descriptorSet := ?
+         descriptorSets[i] = descriptorSet
+         State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
+@@ -3497,29 +3499,38 @@ macro void unbindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
+ }
+ @threadSafety("system")
+-cmd VkResult vkCreateCommandBuffer(
++cmd VkResult vkAllocCommandBuffers(
+         VkDevice                                    device,
+-        const VkCmdBufferCreateInfo*                pCreateInfo,
+-        VkCmdBuffer*                                pCmdBuffer) {
+-    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
++        const VkCmdBufferAllocInfo*                 pAllocInfo,
++        VkCmdBuffer*                                pCmdBuffers) {
++    assert(pAllocInfo[0].sType == VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
+-    cmdBuffer := ?
+-    pCmdBuffer[0] = cmdBuffer
+-    State.CmdBuffers[cmdBuffer] = new!CmdBufferObject(device: device)
++    count := pAllocInfo[0].count
++    cmdBuffers := pCmdBuffers[0:count]
++    for i in (0 .. count) {
++        cmdBuffer := ?
++        cmdBuffers[i] = cmdBuffer
++        State.CmdBuffers[cmdBuffer] = new!CmdBufferObject(device: device)
++    }
+     return ?
+ }
+ @threadSafety("system")
+-cmd void vkDestroyCommandBuffer(
++cmd void vkFreeCommandBuffers(
+         VkDevice                                    device,
+-        VkCmdBuffer                                 commandBuffer) {
++        VkCmdPool                                   cmdPool,
++        u32                                         count,
++        const VkCmdBuffer*                          pCommandBuffers) {
+     deviceObject := GetDevice(device)
+-    cmdBufferObject := GetCmdBuffer(commandBuffer)
+-    assert(cmdBufferObject.device == device)
+-    // TODO: iterate over boundObjects and clear memory bindings
+-    State.CmdBuffers[commandBuffer] = null
++    cmdBuffers := pCommandBuffers[0:count]
++    for i in (0 .. count) {
++        cmdBufferObject := GetCmdBuffer(cmdBuffers[i])
++        assert(cmdBufferObject.device == device)
++        // TODO: iterate over boundObjects and clear memory bindings
++        State.CmdBuffers[cmdBuffers[i]] = null
++    }
+ }
+ @threadSafety("app")
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 475ebec..d6eb918 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 181, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 183, 0)
+ #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+@@ -169,7 +169,7 @@ typedef enum {
+     VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6,
+     VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 9,
++    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 9,
+     VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+     VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11,
+     VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12,
+@@ -207,9 +207,10 @@ typedef enum {
+     VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44,
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
+     VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 47,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+-    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
+-    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
++    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO,
++    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+@@ -725,24 +726,6 @@ typedef enum {
+ } VkDescriptorType;
+ typedef enum {
+-    VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT = 0,
+-    VK_DESCRIPTOR_POOL_USAGE_DYNAMIC = 1,
+-    VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE = VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT,
+-    VK_DESCRIPTOR_POOL_USAGE_END_RANGE = VK_DESCRIPTOR_POOL_USAGE_DYNAMIC,
+-    VK_DESCRIPTOR_POOL_USAGE_NUM = (VK_DESCRIPTOR_POOL_USAGE_DYNAMIC - VK_DESCRIPTOR_POOL_USAGE_ONE_SHOT + 1),
+-    VK_DESCRIPTOR_POOL_USAGE_MAX_ENUM = 0x7FFFFFFF
+-} VkDescriptorPoolUsage;
+-
+-typedef enum {
+-    VK_DESCRIPTOR_SET_USAGE_ONE_SHOT = 0,
+-    VK_DESCRIPTOR_SET_USAGE_STATIC = 1,
+-    VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE = VK_DESCRIPTOR_SET_USAGE_ONE_SHOT,
+-    VK_DESCRIPTOR_SET_USAGE_END_RANGE = VK_DESCRIPTOR_SET_USAGE_STATIC,
+-    VK_DESCRIPTOR_SET_USAGE_NUM = (VK_DESCRIPTOR_SET_USAGE_STATIC - VK_DESCRIPTOR_SET_USAGE_ONE_SHOT + 1),
+-    VK_DESCRIPTOR_SET_USAGE_MAX_ENUM = 0x7FFFFFFF
+-} VkDescriptorSetUsage;
+-
+-typedef enum {
+     VK_ATTACHMENT_LOAD_OP_LOAD = 0,
+     VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
+     VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+@@ -985,6 +968,12 @@ typedef VkFlags VkPipelineCreateFlags;
+ typedef VkFlags VkShaderStageFlags;
+ typedef enum {
++    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
++} VkDescriptorPoolCreateFlagBits;
++typedef VkFlags VkDescriptorPoolCreateFlags;
++typedef VkFlags VkDescriptorPoolResetFlags;
++
++typedef enum {
+     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+ } VkAttachmentDescriptionFlagBits;
+ typedef VkFlags VkAttachmentDescriptionFlags;
+@@ -1043,7 +1032,6 @@ typedef enum {
+     VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+ } VkCmdPoolResetFlagBits;
+ typedef VkFlags VkCmdPoolResetFlags;
+-typedef VkFlags VkCmdBufferCreateFlags;
+ typedef enum {
+     VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+@@ -1125,6 +1113,9 @@ typedef struct {
+     VkBool32                                    depthBounds;
+     VkBool32                                    wideLines;
+     VkBool32                                    largePoints;
++    VkBool32                                    alphaToOne;
++    VkBool32                                    multiViewport;
++    VkBool32                                    samplerAnisotropy;
+     VkBool32                                    textureCompressionETC2;
+     VkBool32                                    textureCompressionASTC_LDR;
+     VkBool32                                    textureCompressionBC;
+@@ -1150,7 +1141,6 @@ typedef struct {
+     VkBool32                                    shaderInt16;
+     VkBool32                                    shaderResourceResidency;
+     VkBool32                                    shaderResourceMinLOD;
+-    VkBool32                                    alphaToOne;
+     VkBool32                                    sparseBinding;
+     VkBool32                                    sparseResidencyBuffer;
+     VkBool32                                    sparseResidencyImage2D;
+@@ -1190,14 +1180,13 @@ typedef struct {
+     uint32_t                                    maxImageArrayLayers;
+     VkSampleCountFlags                          sampleCounts;
+     uint32_t                                    maxTexelBufferSize;
+-    uint32_t                                    maxUniformBufferSize;
+-    uint32_t                                    maxStorageBufferSize;
++    uint32_t                                    maxUniformBufferRange;
++    uint32_t                                    maxStorageBufferRange;
+     uint32_t                                    maxPushConstantsSize;
+     uint32_t                                    maxMemoryAllocationCount;
+     VkDeviceSize                                bufferImageGranularity;
+     VkDeviceSize                                sparseAddressSpaceSize;
+     uint32_t                                    maxBoundDescriptorSets;
+-    uint32_t                                    maxDescriptorSets;
+     uint32_t                                    maxPerStageDescriptorSamplers;
+     uint32_t                                    maxPerStageDescriptorUniformBuffers;
+     uint32_t                                    maxPerStageDescriptorStorageBuffers;
+@@ -1229,8 +1218,8 @@ typedef struct {
+     uint32_t                                    maxGeometryOutputVertices;
+     uint32_t                                    maxGeometryTotalOutputComponents;
+     uint32_t                                    maxFragmentInputComponents;
+-    uint32_t                                    maxFragmentOutputBuffers;
+-    uint32_t                                    maxFragmentDualSourceBuffers;
++    uint32_t                                    maxFragmentOutputAttachments;
++    uint32_t                                    maxFragmentDualSourceAttachments;
+     uint32_t                                    maxFragmentCombinedOutputResources;
+     uint32_t                                    maxComputeSharedMemorySize;
+     uint32_t                                    maxComputeWorkGroupCount[3];
+@@ -1252,9 +1241,9 @@ typedef struct {
+     uint32_t                                    minTexelBufferOffsetAlignment;
+     uint32_t                                    minUniformBufferOffsetAlignment;
+     uint32_t                                    minStorageBufferOffsetAlignment;
+-    uint32_t                                    minTexelOffset;
++    int32_t                                     minTexelOffset;
+     uint32_t                                    maxTexelOffset;
+-    uint32_t                                    minTexelGatherOffset;
++    int32_t                                     minTexelGatherOffset;
+     uint32_t                                    maxTexelGatherOffset;
+     float                                       minInterpolationOffset;
+     float                                       maxInterpolationOffset;
+@@ -1275,6 +1264,7 @@ typedef struct {
+     uint32_t                                    maxClipDistances;
+     uint32_t                                    maxCullDistances;
+     uint32_t                                    maxCombinedClipAndCullDistances;
++    uint32_t                                    discreteQueuePriorities;
+     float                                       pointSizeRange[2];
+     float                                       lineWidthRange[2];
+     float                                       pointSizeGranularity;
+@@ -1330,6 +1320,7 @@ typedef struct {
+     const void*                                 pNext;
+     uint32_t                                    queueFamilyIndex;
+     uint32_t                                    queueCount;
++    const float*                                pQueuePriorities;
+ } VkDeviceQueueCreateInfo;
+ typedef struct {
+@@ -1806,13 +1797,21 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkDescriptorPoolUsage                       poolUsage;
++    VkDescriptorPoolCreateFlags                 flags;
+     uint32_t                                    maxSets;
+     uint32_t                                    count;
+     const VkDescriptorTypeCount*                pTypeCount;
+ } VkDescriptorPoolCreateInfo;
+ typedef struct {
++    VkStructureType                             sType;
++    const void*                                 pNext;
++    VkDescriptorPool                            descriptorPool;
++    uint32_t                                    count;
++    const VkDescriptorSetLayout*                pSetLayouts;
++} VkDescriptorSetAllocInfo;
++
++typedef struct {
+     VkSampler                                   sampler;
+     VkImageView                                 imageView;
+     VkImageLayout                               imageLayout;
+@@ -1824,12 +1823,6 @@ typedef struct {
+     VkDeviceSize                                range;
+ } VkDescriptorBufferInfo;
+-typedef union {
+-    VkDescriptorImageInfo                       imageInfo;
+-    VkDescriptorBufferInfo                      bufferInfo;
+-    VkBufferView                                texelBufferView;
+-} VkDescriptorInfo;
+-
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+@@ -1838,7 +1831,9 @@ typedef struct {
+     uint32_t                                    destArrayElement;
+     uint32_t                                    count;
+     VkDescriptorType                            descriptorType;
+-    const VkDescriptorInfo*                     pDescriptors;
++    const VkDescriptorImageInfo*                pImageInfo;
++    const VkDescriptorBufferInfo*               pBufferInfo;
++    const VkBufferView*                         pTexelBufferView;
+ } VkWriteDescriptorSet;
+ typedef struct {
+@@ -1933,8 +1928,8 @@ typedef struct {
+     const void*                                 pNext;
+     VkCmdPool                                   cmdPool;
+     VkCmdBufferLevel                            level;
+-    VkCmdBufferCreateFlags                      flags;
+-} VkCmdBufferCreateInfo;
++    uint32_t                                    count;
++} VkCmdBufferAllocInfo;
+ typedef struct {
+     VkStructureType                             sType;
+@@ -2167,8 +2162,8 @@ typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const
+ typedef void (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout);
+ typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
+ typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
+-typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
+-typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets);
++typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
++typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+ typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
+ typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+ typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer);
+@@ -2179,8 +2174,8 @@ typedef void (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPa
+ typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
+ typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool);
+ typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+-typedef VkResult (VKAPI *PFN_vkCreateCommandBuffer)(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer);
+-typedef void (VKAPI *PFN_vkDestroyCommandBuffer)(VkDevice device, VkCmdBuffer commandBuffer);
++typedef VkResult (VKAPI *PFN_vkAllocCommandBuffers)(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers);
++typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers);
+ typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo);
+ typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer);
+ typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
+@@ -2641,14 +2636,12 @@ void VKAPI vkDestroyDescriptorPool(
+ VkResult VKAPI vkResetDescriptorPool(
+     VkDevice                                    device,
+-    VkDescriptorPool                            descriptorPool);
++    VkDescriptorPool                            descriptorPool,
++    VkDescriptorPoolResetFlags                  flags);
+ VkResult VKAPI vkAllocDescriptorSets(
+     VkDevice                                    device,
+-    VkDescriptorPool                            descriptorPool,
+-    VkDescriptorSetUsage                        setUsage,
+-    uint32_t                                    count,
+-    const VkDescriptorSetLayout*                pSetLayouts,
++    const VkDescriptorSetAllocInfo*             pAllocInfo,
+     VkDescriptorSet*                            pDescriptorSets);
+ VkResult VKAPI vkFreeDescriptorSets(
+@@ -2701,14 +2694,16 @@ VkResult VKAPI vkResetCommandPool(
+     VkCmdPool                                   cmdPool,
+     VkCmdPoolResetFlags                         flags);
+-VkResult VKAPI vkCreateCommandBuffer(
++VkResult VKAPI vkAllocCommandBuffers(
+     VkDevice                                    device,
+-    const VkCmdBufferCreateInfo*                pCreateInfo,
+-    VkCmdBuffer*                                pCmdBuffer);
++    const VkCmdBufferAllocInfo*                 pAllocInfo,
++    VkCmdBuffer*                                pCmdBuffers);
+-void VKAPI vkDestroyCommandBuffer(
++void VKAPI vkFreeCommandBuffers(
+     VkDevice                                    device,
+-    VkCmdBuffer                                 commandBuffer);
++    VkCmdPool                                   cmdPool,
++    uint32_t                                    count,
++    const VkCmdBuffer*                          pCommandBuffers);
+ VkResult VKAPI vkBeginCommandBuffer(
+     VkCmdBuffer                                 cmdBuffer,
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index da3837e..0af3bc8 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -457,13 +457,13 @@ void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
+-    return GetVtbl(device).ResetDescriptorPool(device, descriptorPool);
++VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
++    return GetVtbl(device).ResetDescriptorPool(device, descriptorPool, flags);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets) {
+-    return GetVtbl(device).AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
++VkResult vkAllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets) {
++    return GetVtbl(device).AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
+ }
+ __attribute__((visibility("default")))
+@@ -517,13 +517,13 @@ VkResult vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFl
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer) {
+-    return vulkan::CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
++VkResult vkAllocCommandBuffers(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers) {
++    return GetVtbl(device).AllocCommandBuffers(device, pAllocInfo, pCmdBuffers);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer commandBuffer) {
+-    GetVtbl(device).DestroyCommandBuffer(device, commandBuffer);
++void vkFreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers) {
++    GetVtbl(device).FreeCommandBuffers(device, cmdPool, count, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index bd16ac5..b9bd689 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -69,6 +69,7 @@ const NameProcEntry kInstanceProcTbl[] = {
+ const NameProcEntry kDeviceProcTbl[] = {
+     // clang-format off
+     {"vkAcquireNextImageKHR", reinterpret_cast<PFN_vkVoidFunction>(vkAcquireNextImageKHR)},
++    {"vkAllocCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkAllocCommandBuffers)},
+     {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocDescriptorSets)},
+     {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocMemory)},
+     {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkBeginCommandBuffer)},
+@@ -120,7 +121,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
+     {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
+     {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
+-    {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandBuffer)},
+     {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandPool)},
+     {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
+     {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
+@@ -142,7 +142,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR)},
+     {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
+     {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
+-    {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandBuffer)},
+     {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandPool)},
+     {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
+     {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
+@@ -165,6 +164,7 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
+     {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkEndCommandBuffer)},
+     {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkFlushMappedMemoryRanges)},
++    {"vkFreeCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkFreeCommandBuffers)},
+     {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkFreeDescriptorSets)},
+     {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(vkFreeMemory)},
+     {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetBufferMemoryRequirements)},
+@@ -229,6 +229,7 @@ const NameOffsetEntry kInstanceOffsetTbl[] = {
+ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     // clang-format off
+     {"vkAcquireNextImageKHR", offsetof(DeviceVtbl, AcquireNextImageKHR)},
++    {"vkAllocCommandBuffers", offsetof(DeviceVtbl, AllocCommandBuffers)},
+     {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
+     {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
+     {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
+@@ -280,7 +281,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
+     {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
+     {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
+-    {"vkCreateCommandBuffer", offsetof(DeviceVtbl, CreateCommandBuffer)},
+     {"vkCreateCommandPool", offsetof(DeviceVtbl, CreateCommandPool)},
+     {"vkCreateComputePipelines", offsetof(DeviceVtbl, CreateComputePipelines)},
+     {"vkCreateDescriptorPool", offsetof(DeviceVtbl, CreateDescriptorPool)},
+@@ -302,7 +302,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkCreateSwapchainKHR", offsetof(DeviceVtbl, CreateSwapchainKHR)},
+     {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
+     {"vkDestroyBufferView", offsetof(DeviceVtbl, DestroyBufferView)},
+-    {"vkDestroyCommandBuffer", offsetof(DeviceVtbl, DestroyCommandBuffer)},
+     {"vkDestroyCommandPool", offsetof(DeviceVtbl, DestroyCommandPool)},
+     {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
+     {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
+@@ -325,6 +324,7 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
+     {"vkEndCommandBuffer", offsetof(DeviceVtbl, EndCommandBuffer)},
+     {"vkFlushMappedMemoryRanges", offsetof(DeviceVtbl, FlushMappedMemoryRanges)},
++    {"vkFreeCommandBuffers", offsetof(DeviceVtbl, FreeCommandBuffers)},
+     {"vkFreeDescriptorSets", offsetof(DeviceVtbl, FreeDescriptorSets)},
+     {"vkFreeMemory", offsetof(DeviceVtbl, FreeMemory)},
+     {"vkGetBufferMemoryRequirements", offsetof(DeviceVtbl, GetBufferMemoryRequirements)},
+@@ -896,14 +896,14 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkResetCommandPool");
+         success = false;
+     }
+-    vtbl.CreateCommandBuffer = reinterpret_cast<PFN_vkCreateCommandBuffer>(get_proc_addr(device, "vkCreateCommandBuffer"));
+-    if (UNLIKELY(!vtbl.CreateCommandBuffer)) {
+-        ALOGE("missing device proc: %s", "vkCreateCommandBuffer");
++    vtbl.AllocCommandBuffers = reinterpret_cast<PFN_vkAllocCommandBuffers>(get_proc_addr(device, "vkAllocCommandBuffers"));
++    if (UNLIKELY(!vtbl.AllocCommandBuffers)) {
++        ALOGE("missing device proc: %s", "vkAllocCommandBuffers");
+         success = false;
+     }
+-    vtbl.DestroyCommandBuffer = reinterpret_cast<PFN_vkDestroyCommandBuffer>(get_proc_addr(device, "vkDestroyCommandBuffer"));
+-    if (UNLIKELY(!vtbl.DestroyCommandBuffer)) {
+-        ALOGE("missing device proc: %s", "vkDestroyCommandBuffer");
++    vtbl.FreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(get_proc_addr(device, "vkFreeCommandBuffers"));
++    if (UNLIKELY(!vtbl.FreeCommandBuffers)) {
++        ALOGE("missing device proc: %s", "vkFreeCommandBuffers");
+         success = false;
+     }
+     vtbl.BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(get_proc_addr(device, "vkBeginCommandBuffer"));
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index ba2f5cf..c427918 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -1047,8 +1047,8 @@ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* name) {
+     if (strcmp(name, "vkGetDeviceQueue") == 0) {
+         return reinterpret_cast<PFN_vkVoidFunction>(GetDeviceQueue);
+     }
+-    if (strcmp(name, "vkCreateCommandBuffer") == 0) {
+-        return reinterpret_cast<PFN_vkVoidFunction>(CreateCommandBuffer);
++    if (strcmp(name, "vkAllocCommandBuffers") == 0) {
++        return reinterpret_cast<PFN_vkVoidFunction>(AllocCommandBuffers);
+     }
+     if (strcmp(name, "vkDestroyDevice") == 0) {
+         return reinterpret_cast<PFN_vkVoidFunction>(DestroyDevice);
+@@ -1072,24 +1072,21 @@ void GetDeviceQueue(VkDevice drv_device,
+     *out_queue = queue;
+ }
+-VkResult CreateCommandBuffer(VkDevice drv_device,
+-                             const VkCmdBufferCreateInfo* create_info,
+-                             VkCmdBuffer* out_cmdbuf) {
+-    const DeviceVtbl* vtbl = GetVtbl(drv_device);
+-    VkCmdBuffer cmdbuf;
+-    VkResult result =
+-        vtbl->CreateCommandBuffer(drv_device, create_info, &cmdbuf);
++VkResult AllocCommandBuffers(VkDevice device,
++                             const VkCmdBufferAllocInfo* alloc_info,
++                             VkCmdBuffer* cmdbuffers) {
++    const DeviceVtbl* vtbl = GetVtbl(device);
++    VkResult result = vtbl->AllocCommandBuffers(device, alloc_info, cmdbuffers);
+     if (result != VK_SUCCESS)
+         return result;
+-    hwvulkan_dispatch_t* dispatch =
+-        reinterpret_cast<hwvulkan_dispatch_t*>(cmdbuf);
+-    if (dispatch->magic != HWVULKAN_DISPATCH_MAGIC) {
+-        ALOGE("invalid VkCmdBuffer dispatch magic: 0x%" PRIxPTR,
+-              dispatch->magic);
+-        return VK_ERROR_INITIALIZATION_FAILED;
++    for (uint32_t i = 0; i < alloc_info->count; i++) {
++        hwvulkan_dispatch_t* dispatch =
++            reinterpret_cast<hwvulkan_dispatch_t*>(cmdbuffers[i]);
++        ALOGE_IF(dispatch->magic != HWVULKAN_DISPATCH_MAGIC,
++                 "invalid VkCmdBuffer dispatch magic: 0x%" PRIxPTR,
++                 dispatch->magic);
++        dispatch->vtbl = vtbl;
+     }
+-    dispatch->vtbl = vtbl;
+-    *out_cmdbuf = cmdbuf;
+     return VK_SUCCESS;
+ }
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index fcaec61..5e0a6c9 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -131,8 +131,8 @@ struct DeviceVtbl {
+     PFN_vkCreateCommandPool CreateCommandPool;
+     PFN_vkDestroyCommandPool DestroyCommandPool;
+     PFN_vkResetCommandPool ResetCommandPool;
+-    PFN_vkCreateCommandBuffer CreateCommandBuffer;
+-    PFN_vkDestroyCommandBuffer DestroyCommandBuffer;
++    PFN_vkAllocCommandBuffers AllocCommandBuffers;
++    PFN_vkFreeCommandBuffers FreeCommandBuffers;
+     PFN_vkQueueSubmit QueueSubmit;
+     PFN_vkQueueWaitIdle QueueWaitIdle;
+@@ -225,9 +225,9 @@ void GetDeviceQueue(VkDevice drv_device,
+                     uint32_t family,
+                     uint32_t index,
+                     VkQueue* out_queue);
+-VkResult CreateCommandBuffer(VkDevice device,
+-                             const VkCmdBufferCreateInfo* create_info,
+-                             VkCmdBuffer* out_cmdbuf);
++VkResult AllocCommandBuffers(VkDevice device,
++                             const VkCmdBufferAllocInfo* alloc_info,
++                             VkCmdBuffer* cmdbuffers);
+ VkResult DestroyDevice(VkDevice drv_device);
+ void* AllocDeviceMem(VkDevice device,
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index f07dfa7..7e890be 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -339,23 +339,41 @@ void GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
+ // -----------------------------------------------------------------------------
+ // CmdBuffer
+-VkResult CreateCommandBuffer(VkDevice device,
+-                             const VkCmdBufferCreateInfo*,
+-                             VkCmdBuffer* out_cmdbuf) {
++VkResult AllocCommandBuffers(VkDevice device,
++                             const VkCmdBufferAllocInfo* alloc_info,
++                             VkCmdBuffer* cmdbufs) {
++    VkResult result = VK_SUCCESS;
+     const VkAllocCallbacks* alloc = device->instance->alloc;
+-    VkCmdBuffer_T* cmdbuf = static_cast<VkCmdBuffer_T*>(alloc->pfnAlloc(
+-        alloc->pUserData, sizeof(VkCmdBuffer_T), alignof(VkCmdBuffer_T),
+-        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
+-    if (!cmdbuf)
+-        return VK_ERROR_OUT_OF_HOST_MEMORY;
+-    cmdbuf->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
+-    *out_cmdbuf = cmdbuf;
+-    return VK_SUCCESS;
++
++    std::fill(cmdbufs, cmdbufs + alloc_info->count, nullptr);
++    for (uint32_t i = 0; i < alloc_info->count; i++) {
++        cmdbufs[i] = static_cast<VkCmdBuffer_T*>(alloc->pfnAlloc(
++            alloc->pUserData, sizeof(VkCmdBuffer_T), alignof(VkCmdBuffer_T),
++            VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++        if (!cmdbufs[i]) {
++            result = VK_ERROR_OUT_OF_HOST_MEMORY;
++            break;
++        }
++        cmdbufs[i]->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
++    }
++    if (result != VK_SUCCESS) {
++        for (uint32_t i = 0; i < alloc_info->count; i++) {
++            if (!cmdbufs[i])
++                break;
++            alloc->pfnFree(alloc->pUserData, cmdbufs[i]);
++        }
++    }
++
++    return result;
+ }
+-void DestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdbuf) {
++void FreeCommandBuffers(VkDevice device,
++                        VkCmdPool,
++                        uint32_t count,
++                        const VkCmdBuffer* cmdbufs) {
+     const VkAllocCallbacks* alloc = device->instance->alloc;
+-    alloc->pfnFree(alloc->pUserData, cmdbuf);
++    for (uint32_t i = 0; i < count; i++)
++        alloc->pfnFree(alloc->pUserData, cmdbufs[i]);
+ }
+ // -----------------------------------------------------------------------------
+@@ -535,13 +553,10 @@ VkResult CreateDescriptorPool(VkDevice device,
+ }
+ VkResult AllocDescriptorSets(VkDevice device,
+-                             VkDescriptorPool,
+-                             VkDescriptorSetUsage,
+-                             uint32_t count,
+-                             const VkDescriptorSetLayout*,
+-                             VkDescriptorSet* sets) {
+-    for (uint32_t i = 0; i < count; i++)
+-        sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
++                             const VkDescriptorSetAllocInfo* alloc_info,
++                             VkDescriptorSet* descriptor_sets) {
++    for (uint32_t i = 0; i < alloc_info->count; i++)
++        descriptor_sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
+     return VK_SUCCESS;
+ }
+@@ -874,7 +889,7 @@ void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descripto
+ void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
+ }
+-VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
++VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 655a414..c35df18 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -109,8 +109,8 @@ VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutC
+ void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout);
+ VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
+ void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool);
+-VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool);
+-VkResult AllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets);
++VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
++VkResult AllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+ VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
+ void UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+ VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer);
+@@ -121,8 +121,8 @@ void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent
+ VkResult CreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
+ void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool);
+ VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+-VkResult CreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer);
+-void DestroyCommandBuffer(VkDevice device, VkCmdBuffer commandBuffer);
++VkResult AllocCommandBuffers(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers);
++void FreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers);
+ VkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo);
+ VkResult EndCommandBuffer(VkCmdBuffer cmdBuffer);
+ VkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index e86a795..431977d 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -67,6 +67,7 @@ const NameProcEntry kInstanceProcTbl[] = {
+ const NameProcEntry kDeviceProcTbl[] = {
+     // clang-format off
++    {"vkAllocCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocCommandBuffers>(AllocCommandBuffers))},
+     {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocDescriptorSets>(AllocDescriptorSets))},
+     {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocMemory>(AllocMemory))},
+     {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkBeginCommandBuffer>(BeginCommandBuffer))},
+@@ -118,7 +119,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCmdWriteTimestamp>(CmdWriteTimestamp))},
+     {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateBuffer>(CreateBuffer))},
+     {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateBufferView>(CreateBufferView))},
+-    {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateCommandBuffer>(CreateCommandBuffer))},
+     {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateCommandPool>(CreateCommandPool))},
+     {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateComputePipelines>(CreateComputePipelines))},
+     {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateDescriptorPool>(CreateDescriptorPool))},
+@@ -139,7 +139,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateShaderModule>(CreateShaderModule))},
+     {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyBuffer>(DestroyBuffer))},
+     {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyBufferView>(DestroyBufferView))},
+-    {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyCommandBuffer>(DestroyCommandBuffer))},
+     {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyCommandPool>(DestroyCommandPool))},
+     {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyDescriptorPool>(DestroyDescriptorPool))},
+     {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyDescriptorSetLayout>(DestroyDescriptorSetLayout))},
+@@ -161,6 +160,7 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDeviceWaitIdle>(DeviceWaitIdle))},
+     {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkEndCommandBuffer>(EndCommandBuffer))},
+     {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkFlushMappedMemoryRanges>(FlushMappedMemoryRanges))},
++    {"vkFreeCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkFreeCommandBuffers>(FreeCommandBuffers))},
+     {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkFreeDescriptorSets>(FreeDescriptorSets))},
+     {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkFreeMemory>(FreeMemory))},
+     {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetBufferMemoryRequirements>(GetBufferMemoryRequirements))},
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0007-vulkan-Implement-VkSurfaceKHR-and-use-vulkanext.h.patch b/vulkan/patches/frameworks_native-sdk_0.10/0007-vulkan-Implement-VkSurfaceKHR-and-use-vulkanext.h.patch
new file mode 100644 (file)
index 0000000..b6bc011
--- /dev/null
@@ -0,0 +1,2418 @@
+From 8e7c3261d591b7df086683fb7877e188aee7c1f8 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 23 Nov 2015 17:24:58 -0800
+Subject: [PATCH 07/30] vulkan: Implement VkSurfaceKHR and use vulkanext.h
+
+Between header version 0.183.0 and 0.184.0, a copy of vulkan.h which
+includes extensions was added to the registry, called vulkanext.h. The
+vulkan.h included here is actually the registry's vulkanext.h.
+(In a later upstream change, the no-extensions version was removed
+from the registry, and vulkanext.h was renamed vulkan.h, matching what
+we're doing here.)
+
+The version of the extensions picked up in the header file is later
+than the ones used in the previous SDK, so this change also updates
+our implementation to the extension versions included in the header.
+The main change is replacing the VkSurfaceDescriptionKHR structure
+with a VkSurfaceKHR object.
+
+Change-Id: I18fa5a269db0fcdbdbde3e9304167bc15e456f85
+---
+ vulkan/api/platform.api                            |  23 +
+ vulkan/api/vulkan.api                              | 469 ++++++++++++++++-----
+ .../include/vulkan/vk_ext_khr_device_swapchain.h   | 210 ---------
+ vulkan/include/vulkan/vk_ext_khr_swapchain.h       | 153 -------
+ vulkan/include/vulkan/vk_platform.h                |  28 ++
+ vulkan/include/vulkan/vulkan.h                     | 432 +++++++++++++++++++
+ vulkan/libvulkan/entry.cpp                         |  34 +-
+ vulkan/libvulkan/entry.cpp.tmpl                    |  22 +-
+ vulkan/libvulkan/get_proc_addr.cpp                 |   6 +
+ vulkan/libvulkan/get_proc_addr.cpp.tmpl            |  39 +-
+ vulkan/libvulkan/loader.cpp                        |  23 +-
+ vulkan/libvulkan/loader.h                          |  38 +-
+ vulkan/libvulkan/swapchain.cpp                     | 239 +++++------
+ 13 files changed, 1062 insertions(+), 654 deletions(-)
+ delete mode 100644 vulkan/include/vulkan/vk_ext_khr_device_swapchain.h
+ delete mode 100644 vulkan/include/vulkan/vk_ext_khr_swapchain.h
+
+diff --git a/vulkan/api/platform.api b/vulkan/api/platform.api
+index 23f649d..889ac2c 100644
+--- a/vulkan/api/platform.api
++++ b/vulkan/api/platform.api
+@@ -22,3 +22,26 @@
+ // Platform types, as defined or included in vk_platform.h
+ type u64 size_t
++
++// VK_USE_PLATFORM_X11_KHR
++@internal class Display {}
++@internal class Window {}
++
++// VK_USE_PLATFORM_XCB_KHR
++@internal class xcb_connection_t {}
++@internal type u32 xcb_window_t
++
++// VK_USE_PLATFORM_WAYLAND_KHR
++@internal class wl_display {}
++@internal class wl_surface {}
++
++// VK_USE_PLATFORM_MIR_KHR
++@internal class MirConnection {}
++@internal class MirSurface {}
++
++// VK_USE_PLATFORM_ANDROID_KHR
++@internal class ANativeWindow {}
++
++// VK_USE_PLATFORM_WIN32_KHR
++@internal type void* HINSTANCE
++@internal type void* HWND
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 175e353..878cf44 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -45,6 +45,46 @@ define VK_FALSE       0
+ // API keyword, but needs special handling by some templates
+ define NULL_HANDLE 0
++@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION                     19
++@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER             1
++@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NAME               "VK_EXT_KHR_surface"
++
++@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION                 59
++@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
++@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_EXT_KHR_swapchain"
++
++@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION                     16
++@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER             3
++@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME               "VK_EXT_KHR_display"
++
++@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION           14
++@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER   4
++@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME     "VK_EXT_KHR_display_swapchain"
++
++@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_REVISION             1
++@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NUMBER               4
++@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NAME                 "VK_EXT_KHR_x11_surface"
++
++@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION             1
++@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NUMBER               6
++@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NAME                 "VK_EXT_KHR_xcb_surface"
++
++@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION     1
++@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NUMBER       7
++@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NAME         "VK_EXT_KHR_wayland_surface"
++
++@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION             1
++@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NUMBER               8
++@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NAME                 "VK_EXT_KHR_mir_surface"
++
++@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_REVISION     1
++@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NUMBER       8
++@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NAME         "VK_EXT_KHR_android_surface"
++
++@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION         1
++@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NUMBER           9
++@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NAME             "VK_EXT_KHR_win32_surface"
++
+ /////////////
+ //  Types  //
+@@ -84,7 +124,13 @@ type u32 VkSampleMask
+ @nonDispatchHandle type u64 VkFramebuffer
+ @nonDispatchHandle type u64 VkRenderPass
+ @nonDispatchHandle type u64 VkPipelineCache
+-@nonDispatchHandle type u64 VkSwapchainKHR
++
++@extension("VK_EXT_KHR_surface")    @nonDispatchHandle type u64 VkSurfaceKHR
++
++@extension("VK_EXT_KHR_swapchain")  @nonDispatchHandle type u64 VkSwapchainKHR
++
++@extension("VK_EXT_KHR_display")    @nonDispatchHandle type u64 VkDisplayKHR
++@extension("VK_EXT_KHR_display")    @nonDispatchHandle type u64 VkDisplayModeKHR
+ /////////////
+@@ -101,6 +147,9 @@ enum VkImageLayout {
+     VK_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL                 = 0x00000006,   /// Optimal layout when image is used only as source of transfer operations
+     VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL            = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
+     VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
++
++    //@extension("VK_EXT_KHR_swapchain")
++    VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR                      = 0xc0000802,
+ }
+ enum VkAttachmentLoadOp {
+@@ -568,6 +617,17 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 45,
+     VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 46,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 47,
++
++    //@extension("VK_EXT_KHR_swapchain")
++    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
++
++    //@extension("VK_EXT_KHR_display")
++    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 0xc0000c00,
++    VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLAN_KHR      = 0xc0000c01,
++
++    //@extension("VK_EXT_KHR_display_swapchain")
++    VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR         = 0xc0001000,
++    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001001,
+ }
+ enum VkRenderPassContents {
+@@ -586,6 +646,9 @@ enum VkResult {
+     VK_EVENT_RESET                                          = 0x00000004,
+     VK_INCOMPLETE                                           = 0x00000005,
++    //@extension("VK_EXT_KHR_swapchain")
++    VK_SUBOPTIMAL_KHR                                       = 0x40000403,
++
+     // Error codes (negative values)
+     VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF,
+     VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE,
+@@ -596,6 +659,16 @@ enum VkResult {
+     VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9,
+     VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+     VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
++
++    //@extension("VK_EXT_KHR_swapchain")
++    VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
++
++    //@extension("VK_EXT_KHR_display_swapchain")
++    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001002,
++
++    //@extension("VK_EXT_KHR_android_surface")
++    VK_ERROR_INVALID_ANDROID_WINDOW_KHR                     = 0xC002400,
++    VK_ERROR_ANDROID_WINDOW_IN_USE_KHR                      = 0xC002401,
+ }
+ enum VkDynamicState {
+@@ -610,11 +683,7 @@ enum VkDynamicState {
+     VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
+ }
+-//////////////////
+-//  Extensions  //
+-//////////////////
+-
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_EXT_KHR_surface")
+ enum VkSurfaceTransformKHR {
+     VK_SURFACE_TRANSFORM_NONE_KHR                           = 0x00000000,
+     VK_SURFACE_TRANSFORM_ROT90_KHR                          = 0x00000001,
+@@ -628,23 +697,13 @@ enum VkSurfaceTransformKHR {
+ }
+ @extension("VK_EXT_KHR_swapchain")
+-enum VkPlatformKHR {
+-    VK_PLATFORM_WIN32_KHR                                   = 0x00000000,
+-    VK_PLATFORM_X11_KHR                                     = 0x00000001,
+-    VK_PLATFORM_XCB_KHR                                     = 0x00000002,
+-    VK_PLATFORM_ANDROID_KHR                                 = 0x00000003,
+-    VK_PLATFORM_WAYLAND_KHR                                 = 0x00000004,
+-    VK_PLATFORM_MIR_KHR                                     = 0x00000005,
+-}
+-
+-@extension("VK_EXT_KHR_device_swapchain")
+ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
+     VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
+     VK_PRESENT_MODE_FIFO_KHR                                = 0x00000002,
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ enum VkColorSpaceKHR {
+     VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = 0x00000000,
+ }
+@@ -941,10 +1000,6 @@ bitfield VkStencilFaceFlags {
+     VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
+ }
+-//////////////////
+-//  Extensions  //
+-//////////////////
+-
+ @extension("VK_EXT_KHR_swapchain")
+ bitfield VkSurfaceTransformFlagsKHR {
+     VK_SURFACE_TRANSFORM_NONE_BIT_KHR                       = 0x00000001,
+@@ -958,6 +1013,14 @@ bitfield VkSurfaceTransformFlagsKHR {
+     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                    = 0x00000100,
+ }
++@extension("VK_EXT_KHR_display")
++bitfield VkDisplayPlaneAlphaFlagsKHR {
++    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000001,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000002,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000004,
++}
++
++
+ //////////////////
+ //  Structures  //
+ //////////////////
+@@ -1995,73 +2058,136 @@ class VkDispatchIndirectCmd {
+     u32                                         z
+ }
+-//////////////////
+-//  Extensions  //
+-//////////////////
+-
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ class VkSurfacePropertiesKHR {
+-    u32                                     minImageCount
+-    u32                                     maxImageCount
+-    VkExtent2D                              currentExtent
+-    VkExtent2D                              minImageExtent
+-    VkExtent2D                              maxImageExtent
+-    VkSurfaceTransformFlagsKHR              supportedTransforms
+-    VkSurfaceTransformKHR                   currentTransform
+-    u32                                     maxImageArraySize
+-    VkImageUsageFlags                       supportedUsageFlags
+-}
+-
+-@extension("VK_EXT_KHR_device_swapchain")
+-class VkSurfaceFormatKHR {
+-    VkFormat                                format
+-    VkColorSpaceKHR                         colorSpace
++    u32                                         minImageCount
++    u32                                         maxImageCount
++    VkExtent2D                                  currentExtent
++    VkExtent2D                                  minImageExtent
++    VkExtent2D                                  maxImageExtent
++    VkSurfaceTransformFlagsKHR                  supportedTransforms
++    VkSurfaceTransformKHR                       currentTransform
++    u32                                         maxImageArraySize
++    VkImageUsageFlags                           supportedUsageFlags
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
+-class VkSwapchainCreateInfoKHR {
+-    VkStructureType                          sType
+-    const void*                              pNext
+-    const VkSurfaceDescriptionKHR*           pSurfaceDescription
+-    u32                                      minImageCount
+-    VkFormat                                 imageFormat
+-    VkColorSpaceKHR                          imageColorSpace
+-    VkExtent2D                               imageExtent
+-    VkImageUsageFlags                        imageUsageFlags
+-    VkSurfaceTransformKHR                    preTransform
+-    u32                                      imageArraySize
+-    VkSharingMode                            sharingMode
+-    u32                                      queueFamilyCount
+-    const u32*                               pQueueFamilyIndices
+-    VkPresentModeKHR                         presentMode
+-    VkSwapchainKHR                           oldSwapchain
+-    VkBool32                                 clipped
+-}
+-
+-@extension("VK_EXT_KHR_device_swapchain")
+-class VkPresentInfoKHR {
+-    VkStructureType                          sType
+-    const void*                              pNext
+-    u32                                      swapchainCount
+-    const VkSwapchainKHR*                    swapchains
+-    const u32*                               imageIndices
++@extension("VK_EXT_KHR_swapchain")
++class VkSurfaceFormatKHR {
++    VkFormat                                    format
++    VkColorSpaceKHR                             colorSpace
+ }
+ @extension("VK_EXT_KHR_swapchain")
+-class VkSurfaceDescriptionKHR {
+-    VkStructureType                          sType
+-    const void*                              pNext
++class VkSwapchainCreateInfoKHR {
++    VkStructureType                             sType
++    const void*                                 pNext
++    VkSurfaceKHR                                surface
++    u32                                         minImageCount
++    VkFormat                                    imageFormat
++    VkColorSpaceKHR                             imageColorSpace
++    VkExtent2D                                  imageExtent
++    VkImageUsageFlags                           imageUsageFlags
++    VkSurfaceTransformKHR                       preTransform
++    u32                                         imageArraySize
++    VkSharingMode                               sharingMode
++    u32                                         queueFamilyCount
++    const u32*                                  pQueueFamilyIndices
++    VkPresentModeKHR                            presentMode
++    VkSwapchainKHR                              oldSwapchain
++    VkBool32                                    clipped
+ }
+ @extension("VK_EXT_KHR_swapchain")
+-class VkSurfaceDescriptionWindowKHR {
+-    VkStructureType                         sType
+-    const void*                             pNext
+-    VkPlatformKHR                           platform
+-    void*                                   pPlatformHandle
+-    void*                                   pPlatformWindow
++class VkPresentInfoKHR {
++    VkStructureType                             sType
++    const void*                                 pNext
++    u32                                         swapchainCount
++    const VkSwapchainKHR*                       swapchains
++    const u32*                                  imageIndices
++}
++
++@extension("VK_EXT_KHR_display")
++class VkDisplayPropertiesKHR {
++    VkDisplayKHR                                display
++    const char*                                 displayName
++    VkExtent2D                                  physicalDimensions
++    VkExtent2D                                  physicalResolution
++    VkSurfaceTransformFlagsKHR                  supportedTransforms
++    u32                                         planeCount
++    VkBool32                                    planeReorderPossible
++}
++
++@extension("VK_EXT_KHR_display")
++class VkDisplayTimingKHR {
++    u32                                         pixelClock
++    VkExtent2D                                  visibleRegion
++    VkExtent2D                                  totalRegion
++    VkExtent2D                                  physicalDimensions
++    u32                                         hSyncStart
++    u32                                         hSyncEnd
++    u32                                         vSyncStart
++    u32                                         vSyncEnd
++    VkBool32                                    interlaced
++    VkBool32                                    doublescan
++    VkBool32                                    hSyncPos
++    VkBool32                                    vSyncPos
++}
++
++@extension("VK_EXT_KHR_display")
++class VkDisplayModePropertiesKHR {
++    VkDisplayModeKHR                            displayMode
++    VkDisplayTimingKHR                          timing
++}
++
++@extension("VK_EXT_KHR_display")
++class VkDisplayModeCreateInfoKHR {
++    VkStructureType                             sType
++    const void*                                 pNext
++    VkDisplayTimingKHR                          timing
++}
++
++@extension("VK_EXT_KHR_display")
++class VkDisplayPlanePropertiesKHR {
++    VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
++    VkOffset2D                                  minSrcPosition
++    VkOffset2D                                  maxSrcPosition
++    VkExtent2D                                  minSrcExtent
++    VkExtent2D                                  maxSrcExtent
++    VkOffset2D                                  minDstPosition
++    VkOffset2D                                  maxDstPosition
++    VkExtent2D                                  minDstExtent
++    VkExtent2D                                  maxDstExtent
++}
++
++@extension("VK_EXT_KHR_display")
++class VkSurfaceDescriptionDisplayPlaneKHR {
++    VkStructureType                             sType
++    const void*                                 pNext
++    VkDisplayModeKHR                            displayMode
++    u32                                         planeIndex
++    u32                                         planeStackIndex
++    VkSurfaceTransformKHR                       transform
++    f32                                         globalAlpha
++    VkDisplayPlaneAlphaFlagsKHR                 alphaMode
++    VkExtent2D                                  imageSize
++}
++
++@extension("VK_EXT_KHR_display_swapchain")
++class VkDisplaySwapchainCreateInfoKHR {
++    VkStructureType                             sType
++    const void*                                 pNext
++    const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo
++}
++
++@extension("VK_EXT_KHR_display_swapchain")
++class VkDisplayPresentInfoKHR {
++    VkStructureType                             sType
++    const void*                                 pNext
++    VkRect2D                                    srcRect
++    VkRect2D                                    dstRect
+ }
++
+ ////////////////
+ //  Commands  //
+ ////////////////
+@@ -4296,29 +4422,34 @@ cmd void vkCmdExecuteCommands(
+     }
+ }
+-////////////////
+-// Extensions //
+-////////////////
++@extension("VK_EXT_KHR_surface")
++cmd void vkDestroySurfaceKHR(
++        VkInstance                                  instance,
++        VkSurfaceKHR                                surface) {
++    instanceObject := GetInstance(instance)
++    surfaceObject := GetSurface(surface)
++    assert(surfaceObject.instance == instance)
+-@extension("VK_EXT_KHR_swapchain")
+-cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
+-        VkPhysicalDevice                        physicalDevice,
+-        u32                                     queueFamilyIndex,
+-        const VkSurfaceDescriptionKHR*          pSurfaceDescription,
+-        VkBool32*                               pSupported) {
++    State.Surfaces[surface] = null
++}
++
++@extension("VK_EXT_KHR_surface")
++cmd VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(
++        VkPhysicalDevice                            physicalDevice,
++        u32                                         queueFamilyIndex,
++        VkSurfaceKHR                                surface) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+-    supported := ?
+-    pSupported[0] = supported
++    //supported := ?
+-    return ?
++    return ?//supported
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkGetSurfacePropertiesKHR(
+-        VkDevice                                 device,
+-        const VkSurfaceDescriptionKHR*           pSurfaceDescription,
+-        VkSurfacePropertiesKHR*                  pSurfaceProperties) {
++        VkDevice                                    device,
++        VkSurfaceKHR                                surface,
++        VkSurfacePropertiesKHR*                     pSurfaceProperties) {
+     deviceObject := GetDevice(device)
+     surfaceProperties := ?
+@@ -4327,12 +4458,12 @@ cmd VkResult vkGetSurfacePropertiesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkGetSurfaceFormatsKHR(
+-        VkDevice                                 device,
+-        const VkSurfaceDescriptionKHR*           pSurfaceDescription,
+-        u32*                                     pCount,
+-        VkSurfaceFormatKHR*                      pSurfaceFormats) {
++        VkDevice                                    device,
++        VkSurfaceKHR                                surface,
++        u32*                                        pCount,
++        VkSurfaceFormatKHR*                         pSurfaceFormats) {
+     deviceObject := GetDevice(device)
+     count := as!u32(?)
+@@ -4347,12 +4478,12 @@ cmd VkResult vkGetSurfaceFormatsKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkGetSurfacePresentModesKHR(
+-        VkDevice                                 device,
+-        const VkSurfaceDescriptionKHR*           pSurfaceDescription,
+-        u32*                                     pCount,
+-        VkPresentModeKHR*                        pPresentModes) {
++        VkDevice                                    device,
++        VkSurfaceKHR                                surface,
++        u32*                                        pCount,
++        VkPresentModeKHR*                           pPresentModes) {
+     deviceObject := GetDevice(device)
+     count := as!u32(?)
+@@ -4367,12 +4498,12 @@ cmd VkResult vkGetSurfacePresentModesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkCreateSwapchainKHR(
+         VkDevice                                 device,
+         const VkSwapchainCreateInfoKHR*          pCreateInfo,
+         VkSwapchainKHR*                          pSwapchain) {
+-    //assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
++    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
+     deviceObject := GetDevice(device)
+     swapchain := ?
+@@ -4382,8 +4513,8 @@ cmd VkResult vkCreateSwapchainKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
+-cmd VkResult vkDestroySwapchainKHR(
++@extension("VK_EXT_KHR_swapchain")
++cmd void vkDestroySwapchainKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain) {
+     deviceObject := GetDevice(device)
+@@ -4391,11 +4522,9 @@ cmd VkResult vkDestroySwapchainKHR(
+     assert(swapchainObject.device == device)
+     State.Swapchains[swapchain] = null
+-
+-    return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkGetSwapchainImagesKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain,
+@@ -4410,20 +4539,19 @@ cmd VkResult vkGetSwapchainImagesKHR(
+     for i in (0 .. count) {
+         swapchainImage := ?
+         swapchainImages[i] = swapchainImage
+-        if !(swapchainImage in State.Images) {
+-            State.Images[swapchainImage] = new!ImageObject(device: device)
+-        }
++        State.Images[swapchainImage] = new!ImageObject(device: device)
+     }
+     return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkAcquireNextImageKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain,
+         u64                                      timeout,
+         VkSemaphore                              semaphore,
++        VkFence                                  fence,
+         u32*                                     pImageIndex) {
+     deviceObject := GetDevice(device)
+     swapchainObject := GetSwapchain(swapchain)
+@@ -4434,7 +4562,7 @@ cmd VkResult vkAcquireNextImageKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_device_swapchain")
++@extension("VK_EXT_KHR_swapchain")
+ cmd VkResult vkQueuePresentKHR(
+         VkQueue                                  queue,
+         VkPresentInfoKHR*                        pPresentInfo) {
+@@ -4446,6 +4574,107 @@ cmd VkResult vkQueuePresentKHR(
+     return ?
+ }
++@extension("VK_EXT_KHR_display")
++cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32*                                    count,
++        VkDisplayPropertiesKHR*                 pProperties) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
++@extension("VK_EXT_KHR_display")
++cmd VkResult vkGetDisplayModePropertiesKHR(
++        VkPhysicalDevice                        physicalDevice,
++        VkDisplayKHR                            display,
++        u32*                                    pCount,
++        VkDisplayModePropertiesKHR*             pModeProperties) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
++@extension("VK_EXT_KHR_display")
++cmd VkResult vkCreateDisplayModeKHR(
++        VkPhysicalDevice                        physicalDevice,
++        VkDisplayKHR                            display,
++        const VkDisplayModeCreateInfoKHR*       pCreateInfo,
++        VkDisplayModeKHR*                       pMode) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
++@extension("VK_EXT_KHR_display")
++cmd VkResult vkGetDisplayPlanePropertiesKHR(
++        VkPhysicalDevice                        physicalDevice,
++        VkDisplayKHR                            display,
++        VkDisplayModeKHR                        mode,
++        u32                                     planeIndex,
++        VkDisplayPlanePropertiesKHR*            pProperties) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
++@extension("VK_EXT_KHR_x11_surface")
++cmd VkResult vkCreateX11SurfaceKHR(
++        VkInstance                              instance,
++        platform.Display*                       dpy,
++        platform.Window                         root,
++        platform.Window                         window,
++        VkSurfaceKHR*                           pSurface) {
++    instanceObject := GetInstance(instance)
++    return ?
++}
++
++@extension("VK_EXT_KHR_xcb_surface")
++cmd VkResult vkCreateXCBSurfaceKHR(
++        VkInstance                              instance,
++        platform.xcb_connection_t*              connection,
++        platform.xcb_window_t                   root,
++        platform.xcb_window_t                   window,
++        VkSurfaceKHR*                           pSurface) {
++    instanceObject := GetInstance(instance)
++    return ?
++}
++
++@extension("VK_EXT_KHR_wayland_surface")
++cmd VkResult vkCreateWaylandSurfaceKHR(
++        VkInstance                              instance,
++        platform.wl_display*                    display,
++        platform.wl_surface*                    surface,
++        VkSurfaceKHR*                           pSurface) {
++    instanceObject := GetInstance(instance)
++    return ?
++}
++
++@extension("VK_EXT_KHR_mir_surface")
++cmd VkResult vkCreateMirSurfaceKHR(
++        VkInstance                              instance,
++        platform.MirConnection*                 connection,
++        platform.MirSurface*                    mirSurface,
++        VkSurfaceKHR*                           pSurface) {
++    instanceObject := GetInstance(instance)
++    return ?
++}
++
++@extension("VK_EXT_KHR_android_surface")
++cmd VkResult vkCreateAndroidSurfaceKHR(
++        VkInstance                              instance,
++        platform.ANativeWindow*                 window
++        VkSurfaceKHR*                           pSurface) {
++    instanceObject := GetInstance(instance)
++    return ?
++}
++
++@extension("VK_EXT_KHR_win32_surface")
++cmd VkResult vkCreateWin32SurfaceKHR(
++        VkInstance                              instance,
++        platform.HINSTANCE                      hinstance,
++        platform.HWND                           hwnd,
++        VkSurfaceKHR*                           pSurface) {
++    instanceObject := GetInstance(instance)
++    return ?
++}
++
+ ////////////////
+ // Validation //
+@@ -4490,6 +4719,7 @@ StateObject State
+     map!(VkRenderPass,               ref!RenderPassObject)               RenderPasses
+     map!(VkPipelineCache,            ref!PipelineCacheObject)            PipelineCaches
+     map!(VkCmdPool,                  ref!CmdPoolObject)                  CmdPools
++    map!(VkSurfaceKHR,               ref!SurfaceObject)                  Surfaces
+     map!(VkSwapchainKHR,             ref!SwapchainObject)                Swapchains
+ }
+@@ -4609,6 +4839,10 @@ StateObject State
+     VkDevice      device
+ }
++@internal class SurfaceObject {
++    VkInstance    instance
++}
++
+ @internal class SwapchainObject {
+     VkDevice      device
+ }
+@@ -4743,6 +4977,11 @@ macro ref!CmdPoolObject GetCmdPool(VkCmdPool cmdPool) {
+     return State.CmdPools[cmdPool]
+ }
++macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
++    assert(surface in State.Surfaces)
++    return State.Surfaces[surface]
++}
++
+ macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
+     assert(swapchain in State.Swapchains)
+     return State.Swapchains[swapchain]
+diff --git a/vulkan/include/vulkan/vk_ext_khr_device_swapchain.h b/vulkan/include/vulkan/vk_ext_khr_device_swapchain.h
+deleted file mode 100644
+index 3bf73c8..0000000
+--- a/vulkan/include/vulkan/vk_ext_khr_device_swapchain.h
++++ /dev/null
+@@ -1,210 +0,0 @@
+-//
+-// File: vk_ext_khr_device_swapchain.h
+-//
+-/*
+-** Copyright (c) 2015 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 __VK_EXT_KHR_DEVICE_SWAPCHAIN_H__
+-#define __VK_EXT_KHR_DEVICE_SWAPCHAIN_H__
+-
+-#include "vulkan.h"
+-
+-#define VK_EXT_KHR_DEVICE_SWAPCHAIN_REVISION         53
+-#define VK_EXT_KHR_DEVICE_SWAPCHAIN_EXTENSION_NUMBER 2
+-#define VK_EXT_KHR_DEVICE_SWAPCHAIN_EXTENSION_NAME   "VK_EXT_KHR_device_swapchain"
+-
+-#ifdef __cplusplus
+-extern "C"
+-{
+-#endif // __cplusplus
+-
+-// ------------------------------------------------------------------------------------------------
+-// Objects
+-
+-VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR);
+-
+-// ------------------------------------------------------------------------------------------------
+-// Enumeration constants
+-
+-#define VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM(type,id)    ((type)((int)0xc0000000 - VK_EXT_KHR_DEVICE_SWAPCHAIN_EXTENSION_NUMBER * -1024 + (id)))
+-#define VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM_POSITIVE(type,id)    ((type)((int)0x40000000 + (VK_EXT_KHR_DEVICE_SWAPCHAIN_EXTENSION_NUMBER - 1) * 1024 + (id)))
+-
+-// Extend VkStructureType enum with extension specific constants
+-#define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM(VkStructureType, 0)
+-#define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM(VkStructureType, 1)
+-
+-// Extend VkImageLayout enum with extension specific constants
+-#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM(VkImageLayout, 2)
+-
+-// Extend VkResult enum with extension specific constants
+-//  Return codes for successful operation execution
+-#define VK_SUBOPTIMAL_KHR           VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM_POSITIVE(VkResult, 3)
+-//  Error codes
+-#define VK_ERROR_OUT_OF_DATE_KHR    VK_EXT_KHR_DEVICE_SWAPCHAIN_ENUM(VkResult, 4)
+-
+-// ------------------------------------------------------------------------------------------------
+-// Enumerations
+-
+-typedef enum {
+-    VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+-    VK_PRESENT_MODE_MAILBOX_KHR = 1,
+-    VK_PRESENT_MODE_FIFO_KHR = 2,
+-    VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
+-    VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_KHR,
+-    VK_PRESENT_MODE_NUM = (VK_PRESENT_MODE_FIFO_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
+-    VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
+-} VkPresentModeKHR;
+-
+-typedef enum {
+-    VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0x00000000,
+-    VK_COLORSPACE_NUM = (VK_COLORSPACE_SRGB_NONLINEAR_KHR - VK_COLORSPACE_SRGB_NONLINEAR_KHR + 1),
+-    VK_COLORSPACE_MAX_ENUM_KHR = 0x7FFFFFFF
+-} VkColorSpaceKHR;
+-
+-// ------------------------------------------------------------------------------------------------
+-// Flags
+-
+-// ------------------------------------------------------------------------------------------------
+-// Structures
+-
+-typedef struct {
+-    uint32_t                                minImageCount;      // Supported minimum number of images for the surface
+-    uint32_t                                maxImageCount;      // Supported maximum number of images for the surface, 0 for unlimited
+-
+-    VkExtent2D                              currentExtent;      // Current image width and height for the surface, (-1, -1) if undefined
+-    VkExtent2D                              minImageExtent;     // Supported minimum image width and height for the surface
+-    VkExtent2D                              maxImageExtent;     // Supported maximum image width and height for the surface
+-
+-    VkSurfaceTransformFlagsKHR              supportedTransforms;// 1 or more bits representing the transforms supported
+-    VkSurfaceTransformKHR                   currentTransform;   // The surface's current transform relative to the device's natural orientation
+-
+-    uint32_t                                maxImageArraySize;  // Supported maximum number of image layers for the surface
+-
+-    VkImageUsageFlags                       supportedUsageFlags;// Supported image usage flags for the surface
+-} VkSurfacePropertiesKHR;
+-
+-typedef struct {
+-    VkFormat                                format;             // Supported pair of rendering format
+-    VkColorSpaceKHR                         colorSpace;         // and colorspace for the surface
+-} VkSurfaceFormatKHR;
+-
+-typedef struct {
+-    VkStructureType                          sType;             // Must be VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
+-    const void*                              pNext;             // Pointer to next structure
+-
+-    const VkSurfaceDescriptionKHR*           pSurfaceDescription;// describes the swap chain's target surface
+-
+-    uint32_t                                 minImageCount;     // Minimum number of presentation images the application needs
+-    VkFormat                                 imageFormat;       // Format of the presentation images
+-    VkColorSpaceKHR                          imageColorSpace;   // Colorspace of the presentation images
+-    VkExtent2D                               imageExtent;       // Dimensions of the presentation images
+-    VkImageUsageFlags                        imageUsageFlags;   // Bits indicating how the presentation images will be used
+-    VkSurfaceTransformKHR                    preTransform;      // The transform, relative to the device's natural orientation, applied to the image content prior to presentation
+-    uint32_t                                 imageArraySize;    // Determines the number of views for multiview/stereo presentation
+-
+-    VkSharingMode                            sharingMode;       // Sharing mode used for the presentation images
+-    uint32_t                                 queueFamilyCount;  // Number of queue families having access to the images in case of concurrent sharing mode
+-    const uint32_t*                          pQueueFamilyIndices; // Array of queue family indices having access to the images in case of concurrent sharing mode
+-
+-    VkPresentModeKHR                         presentMode;       // Which presentation mode to use for presents on this swap chain
+-
+-    VkSwapchainKHR                           oldSwapchain;      // Existing swap chain to replace, if any
+-
+-    VkBool32                                 clipped;           // Specifies whether presentable images may be affected by window clip regions
+-} VkSwapchainCreateInfoKHR;
+-
+-typedef struct {
+-    VkStructureType                          sType;             // Must be VK_STRUCTURE_TYPE_PRESENT_INFO_KHR
+-    const void*                              pNext;             // Pointer to next structure
+-    uint32_t                                 swapchainCount;    // Number of swap chains to present in this call
+-    const VkSwapchainKHR*                    swapchains;        // Swap chains to present an image from
+-    const uint32_t*                          imageIndices;      // Indices of which swapchain images to present
+-} VkPresentInfoKHR;
+-
+-// ------------------------------------------------------------------------------------------------
+-// Function types
+-
+-typedef VkResult (VKAPI *PFN_vkGetSurfacePropertiesKHR)(VkDevice device, const VkSurfaceDescriptionKHR* pSurfaceDescription, VkSurfacePropertiesKHR* pSurfaceProperties);
+-typedef VkResult (VKAPI *PFN_vkGetSurfaceFormatsKHR)(VkDevice device, const VkSurfaceDescriptionKHR* pSurfaceDescription, uint32_t* pCount, VkSurfaceFormatKHR* pSurfaceFormats);
+-typedef VkResult (VKAPI *PFN_vkGetSurfacePresentModesKHR)(VkDevice device, const VkSurfaceDescriptionKHR* pSurfaceDescription, uint32_t* pCount, VkPresentModeKHR* pPresentModes);
+-typedef VkResult (VKAPI *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, VkSwapchainKHR* pSwapchain);
+-typedef VkResult (VKAPI *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain);
+-typedef VkResult (VKAPI *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pCount, VkImage* pSwapchainImages);
+-typedef VkResult (VKAPI *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, uint32_t* pImageIndex);
+-typedef VkResult (VKAPI *PFN_vkQueuePresentKHR)(VkQueue queue, VkPresentInfoKHR* pPresentInfo);
+-
+-// ------------------------------------------------------------------------------------------------
+-// Function prototypes
+-
+-#ifdef VK_PROTOTYPES
+-
+-VkResult VKAPI vkGetSurfacePropertiesKHR(
+-    VkDevice                                 device,
+-    const VkSurfaceDescriptionKHR*           pSurfaceDescription,
+-    VkSurfacePropertiesKHR*                  pSurfaceProperties);
+-
+-VkResult VKAPI vkGetSurfaceFormatsKHR(
+-    VkDevice                                 device,
+-    const VkSurfaceDescriptionKHR*           pSurfaceDescription,
+-    uint32_t*                                pCount,
+-    VkSurfaceFormatKHR*                      pSurfaceFormats);
+-
+-VkResult VKAPI vkGetSurfacePresentModesKHR(
+-    VkDevice                                 device,
+-    const VkSurfaceDescriptionKHR*           pSurfaceDescription,
+-    uint32_t*                                pCount,
+-    VkPresentModeKHR*                        pPresentModes);
+-
+-VkResult VKAPI vkCreateSwapchainKHR(
+-    VkDevice                                 device,
+-    const VkSwapchainCreateInfoKHR*          pCreateInfo,
+-    VkSwapchainKHR*                          pSwapchain);
+-
+-VkResult VKAPI vkDestroySwapchainKHR(
+-    VkDevice                                 device,
+-    VkSwapchainKHR                           swapchain);
+-
+-VkResult VKAPI vkGetSwapchainImagesKHR(
+-    VkDevice                                 device,
+-    VkSwapchainKHR                           swapchain,
+-    uint32_t*                                pCount,
+-    VkImage*                                 pSwapchainImages);
+-
+-VkResult VKAPI vkAcquireNextImageKHR(
+-    VkDevice                                 device,
+-    VkSwapchainKHR                           swapchain,
+-    uint64_t                                 timeout,
+-    VkSemaphore                              semaphore,
+-    uint32_t*                                pImageIndex);
+-
+-VkResult VKAPI vkQueuePresentKHR(
+-    VkQueue                                  queue,
+-    VkPresentInfoKHR*                        pPresentInfo);
+-
+-#endif // VK_PROTOTYPES
+-
+-#ifdef __cplusplus
+-} // extern "C"
+-#endif // __cplusplus
+-
+-#endif // __VK_EXT_KHR_SWAPCHAIN_H__
+diff --git a/vulkan/include/vulkan/vk_ext_khr_swapchain.h b/vulkan/include/vulkan/vk_ext_khr_swapchain.h
+deleted file mode 100644
+index 862b4d5..0000000
+--- a/vulkan/include/vulkan/vk_ext_khr_swapchain.h
++++ /dev/null
+@@ -1,153 +0,0 @@
+-//
+-// File: vk_ext_khr_swapchain.h
+-//
+-/*
+-** Copyright (c) 2015 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 __VK_EXT_KHR_SWAPCHAIN_H__
+-#define __VK_EXT_KHR_SWAPCHAIN_H__
+-
+-#include "vulkan.h"
+-
+-#define VK_EXT_KHR_SWAPCHAIN_REVISION         17
+-#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 1
+-#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_EXT_KHR_swapchain"
+-
+-#ifdef __cplusplus
+-extern "C"
+-{
+-#endif // __cplusplus
+-
+-// ------------------------------------------------------------------------------------------------
+-// Objects
+-
+-// ------------------------------------------------------------------------------------------------
+-// Enumeration constants
+-
+-#define VK_EXT_KHR_SWAPCHAIN_ENUM(type,id)    ((type)((int)0xc0000000 - VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER * -1024 + (id)))
+-#define VK_EXT_KHR_SWAPCHAIN_ENUM_POSITIVE(type,id)    ((type)((int)0x40000000 + (VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER - 1) * 1024 + (id)))
+-
+-// Extend VkStructureType enum with extension specific constants
+-#define VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_WINDOW_KHR            VK_EXT_KHR_SWAPCHAIN_ENUM(VkStructureType, 0)
+-
+-// ------------------------------------------------------------------------------------------------
+-// Enumerations
+-
+-typedef enum {
+-    VK_SURFACE_TRANSFORM_NONE_KHR = 0,
+-    VK_SURFACE_TRANSFORM_ROT90_KHR = 1,
+-    VK_SURFACE_TRANSFORM_ROT180_KHR = 2,
+-    VK_SURFACE_TRANSFORM_ROT270_KHR = 3,
+-    VK_SURFACE_TRANSFORM_HMIRROR_KHR = 4,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 5,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 6,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 7,
+-    VK_SURFACE_TRANSFORM_INHERIT_KHR = 8,
+-} VkSurfaceTransformKHR;
+-
+-typedef enum {
+-    VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
+-    VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
+-    VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
+-    VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
+-    VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
+-    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
+-} VkSurfaceTransformFlagBitsKHR;
+-typedef VkFlags VkSurfaceTransformFlagsKHR;
+-
+-typedef enum {
+-    VK_PLATFORM_WIN32_KHR = 0,
+-    VK_PLATFORM_X11_KHR = 1,
+-    VK_PLATFORM_XCB_KHR = 2,
+-    VK_PLATFORM_ANDROID_KHR = 3,
+-    VK_PLATFORM_WAYLAND_KHR = 4,
+-    VK_PLATFORM_MIR_KHR = 5,
+-    VK_PLATFORM_BEGIN_RANGE_KHR = VK_PLATFORM_WIN32_KHR,
+-    VK_PLATFORM_END_RANGE_KHR = VK_PLATFORM_MIR_KHR,
+-    VK_PLATFORM_NUM_KHR = (VK_PLATFORM_MIR_KHR - VK_PLATFORM_WIN32_KHR + 1),
+-    VK_PLATFORM_MAX_ENUM_KHR = 0x7FFFFFFF
+-} VkPlatformKHR;
+-
+-// ------------------------------------------------------------------------------------------------
+-// Flags
+-
+-// ------------------------------------------------------------------------------------------------
+-// Structures
+-
+-// Placeholder structure header for the different types of surface description structures
+-typedef struct {
+-    VkStructureType                          sType;             // Can be any of the VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_XXX_KHR constants
+-    const void*                              pNext;             // Pointer to next structure
+-} VkSurfaceDescriptionKHR;
+-
+-// Surface description structure for a native platform window surface
+-typedef struct {
+-    VkStructureType                         sType;              // Must be VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_WINDOW_KHR
+-    const void*                             pNext;              // Pointer to next structure
+-    VkPlatformKHR                           platform;           // e.g. VK_PLATFORM_*_KHR
+-    void*                                   pPlatformHandle;
+-    void*                                   pPlatformWindow;
+-} VkSurfaceDescriptionWindowKHR;
+-
+-// pPlatformHandle points to this struct when platform is VK_PLATFORM_X11_KHR
+-#ifdef _X11_XLIB_H_
+-typedef struct {
+-    Display*                                 dpy;               // Display connection to an X server
+-    Window                                   root;              // To identify the X screen
+-} VkPlatformHandleX11KHR;
+-#endif /* _X11_XLIB_H_ */
+-
+-// pPlatformHandle points to this struct when platform is VK_PLATFORM_XCB_KHR
+-#ifdef __XCB_H__
+-typedef struct {
+-    xcb_connection_t*                        connection;        // XCB connection to an X server
+-    xcb_window_t                             root;              // To identify the X screen
+-} VkPlatformHandleXcbKHR;
+-#endif /* __XCB_H__ */
+-
+-// ------------------------------------------------------------------------------------------------
+-// Function types
+-
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, const VkSurfaceDescriptionKHR* pSurfaceDescription, VkBool32* pSupported);
+-
+-// ------------------------------------------------------------------------------------------------
+-// Function prototypes
+-
+-#ifdef VK_PROTOTYPES
+-
+-VkResult VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
+-    VkPhysicalDevice                        physicalDevice,
+-    uint32_t                                queueFamilyIndex,
+-    const VkSurfaceDescriptionKHR*          pSurfaceDescription,
+-    VkBool32*                               pSupported);
+-
+-#endif // VK_PROTOTYPES
+-
+-#ifdef __cplusplus
+-} // extern "C"
+-#endif // __cplusplus
+-
+-#endif // __VK_EXT_KHR_SWAPCHAIN_H__
+diff --git a/vulkan/include/vulkan/vk_platform.h b/vulkan/include/vulkan/vk_platform.h
+index 969e532..14dc553 100644
+--- a/vulkan/include/vulkan/vk_platform.h
++++ b/vulkan/include/vulkan/vk_platform.h
+@@ -71,4 +71,32 @@ extern "C"
+ } // extern "C"
+ #endif // __cplusplus
++// Platform-specific headers required by platform window system extensions.
++// These are enabled prior to #including "vulkan.h". The same enable then
++// controls inclusion of the extension interfaces in vulkan.h.
++
++#ifdef VK_USE_PLATFORM_ANDROID_KHR
++#include <android/native_window.h>
++#endif
++
++#ifdef VK_USE_PLATFORM_MIR_KHR
++#include <mir_toolkit/client_types.h>
++#endif
++
++#ifdef VK_USE_PLATFORM_WAYLAND_KHR
++#include <wayland-client.h>
++#endif
++
++#ifdef VK_USE_PLATFORM_WIN32_KHR
++#include <windows.h>
++#endif
++
++#ifdef VK_USE_PLATFORM_X11_KHR
++#include <X11/Xlib.h>
++#endif
++
++#ifdef VK_USE_PLATFORM_XCB_KHR
++#include <xcb/xcb.h>
++#endif
++
+ #endif // __VK_PLATFORM_H__
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index d6eb918..ee921bf 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -3002,6 +3002,438 @@ void VKAPI vkCmdExecuteCommands(
+     const VkCmdBuffer*                          pCmdBuffers);
+ #endif
++#define vk_ext_khr_surface 1
++VK_DEFINE_NONDISP_HANDLE(VkSurfaceKHR)
++
++#define VK_EXT_KHR_SURFACE_REVISION       19
++#define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER 1
++#define VK_EXT_KHR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_surface"
++
++typedef void (VKAPI *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface);
++
++#ifdef VK_PROTOTYPES
++void VKAPI vkDestroySurfaceKHR(
++    VkInstance                                   instance,
++    VkSurfaceKHR                                 surface);
++
++VkBool32 VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex,
++    VkSurfaceKHR                                surface);
++#endif
++
++#define vk_ext_khr_swapchain 1
++VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR)
++
++#define VK_EXT_KHR_SWAPCHAIN_REVISION     59
++#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
++#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
++#define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
++#define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0000801)
++#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR ((VkImageLayout)(int)0xc0000802)
++#define VK_SUBOPTIMAL_KHR                 ((VkResult)(int)0x40000403)
++#define VK_ERROR_OUT_OF_DATE_KHR          ((VkResult)(int)0xc0000804)
++
++
++typedef enum {
++    VK_SURFACE_TRANSFORM_NONE_KHR = 0,
++    VK_SURFACE_TRANSFORM_ROT90_KHR = 1,
++    VK_SURFACE_TRANSFORM_ROT180_KHR = 2,
++    VK_SURFACE_TRANSFORM_ROT270_KHR = 3,
++    VK_SURFACE_TRANSFORM_HMIRROR_KHR = 4,
++    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 5,
++    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 6,
++    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 7,
++    VK_SURFACE_TRANSFORM_INHERIT_KHR = 8,
++    VK_SURFACE_TRANSFORM_BEGIN_RANGE = VK_SURFACE_TRANSFORM_NONE_KHR,
++    VK_SURFACE_TRANSFORM_END_RANGE = VK_SURFACE_TRANSFORM_INHERIT_KHR,
++    VK_SURFACE_TRANSFORM_NUM = (VK_SURFACE_TRANSFORM_INHERIT_KHR - VK_SURFACE_TRANSFORM_NONE_KHR + 1),
++    VK_SURFACE_TRANSFORM_MAX_ENUM = 0x7FFFFFFF
++} VkSurfaceTransformKHR;
++
++typedef enum {
++    VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0,
++    VK_COLORSPACE_BEGIN_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
++    VK_COLORSPACE_END_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
++    VK_COLORSPACE_NUM = (VK_COLORSPACE_SRGB_NONLINEAR_KHR - VK_COLORSPACE_SRGB_NONLINEAR_KHR + 1),
++    VK_COLORSPACE_MAX_ENUM = 0x7FFFFFFF
++} VkColorSpaceKHR;
++
++typedef enum {
++    VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
++    VK_PRESENT_MODE_MAILBOX_KHR = 1,
++    VK_PRESENT_MODE_FIFO_KHR = 2,
++    VK_PRESENT_MODE_BEGIN_RANGE = VK_PRESENT_MODE_IMMEDIATE_KHR,
++    VK_PRESENT_MODE_END_RANGE = VK_PRESENT_MODE_FIFO_KHR,
++    VK_PRESENT_MODE_NUM = (VK_PRESENT_MODE_FIFO_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
++    VK_PRESENT_MODE_MAX_ENUM = 0x7FFFFFFF
++} VkPresentModeKHR;
++
++
++typedef enum {
++    VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
++    VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
++    VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
++    VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
++    VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
++    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
++    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
++    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
++    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
++} VkSurfaceTransformFlagBitsKHR;
++typedef VkFlags VkSurfaceTransformFlagsKHR;
++
++typedef struct {
++    uint32_t                                    minImageCount;
++    uint32_t                                    maxImageCount;
++    VkExtent2D                                  currentExtent;
++    VkExtent2D                                  minImageExtent;
++    VkExtent2D                                  maxImageExtent;
++    VkSurfaceTransformFlagsKHR                  supportedTransforms;
++    VkSurfaceTransformKHR                       currentTransform;
++    uint32_t                                    maxImageArraySize;
++    VkImageUsageFlags                           supportedUsageFlags;
++} VkSurfacePropertiesKHR;
++
++typedef struct {
++    VkFormat                                    format;
++    VkColorSpaceKHR                             colorSpace;
++} VkSurfaceFormatKHR;
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                   pNext;
++    VkSurfaceKHR                                surface;
++    uint32_t                                    minImageCount;
++    VkFormat                                    imageFormat;
++    VkColorSpaceKHR                             imageColorSpace;
++    VkExtent2D                                  imageExtent;
++    VkImageUsageFlags                           imageUsageFlags;
++    VkSurfaceTransformKHR                       preTransform;
++    uint32_t                                    imageArraySize;
++    VkSharingMode                               sharingMode;
++    uint32_t                                    queueFamilyCount;
++    const uint32_t*                             pQueueFamilyIndices;
++    VkPresentModeKHR                            presentMode;
++    VkSwapchainKHR                              oldSwapchain;
++    VkBool32                                    clipped;
++} VkSwapchainCreateInfoKHR;
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                   pNext;
++    uint32_t                                    swapchainCount;
++    const VkSwapchainKHR*                       swapchains;
++    const uint32_t*                             imageIndices;
++} VkPresentInfoKHR;
++
++
++typedef VkResult (VKAPI *PFN_vkGetSurfacePropertiesKHR)(VkDevice  device, VkSurfaceKHR  surface, VkSurfacePropertiesKHR*  pSurfaceProperties);
++typedef VkResult (VKAPI *PFN_vkGetSurfaceFormatsKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pCount, VkSurfaceFormatKHR*  pSurfaceFormats);
++typedef VkResult (VKAPI *PFN_vkGetSurfacePresentModesKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pCount, VkPresentModeKHR*  pPresentModes);
++typedef VkResult (VKAPI *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, VkSwapchainKHR*  pSwapchain);
++typedef void (VKAPI *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain);
++typedef VkResult (VKAPI *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pCount, VkImage*  pSwapchainImages);
++typedef VkResult (VKAPI *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint64_t  timeout, VkSemaphore  semaphore, VkFence  fence, uint32_t*  pImageIndex);
++typedef VkResult (VKAPI *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkGetSurfacePropertiesKHR(
++    VkDevice                                     device,
++    VkSurfaceKHR                                 surface,
++    VkSurfacePropertiesKHR*                      pSurfaceProperties);
++
++VkResult VKAPI vkGetSurfaceFormatsKHR(
++    VkDevice                                     device,
++    VkSurfaceKHR                                 surface,
++    uint32_t*                                    pCount,
++    VkSurfaceFormatKHR*                          pSurfaceFormats);
++
++VkResult VKAPI vkGetSurfacePresentModesKHR(
++    VkDevice                                     device,
++    VkSurfaceKHR                                 surface,
++    uint32_t*                                    pCount,
++    VkPresentModeKHR*                            pPresentModes);
++
++VkResult VKAPI vkCreateSwapchainKHR(
++    VkDevice                                     device,
++    const VkSwapchainCreateInfoKHR*              pCreateInfo,
++    VkSwapchainKHR*                              pSwapchain);
++
++void VKAPI vkDestroySwapchainKHR(
++    VkDevice                                     device,
++    VkSwapchainKHR                               swapchain);
++
++VkResult VKAPI vkGetSwapchainImagesKHR(
++    VkDevice                                     device,
++    VkSwapchainKHR                               swapchain,
++    uint32_t*                                    pCount,
++    VkImage*                                     pSwapchainImages);
++
++VkResult VKAPI vkAcquireNextImageKHR(
++    VkDevice                                     device,
++    VkSwapchainKHR                               swapchain,
++    uint64_t                                     timeout,
++    VkSemaphore                                  semaphore,
++    VkFence                                      fence,
++    uint32_t*                                    pImageIndex);
++
++VkResult VKAPI vkQueuePresentKHR(
++    VkQueue                                      queue,
++    VkPresentInfoKHR*                            pPresentInfo);
++#endif
++
++#define vk_ext_khr_display 1
++VK_DEFINE_NONDISP_HANDLE(VkDisplayKHR)
++VK_DEFINE_NONDISP_HANDLE(VkDisplayModeKHR)
++
++#define VK_EXT_KHR_DISPLAY_REVISION       16
++#define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 3
++#define VK_EXT_KHR_DISPLAY_EXTENSION_NAME "VK_EXT_KHR_display"
++#define VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c00)
++#define VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLANE_KHR ((VkStructureType)(int)0xc0000c01)
++
++
++typedef enum {
++    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000001,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000002,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000004,
++} VkDisplayPlaneAlphaFlagBitsKHR;
++typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
++
++typedef struct {
++    VkDisplayKHR                                display;
++    const char*                                   displayName;
++    VkExtent2D                                  physicalDimensions;
++    VkExtent2D                                  physicalResolution;
++    VkSurfaceTransformFlagsKHR                  supportedTransforms;
++    uint32_t                                    planeCount;
++    VkBool32                                    planeReorderPossible;
++} VkDisplayPropertiesKHR;
++
++typedef struct {
++    uint32_t                                    pixelClock;
++    VkExtent2D                                  visibleRegion;
++    VkExtent2D                                  totalRegion;
++    VkExtent2D                                  physicalDimensions;
++    uint32_t                                    hSyncStart;
++    uint32_t                                    hSyncEnd;
++    uint32_t                                    vSyncStart;
++    uint32_t                                    vSyncEnd;
++    VkBool32                                    interlaced;
++    VkBool32                                    doublescan;
++    VkBool32                                    hSyncPos;
++    VkBool32                                    vSyncPos;
++} VkDisplayTimingKHR;
++
++typedef struct {
++    VkDisplayModeKHR                            displayMode;
++    VkDisplayTimingKHR                          timing;
++} VkDisplayModePropertiesKHR;
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                   pNext;
++    VkDisplayTimingKHR                          timing;
++} VkDisplayModeCreateInfoKHR;
++
++typedef struct {
++    VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha;
++    VkOffset2D                                  minSrcPosition;
++    VkOffset2D                                  maxSrcPosition;
++    VkExtent2D                                  minSrcExtent;
++    VkExtent2D                                  maxSrcExtent;
++    VkOffset2D                                  minDstPosition;
++    VkOffset2D                                  maxDstPosition;
++    VkExtent2D                                  minDstExtent;
++    VkExtent2D                                  maxDstExtent;
++} VkDisplayPlanePropertiesKHR;
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                   pNext;
++    VkDisplayModeKHR                            displayMode;
++    uint32_t                                    planeIndex;
++    uint32_t                                    planeStackIndex;
++    VkSurfaceTransformKHR                       transform;
++    float                                       globalAlpha;
++    VkDisplayPlaneAlphaFlagsKHR                 alphaMode;
++    VkExtent2D                                  imageSize;
++} VkSurfaceDescriptionDisplayPlaneKHR;
++
++
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkDisplayPropertiesKHR* pProperties);
++typedef VkResult (VKAPI *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pCount, VkDisplayModePropertiesKHR* pModeProperties);
++typedef VkResult (VKAPI *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
++typedef VkResult (VKAPI *PFN_vkGetDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlanePropertiesKHR* pProperties);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkGetPhysicalDeviceDisplayPropertiesKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t*                                   pCount,
++    VkDisplayPropertiesKHR*                     pProperties);
++
++VkResult VKAPI vkGetDisplayModePropertiesKHR(
++    VkPhysicalDevice                            physicalDevice,
++    VkDisplayKHR                                display,
++    uint32_t*                                   pCount,
++    VkDisplayModePropertiesKHR*                 pModeProperties);
++
++VkResult VKAPI vkCreateDisplayModeKHR(
++    VkPhysicalDevice                            physicalDevice,
++    VkDisplayKHR                                display,
++    const VkDisplayModeCreateInfoKHR*           pCreateInfo,
++    VkDisplayModeKHR*                           pMode);
++
++VkResult VKAPI vkGetDisplayPlanePropertiesKHR(
++    VkPhysicalDevice                            physicalDevice,
++    VkDisplayKHR                                display,
++    VkDisplayModeKHR                            mode,
++    uint32_t                                    planeIndex,
++    VkDisplayPlanePropertiesKHR*                pProperties);
++#endif
++
++#define vk_ext_khr_display_swapchain 1
++#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_REVISION 4
++#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
++#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_display_swapchain"
++#define VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0001000)
++#define VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0001001)
++#define VK_ERROR_INCOMPATIBLE_DISPLAY_KHR ((VkResult)(int)0xc0001002)
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                   pNext;
++    const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo;
++} VkDisplaySwapchainCreateInfoKHR;
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                   pNext;
++    VkRect2D                                    srcRect;
++    VkRect2D                                    dstRect;
++} VkDisplayPresentInfoKHR;
++
++
++
++#define vk_ext_khr_x11_surface 1
++#ifdef VK_USE_PLATFORM_X11_KHR
++#include <X11/Xlib.h>
++
++#define VK_EXT_KHR_X11_SURFACE_REVISION   1
++#define VK_EXT_KHR_X11_SURFACE_EXTENSION_NUMBER 5
++#define VK_EXT_KHR_X11_SURFACE_EXTENSION_NAME "VK_EXT_KHR_x11_surface"
++
++typedef VkResult (VKAPI *PFN_vkCreateX11SurfaceKHR)(VkInstance instance, Display* dpy, Window root, Window window, VkSurfaceKHR* pSurface);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkCreateX11SurfaceKHR(
++    VkInstance                                  instance,
++    Display*                                    dpy,
++    Window                                      root,
++    Window                                      window,
++    VkSurfaceKHR*                               pSurface);
++#endif
++#endif /* VK_USE_PLATFORM_X11_KHR */
++
++#define vk_ext_khr_xcb_surface 1
++#ifdef VK_USE_PLATFORM_XCB_KHR
++#include <xcb/xcb.h>
++
++#define VK_EXT_KHR_XCB_SURFACE_REVISION   1
++#define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
++#define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NAME "VK_EXT_KHR_xcb_surface"
++
++typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t root, xcb_window_t window, VkSurfaceKHR* pSurface);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkCreateXcbSurfaceKHR(
++    VkInstance                                  instance,
++    xcb_connection_t*                           connection,
++    xcb_window_t                                root,
++    xcb_window_t                                window,
++    VkSurfaceKHR*                               pSurface);
++#endif
++#endif /* VK_USE_PLATFORM_XCB_KHR */
++
++#define vk_ext_khr_wayland_surface 1
++#ifdef VK_USE_PLATFORM_WAYLAND_KHR
++#include <wayland-client.h>
++
++#define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 1
++#define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
++#define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_EXT_KHR_wayland_surface"
++
++typedef VkResult (VKAPI *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkCreateWaylandSurfaceKHR(
++    VkInstance                                  instance,
++    struct wl_display*                          display,
++    struct wl_surface*                          surface,
++    VkSurfaceKHR*                               pSurface);
++#endif
++#endif /* VK_USE_PLATFORM_WAYLAND_KHR */
++
++#define vk_ext_khr_mir_surface 1
++#ifdef VK_USE_PLATFORM_MIR_KHR
++#include <mir_toolkit/client_types.h>
++
++#define VK_EXT_KHR_MIR_SURFACE_REVISION   1
++#define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
++#define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_mir_surface"
++
++typedef VkResult (VKAPI *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkCreateMirSurfaceKHR(
++    VkInstance                                  instance,
++    MirConnection*                              connection,
++    MirSurface*                                 mirSurface,
++    VkSurfaceKHR*                               pSurface);
++#endif
++#endif /* VK_USE_PLATFORM_MIR_KHR */
++
++#define vk_ext_khr_android_surface 1
++#ifdef VK_USE_PLATFORM_ANDROID_KHR
++#include <android/native_window.h>
++
++#define VK_EXT_KHR_ANDROID_SURFACE_REVISION 1
++#define VK_EXT_KHR_ANDROID_SURFACE_EXTENSION_NUMBER 9
++#define VK_EXT_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_EXT_KHR_android_surface"
++#define VK_ERROR_INVALID_ANDROID_WINDOW_KHR ((VkResult)(int)0xc0002400)
++#define VK_ERROR_ANDROID_WINDOW_IN_USE_KHR ((VkResult)(int)0xc0002401)
++
++typedef VkResult (VKAPI *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, ANativeWindow* window, VkSurfaceKHR* pSurface);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkCreateAndroidSurfaceKHR(
++    VkInstance                                  instance,
++    ANativeWindow*                              window,
++    VkSurfaceKHR*                               pSurface);
++#endif
++#endif /* VK_USE_PLATFORM_ANDROID_KHR */
++
++#define vk_ext_khr_win32_surface 1
++#ifdef VK_USE_PLATFORM_WIN32_KHR
++#include <windows.h>
++
++#define VK_EXT_KHR_WIN32_SURFACE_REVISION 1
++#define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
++#define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_EXT_KHR_win32_surface"
++
++typedef VkResult (VKAPI *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkCreateWin32SurfaceKHR(
++    VkInstance                                  instance,
++    HINSTANCE                                   hinstance,
++    HWND                                        hwnd,
++    VkSurfaceKHR*                               pSurface);
++#endif
++#endif /* VK_USE_PLATFORM_WIN32_KHR */
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 0af3bc8..339101f 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -762,23 +762,28 @@ void vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, const VkSurfaceDescriptionKHR* pSurfaceDescription, VkBool32* pSupported) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, pSurfaceDescription, pSupported);
++void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface) {
++    GetVtbl(instance).DestroySurfaceKHR(instance, surface);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfacePropertiesKHR(VkDevice device, const VkSurfaceDescriptionKHR* pSurfaceDescription, VkSurfacePropertiesKHR* pSurfaceProperties) {
+-    return GetVtbl(device).GetSurfacePropertiesKHR(device, pSurfaceDescription, pSurfaceProperties);
++VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface) {
++    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfaceFormatsKHR(VkDevice device, const VkSurfaceDescriptionKHR* pSurfaceDescription, uint32_t* pCount, VkSurfaceFormatKHR* pSurfaceFormats) {
+-    return GetVtbl(device).GetSurfaceFormatsKHR(device, pSurfaceDescription, pCount, pSurfaceFormats);
++VkResult vkGetSurfacePropertiesKHR(VkDevice device, VkSurfaceKHR surface, VkSurfacePropertiesKHR* pSurfaceProperties) {
++    return GetVtbl(device).GetSurfacePropertiesKHR(device, surface, pSurfaceProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfacePresentModesKHR(VkDevice device, const VkSurfaceDescriptionKHR* pSurfaceDescription, uint32_t* pCount, VkPresentModeKHR* pPresentModes) {
+-    return GetVtbl(device).GetSurfacePresentModesKHR(device, pSurfaceDescription, pCount, pPresentModes);
++VkResult vkGetSurfaceFormatsKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pCount, VkSurfaceFormatKHR* pSurfaceFormats) {
++    return GetVtbl(device).GetSurfaceFormatsKHR(device, surface, pCount, pSurfaceFormats);
++}
++
++__attribute__((visibility("default")))
++VkResult vkGetSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pCount, VkPresentModeKHR* pPresentModes) {
++    return GetVtbl(device).GetSurfacePresentModesKHR(device, surface, pCount, pPresentModes);
+ }
+ __attribute__((visibility("default")))
+@@ -787,8 +792,8 @@ VkResult vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* p
+ }
+ __attribute__((visibility("default")))
+-VkResult vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain) {
+-    return GetVtbl(device).DestroySwapchainKHR(device, swapchain);
++void vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain) {
++    GetVtbl(device).DestroySwapchainKHR(device, swapchain);
+ }
+ __attribute__((visibility("default")))
+@@ -797,11 +802,16 @@ VkResult vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, uint32_t* pImageIndex) {
+-    return GetVtbl(device).AcquireNextImageKHR(device, swapchain, timeout, semaphore, pImageIndex);
++VkResult vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) {
++    return GetVtbl(device).AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
+ }
+ __attribute__((visibility("default")))
+ VkResult vkQueuePresentKHR(VkQueue queue, VkPresentInfoKHR* pPresentInfo) {
+     return GetVtbl(queue).QueuePresentKHR(queue, pPresentInfo);
+ }
++
++__attribute__((visibility("default")))
++VkResult vkCreateAndroidSurfaceKHR(VkInstance instance, struct ANativeWindow* window, VkSurfaceKHR* pSurface) {
++    return GetVtbl(instance).CreateAndroidSurfaceKHR(instance, window, pSurface);
++}
+diff --git a/vulkan/libvulkan/entry.cpp.tmpl b/vulkan/libvulkan/entry.cpp.tmpl
+index 72185e7..d0e665f 100644
+--- a/vulkan/libvulkan/entry.cpp.tmpl
++++ b/vulkan/libvulkan/entry.cpp.tmpl
+@@ -69,7 +69,7 @@ namespace {
+ } // namespace
+ ¶
+   {{range $f := AllCommands $}}
+-    {{if not (GetAnnotation $f "pfn")}}
++    {{if and (not (GetAnnotation $f "pfn")) (Macro "IsExportedEntry" $f)}}
+       __attribute__((visibility("default")))
+       {{if eq (Macro "IsSpecialEntry" $f.Name) "true"}}
+         {{Macro "EmitSpecialEntry" $f}}
+@@ -84,6 +84,25 @@ namespace {
+ {{/*
+ -------------------------------------------------------------------------------
++  Decides whether an entrypoint should be exported from the Android Vulkan
++  library. Entrypoints in the core API and in mandatory extensions are
++  exported.
++-------------------------------------------------------------------------------
++*/}}
++{{define "IsExportedEntry"}}
++  {{AssertType $ "Function"}}
++  {{$ext := GetAnnotation $ "extension"}}
++  {{if $ext}}
++    {{$extval := index $ext.Arguments 0}}
++    {{if      eq $extval "VK_EXT_KHR_surface"}}true
++    {{else if eq $extval "VK_EXT_KHR_swapchain"}}true
++    {{else if eq $extval "VK_EXT_KHR_android_surface"}}true{{end}}
++  {{else}}true{{end}}
++{{end}}
++
++
++{{/*
++-------------------------------------------------------------------------------
+   Decides whether an entrypoint needs special-case handling. Emits the string
+   "true" if so, nothing otherwise.
+ -------------------------------------------------------------------------------
+@@ -95,6 +114,7 @@ namespace {
+   {{end}}
+ {{end}}
++
+ {{/*
+ -------------------------------------------------------------------------------
+   Emits the entrypoint definition for the specified command, which always
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index b9bd689..f1ad5f3 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -49,8 +49,10 @@ const TEntry* FindProcEntry(const TEntry (&table)[N], const char* name) {
+ const NameProcEntry kInstanceProcTbl[] = {
+     // clang-format off
++    {"vkCreateAndroidSurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateAndroidSurfaceKHR)},
+     {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDevice)},
+     {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyInstance)},
++    {"vkDestroySurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySurfaceKHR)},
+     {"vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceExtensionProperties)},
+     {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties)},
+     {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(vkEnumeratePhysicalDevices)},
+@@ -209,8 +211,10 @@ const NameProcEntry kDeviceProcTbl[] = {
+ const NameOffsetEntry kInstanceOffsetTbl[] = {
+     // clang-format off
++    {"vkCreateAndroidSurfaceKHR", offsetof(InstanceVtbl, CreateAndroidSurfaceKHR)},
+     {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
+     {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
++    {"vkDestroySurfaceKHR", offsetof(InstanceVtbl, DestroySurfaceKHR)},
+     {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
+     {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
+     {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
+@@ -490,7 +494,9 @@ bool LoadInstanceVtbl(VkInstance instance,
+         ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceSparseImageFormatProperties");
+         success = false;
+     }
++    vtbl.DestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(get_proc_addr(instance, "vkDestroySurfaceKHR"));
+     vtbl.GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
++    vtbl.CreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(get_proc_addr(instance, "vkCreateAndroidSurfaceKHR"));
+     // clang-format on
+     return success;
+ }
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp.tmpl b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+index 6d5f618..c6ec0d1 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp.tmpl
++++ b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+@@ -78,7 +78,7 @@ const TEntry* FindProcEntry(const TEntry (&table)[N], const char* name) {
+ const NameProcEntry kInstanceProcTbl[] = {«
+   // clang-format off
+   {{range $f := SortBy (AllCommands $) "FunctionName"}}
+-    {{if eq (Macro "Vtbl" $f) "Instance"}}
++    {{if and (Macro "IsDispatched" $f) (eq (Macro "Vtbl" $f) "Instance")}}
+       {"{{Macro "FunctionName" $f}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "FunctionName" $f}})},
+     {{end}}
+   {{end}}
+@@ -88,7 +88,7 @@ const NameProcEntry kInstanceProcTbl[] = {«
+ const NameProcEntry kDeviceProcTbl[] = {«
+   // clang-format off
+   {{range $f := SortBy (AllCommands $) "FunctionName"}}
+-    {{if eq (Macro "Vtbl" $f) "Device"}}
++    {{if and (Macro "IsDispatched" $f) (eq (Macro "Vtbl" $f) "Device")}}
+       {"{{Macro "FunctionName" $f}}", reinterpret_cast<PFN_vkVoidFunction>({{Macro "FunctionName" $f}})},
+     {{end}}
+   {{end}}
+@@ -98,7 +98,7 @@ const NameProcEntry kDeviceProcTbl[] = {«
+ const NameOffsetEntry kInstanceOffsetTbl[] = {«
+   // clang-format off
+   {{range $f := SortBy (AllCommands $) "FunctionName"}}
+-    {{if eq (Macro "Vtbl" $f) "Instance"}}
++    {{if and (Macro "IsDispatched" $f) (eq (Macro "Vtbl" $f) "Instance")}}
+       {"{{Macro "FunctionName" $f}}", offsetof(InstanceVtbl, {{TrimPrefix "vk" (Macro "FunctionName" $f)}})},
+     {{end}}
+   {{end}}
+@@ -108,7 +108,7 @@ const NameOffsetEntry kInstanceOffsetTbl[] = {«
+ const NameOffsetEntry kDeviceOffsetTbl[] = {«
+   // clang-format off
+   {{range $f := SortBy (AllCommands $) "FunctionName"}}
+-    {{if eq (Macro "Vtbl" $f) "Device"}}
++    {{if and (Macro "IsDispatched" $f) (eq (Macro "Vtbl" $f) "Device")}}
+       {"{{Macro "FunctionName" $f}}", offsetof(DeviceVtbl, {{TrimPrefix "vk" (Macro "FunctionName" $f)}})},
+     {{end}}
+   {{end}}
+@@ -194,7 +194,7 @@ bool LoadInstanceVtbl(VkInstance instance,
+     {{end}}
+     {{range $f := AllCommands $}}
+       {{if eq (Macro "Vtbl" $f) "Instance"}}
+-        {{if (GetAnnotation $f "extension")}}
++        {{if and (GetAnnotation $f "extension") (Macro "IsDispatched" $f)}}
+     vtbl.{{TrimPrefix "vk" (Macro "FunctionName" $f)}} = §
+         reinterpret_cast<{{Macro "FunctionPtrName" $f}}>(§
+             get_proc_addr(instance, "{{Macro "FunctionName" $f}}"));
+@@ -265,3 +265,32 @@ bool LoadDeviceVtbl(VkDevice device,
+ } // namespace vulkan
+ ¶
+ {{end}}
++
++
++{{/*
++-------------------------------------------------------------------------------
++  This function emits nil for extension entrypoints that should not be
++  included in dispatch tables, "true" otherwise. Extensions that are ony used
++  directly between the loader and driver, or that aren't supported on Android
++  at all, should be excluded from dispatch.
++-------------------------------------------------------------------------------
++*/}}
++{{define "IsUnsupportedExtension"}}
++  {{$ext := index $.Arguments 0}}
++  {{     if eq $ext "VK_EXT_KHR_display"}}true
++  {{else if eq $ext "VK_EXT_KHR_display_swapchain"}}true
++  {{else if eq $ext "VK_EXT_KHR_x11_surface"}}true
++  {{else if eq $ext "VK_EXT_KHR_xcb_surface"}}true
++  {{else if eq $ext "VK_EXT_KHR_wayland_surface"}}true
++  {{else if eq $ext "VK_EXT_KHR_mir_surface"}}true
++  {{else if eq $ext "VK_EXT_KHR_win32_surface"}}true
++  {{end}}
++{{end}}
++
++{{define "IsDispatched"}}
++  {{AssertType $ "Function"}}
++  {{$ext := GetAnnotation $ "extension"}}
++  {{if not $ext}}true
++  {{else if not (Macro "IsUnsupportedExtension" $ext)}}true
++  {{end}}
++{{end}}
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index c427918..a44026f 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -1102,16 +1102,29 @@ VkResult DestroyDevice(VkDevice drv_device) {
+     return VK_SUCCESS;
+ }
+-void* AllocDeviceMem(VkDevice device,
+-                     size_t size,
+-                     size_t align,
+-                     VkSystemAllocType type) {
++void* AllocMem(VkInstance instance,
++               size_t size,
++               size_t align,
++               VkSystemAllocType type) {
++    const VkAllocCallbacks* alloc_cb = instance->alloc;
++    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, type);
++}
++
++void FreeMem(VkInstance instance, void* ptr) {
++    const VkAllocCallbacks* alloc_cb = instance->alloc;
++    alloc_cb->pfnFree(alloc_cb->pUserData, ptr);
++}
++
++void* AllocMem(VkDevice device,
++               size_t size,
++               size_t align,
++               VkSystemAllocType type) {
+     const VkAllocCallbacks* alloc_cb =
+         static_cast<Device*>(GetVtbl(device)->device)->instance->alloc;
+     return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, type);
+ }
+-void FreeDeviceMem(VkDevice device, void* ptr) {
++void FreeMem(VkDevice device, void* ptr) {
+     const VkAllocCallbacks* alloc_cb =
+         static_cast<Device*>(GetVtbl(device)->device)->instance->alloc;
+     alloc_cb->pfnFree(alloc_cb->pUserData, ptr);
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 5e0a6c9..3e34e75 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -18,9 +18,8 @@
+ #define LIBVULKAN_LOADER_H 1
+ #define VK_PROTOTYPES
++#define VK_USE_PLATFORM_ANDROID_KHR
+ #include <vulkan/vulkan.h>
+-#include <vulkan/vk_ext_khr_swapchain.h>
+-#include <vulkan/vk_ext_khr_device_swapchain.h>
+ #include <vulkan/vk_ext_android_native_buffer.h>
+ namespace vulkan {
+@@ -52,6 +51,8 @@ struct InstanceVtbl {
+     PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
+     // Layers and loader only, not implemented by drivers
++    PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
++    PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
+     PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
+     // clang-format on
+ };
+@@ -230,11 +231,16 @@ VkResult AllocCommandBuffers(VkDevice device,
+                              VkCmdBuffer* cmdbuffers);
+ VkResult DestroyDevice(VkDevice drv_device);
+-void* AllocDeviceMem(VkDevice device,
+-                     size_t size,
+-                     size_t align,
+-                     VkSystemAllocType type);
+-void FreeDeviceMem(VkDevice device, void* ptr);
++void* AllocMem(VkInstance instance,
++               size_t size,
++               size_t align,
++               VkSystemAllocType type);
++void FreeMem(VkInstance instance, void* ptr);
++void* AllocMem(VkDevice device,
++               size_t size,
++               size_t align,
++               VkSystemAllocType type);
++void FreeMem(VkDevice device, void* ptr);
+ const DeviceVtbl& GetDriverVtbl(VkDevice device);
+ const DeviceVtbl& GetDriverVtbl(VkQueue queue);
+@@ -260,20 +266,22 @@ bool LoadDeviceVtbl(VkDevice device,
+ // -----------------------------------------------------------------------------
+ // swapchain.cpp
+-VkResult GetPhysicalDeviceSurfaceSupportKHR(
+-    VkPhysicalDevice pdev,
+-    uint32_t queue_family,
+-    const VkSurfaceDescriptionKHR* surface_desc,
+-    VkBool32* supported);
++VkResult CreateAndroidSurfaceKHR(VkInstance instance,
++                                 ANativeWindow* window,
++                                 VkSurfaceKHR* surface);
++void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
++VkBool32 GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
++                                            uint32_t queue_family,
++                                            VkSurfaceKHR surface);
+ VkResult GetSurfacePropertiesKHR(VkDevice device,
+-                                 const VkSurfaceDescriptionKHR* surface_desc,
++                                 VkSurfaceKHR surface,
+                                  VkSurfacePropertiesKHR* properties);
+ VkResult GetSurfaceFormatsKHR(VkDevice device,
+-                              const VkSurfaceDescriptionKHR* surface_desc,
++                              VkSurfaceKHR surface,
+                               uint32_t* count,
+                               VkSurfaceFormatKHR* formats);
+ VkResult GetSurfacePresentModesKHR(VkDevice device,
+-                                   const VkSurfaceDescriptionKHR* surface_desc,
++                                   VkSurfaceKHR surface,
+                                    uint32_t* count,
+                                    VkPresentModeKHR* modes);
+ VkResult CreateSwapchainKHR(VkDevice device,
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 70c0e33..6813680 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -49,43 +49,55 @@ struct NativeBaseDeleter {
+     void operator()(T* obj) { obj->common.decRef(&obj->common); }
+ };
+-template <typename T>
++template <typename T, typename Host>
+ class VulkanAllocator {
+    public:
+     typedef T value_type;
+-    explicit VulkanAllocator(VkDevice device) : device_(device) {}
++    explicit VulkanAllocator(Host host) : host_(host) {}
+     template <typename U>
+-    explicit VulkanAllocator(const VulkanAllocator<U>& other)
+-        : device_(other.device_) {}
++    explicit VulkanAllocator(const VulkanAllocator<U, Host>& other)
++        : host_(other.host_) {}
+     T* allocate(size_t n) const {
+-        return static_cast<T*>(AllocDeviceMem(
+-            device_, n * sizeof(T), alignof(T), VK_SYSTEM_ALLOC_TYPE_INTERNAL));
++        return static_cast<T*>(AllocMem(host_, n * sizeof(T), alignof(T),
++                                        VK_SYSTEM_ALLOC_TYPE_INTERNAL));
+     }
+-    void deallocate(T* p, size_t) const { return FreeDeviceMem(device_, p); }
++    void deallocate(T* p, size_t) const { return FreeMem(host_, p); }
+    private:
+-    template <typename U>
++    template <typename U, typename H>
+     friend class VulkanAllocator;
+-    VkDevice device_;
++    Host host_;
+ };
+-template <typename T>
+-std::shared_ptr<T> InitSharedPtr(VkDevice device, T* obj) {
++template <typename T, typename Host>
++std::shared_ptr<T> InitSharedPtr(Host host, T* obj) {
+     obj->common.incRef(&obj->common);
+     return std::shared_ptr<T>(obj, NativeBaseDeleter<T>(),
+-                              VulkanAllocator<T>(device));
++                              VulkanAllocator<T, Host>(host));
+ }
+ // ----------------------------------------------------------------------------
++struct Surface {
++    std::shared_ptr<ANativeWindow> window;
++};
++
++VkSurfaceKHR HandleFromSurface(Surface* surface) {
++    return VkSurfaceKHR(reinterpret_cast<uint64_t>(surface));
++}
++
++Surface* SurfaceFromHandle(VkSurfaceKHR handle) {
++    return reinterpret_cast<Surface*>(handle.handle);
++}
++
+ struct Swapchain {
+-    Swapchain(std::shared_ptr<ANativeWindow> window_, uint32_t num_images_)
+-        : window(window_), num_images(num_images_) {}
++    Swapchain(Surface& surface_, uint32_t num_images_)
++        : surface(surface_), num_images(num_images_) {}
+-    std::shared_ptr<ANativeWindow> window;
++    Surface& surface;
+     uint32_t num_images;
+     struct Image {
+@@ -113,95 +125,69 @@ Swapchain* SwapchainFromHandle(VkSwapchainKHR handle) {
+ namespace vulkan {
+-VkResult GetPhysicalDeviceSurfaceSupportKHR(
+-    VkPhysicalDevice /*pdev*/,
+-    uint32_t /*queue_family*/,
+-    const VkSurfaceDescriptionKHR* surface_desc,
+-    VkBool32* supported) {
+-// TODO(jessehall): Fix the header, preferrably upstream, so values added to
+-// existing enums don't trigger warnings like this.
+-#pragma clang diagnostic push
+-#pragma clang diagnostic ignored "-Wold-style-cast"
+-#pragma clang diagnostic ignored "-Wsign-conversion"
+-    ALOGE_IF(
+-        surface_desc->sType != VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_WINDOW_KHR,
+-        "vkGetPhysicalDeviceSurfaceSupportKHR: pSurfaceDescription->sType=%#x "
+-        "not supported",
+-        surface_desc->sType);
+-#pragma clang diagnostic pop
++VkResult CreateAndroidSurfaceKHR(VkInstance instance,
++                                 ANativeWindow* window,
++                                 VkSurfaceKHR* out_surface) {
++    void* mem = AllocMem(instance, sizeof(Surface), alignof(Surface),
++                         VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
++    if (!mem)
++        return VK_ERROR_OUT_OF_HOST_MEMORY;
++    Surface* surface = new (mem) Surface;
+-    const VkSurfaceDescriptionWindowKHR* window_desc =
+-        reinterpret_cast<const VkSurfaceDescriptionWindowKHR*>(surface_desc);
++    surface->window = InitSharedPtr(instance, window);
+-    // TODO(jessehall): Also check whether the physical device exports the
+-    // VK_EXT_ANDROID_native_buffer extension. For now, assume it does.
+-    *supported = (window_desc->platform == VK_PLATFORM_ANDROID_KHR &&
+-                  !window_desc->pPlatformHandle &&
+-                  static_cast<ANativeWindow*>(window_desc->pPlatformWindow)
+-                          ->common.magic == ANDROID_NATIVE_WINDOW_MAGIC);
++    // TODO(jessehall): Create and use NATIVE_WINDOW_API_VULKAN.
++    int err =
++        native_window_api_connect(surface->window.get(), NATIVE_WINDOW_API_EGL);
++    if (err != 0) {
++        // TODO(jessehall): Improve error reporting. Can we enumerate possible
++        // errors and translate them to valid Vulkan result codes?
++        ALOGE("native_window_api_connect() failed: %s (%d)", strerror(-err),
++              err);
++        surface->~Surface();
++        FreeMem(instance, surface);
++        return VK_ERROR_INITIALIZATION_FAILED;
++    }
++    *out_surface = HandleFromSurface(surface);
+     return VK_SUCCESS;
+ }
++void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface_handle) {
++    Surface* surface = SurfaceFromHandle(surface_handle);
++    if (!surface)
++        return;
++    native_window_api_disconnect(surface->window.get(), NATIVE_WINDOW_API_EGL);
++    surface->~Surface();
++    FreeMem(instance, surface);
++}
++
++VkBool32 GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
++                                            uint32_t /*queue_family*/,
++                                            VkSurfaceKHR /*surface*/) {
++    return VK_TRUE;
++}
++
+ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+-                                 const VkSurfaceDescriptionKHR* surface_desc,
++                                 VkSurfaceKHR surface,
+                                  VkSurfacePropertiesKHR* properties) {
+-    const VkSurfaceDescriptionWindowKHR* window_desc =
+-        reinterpret_cast<const VkSurfaceDescriptionWindowKHR*>(surface_desc);
+-    ANativeWindow* window =
+-        static_cast<ANativeWindow*>(window_desc->pPlatformWindow);
+-
+     int err;
+-
+-    // TODO(jessehall): Currently the window must be connected for several
+-    // queries -- including default dimensions -- to work, since Surface caches
+-    // the queried values at connect() and queueBuffer(), and query() returns
+-    // those cached values.
+-    //
+-    // The proposed refactoring to create a VkSurface object (bug 14596) will
+-    // give us a place to connect once per window. If that doesn't end up
+-    // happening, we'll probably need to maintain an internal list of windows
+-    // that have swapchains created for them, search that list here, and
+-    // only temporarily connect if the window doesn't have a swapchain.
+-
+-    bool disconnect = true;
+-    err = native_window_api_connect(window, NATIVE_WINDOW_API_EGL);
+-    if (err == -EINVAL) {
+-        // This is returned if the window is already connected, among other
+-        // things. We'll just assume we're already connected and charge ahead.
+-        // See TODO above, this is not cool.
+-        ALOGW(
+-            "vkGetSurfacePropertiesKHR: native_window_api_connect returned "
+-            "-EINVAL, assuming already connected");
+-        err = 0;
+-        disconnect = false;
+-    } else if (err != 0) {
+-        // TODO(jessehall): Improve error reporting. Can we enumerate possible
+-        // errors and translate them to valid Vulkan result codes?
+-        return VK_ERROR_INITIALIZATION_FAILED;
+-    }
++    ANativeWindow* window = SurfaceFromHandle(surface)->window.get();
+     int width, height;
+     err = window->query(window, NATIVE_WINDOW_DEFAULT_WIDTH, &width);
+     if (err != 0) {
+         ALOGE("NATIVE_WINDOW_DEFAULT_WIDTH query failed: %s (%d)",
+               strerror(-err), err);
+-        if (disconnect)
+-            native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     err = window->query(window, NATIVE_WINDOW_DEFAULT_HEIGHT, &height);
+     if (err != 0) {
+         ALOGE("NATIVE_WINDOW_DEFAULT_WIDTH query failed: %s (%d)",
+               strerror(-err), err);
+-        if (disconnect)
+-            native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+-    if (disconnect)
+-        native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
+-
+     properties->currentExtent = VkExtent2D{width, height};
+     // TODO(jessehall): Figure out what the min/max values should be.
+@@ -238,13 +224,14 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+ }
+ VkResult GetSurfaceFormatsKHR(VkDevice /*device*/,
+-                              const VkSurfaceDescriptionKHR* /*surface_desc*/,
++                              VkSurfaceKHR /*surface*/,
+                               uint32_t* count,
+                               VkSurfaceFormatKHR* formats) {
+-    // TODO(jessehall): Fill out the set of supported formats. Open question
+-    // whether we should query the driver for support -- how does it know what
+-    // the consumer can support? Should we support formats that don't
+-    // correspond to gralloc formats?
++    // TODO(jessehall): Fill out the set of supported formats. Longer term, add
++    // a new gralloc method to query whether a (format, usage) pair is
++    // supported, and check that for each gralloc format that corresponds to a
++    // Vulkan format. Shorter term, just add a few more formats to the ones
++    // hardcoded below.
+     const VkSurfaceFormatKHR kFormats[] = {
+         {VK_FORMAT_R8G8B8A8_UNORM, VK_COLORSPACE_SRGB_NONLINEAR_KHR},
+@@ -262,11 +249,10 @@ VkResult GetSurfaceFormatsKHR(VkDevice /*device*/,
+     return result;
+ }
+-VkResult GetSurfacePresentModesKHR(
+-    VkDevice /*device*/,
+-    const VkSurfaceDescriptionKHR* /*surface_desc*/,
+-    uint32_t* count,
+-    VkPresentModeKHR* modes) {
++VkResult GetSurfacePresentModesKHR(VkDevice /*device*/,
++                                   VkSurfaceKHR /*surface*/,
++                                   uint32_t* count,
++                                   VkPresentModeKHR* modes) {
+     const VkPresentModeKHR kModes[] = {
+         VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_KHR,
+     };
+@@ -304,26 +290,11 @@ VkResult CreateSwapchainKHR(VkDevice device,
+              "present modes other than FIFO are not yet implemented");
+     // -- Configure the native window --
+-    // Failure paths from here on need to disconnect the window.
++    Surface& surface = *SurfaceFromHandle(create_info->surface);
+     const DeviceVtbl& driver_vtbl = GetDriverVtbl(device);
+-    std::shared_ptr<ANativeWindow> window = InitSharedPtr(
+-        device, static_cast<ANativeWindow*>(
+-                    reinterpret_cast<const VkSurfaceDescriptionWindowKHR*>(
+-                        create_info->pSurfaceDescription)->pPlatformWindow));
+-
+-    // TODO(jessehall): Create and use NATIVE_WINDOW_API_VULKAN.
+-    err = native_window_api_connect(window.get(), NATIVE_WINDOW_API_EGL);
+-    if (err != 0) {
+-        // TODO(jessehall): Improve error reporting. Can we enumerate possible
+-        // errors and translate them to valid Vulkan result codes?
+-        ALOGE("native_window_api_connect() failed: %s (%d)", strerror(-err),
+-              err);
+-        return VK_ERROR_INITIALIZATION_FAILED;
+-    }
+-
+-    err = native_window_set_buffers_dimensions(window.get(),
++    err = native_window_set_buffers_dimensions(surface.window.get(),
+                                                create_info->imageExtent.width,
+                                                create_info->imageExtent.height);
+     if (err != 0) {
+@@ -332,40 +303,37 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         ALOGE("native_window_set_buffers_dimensions(%d,%d) failed: %s (%d)",
+               create_info->imageExtent.width, create_info->imageExtent.height,
+               strerror(-err), err);
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     err = native_window_set_scaling_mode(
+-        window.get(), NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW);
++        surface.window.get(), NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW);
+     if (err != 0) {
+         // TODO(jessehall): Improve error reporting. Can we enumerate possible
+         // errors and translate them to valid Vulkan result codes?
+         ALOGE("native_window_set_scaling_mode(SCALE_TO_WINDOW) failed: %s (%d)",
+               strerror(-err), err);
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     uint32_t min_undequeued_buffers;
+-    err = window->query(window.get(), NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS,
+-                        reinterpret_cast<int*>(&min_undequeued_buffers));
++    err = surface.window->query(
++        surface.window.get(), NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS,
++        reinterpret_cast<int*>(&min_undequeued_buffers));
+     if (err != 0) {
+         // TODO(jessehall): Improve error reporting. Can we enumerate possible
+         // errors and translate them to valid Vulkan result codes?
+         ALOGE("window->query failed: %s (%d)", strerror(-err), err);
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     uint32_t num_images =
+         (create_info->minImageCount - 1) + min_undequeued_buffers;
+-    err = native_window_set_buffer_count(window.get(), num_images);
++    err = native_window_set_buffer_count(surface.window.get(), num_images);
+     if (err != 0) {
+         // TODO(jessehall): Improve error reporting. Can we enumerate possible
+         // errors and translate them to valid Vulkan result codes?
+         ALOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err),
+               err);
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+@@ -377,31 +345,27 @@ VkResult CreateSwapchainKHR(VkDevice device,
+             &gralloc_usage);
+         if (result != VK_SUCCESS) {
+             ALOGE("vkGetSwapchainGrallocUsageANDROID failed: %d", result);
+-            native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+             return VK_ERROR_INITIALIZATION_FAILED;
+         }
+     } else {
+         gralloc_usage = GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_TEXTURE;
+     }
+-    err = native_window_set_usage(window.get(), gralloc_usage);
++    err = native_window_set_usage(surface.window.get(), gralloc_usage);
+     if (err != 0) {
+         // TODO(jessehall): Improve error reporting. Can we enumerate possible
+         // errors and translate them to valid Vulkan result codes?
+         ALOGE("native_window_set_usage failed: %s (%d)", strerror(-err), err);
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     // -- Allocate our Swapchain object --
+     // After this point, we must deallocate the swapchain on error.
+-    void* mem = AllocDeviceMem(device, sizeof(Swapchain), alignof(Swapchain),
+-                               VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
+-    if (!mem) {
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
++    void* mem = AllocMem(device, sizeof(Swapchain), alignof(Swapchain),
++                         VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
++    if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+-    }
+-    Swapchain* swapchain = new (mem) Swapchain(window, num_images);
++    Swapchain* swapchain = new (mem) Swapchain(surface, num_images);
+     // -- Dequeue all buffers and create a VkImage for each --
+     // Any failures during or after this must cancel the dequeued buffers.
+@@ -435,7 +399,8 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         Swapchain::Image& img = swapchain->images[i];
+         ANativeWindowBuffer* buffer;
+-        err = window->dequeueBuffer(window.get(), &buffer, &img.dequeue_fence);
++        err = surface.window->dequeueBuffer(surface.window.get(), &buffer,
++                                            &img.dequeue_fence);
+         if (err != 0) {
+             // TODO(jessehall): Improve error reporting. Can we enumerate
+             // possible errors and translate them to valid Vulkan result codes?
+@@ -469,8 +434,8 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     for (uint32_t i = 0; i < num_images; i++) {
+         Swapchain::Image& img = swapchain->images[i];
+         if (img.dequeued) {
+-            window->cancelBuffer(window.get(), img.buffer.get(),
+-                                 img.dequeue_fence);
++            surface.window->cancelBuffer(surface.window.get(), img.buffer.get(),
++                                         img.dequeue_fence);
+             img.dequeue_fence = -1;
+             img.dequeued = false;
+         }
+@@ -481,9 +446,8 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     }
+     if (result != VK_SUCCESS) {
+-        native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+         swapchain->~Swapchain();
+-        FreeDeviceMem(device, swapchain);
++        FreeMem(device, swapchain);
+         return result;
+     }
+@@ -494,7 +458,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+ VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle) {
+     const DeviceVtbl& driver_vtbl = GetDriverVtbl(device);
+     Swapchain* swapchain = SwapchainFromHandle(swapchain_handle);
+-    const std::shared_ptr<ANativeWindow>& window = swapchain->window;
++    const std::shared_ptr<ANativeWindow>& window = swapchain->surface.window;
+     for (uint32_t i = 0; i < swapchain->num_images; i++) {
+         Swapchain::Image& img = swapchain->images[i];
+@@ -509,9 +473,8 @@ VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle) {
+         }
+     }
+-    native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
+     swapchain->~Swapchain();
+-    FreeDeviceMem(device, swapchain);
++    FreeMem(device, swapchain);
+     return VK_SUCCESS;
+ }
+@@ -541,6 +504,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+                              VkSemaphore semaphore,
+                              uint32_t* image_index) {
+     Swapchain& swapchain = *SwapchainFromHandle(swapchain_handle);
++    ANativeWindow* window = swapchain.surface.window.get();
+     VkResult result;
+     int err;
+@@ -550,8 +514,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+     ANativeWindowBuffer* buffer;
+     int fence;
+-    err = swapchain.window->dequeueBuffer(swapchain.window.get(), &buffer,
+-                                          &fence);
++    err = window->dequeueBuffer(window, &buffer, &fence);
+     if (err != 0) {
+         // TODO(jessehall): Improve error reporting. Can we enumerate possible
+         // errors and translate them to valid Vulkan result codes?
+@@ -569,7 +532,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+     }
+     if (idx == swapchain.num_images) {
+         ALOGE("dequeueBuffer returned unrecognized buffer");
+-        swapchain.window->cancelBuffer(swapchain.window.get(), buffer, fence);
++        window->cancelBuffer(window, buffer, fence);
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wold-style-cast"
+         return VK_ERROR_OUT_OF_DATE_KHR;
+@@ -605,7 +568,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+         // number between the time the driver closes it and the time we close
+         // it. We must assume one of: the driver *always* closes it even on
+         // failure, or *never* closes it on failure.
+-        swapchain.window->cancelBuffer(swapchain.window.get(), buffer, fence);
++        window->cancelBuffer(window, buffer, fence);
+         swapchain.images[idx].dequeued = false;
+         swapchain.images[idx].dequeue_fence = -1;
+         return result;
+@@ -630,6 +593,7 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+     for (uint32_t sc = 0; sc < present_info->swapchainCount; sc++) {
+         Swapchain& swapchain =
+             *SwapchainFromHandle(present_info->swapchains[sc]);
++        ANativeWindow* window = swapchain.surface.window.get();
+         uint32_t image_idx = present_info->imageIndices[sc];
+         Swapchain::Image& img = swapchain.images[image_idx];
+         VkResult result;
+@@ -656,8 +620,7 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+             continue;
+         }
+-        err = swapchain.window->queueBuffer(swapchain.window.get(),
+-                                            img.buffer.get(), fence);
++        err = window->queueBuffer(window, img.buffer.get(), fence);
+         if (err != 0) {
+             // TODO(jessehall): What now? We should probably cancel the buffer,
+             // I guess?
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0008-vulkan-Update-from-version-0.183.0-to-0.184.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0008-vulkan-Update-from-version-0.183.0-to-0.184.0.patch
new file mode 100644 (file)
index 0000000..dc01c44
--- /dev/null
@@ -0,0 +1,533 @@
+From 7b91a4939779638ae33ce117e52fc58f911644d2 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sat, 21 Nov 2015 19:31:56 -0800
+Subject: [PATCH 08/30] vulkan: Update from version 0.183.0 to 0.184.0
+
+Change-Id: I11802010d9171877e3fc8cc6e0931f8c746660c4
+---
+ vulkan/api/vulkan.api              | 39 ++++++++++++----------------
+ vulkan/include/vulkan/vulkan.h     | 53 +++++++++++++++++++-------------------
+ vulkan/libvulkan/entry.cpp         | 21 ++++++---------
+ vulkan/libvulkan/get_proc_addr.cpp |  7 -----
+ vulkan/libvulkan/loader.h          |  1 -
+ vulkan/nulldrv/null_driver.cpp     |  9 ++-----
+ vulkan/nulldrv/null_driver.h       |  5 ++--
+ vulkan/nulldrv/null_driver_gen.cpp |  1 -
+ 8 files changed, 54 insertions(+), 82 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 878cf44..ab1fb1b 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 183
++define VERSION_MINOR 184
+ define VERSION_PATCH 0
+ // API limits
+@@ -929,7 +929,7 @@ bitfield VkImageAspectFlags {
+ /// Sparse memory bind flags
+ bitfield VkSparseMemoryBindFlags {
+-    VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT         = 0x00000001,  /// Replicate the first 64 KiB memory block to the entire bind rage
++    VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT               = 0x00000001,
+ }
+ /// Sparse image memory requirements flags
+@@ -1433,7 +1433,7 @@ class VkShaderModuleCreateInfo {
+     VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
+     const void*                                 pNext                  /// Pointer to next structure
+     platform.size_t                             codeSize               /// Specified in bytes
+-    const void*                                 pCode                  /// Binary code of size codeSize
++    const u32*                                  pCode                  /// Binary code of size codeSize
+     VkShaderModuleCreateFlags                   flags                  /// Reserved
+ }
+@@ -1566,9 +1566,9 @@ class VkPipelineRasterStateCreateInfo {
+     VkCullMode                                  cullMode
+     VkFrontFace                                 frontFace
+     VkBool32                                    depthBiasEnable
+-    f32                                         depthBias
++    f32                                         depthBiasConstantFactor
+     f32                                         depthBiasClamp
+-    f32                                         slopeScaledDepthBias
++    f32                                         depthBiasSlopeFactor
+     f32                                         lineWidth
+ }
+@@ -1844,6 +1844,7 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
+     VkBool32                                    depthBounds                               /// depth bounds test
+     VkBool32                                    wideLines                                 /// lines with width greater than 1
++    VkBool32                                    strictLines
+     VkBool32                                    largePoints                               /// points with size greater than 1
+     VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
+     VkBool32                                    multiViewport
+@@ -1989,7 +1990,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxStorageImageSamples                    /// max num of samples for a storage image
+     u32                                         maxSampleMaskWords                        /// max num of sample mask words
+-    u64                                         timestampFrequency                        /// 1/clock_tick_granularity for timestamp queries
++    f32                                         timestampPeriod
+     u32                                         maxClipDistances                          /// max number of clip distances
+     u32                                         maxCullDistances                          /// max number of cull distances
+@@ -2001,6 +2002,9 @@ class VkPhysicalDeviceLimits {
+     f32[2]                                      lineWidthRange                            /// range (min,max) of supported line widths
+     f32                                         pointSizeGranularity                      /// granularity of supported point sizes
+     f32                                         lineWidthGranularity                      /// granularity of supported line widths
++
++    u32                                         recommendedBufferCopyOffsetAlignment
++    u32                                         recommendedBufferCopyRowPitchAlignment
+ }
+ class VkPhysicalDeviceSparseProperties {
+@@ -2982,15 +2986,14 @@ cmd VkResult vkGetQueryPoolResults(
+         VkQueryPool                                 queryPool,
+         u32                                         startQuery,
+         u32                                         queryCount,
+-        platform.size_t*                            pDataSize,
++        platform.size_t                             dataSize,
+         void*                                       pData,
++        VkDeviceSize                                stride,
+         VkQueryResultFlags                          flags) {
+     deviceObject := GetDevice(device)
+     queryPoolObject := GetQueryPool(queryPool)
+     assert(queryPoolObject.device == device)
+-    dataSize := ?
+-    pDataSize[0] = dataSize
+     data := pData[0:dataSize]
+     return ?
+@@ -3209,20 +3212,10 @@ cmd void vkDestroyPipelineCache(
+     State.PipelineCaches[pipelineCache] = null
+ }
+-cmd platform.size_t vkGetPipelineCacheSize(
+-        VkDevice                                    device,
+-        VkPipelineCache                             pipelineCache) {
+-    deviceObject := GetDevice(device)
+-    pipelineCacheObject := GetPipelineCache(pipelineCache)
+-    assert(pipelineCacheObject.device == device)
+-
+-    return ?
+-}
+-
+ cmd VkResult vkGetPipelineCacheData(
+         VkDevice                                    device,
+         VkPipelineCache                             pipelineCache,
+-        platform.size_t                             dataSize,
++        platform.size_t*                            pDataSize,
+         void*                                       pData) {
+     deviceObject := GetDevice(device)
+     pipelineCacheObject := GetPipelineCache(pipelineCache)
+@@ -3741,9 +3734,9 @@ cmd void vkCmdSetLineWidth(
+ @threadSafety("app")
+ cmd void vkCmdSetDepthBias(
+         VkCmdBuffer                                 cmdBuffer,
+-        f32                                         depthBias,
++        f32                                         depthBiasConstantFactor,
+         f32                                         depthBiasClamp,
+-        f32                                         slopeScaledDepthBias) {
++        f32                                         depthBiasSlopeFactor) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+     cmdBufferObject.queueFlags = queueFlags
+@@ -4357,7 +4350,7 @@ cmd void vkCmdCopyQueryPoolResults(
+         u32                                         queryCount,
+         VkBuffer                                    destBuffer,
+         VkDeviceSize                                destOffset,
+-        VkDeviceSize                                destStride,
++        VkDeviceSize                                stride,
+         VkQueryResultFlags                          flags) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index ee921bf..75d1358 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 183, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 184, 0)
+ #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+@@ -85,7 +85,7 @@ extern "C" {
+ #else
+     #define VK_DEFINE_NONDISP_HANDLE(obj) typedef struct obj##_T { uint64_t handle; } obj;
+ #endif
+-        
++
+ typedef uint32_t VkBool32;
+@@ -877,7 +877,7 @@ typedef enum {
+ typedef VkFlags VkSparseImageFormatFlags;
+ typedef enum {
+-    VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT = 0x00000001,
++    VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT = 0x00000001,
+ } VkSparseMemoryBindFlagBits;
+ typedef VkFlags VkSparseMemoryBindFlags;
+@@ -1112,6 +1112,7 @@ typedef struct {
+     VkBool32                                    fillModeNonSolid;
+     VkBool32                                    depthBounds;
+     VkBool32                                    wideLines;
++    VkBool32                                    strictLines;
+     VkBool32                                    largePoints;
+     VkBool32                                    alphaToOne;
+     VkBool32                                    multiViewport;
+@@ -1260,7 +1261,7 @@ typedef struct {
+     uint32_t                                    maxSampledImageIntegerSamples;
+     uint32_t                                    maxStorageImageSamples;
+     uint32_t                                    maxSampleMaskWords;
+-    uint64_t                                    timestampFrequency;
++    float                                       timestampPeriod;
+     uint32_t                                    maxClipDistances;
+     uint32_t                                    maxCullDistances;
+     uint32_t                                    maxCombinedClipAndCullDistances;
+@@ -1269,6 +1270,8 @@ typedef struct {
+     float                                       lineWidthRange[2];
+     float                                       pointSizeGranularity;
+     float                                       lineWidthGranularity;
++    uint32_t                                    recommendedBufferCopyOffsetAlignment;
++    uint32_t                                    recommendedBufferCopyRowPitchAlignment;
+ } VkPhysicalDeviceLimits;
+ typedef struct {
+@@ -1521,7 +1524,7 @@ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     size_t                                      codeSize;
+-    const void*                                 pCode;
++    const uint32_t*                             pCode;
+     VkShaderModuleCreateFlags                   flags;
+ } VkShaderModuleCreateInfo;
+@@ -1640,9 +1643,9 @@ typedef struct {
+     VkCullMode                                  cullMode;
+     VkFrontFace                                 frontFace;
+     VkBool32                                    depthBiasEnable;
+-    float                                       depthBias;
++    float                                       depthBiasConstantFactor;
+     float                                       depthBiasClamp;
+-    float                                       slopeScaledDepthBias;
++    float                                       depthBiasSlopeFactor;
+     float                                       lineWidth;
+ } VkPipelineRasterStateCreateInfo;
+@@ -2132,7 +2135,7 @@ typedef VkResult (VKAPI *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool);
+ typedef void (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool);
+-typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags);
++typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+ typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
+ typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer);
+ typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
+@@ -2148,8 +2151,7 @@ typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCrea
+ typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader);
+ typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
+ typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache);
+-typedef size_t (VKAPI *PFN_vkGetPipelineCacheSize)(VkDevice device, VkPipelineCache pipelineCache);
+-typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData);
++typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+ typedef VkResult (VKAPI *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+ typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+ typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+@@ -2183,7 +2185,7 @@ typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBin
+ typedef void (VKAPI *PFN_vkCmdSetViewport)(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+ typedef void (VKAPI *PFN_vkCmdSetScissor)(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+ typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCmdBuffer cmdBuffer, float lineWidth);
+-typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias);
++typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+ typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCmdBuffer cmdBuffer, const float blendConst[4]);
+ typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
+ typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+@@ -2217,7 +2219,7 @@ typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCmdBuffer cmdBuffer, VkQueryPool que
+ typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+ typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset);
+-typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
++typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+ typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+ typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+ typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCmdBuffer cmdBuffer, VkRenderPassContents contents);
+@@ -2491,8 +2493,9 @@ VkResult VKAPI vkGetQueryPoolResults(
+     VkQueryPool                                 queryPool,
+     uint32_t                                    startQuery,
+     uint32_t                                    queryCount,
+-    size_t*                                     pDataSize,
++    size_t                                      dataSize,
+     void*                                       pData,
++    VkDeviceSize                                stride,
+     VkQueryResultFlags                          flags);
+ VkResult VKAPI vkCreateBuffer(
+@@ -2564,14 +2567,10 @@ void VKAPI vkDestroyPipelineCache(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache);
+-size_t VKAPI vkGetPipelineCacheSize(
+-    VkDevice                                    device,
+-    VkPipelineCache                             pipelineCache);
+-
+ VkResult VKAPI vkGetPipelineCacheData(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+-    size_t                                      dataSize,
++    size_t*                                     pDataSize,
+     void*                                       pData);
+ VkResult VKAPI vkMergePipelineCaches(
+@@ -2737,9 +2736,9 @@ void VKAPI vkCmdSetLineWidth(
+ void VKAPI vkCmdSetDepthBias(
+     VkCmdBuffer                                 cmdBuffer,
+-    float                                       depthBias,
++    float                                       depthBiasConstantFactor,
+     float                                       depthBiasClamp,
+-    float                                       slopeScaledDepthBias);
++    float                                       depthBiasSlopeFactor);
+ void VKAPI vkCmdSetBlendConstants(
+     VkCmdBuffer                                 cmdBuffer,
+@@ -2973,7 +2972,7 @@ void VKAPI vkCmdCopyQueryPoolResults(
+     uint32_t                                    queryCount,
+     VkBuffer                                    destBuffer,
+     VkDeviceSize                                destOffset,
+-    VkDeviceSize                                destStride,
++    VkDeviceSize                                stride,
+     VkQueryResultFlags                          flags);
+ void VKAPI vkCmdPushConstants(
+@@ -3317,8 +3316,8 @@ typedef struct {
+-#define vk_ext_khr_x11_surface 1
+ #ifdef VK_USE_PLATFORM_X11_KHR
++#define vk_ext_khr_x11_surface 1
+ #include <X11/Xlib.h>
+ #define VK_EXT_KHR_X11_SURFACE_REVISION   1
+@@ -3337,8 +3336,8 @@ VkResult VKAPI vkCreateX11SurfaceKHR(
+ #endif
+ #endif /* VK_USE_PLATFORM_X11_KHR */
+-#define vk_ext_khr_xcb_surface 1
+ #ifdef VK_USE_PLATFORM_XCB_KHR
++#define vk_ext_khr_xcb_surface 1
+ #include <xcb/xcb.h>
+ #define VK_EXT_KHR_XCB_SURFACE_REVISION   1
+@@ -3357,8 +3356,8 @@ VkResult VKAPI vkCreateXcbSurfaceKHR(
+ #endif
+ #endif /* VK_USE_PLATFORM_XCB_KHR */
+-#define vk_ext_khr_wayland_surface 1
+ #ifdef VK_USE_PLATFORM_WAYLAND_KHR
++#define vk_ext_khr_wayland_surface 1
+ #include <wayland-client.h>
+ #define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 1
+@@ -3376,8 +3375,8 @@ VkResult VKAPI vkCreateWaylandSurfaceKHR(
+ #endif
+ #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
+-#define vk_ext_khr_mir_surface 1
+ #ifdef VK_USE_PLATFORM_MIR_KHR
++#define vk_ext_khr_mir_surface 1
+ #include <mir_toolkit/client_types.h>
+ #define VK_EXT_KHR_MIR_SURFACE_REVISION   1
+@@ -3395,8 +3394,8 @@ VkResult VKAPI vkCreateMirSurfaceKHR(
+ #endif
+ #endif /* VK_USE_PLATFORM_MIR_KHR */
+-#define vk_ext_khr_android_surface 1
+ #ifdef VK_USE_PLATFORM_ANDROID_KHR
++#define vk_ext_khr_android_surface 1
+ #include <android/native_window.h>
+ #define VK_EXT_KHR_ANDROID_SURFACE_REVISION 1
+@@ -3415,8 +3414,8 @@ VkResult VKAPI vkCreateAndroidSurfaceKHR(
+ #endif
+ #endif /* VK_USE_PLATFORM_ANDROID_KHR */
+-#define vk_ext_khr_win32_surface 1
+ #ifdef VK_USE_PLATFORM_WIN32_KHR
++#define vk_ext_khr_win32_surface 1
+ #include <windows.h>
+ #define VK_EXT_KHR_WIN32_SURFACE_REVISION 1
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 339101f..0c7533f 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -307,8 +307,8 @@ void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) {
+-    return GetVtbl(device).GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
++VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) {
++    return GetVtbl(device).GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
+ }
+ __attribute__((visibility("default")))
+@@ -387,13 +387,8 @@ void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
+ }
+ __attribute__((visibility("default")))
+-size_t vkGetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
+-    return GetVtbl(device).GetPipelineCacheSize(device, pipelineCache);
+-}
+-
+-__attribute__((visibility("default")))
+-VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData) {
+-    return GetVtbl(device).GetPipelineCacheData(device, pipelineCache, dataSize, pData);
++VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) {
++    return GetVtbl(device).GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
+ }
+ __attribute__((visibility("default")))
+@@ -562,8 +557,8 @@ void vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth) {
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias) {
+-    GetVtbl(cmdBuffer).CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
++void vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) {
++    GetVtbl(cmdBuffer).CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
+ }
+ __attribute__((visibility("default")))
+@@ -732,8 +727,8 @@ void vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, V
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
+-    GetVtbl(cmdBuffer).CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
++void vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags) {
++    GetVtbl(cmdBuffer).CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index f1ad5f3..1135870 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -179,7 +179,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSparseMemoryRequirements)},
+     {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSubresourceLayout)},
+     {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
+-    {"vkGetPipelineCacheSize", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheSize)},
+     {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
+     {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
+     {"vkGetSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfaceFormatsKHR)},
+@@ -341,7 +340,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkGetImageSparseMemoryRequirements", offsetof(DeviceVtbl, GetImageSparseMemoryRequirements)},
+     {"vkGetImageSubresourceLayout", offsetof(DeviceVtbl, GetImageSubresourceLayout)},
+     {"vkGetPipelineCacheData", offsetof(DeviceVtbl, GetPipelineCacheData)},
+-    {"vkGetPipelineCacheSize", offsetof(DeviceVtbl, GetPipelineCacheSize)},
+     {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
+     {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
+     {"vkGetSurfaceFormatsKHR", offsetof(DeviceVtbl, GetSurfaceFormatsKHR)},
+@@ -772,11 +770,6 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkDestroyPipelineCache");
+         success = false;
+     }
+-    vtbl.GetPipelineCacheSize = reinterpret_cast<PFN_vkGetPipelineCacheSize>(get_proc_addr(device, "vkGetPipelineCacheSize"));
+-    if (UNLIKELY(!vtbl.GetPipelineCacheSize)) {
+-        ALOGE("missing device proc: %s", "vkGetPipelineCacheSize");
+-        success = false;
+-    }
+     vtbl.GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(get_proc_addr(device, "vkGetPipelineCacheData"));
+     if (UNLIKELY(!vtbl.GetPipelineCacheData)) {
+         ALOGE("missing device proc: %s", "vkGetPipelineCacheData");
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 3e34e75..e8ad915 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -106,7 +106,6 @@ struct DeviceVtbl {
+     PFN_vkDestroyShader DestroyShader;
+     PFN_vkCreatePipelineCache CreatePipelineCache;
+     PFN_vkDestroyPipelineCache DestroyPipelineCache;
+-    PFN_vkGetPipelineCacheSize GetPipelineCacheSize;
+     PFN_vkGetPipelineCacheData GetPipelineCacheData;
+     PFN_vkMergePipelineCaches MergePipelineCaches;
+     PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 7e890be..d3580a5 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -835,7 +835,7 @@ VkResult ResetEvent(VkDevice device, VkEvent event) {
+ void DestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
+ }
+-VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) {
++VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+@@ -859,12 +859,7 @@ void DestroyShader(VkDevice device, VkShader shader) {
+ void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
+ }
+-size_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
+-    ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+-}
+-
+-VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData) {
++VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index c35df18..5fd3acf 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -79,7 +79,7 @@ VkResult SetEvent(VkDevice device, VkEvent event);
+ VkResult ResetEvent(VkDevice device, VkEvent event);
+ VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool);
+ void DestroyQueryPool(VkDevice device, VkQueryPool queryPool);
+-VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags);
++VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+ VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
+ void DestroyBuffer(VkDevice device, VkBuffer buffer);
+ VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
+@@ -95,8 +95,7 @@ VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, Vk
+ void DestroyShader(VkDevice device, VkShader shader);
+ VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
+ void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache);
+-size_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache);
+-VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t dataSize, void* pData);
++VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+ VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+ VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+ VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index 431977d..31c56ff 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -173,7 +173,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetImageSparseMemoryRequirements>(GetImageSparseMemoryRequirements))},
+     {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetImageSubresourceLayout>(GetImageSubresourceLayout))},
+     {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetPipelineCacheData>(GetPipelineCacheData))},
+-    {"vkGetPipelineCacheSize", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetPipelineCacheSize>(GetPipelineCacheSize))},
+     {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetQueryPoolResults>(GetQueryPoolResults))},
+     {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkGetRenderAreaGranularity>(GetRenderAreaGranularity))},
+     {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkInvalidateMappedMemoryRanges>(InvalidateMappedMemoryRanges))},
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0009-vulkan.api-Distinguish-Vk-Flags-from-Vk-FlagBits.patch b/vulkan/patches/frameworks_native-sdk_0.10/0009-vulkan.api-Distinguish-Vk-Flags-from-Vk-FlagBits.patch
new file mode 100644 (file)
index 0000000..6a8b56a
--- /dev/null
@@ -0,0 +1,735 @@
+From d8e4b9a6523599305b93655a1b6cfbcc28530cf6 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Tue, 24 Nov 2015 10:24:18 -0800
+Subject: [PATCH 09/30] vulkan.api: Distinguish Vk*Flags from Vk*FlagBits
+
+Previously Vulkan never used the *FlagBits enums directly as the type
+of a parameter or field, only ever using the *Flags typedef. For cases
+when a variable should have exactl one of the options, a separate enum
+was used. Now Vulkan is switching to using the *FlagBits enum for such
+variables, to avoid needing two separate enums for the same thing.
+
+The API file didn't distinguish between these before, it only had one
+type for the bitfield, and the vulkan_h.tmpl template synthesized the
+*FlagBits name from the *Flags name during generation. Now that we
+have cases where some variables need the *FlagBits type and some need
+the *Flags type, we need to distinguish them in the API file. This
+change does that.
+
+This required some ugly casting in a few places to get around apic's
+strict operand type compatibility rules. Most of these can go away
+once b/25863296 is fixed.
+
+Change-Id: Ia153d4b0c91abe80e4c34a284ca9d721cc770795
+---
+ vulkan/api/vulkan.api | 229 +++++++++++++++++++++++++++-----------------------
+ 1 file changed, 122 insertions(+), 107 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index ab1fb1b..6f8c0d8 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -713,7 +713,8 @@ enum VkColorSpaceKHR {
+ /////////////////
+ /// Queue capabilities
+-bitfield VkQueueFlags {
++type VkFlags VkQueueFlags
++bitfield VkQueueFlagBits {
+     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
+@@ -722,7 +723,8 @@ bitfield VkQueueFlags {
+ }
+ /// Memory properties passed into vkAllocMemory().
+-bitfield VkMemoryPropertyFlags {
++type VkFlags VkMemoryPropertyFlags
++bitfield VkMemoryPropertyFlagBits {
+     VK_MEMORY_PROPERTY_DEVICE_ONLY                          = 0x00000000,    /// If otherwise stated, then allocate memory on device
+     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT                     = 0x00000001,    /// Memory should be mappable by host
+     VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT                = 0x00000002,    /// Memory may not have i/o coherency so vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
+@@ -732,12 +734,14 @@ bitfield VkMemoryPropertyFlags {
+ }
+ /// Memory heap flags
+-bitfield VkMemoryHeapFlags {
++type VkFlags VkMemoryHeapFlags
++bitfield VkMemoryHeapFlagBits {
+     VK_MEMORY_HEAP_HOST_LOCAL_BIT                           = 0x00000001,    /// If set, heap represents host memory
+ }
+ /// Memory output flags passed to resource transition commands
+-bitfield VkMemoryOutputFlags {
++type VkFlags VkMemoryOutputFlags
++bitfield VkMemoryOutputFlagBits {
+     VK_MEMORY_OUTPUT_HOST_WRITE_BIT                         = 0x00000001,    /// Controls output coherency of host 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
+@@ -746,7 +750,8 @@ bitfield VkMemoryOutputFlags {
+ }
+ /// Memory input flags passed to resource transition commands
+-bitfield VkMemoryInputFlags {
++type VkFlags VkMemoryInputFlags
++bitfield VkMemoryInputFlagBits {
+     VK_MEMORY_INPUT_HOST_READ_BIT                           = 0x00000001,    /// Controls input coherency of host 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
+@@ -760,7 +765,8 @@ bitfield VkMemoryInputFlags {
+ }
+ /// Buffer usage flags
+-bitfield VkBufferUsageFlags {
++type VkFlags VkBufferUsageFlags
++bitfield VkBufferUsageFlagBits {
+     VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT                     = 0x00000001,    /// Can be used as a source of transfer operations
+     VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT                = 0x00000002,    /// Can be used as a destination of transfer operations
+     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT                = 0x00000004,    /// Can be used as TBO
+@@ -773,14 +779,16 @@ bitfield VkBufferUsageFlags {
+ }
+ /// Buffer creation flags
+-bitfield VkBufferCreateFlags {
++type VkFlags VkBufferCreateFlags
++bitfield VkBufferCreateFlagBits {
+     VK_BUFFER_CREATE_SPARSE_BINDING_BIT                     = 0x00000001,    /// Buffer should support sparse backing
+     VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT                   = 0x00000002,    /// Buffer should support sparse backing with partial residency
+     VK_BUFFER_CREATE_SPARSE_ALIASED_BIT                     = 0x00000004,    /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
+ }
+ /// Shader stage flags
+-bitfield VkShaderStageFlags {
++type VkFlags VkShaderStageFlags
++bitfield VkShaderStageFlagBits {
+     VK_SHADER_STAGE_VERTEX_BIT                              = 0x00000001,
+     VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT                = 0x00000002,
+     VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT             = 0x00000004,
+@@ -792,16 +800,19 @@ bitfield VkShaderStageFlags {
+ }
+ /// Descriptor pool create flags
+-bitfield VkDescriptorPoolCreateFlags {
++type VkFlags VkDescriptorPoolCreateFlags
++bitfield VkDescriptorPoolCreateFlagBits {
+     VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT       = 0x00000001,
+ }
+ /// Descriptor pool reset flags
+-bitfield VkDescriptorPoolResetFlags {
++type VkFlags VkDescriptorPoolResetFlags
++bitfield VkDescriptorPoolResetFlagBits {
+ }
+ /// Image usage flags
+-bitfield VkImageUsageFlags {
++type VkFlags VkImageUsageFlags
++bitfield VkImageUsageFlagBits {
+     VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT                      = 0x00000001,    /// Can be used as a source of transfer operations
+     VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT                 = 0x00000002,    /// Can be used as a destination of transfer operations
+     VK_IMAGE_USAGE_SAMPLED_BIT                              = 0x00000004,    /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
+@@ -813,7 +824,8 @@ bitfield VkImageUsageFlags {
+ }
+ /// Image creation flags
+-bitfield VkImageCreateFlags {
++type VkFlags VkImageCreateFlags
++bitfield VkImageCreateFlagBits {
+     VK_IMAGE_CREATE_SPARSE_BINDING_BIT                      = 0x00000001,    /// Image should support sparse backing
+     VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT                    = 0x00000002,    /// Image should support sparse backing with partial residency
+     VK_IMAGE_CREATE_SPARSE_ALIASED_BIT                      = 0x00000004,    /// Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images
+@@ -822,20 +834,23 @@ bitfield VkImageCreateFlags {
+ }
+ /// Framebuffer attachment view creation flags
+-bitfield VkImageViewCreateFlags {
++type VkFlags VkImageViewCreateFlags
++bitfield VkImageViewCreateFlagBits {
+     VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT                = 0x00000001,
+     VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT              = 0x00000002,
+ }
+ /// Pipeline creation flags
+-bitfield VkPipelineCreateFlags {
++type VkFlags VkPipelineCreateFlags
++bitfield VkPipelineCreateFlagBits {
+     VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT             = 0x00000001,
+     VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                = 0x00000002,
+     VK_PIPELINE_CREATE_DERIVATIVE_BIT                       = 0x00000004,
+ }
+ /// Channel flags
+-bitfield VkChannelFlags {
++type VkFlags VkChannelFlags
++bitfield VkChannelFlagBits {
+     VK_CHANNEL_R_BIT                                        = 0x00000001,
+     VK_CHANNEL_G_BIT                                        = 0x00000002,
+     VK_CHANNEL_B_BIT                                        = 0x00000004,
+@@ -843,16 +858,19 @@ bitfield VkChannelFlags {
+ }
+ /// Fence creation flags
+-bitfield VkFenceCreateFlags {
++type VkFlags VkFenceCreateFlags
++bitfield VkFenceCreateFlagBits {
+     VK_FENCE_CREATE_SIGNALED_BIT                            = 0x00000001,
+ }
+ /// Semaphore creation flags
+-bitfield VkSemaphoreCreateFlags {
++type VkFlags VkSemaphoreCreateFlags
++bitfield VkSemaphoreCreateFlagBits {
+ }
+ /// Format capability flags
+-bitfield VkFormatFeatureFlags {
++type VkFlags VkFormatFeatureFlags
++bitfield VkFormatFeatureFlagBits {
+     VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT                     = 0x00000001,    /// Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
+     VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT                     = 0x00000002,    /// Format can be used for storage images (STORAGE_IMAGE descriptor type)
+     VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT              = 0x00000004,    /// Format supports atomic operations in case it's used for storage images
+@@ -868,12 +886,14 @@ bitfield VkFormatFeatureFlags {
+ }
+ /// Query control flags
+-bitfield VkQueryControlFlags {
++type VkFlags VkQueryControlFlags
++bitfield VkQueryControlFlagBits {
+     VK_QUERY_CONTROL_CONSERVATIVE_BIT                       = 0x00000001,    /// Allow conservative results to be collected by the query
+ }
+ /// Query result flags
+-bitfield VkQueryResultFlags {
++type VkFlags VkQueryResultFlags
++bitfield VkQueryResultFlagBits {
+     VK_QUERY_RESULT_DEFAULT                                 = 0x00000000,   /// Results of the queries are immediately written to the destination buffer as 32-bit values
+     VK_QUERY_RESULT_64_BIT                                  = 0x00000001,   /// Results of the queries are written to the destination buffer as 64-bit values
+     VK_QUERY_RESULT_WAIT_BIT                                = 0x00000002,   /// Results of the queries are waited on before proceeding with the result copy
+@@ -882,26 +902,31 @@ bitfield VkQueryResultFlags {
+ }
+ /// Shader module creation flags
+-bitfield VkShaderModuleCreateFlags {
++type VkFlags VkShaderModuleCreateFlags
++bitfield VkShaderModuleCreateFlagBits {
+ }
+ /// Shader creation flags
+-bitfield VkShaderCreateFlags {
++type VkFlags VkShaderCreateFlags
++bitfield VkShaderCreateFlagBits {
+ }
+ /// Event creation flags
+-bitfield VkEventCreateFlags {
++type VkFlags VkEventCreateFlags
++bitfield VkEventCreateFlagBits {
+ }
+ /// Command buffer usage flags
+-bitfield VkCmdBufferUsageFlags {
++type VkFlags VkCmdBufferUsageFlags
++bitfield VkCmdBufferUsageFlagBits {
+     VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT                 = 0x00000001,
+     VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT            = 0x00000002,
+     VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT                = 0x00000004,
+ }
+ /// Pipeline statistics flags
+-bitfield VkQueryPipelineStatisticFlags {
++type VkFlags VkQueryPipelineStatisticFlags
++bitfield VkQueryPipelineStatisticFlagBits {
+     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT                     = 0x00000001,  /// Optional
+     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT                   = 0x00000002,  /// Optional
+     VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT                   = 0x00000004,  /// Optional
+@@ -916,11 +941,13 @@ bitfield VkQueryPipelineStatisticFlags {
+ }
+ /// Memory mapping flags
+-bitfield VkMemoryMapFlags {
++type VkFlags VkMemoryMapFlags
++bitfield VkMemoryMapFlagBits {
+ }
+ /// Bitfield of image aspects
+-bitfield VkImageAspectFlags {
++type VkFlags VkImageAspectFlags
++bitfield VkImageAspectFlagBits {
+     VK_IMAGE_ASPECT_COLOR_BIT                               = 0x00000001,
+     VK_IMAGE_ASPECT_DEPTH_BIT                               = 0x00000002,
+     VK_IMAGE_ASPECT_STENCIL_BIT                             = 0x00000004,
+@@ -928,19 +955,22 @@ bitfield VkImageAspectFlags {
+ }
+ /// Sparse memory bind flags
+-bitfield VkSparseMemoryBindFlags {
++type VkFlags VkSparseMemoryBindFlags
++bitfield VkSparseMemoryBindFlagBits {
+     VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT               = 0x00000001,
+ }
+ /// Sparse image memory requirements flags
+-bitfield VkSparseImageFormatFlags {
++type VkFlags VkSparseImageFormatFlags
++bitfield VkSparseImageFormatFlagBits {
+     VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT                  = 0x00000001,  /// Image uses a single miptail region for all array slices
+     VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT                = 0x00000002,  /// Image requires mip levels to be an exact multiple of the sparse iamge block size for non-mip-tail levels.
+     VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT               = 0x00000004,  /// Image uses a non-standard sparse block size
+ }
+ /// Pipeline stages
+-bitfield VkPipelineStageFlags {
++type VkFlags VkPipelineStageFlags
++bitfield VkPipelineStageFlagBits {
+     VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT                       = 0x00000001,  /// Before subsequent commands are processed
+     VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT                     = 0x00000002,  /// Draw/DispatchIndirect command fetch
+     VK_PIPELINE_STAGE_VERTEX_INPUT_BIT                      = 0x00000004,  /// Vertex/index fetch
+@@ -961,30 +991,36 @@ bitfield VkPipelineStageFlags {
+ }
+ /// Render pass attachment description flags
+-bitfield VkAttachmentDescriptionFlags {
++type VkFlags VkAttachmentDescriptionFlags
++bitfield VkAttachmentDescriptionFlagBits {
+     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT                 = 0x00000001,  /// The attachment may alias physical memory of another attachment in the same renderpass
+ }
+ /// Subpass description flags
+-bitfield VkSubpassDescriptionFlags {
++type VkFlags VkSubpassDescriptionFlags
++bitfield VkSubpassDescriptionFlagBits {
+ }
+ /// Command pool creation flags
+-bitfield VkCmdPoolCreateFlags {
++type VkFlags VkCmdPoolCreateFlags
++bitfield VkCmdPoolCreateFlagBits {
+     VK_CMD_POOL_CREATE_TRANSIENT_BIT                        = 0x00000001,  /// Command buffers have a short lifetime
+     VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT             = 0x00000002,  /// Command buffers may release their memory individually
+ }
+ /// Command pool reset flags
+-bitfield VkCmdPoolResetFlags {
++type VkFlags VkCmdPoolResetFlags
++bitfield VkCmdPoolResetFlagBits {
+     VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT                 = 0x00000001,  /// Release resources owned by the pool
+ }
+-bitfield VkCmdBufferResetFlags {
++type VkFlags VkCmdBufferResetFlags
++bitfield VkCmdBufferResetFlagBits {
+     VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT               = 0x00000001,  /// Release resources owned by the buffer
+ }
+-bitfield VkSampleCountFlags {
++type VkFlags VkSampleCountFlags
++bitfield VkSampleCountFlagBits {
+     VK_SAMPLE_COUNT_1_BIT                                   = 0x00000001,
+     VK_SAMPLE_COUNT_2_BIT                                   = 0x00000002,
+     VK_SAMPLE_COUNT_4_BIT                                   = 0x00000004,
+@@ -994,14 +1030,17 @@ bitfield VkSampleCountFlags {
+     VK_SAMPLE_COUNT_64_BIT                                  = 0x00000040,
+ }
+-bitfield VkStencilFaceFlags {
++type VkFlags VkStencilFaceFlags
++bitfield VkStencilFaceFlagBits {
+     VK_STENCIL_FACE_NONE                                    = 0x00000000,   /// No faces
+     VK_STENCIL_FACE_FRONT_BIT                               = 0x00000001,   /// Front face
+     VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
+ }
+ @extension("VK_EXT_KHR_swapchain")
+-bitfield VkSurfaceTransformFlagsKHR {
++type VkFlags VkSurfaceTransformFlagsKHR
++@extension("VK_EXT_KHR_swapchain")
++bitfield VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_NONE_BIT_KHR                       = 0x00000001,
+     VK_SURFACE_TRANSFORM_ROT90_BIT_KHR                      = 0x00000002,
+     VK_SURFACE_TRANSFORM_ROT180_BIT_KHR                     = 0x00000004,
+@@ -1014,7 +1053,9 @@ bitfield VkSurfaceTransformFlagsKHR {
+ }
+ @extension("VK_EXT_KHR_display")
+-bitfield VkDisplayPlaneAlphaFlagsKHR {
++type VkFlags VkDisplayPlaneAlphaFlagsKHR
++@extension("VK_EXT_KHR_display")
++bitfield VkDisplayPlaneAlphaFlagBitsKHR {
+     VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000001,
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000002,
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000004,
+@@ -1181,7 +1222,7 @@ class VkMemoryRequirements {
+ }
+ class VkSparseImageFormatProperties {
+-    VkImageAspectFlags                          aspect
++    VkImageAspectFlagBits                       aspect
+     VkExtent3D                                  imageGranularity
+     VkSparseImageFormatFlags                    flags
+ }
+@@ -1284,7 +1325,7 @@ class VkBufferViewCreateInfo {
+ }
+ class VkImageSubresource {
+-    VkImageAspectFlags                          aspect
++    VkImageAspectFlagBits                       aspect
+     u32                                         mipLevel
+     u32                                         arrayLayer
+ }
+@@ -1443,7 +1484,7 @@ class VkShaderCreateInfo {
+     VkShaderModule                              module             /// Module containing entry point
+     const char*                                 pName              /// Null-terminated entry point name
+     VkShaderCreateFlags                         flags              /// Reserved
+-    VkShaderStageFlags                          stage
++    VkShaderStageFlagBits                       stage
+ }
+ class VkDescriptorSetLayoutBinding {
+@@ -2774,7 +2815,7 @@ cmd VkResult vkCreateFence(
+     fence := ?
+     pFence[0] = fence
+     State.Fences[fence] = new!FenceObject(
+-        device: device, signaled: (pCreateInfo.flags == VK_FENCE_CREATE_SIGNALED_BIT))
++        device: device, signaled: (pCreateInfo.flags == as!VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)))
+     return ?
+ }
+@@ -3695,11 +3736,11 @@ cmd void vkCmdBindPipeline(
+     pipelineObject := GetPipeline(pipeline)
+     assert(cmdBufferObject.device == pipelineObject.device)
+-    queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
++    queue := switch (pipelineBindPoint) {
+         case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
+         case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
+     }
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, queue)
+ }
+ @threadSafety("app")
+@@ -3708,8 +3749,7 @@ cmd void vkCmdSetViewport(
+         u32                                         viewportCount,
+         const VkViewport*                           pViewports) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3718,8 +3758,7 @@ cmd void vkCmdSetScissor(
+         u32                                         scissorCount,
+         const VkRect2D*                             pScissors) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3727,8 +3766,7 @@ cmd void vkCmdSetLineWidth(
+         VkCmdBuffer                                 cmdBuffer,
+         f32                                         lineWidth) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3738,8 +3776,7 @@ cmd void vkCmdSetDepthBias(
+         f32                                         depthBiasClamp,
+         f32                                         depthBiasSlopeFactor) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3750,8 +3787,7 @@ cmd void vkCmdSetBlendConstants(
+         // having to modify the AST and semantic model.
+         @readonly f32[4]                            blendConst) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3760,8 +3796,7 @@ cmd void vkCmdSetDepthBounds(
+         f32                                         minDepthBounds,
+         f32                                         maxDepthBounds) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3770,8 +3805,7 @@ cmd void vkCmdSetStencilCompareMask(
+         VkStencilFaceFlags                          faceMask,
+         u32                                         stencilCompareMask) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3780,8 +3814,7 @@ cmd void vkCmdSetStencilWriteMask(
+         VkStencilFaceFlags                          faceMask,
+         u32                                         stencilWriteMask) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3790,8 +3823,7 @@ cmd void vkCmdSetStencilReference(
+         VkStencilFaceFlags                          faceMask,
+         u32                                         stencilReference) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3818,11 +3850,11 @@ cmd void vkCmdBindDescriptorSets(
+         dynamicOffset := dynamicOffsets[i]
+     }
+-    queueFlags := cmdBufferObject.queueFlags | switch (pipelineBindPoint) {
++    queue := switch (pipelineBindPoint) {
+         case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
+         case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
+     }
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, queue)
+ }
+ @threadSafety("app")
+@@ -3837,8 +3869,7 @@ cmd void vkCmdBindIndexBuffer(
+     bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3862,8 +3893,7 @@ cmd void vkCmdBindVertexBuffers(
+         bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
+     }
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3875,8 +3905,7 @@ cmd void vkCmdDraw(
+         u32                                         firstInstance) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3889,8 +3918,7 @@ cmd void vkCmdDrawIndexed(
+         u32                                         firstInstance) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3906,8 +3934,7 @@ cmd void vkCmdDrawIndirect(
+     bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3923,8 +3950,7 @@ cmd void vkCmdDrawIndexedIndirect(
+     bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -3935,8 +3961,7 @@ cmd void vkCmdDispatch(
+         u32                                         z) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
+ }
+ @threadSafety("app")
+@@ -3950,8 +3975,7 @@ cmd void vkCmdDispatchIndirect(
+     bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_COMPUTE_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
+ }
+ @threadSafety("app")
+@@ -3975,8 +3999,7 @@ cmd void vkCmdCopyBuffer(
+     bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
+     bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+@@ -4002,8 +4025,7 @@ cmd void vkCmdCopyImage(
+     bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+     bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+@@ -4030,8 +4052,7 @@ cmd void vkCmdBlitImage(
+     bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+     bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -4056,8 +4077,7 @@ cmd void vkCmdCopyBufferToImage(
+     bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
+     bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+@@ -4082,8 +4102,7 @@ cmd void vkCmdCopyImageToBuffer(
+     bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+     bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+@@ -4101,8 +4120,7 @@ cmd void vkCmdUpdateBuffer(
+     bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+@@ -4116,8 +4134,7 @@ cmd void vkCmdFillBuffer(
+     destBufferObject := GetBuffer(destBuffer)
+     assert(cmdBufferObject.device == destBufferObject.device)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_DMA_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+@@ -4139,8 +4156,7 @@ cmd void vkCmdClearColorImage(
+     bindCmdBuffer(cmdBuffer, image, imageObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -4162,8 +4178,7 @@ cmd void vkCmdClearDepthStencilImage(
+     bindCmdBuffer(cmdBuffer, image, imageObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -4180,8 +4195,7 @@ cmd void vkCmdClearAttachments(
+         rect := rects[i]
+     }
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -4207,8 +4221,7 @@ cmd void vkCmdResolveImage(
+     bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+     bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+@@ -4382,8 +4395,7 @@ cmd void vkCmdBeginRenderPass(
+     assert(cmdBufferObject.device == renderPassObject.device)
+     assert(cmdBufferObject.device == framebufferObject.device)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ cmd void vkCmdNextSubpass(
+@@ -4397,8 +4409,7 @@ cmd void vkCmdEndRenderPass(
+         VkCmdBuffer                                 cmdBuffer) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
+-    cmdBufferObject.queueFlags = queueFlags
++    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ cmd void vkCmdExecuteCommands(
+@@ -4979,3 +4990,7 @@ macro ref!SwapchainObject GetSwapchain(VkSwapchainKHR swapchain) {
+     assert(swapchain in State.Swapchains)
+     return State.Swapchains[swapchain]
+ }
++
++macro VkQueueFlags AddQueueFlag(VkQueueFlags flags, VkQueueFlagBits bit) {
++    return as!VkQueueFlags(as!u32(flags) | as!u32(bit))
++}
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0010-vulkan-Update-from-version-0.184.0-to-0.185.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0010-vulkan-Update-from-version-0.184.0-to-0.185.0.patch
new file mode 100644 (file)
index 0000000..037bb33
--- /dev/null
@@ -0,0 +1,324 @@
+From e17cd31aef5ad14e28324af3262c79333cceb5bf Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Tue, 24 Nov 2015 11:08:36 -0800
+Subject: [PATCH 10/30] vulkan: Update from version 0.184.0 to 0.185.0
+
+Change-Id: I1d6012db32441fe3a99480bfed0e41dfce068980
+---
+ vulkan/api/vulkan.api              | 32 ++------------------------------
+ vulkan/include/vulkan/vulkan.h     | 26 +++-----------------------
+ vulkan/libvulkan/entry.cpp         | 14 ++------------
+ vulkan/libvulkan/get_proc_addr.cpp | 14 --------------
+ vulkan/libvulkan/loader.h          |  2 --
+ vulkan/nulldrv/null_driver.cpp     | 11 +----------
+ vulkan/nulldrv/null_driver.h       |  4 +---
+ vulkan/nulldrv/null_driver_gen.cpp |  2 --
+ 8 files changed, 9 insertions(+), 96 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 6f8c0d8..525b307 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 184
++define VERSION_MINOR 185
+ define VERSION_PATCH 0
+ // API limits
+@@ -217,11 +217,6 @@ enum VkQueryType {
+     VK_QUERY_TYPE_PIPELINE_STATISTICS                       = 0x00000001, /// Optional
+ }
+-enum VkTimestampType {
+-    VK_TIMESTAMP_TYPE_TOP                                   = 0x00000000,
+-    VK_TIMESTAMP_TYPE_BOTTOM                                = 0x00000001,
+-}
+-
+ enum VkBorderColor {
+     VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK                 = 0x00000000,
+     VK_BORDER_COLOR_INT_TRANSPARENT_BLACK                   = 0x00000001,
+@@ -1539,7 +1534,6 @@ class VkSpecializationInfo {
+ class VkPipelineShaderStageCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+-    VkShaderStageFlags                          stage
+     VkShader                                    shader
+     const VkSpecializationInfo*                 pSpecializationInfo
+ }
+@@ -2908,28 +2902,6 @@ cmd void vkDestroySemaphore(
+     State.Semaphores[semaphore] = null
+ }
+-@threadSafety("app")
+-cmd VkResult vkQueueSignalSemaphore(
+-        VkQueue                                     queue,
+-        VkSemaphore                                 semaphore) {
+-    queueObject := GetQueue(queue)
+-    semaphoreObject := GetSemaphore(semaphore)
+-    assert(queueObject.device == semaphoreObject.device)
+-
+-    return ?
+-}
+-
+-@threadSafety("system")
+-cmd VkResult vkQueueWaitSemaphore(
+-        VkQueue                                     queue,
+-        VkSemaphore                                 semaphore) {
+-    queueObject := GetQueue(queue)
+-    semaphoreObject := GetSemaphore(semaphore)
+-    assert(queueObject.device == semaphoreObject.device)
+-
+-    return ?
+-}
+-
+ // Event functions
+@@ -4347,7 +4319,7 @@ cmd void vkCmdResetQueryPool(
+ @threadSafety("app")
+ cmd void vkCmdWriteTimestamp(
+         VkCmdBuffer                                 cmdBuffer,
+-        VkTimestampType                             timestampType,
++        VkPipelineStageFlagBits                     pipelineStage,
+         VkBuffer                                    destBuffer,
+         VkDeviceSize                                destOffset) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 75d1358..c0f3bc7 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 184, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 185, 0)
+ #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+@@ -772,15 +772,6 @@ typedef enum {
+ } VkIndexType;
+ typedef enum {
+-    VK_TIMESTAMP_TYPE_TOP = 0,
+-    VK_TIMESTAMP_TYPE_BOTTOM = 1,
+-    VK_TIMESTAMP_TYPE_BEGIN_RANGE = VK_TIMESTAMP_TYPE_TOP,
+-    VK_TIMESTAMP_TYPE_END_RANGE = VK_TIMESTAMP_TYPE_BOTTOM,
+-    VK_TIMESTAMP_TYPE_NUM = (VK_TIMESTAMP_TYPE_BOTTOM - VK_TIMESTAMP_TYPE_TOP + 1),
+-    VK_TIMESTAMP_TYPE_MAX_ENUM = 0x7FFFFFFF
+-} VkTimestampType;
+-
+-typedef enum {
+     VK_RENDER_PASS_CONTENTS_INLINE = 0,
+     VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS = 1,
+     VK_RENDER_PASS_CONTENTS_BEGIN_RANGE = VK_RENDER_PASS_CONTENTS_INLINE,
+@@ -1561,7 +1552,6 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkShaderStageFlagBits                       stage;
+     VkShader                                    shader;
+     const VkSpecializationInfo*                 pSpecializationInfo;
+ } VkPipelineShaderStageCreateInfo;
+@@ -2126,8 +2116,6 @@ typedef VkResult (VKAPI *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+ typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore);
+ typedef void (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore);
+-typedef VkResult (VKAPI *PFN_vkQueueSignalSemaphore)(VkQueue queue, VkSemaphore semaphore);
+-typedef VkResult (VKAPI *PFN_vkQueueWaitSemaphore)(VkQueue queue, VkSemaphore semaphore);
+ typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent);
+ typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+@@ -2218,7 +2206,7 @@ typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCmdBuffer cmdBuffer, VkPipeline
+ typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+ typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset);
++typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset);
+ typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+ typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+ typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+@@ -2450,14 +2438,6 @@ void VKAPI vkDestroySemaphore(
+     VkDevice                                    device,
+     VkSemaphore                                 semaphore);
+-VkResult VKAPI vkQueueSignalSemaphore(
+-    VkQueue                                     queue,
+-    VkSemaphore                                 semaphore);
+-
+-VkResult VKAPI vkQueueWaitSemaphore(
+-    VkQueue                                     queue,
+-    VkSemaphore                                 semaphore);
+-
+ VkResult VKAPI vkCreateEvent(
+     VkDevice                                    device,
+     const VkEventCreateInfo*                    pCreateInfo,
+@@ -2961,7 +2941,7 @@ void VKAPI vkCmdResetQueryPool(
+ void VKAPI vkCmdWriteTimestamp(
+     VkCmdBuffer                                 cmdBuffer,
+-    VkTimestampType                             timestampType,
++    VkPipelineStageFlagBits                     pipelineStage,
+     VkBuffer                                    destBuffer,
+     VkDeviceSize                                destOffset);
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 0c7533f..c69b99f 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -262,16 +262,6 @@ void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) {
+-    return GetVtbl(queue).QueueSignalSemaphore(queue, semaphore);
+-}
+-
+-__attribute__((visibility("default")))
+-VkResult vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) {
+-    return GetVtbl(queue).QueueWaitSemaphore(queue, semaphore);
+-}
+-
+-__attribute__((visibility("default")))
+ VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent) {
+     return GetVtbl(device).CreateEvent(device, pCreateInfo, pEvent);
+ }
+@@ -722,8 +712,8 @@ void vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) {
+-    GetVtbl(cmdBuffer).CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
++void vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset) {
++    GetVtbl(cmdBuffer).CmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index 1135870..68a77d5 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -192,10 +192,8 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
+     {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
+     {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
+-    {"vkQueueSignalSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSignalSemaphore)},
+     {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
+     {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
+-    {"vkQueueWaitSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitSemaphore)},
+     {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandBuffer)},
+     {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandPool)},
+     {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetDescriptorPool)},
+@@ -353,10 +351,8 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
+     {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
+     {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
+-    {"vkQueueSignalSemaphore", offsetof(DeviceVtbl, QueueSignalSemaphore)},
+     {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
+     {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
+-    {"vkQueueWaitSemaphore", offsetof(DeviceVtbl, QueueWaitSemaphore)},
+     {"vkResetCommandBuffer", offsetof(DeviceVtbl, ResetCommandBuffer)},
+     {"vkResetCommandPool", offsetof(DeviceVtbl, ResetCommandPool)},
+     {"vkResetDescriptorPool", offsetof(DeviceVtbl, ResetDescriptorPool)},
+@@ -645,16 +641,6 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkDestroySemaphore");
+         success = false;
+     }
+-    vtbl.QueueSignalSemaphore = reinterpret_cast<PFN_vkQueueSignalSemaphore>(get_proc_addr(device, "vkQueueSignalSemaphore"));
+-    if (UNLIKELY(!vtbl.QueueSignalSemaphore)) {
+-        ALOGE("missing device proc: %s", "vkQueueSignalSemaphore");
+-        success = false;
+-    }
+-    vtbl.QueueWaitSemaphore = reinterpret_cast<PFN_vkQueueWaitSemaphore>(get_proc_addr(device, "vkQueueWaitSemaphore"));
+-    if (UNLIKELY(!vtbl.QueueWaitSemaphore)) {
+-        ALOGE("missing device proc: %s", "vkQueueWaitSemaphore");
+-        success = false;
+-    }
+     vtbl.CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(get_proc_addr(device, "vkCreateEvent"));
+     if (UNLIKELY(!vtbl.CreateEvent)) {
+         ALOGE("missing device proc: %s", "vkCreateEvent");
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index e8ad915..15e2779 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -139,8 +139,6 @@ struct DeviceVtbl {
+     PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
+     PFN_vkQueueBindSparseImageOpaqueMemory QueueBindSparseImageOpaqueMemory;
+     PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
+-    PFN_vkQueueSignalSemaphore QueueSignalSemaphore;
+-    PFN_vkQueueWaitSemaphore QueueWaitSemaphore;
+     PFN_vkBeginCommandBuffer BeginCommandBuffer;
+     PFN_vkEndCommandBuffer EndCommandBuffer;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index d3580a5..35f2d84 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -805,15 +805,6 @@ VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFen
+ void DestroySemaphore(VkDevice device, VkSemaphore semaphore) {
+ }
+-VkResult QueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) {
+-    ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+-}
+-
+-VkResult QueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) {
+-    return VK_SUCCESS;
+-}
+-
+ void DestroyEvent(VkDevice device, VkEvent event) {
+ }
+@@ -1040,7 +1031,7 @@ void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
+ void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
+ }
+-void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) {
++void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset) {
+ }
+ void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 5fd3acf..f212371 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -70,8 +70,6 @@ VkResult GetFenceStatus(VkDevice device, VkFence fence);
+ VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+ VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore);
+ void DestroySemaphore(VkDevice device, VkSemaphore semaphore);
+-VkResult QueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore);
+-VkResult QueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore);
+ VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent);
+ void DestroyEvent(VkDevice device, VkEvent event);
+ VkResult GetEventStatus(VkDevice device, VkEvent event);
+@@ -162,7 +160,7 @@ void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask
+ void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+ void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset);
++void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset);
+ void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
+ void CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+ void CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index 31c56ff..a026bbf 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -181,10 +181,8 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseBufferMemory>(QueueBindSparseBufferMemory))},
+     {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseImageMemory>(QueueBindSparseImageMemory))},
+     {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(QueueBindSparseImageOpaqueMemory))},
+-    {"vkQueueSignalSemaphore", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueSignalSemaphore>(QueueSignalSemaphore))},
+     {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueSubmit>(QueueSubmit))},
+     {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueWaitIdle>(QueueWaitIdle))},
+-    {"vkQueueWaitSemaphore", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueWaitSemaphore>(QueueWaitSemaphore))},
+     {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkResetCommandBuffer>(ResetCommandBuffer))},
+     {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkResetCommandPool>(ResetCommandPool))},
+     {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkResetDescriptorPool>(ResetDescriptorPool))},
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0011-vulkan-Update-from-version-0.185.0-to-0.186.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0011-vulkan-Update-from-version-0.185.0-to-0.186.0.patch
new file mode 100644 (file)
index 0000000..940c4eb
--- /dev/null
@@ -0,0 +1,384 @@
+From 8fd54acc60cb43569c1960a1a7516089379c01a7 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Tue, 24 Nov 2015 11:37:23 -0800
+Subject: [PATCH 11/30] vulkan: Update from version 0.185.0 to 0.186.0
+
+Change-Id: I6acb7742a1d4628930bc0807adfd222bc8349c43
+---
+ vulkan/api/vulkan.api          | 12 ++++-----
+ vulkan/include/vulkan/vulkan.h | 53 +++++++++-----------------------------
+ vulkan/libvulkan/entry.cpp     |  4 +--
+ vulkan/libvulkan/swapchain.cpp |  4 +--
+ vulkan/nulldrv/null_driver.cpp | 58 ++++++++++++++++--------------------------
+ vulkan/nulldrv/null_driver.h   |  2 +-
+ vulkan/tools/vkinfo.cpp        |  2 --
+ 7 files changed, 45 insertions(+), 90 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 525b307..bbf9cfe 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 185
++define VERSION_MINOR 186
+ define VERSION_PATCH 0
+ // API limits
+@@ -215,6 +215,7 @@ enum VkDescriptorType {
+ enum VkQueryType {
+     VK_QUERY_TYPE_OCCLUSION                                 = 0x00000000,
+     VK_QUERY_TYPE_PIPELINE_STATISTICS                       = 0x00000001, /// Optional
++    VK_QUERY_TYPE_TIMESTAMP                                 = 0x00000002,
+ }
+ enum VkBorderColor {
+@@ -714,7 +715,6 @@ bitfield VkQueueFlagBits {
+     VK_QUEUE_COMPUTE_BIT                                    = 0x00000002,    /// Queue supports compute operations
+     VK_QUEUE_DMA_BIT                                        = 0x00000004,    /// Queue supports DMA operations
+     VK_QUEUE_SPARSE_MEMMGR_BIT                              = 0x00000008,    /// Queue supports sparse resource memory management operations
+-    VK_QUEUE_EXTENDED_BIT                                   = 0x40000000,    /// Extended queue
+ }
+ /// Memory properties passed into vkAllocMemory().
+@@ -4320,11 +4320,11 @@ cmd void vkCmdResetQueryPool(
+ cmd void vkCmdWriteTimestamp(
+         VkCmdBuffer                                 cmdBuffer,
+         VkPipelineStageFlagBits                     pipelineStage,
+-        VkBuffer                                    destBuffer,
+-        VkDeviceSize                                destOffset) {
++        VkQueryPool                                 queryPool,
++        u32                                         slot) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    destBufferObject := GetBuffer(destBuffer)
+-    assert(cmdBufferObject.device == destBufferObject.device)
++    queryPoolObject := GetQueryPool(queryPool)
++    assert(cmdBufferObject.device == queryPoolObject.device)
+ }
+ @threadSafety("app")
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index c0f3bc7..ca2ff85 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,49 +41,20 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 185, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 186, 0)
+-#if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+-    #define VK_NULL_HANDLE nullptr
+-#else
+-    #define VK_NULL_HANDLE 0
+-#endif
++#define VK_NULL_HANDLE 0
++
+ #define VK_DEFINE_HANDLE(obj) typedef struct obj##_T* obj;
+-#if defined(__cplusplus)
+-    #if ((defined(_MSC_VER) && _MSC_VER >= 1800) || __cplusplus >= 201103L)
+-        // The bool operator only works if there are no implicit conversions from an obj to
+-        // a bool-compatible type, which can then be used to unintentionally violate type safety.
+-        // C++11 and above supports the "explicit" keyword on conversion operators to stop this
+-        // from happening. Otherwise users of C++ below C++11 won't get direct access to evaluating
+-        // the object handle as a bool in expressions like:
+-        //     if (obj) vkDestroy(obj);
+-        #define VK_NONDISP_HANDLE_OPERATOR_BOOL() explicit operator bool() const { return handle != 0; }
+-        #define VK_NONDISP_HANDLE_CONSTRUCTOR_FROM_UINT64(obj) \
+-            explicit obj(uint64_t x) : handle(x) { } \
+-            obj(decltype(nullptr)) : handle(0) { }
+-    #else
+-        #define VK_NONDISP_HANDLE_OPERATOR_BOOL()
+-        #define VK_NONDISP_HANDLE_CONSTRUCTOR_FROM_UINT64(obj) \
+-            obj(uint64_t x) : handle(x) { }
+-    #endif
+-    #define VK_DEFINE_NONDISP_HANDLE(obj) \
+-        struct obj { \
+-            obj() : handle(0) { } \
+-            VK_NONDISP_HANDLE_CONSTRUCTOR_FROM_UINT64(obj) \
+-            obj& operator =(uint64_t x) { handle = x; return *this; } \
+-            bool operator==(const obj& other) const { return handle == other.handle; } \
+-            bool operator!=(const obj& other) const { return handle != other.handle; } \
+-            bool operator!() const { return !handle; } \
+-            VK_NONDISP_HANDLE_OPERATOR_BOOL() \
+-            uint64_t handle; \
+-        };
++#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
++        #define VK_DEFINE_NONDISP_HANDLE(obj) typedef struct obj##_T *obj;
+ #else
+-    #define VK_DEFINE_NONDISP_HANDLE(obj) typedef struct obj##_T { uint64_t handle; } obj;
++        #define VK_DEFINE_NONDISP_HANDLE(obj) typedef uint64_t obj;
+ #endif
+@@ -441,9 +412,10 @@ typedef enum {
+ typedef enum {
+     VK_QUERY_TYPE_OCCLUSION = 0,
+     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
++    VK_QUERY_TYPE_TIMESTAMP = 2,
+     VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
+-    VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_PIPELINE_STATISTICS,
+-    VK_QUERY_TYPE_NUM = (VK_QUERY_TYPE_PIPELINE_STATISTICS - VK_QUERY_TYPE_OCCLUSION + 1),
++    VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
++    VK_QUERY_TYPE_NUM = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
+     VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkQueryType;
+@@ -834,7 +806,6 @@ typedef enum {
+     VK_QUEUE_COMPUTE_BIT = 0x00000002,
+     VK_QUEUE_DMA_BIT = 0x00000004,
+     VK_QUEUE_SPARSE_MEMMGR_BIT = 0x00000008,
+-    VK_QUEUE_EXTENDED_BIT = 0x40000000,
+ } VkQueueFlagBits;
+ typedef VkFlags VkQueueFlags;
+@@ -2206,7 +2177,7 @@ typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCmdBuffer cmdBuffer, VkPipeline
+ typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+ typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset);
++typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+ typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+ typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+ typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+@@ -2942,8 +2913,8 @@ void VKAPI vkCmdResetQueryPool(
+ void VKAPI vkCmdWriteTimestamp(
+     VkCmdBuffer                                 cmdBuffer,
+     VkPipelineStageFlagBits                     pipelineStage,
+-    VkBuffer                                    destBuffer,
+-    VkDeviceSize                                destOffset);
++    VkQueryPool                                 queryPool,
++    uint32_t                                    slot);
+ void VKAPI vkCmdCopyQueryPoolResults(
+     VkCmdBuffer                                 cmdBuffer,
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index c69b99f..255ad97 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -712,8 +712,8 @@ void vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset) {
+-    GetVtbl(cmdBuffer).CmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset);
++void vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
++    GetVtbl(cmdBuffer).CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 6813680..2922465 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -90,7 +90,7 @@ VkSurfaceKHR HandleFromSurface(Surface* surface) {
+ }
+ Surface* SurfaceFromHandle(VkSurfaceKHR handle) {
+-    return reinterpret_cast<Surface*>(handle.handle);
++    return reinterpret_cast<Surface*>(handle);
+ }
+ struct Swapchain {
+@@ -118,7 +118,7 @@ VkSwapchainKHR HandleFromSwapchain(Swapchain* swapchain) {
+ }
+ Swapchain* SwapchainFromHandle(VkSwapchainKHR handle) {
+-    return reinterpret_cast<Swapchain*>(handle.handle);
++    return reinterpret_cast<Swapchain*>(handle);
+ }
+ }  // anonymous namespace
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 35f2d84..0f8382f 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -199,20 +199,15 @@ uint64_t AllocHandle(VkDevice device, HandleType::Enum type) {
+ namespace null_driver {
+-template <typename HandleT>
+-struct HandleTraits {};
+-
+-template <typename HandleT>
+-typename HandleTraits<HandleT>::PointerType GetObjectFromHandle(
+-    const HandleT& h) {
+-    return reinterpret_cast<typename HandleTraits<HandleT>::PointerType>(
+-        uintptr_t(h.handle));
+-}
+-
+-template <typename T>
+-typename T::HandleType GetHandleToObject(const T* obj) {
+-    return typename T::HandleType(reinterpret_cast<uintptr_t>(obj));
+-}
++#define DEFINE_OBJECT_HANDLE_CONVERSION(T)              \
++    T* Get##T##FromHandle(Vk##T h);                     \
++    T* Get##T##FromHandle(Vk##T h) {                    \
++        return reinterpret_cast<T*>(uintptr_t(h));      \
++    }                                                   \
++    Vk##T GetHandleTo##T(const T* obj);                 \
++    Vk##T GetHandleTo##T(const T* obj) {                \
++        return Vk##T(reinterpret_cast<uintptr_t>(obj)); \
++    }
+ // -----------------------------------------------------------------------------
+ // Global
+@@ -384,10 +379,7 @@ struct DeviceMemory {
+     VkDeviceSize size;
+     alignas(16) uint8_t data[0];
+ };
+-template <>
+-struct HandleTraits<VkDeviceMemory> {
+-    typedef DeviceMemory* PointerType;
+-};
++DEFINE_OBJECT_HANDLE_CONVERSION(DeviceMemory)
+ VkResult AllocMemory(VkDevice device,
+                      const VkMemoryAllocInfo* alloc_info,
+@@ -403,13 +395,13 @@ VkResult AllocMemory(VkDevice device,
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     mem->size = size;
+-    *mem_handle = GetHandleToObject(mem);
++    *mem_handle = GetHandleToDeviceMemory(mem);
+     return VK_SUCCESS;
+ }
+ void FreeMemory(VkDevice device, VkDeviceMemory mem_handle) {
+     const VkAllocCallbacks* alloc = device->instance->alloc;
+-    DeviceMemory* mem = GetObjectFromHandle(mem_handle);
++    DeviceMemory* mem = GetDeviceMemoryFromHandle(mem_handle);
+     alloc->pfnFree(alloc->pUserData, mem);
+ }
+@@ -419,7 +411,7 @@ VkResult MapMemory(VkDevice,
+                    VkDeviceSize,
+                    VkMemoryMapFlags,
+                    void** out_ptr) {
+-    DeviceMemory* mem = GetObjectFromHandle(mem_handle);
++    DeviceMemory* mem = GetDeviceMemoryFromHandle(mem_handle);
+     *out_ptr = &mem->data[0] + offset;
+     return VK_SUCCESS;
+ }
+@@ -431,10 +423,7 @@ struct Buffer {
+     typedef VkBuffer HandleType;
+     VkDeviceSize size;
+ };
+-template <>
+-struct HandleTraits<VkBuffer> {
+-    typedef Buffer* PointerType;
+-};
++DEFINE_OBJECT_HANDLE_CONVERSION(Buffer)
+ VkResult CreateBuffer(VkDevice device,
+                       const VkBufferCreateInfo* create_info,
+@@ -451,14 +440,14 @@ VkResult CreateBuffer(VkDevice device,
+     if (!buffer)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     buffer->size = create_info->size;
+-    *buffer_handle = GetHandleToObject(buffer);
++    *buffer_handle = GetHandleToBuffer(buffer);
+     return VK_SUCCESS;
+ }
+ void GetBufferMemoryRequirements(VkDevice,
+                                  VkBuffer buffer_handle,
+                                  VkMemoryRequirements* requirements) {
+-    Buffer* buffer = GetObjectFromHandle(buffer_handle);
++    Buffer* buffer = GetBufferFromHandle(buffer_handle);
+     requirements->size = buffer->size;
+     requirements->alignment = 16;  // allow fast Neon/SSE memcpy
+     requirements->memoryTypeBits = 0x1;
+@@ -466,7 +455,7 @@ void GetBufferMemoryRequirements(VkDevice,
+ void DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
+     const VkAllocCallbacks* alloc = device->instance->alloc;
+-    Buffer* buffer = GetObjectFromHandle(buffer_handle);
++    Buffer* buffer = GetBufferFromHandle(buffer_handle);
+     alloc->pfnFree(alloc->pUserData, buffer);
+ }
+@@ -477,10 +466,7 @@ struct Image {
+     typedef VkImage HandleType;
+     VkDeviceSize size;
+ };
+-template <>
+-struct HandleTraits<VkImage> {
+-    typedef Image* PointerType;
+-};
++DEFINE_OBJECT_HANDLE_CONVERSION(Image)
+ VkResult CreateImage(VkDevice device,
+                      const VkImageCreateInfo* create_info,
+@@ -509,14 +495,14 @@ VkResult CreateImage(VkDevice device,
+     if (!image)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     image->size = size;
+-    *image_handle = GetHandleToObject(image);
++    *image_handle = GetHandleToImage(image);
+     return VK_SUCCESS;
+ }
+ void GetImageMemoryRequirements(VkDevice,
+                                 VkImage image_handle,
+                                 VkMemoryRequirements* requirements) {
+-    Image* image = GetObjectFromHandle(image_handle);
++    Image* image = GetImageFromHandle(image_handle);
+     requirements->size = image->size;
+     requirements->alignment = 16;  // allow fast Neon/SSE memcpy
+     requirements->memoryTypeBits = 0x1;
+@@ -524,7 +510,7 @@ void GetImageMemoryRequirements(VkDevice,
+ void DestroyImage(VkDevice device, VkImage image_handle) {
+     const VkAllocCallbacks* alloc = device->instance->alloc;
+-    Image* image = GetObjectFromHandle(image_handle);
++    Image* image = GetImageFromHandle(image_handle);
+     alloc->pfnFree(alloc->pUserData, image);
+ }
+@@ -1031,7 +1017,7 @@ void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
+ void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
+ }
+-void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset) {
++void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
+ }
+ void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index f212371..f07d61c 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -160,7 +160,7 @@ void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask
+ void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+ void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset);
++void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+ void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
+ void CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+ void CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 918df47..f92b62c 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -79,8 +79,6 @@ const char* VkQueueFlagBitStr(VkQueueFlagBits bit) {
+             return "DMA";
+         case VK_QUEUE_SPARSE_MEMMGR_BIT:
+             return "SPARSE";
+-        case VK_QUEUE_EXTENDED_BIT:
+-            return "EXT";
+     }
+ }
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0012-vulkan-Update-from-version-0.186.0-to-0.188.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0012-vulkan-Update-from-version-0.186.0-to-0.188.0.patch
new file mode 100644 (file)
index 0000000..9f3e477
--- /dev/null
@@ -0,0 +1,3907 @@
+From d36b1d2be736d90e71e428b73537cb8d8dea2309 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Tue, 24 Nov 2015 12:44:21 -0800
+Subject: [PATCH 12/30] vulkan: Update from version 0.186.0 to 0.188.0
+
+Change-Id: Ida08d51f4e892202b594072d1e765ba5c55444db
+---
+ vulkan/api/vulkan.api          | 314 ++++++++++++++++++------------
+ vulkan/include/vulkan/vulkan.h | 421 ++++++++++++++++++++++++-----------------
+ vulkan/libvulkan/entry.cpp     | 256 ++++++++++++-------------
+ vulkan/libvulkan/loader.cpp    | 145 +++++++++-----
+ vulkan/libvulkan/loader.h      |   7 +-
+ vulkan/libvulkan/swapchain.cpp |  30 ++-
+ vulkan/nulldrv/null_driver.cpp | 211 +++++++++++++--------
+ vulkan/nulldrv/null_driver.h   |  88 ++++-----
+ vulkan/tools/vkinfo.cpp        |   9 +-
+ 9 files changed, 882 insertions(+), 599 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index bbf9cfe..b95c96e 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 186
++define VERSION_MINOR 188
+ define VERSION_PATCH 0
+ // API limits
+@@ -364,12 +364,16 @@ enum VkLogicOp {
+     VK_LOGIC_OP_SET                                         = 0x0000000f,
+ }
+-enum VkSystemAllocType {
+-    VK_SYSTEM_ALLOC_TYPE_API_OBJECT                         = 0x00000000,
+-    VK_SYSTEM_ALLOC_TYPE_INTERNAL                           = 0x00000001,
+-    VK_SYSTEM_ALLOC_TYPE_INTERNAL_TEMP                      = 0x00000002,
+-    VK_SYSTEM_ALLOC_TYPE_INTERNAL_SHADER                    = 0x00000003,
+-    VK_SYSTEM_ALLOC_TYPE_DEBUG                              = 0x00000004,
++enum VkSystemAllocScope {
++    VK_SYSTEM_ALLOC_SCOPE_FUNCTION                          = 0x00000000,
++    VK_SYSTEM_ALLOC_SCOPE_OBJECT                            = 0x00000001,
++    VK_SYSTEM_ALLOC_SCOPE_CACHE                             = 0x00000002,
++    VK_SYSTEM_ALLOC_SCOPE_DEVICE                            = 0x00000003,
++    VK_SYSTEM_ALLOC_SCOPE_INSTANCE                          = 0x00000004,
++}
++
++enum VkInternalAllocType {
++    VK_INTERNAL_ALLOC_TYPE_EXECUTABLE                       = 0x00000000,
+ }
+ enum VkPhysicalDeviceType {
+@@ -613,6 +617,9 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 45,
+     VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 46,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 47,
++    VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 48,
++    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 49,
++    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 50,
+     //@extension("VK_EXT_KHR_swapchain")
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
+@@ -697,6 +704,7 @@ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
+     VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
+     VK_PRESENT_MODE_FIFO_KHR                                = 0x00000002,
++    VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
+ }
+ @extension("VK_EXT_KHR_swapchain")
+@@ -1135,11 +1143,13 @@ class VkLayerProperties {
+ }
+ class VkSubmitInfo {
+-    u32                                         waitSemCount
++    VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_SUBMIT_INFO
++    const void*                                 pNext              /// Next structure in chain
++    u32                                         waitSemaphoreCount
+     const VkSemaphore*                          pWaitSemaphores
+-    u32                                         cmdBufferCount
++    u32                                         commandBufferCount
+     const VkCmdBuffer*                          pCommandBuffers
+-    u32                                         signalSemCount
++    u32                                         signalSemaphoreCount
+     const VkSemaphore*                          pSignalSemaphores
+ }
+@@ -1156,14 +1166,17 @@ class VkApplicationInfo {
+ class VkAllocCallbacks {
+     void*                                       pUserData
+     PFN_vkAllocFunction                         pfnAlloc
++    PFN_vkReallocFunction                       pfnRealloc
+     PFN_vkFreeFunction                          pfnFree
++    PFN_vkInternalAllocNotification             pfnInternalAlloc
++    PFN_vkInternalFreeNotification              pfnInternalFree
+ }
+ class VkDeviceQueueCreateInfo {
+     VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
+     const void*                                 pNext                     /// Pointer to next structure
+     u32                                         queueFamilyIndex
+-    u32                                         queueCount
++    u32                                         queuePriorityCount
+     const f32*                                  pQueuePriorities
+ }
+@@ -1172,9 +1185,9 @@ class VkDeviceCreateInfo {
+     const void*                                 pNext                      /// Pointer to next structure
+     u32                                         requestedQueueRecordCount
+     const VkDeviceQueueCreateInfo*              pRequestedQueues
+-    u32                                         layerCount
++    u32                                         enabledLayerNameCount
+     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
+-    u32                                         extensionCount
++    u32                                         enabledExtensionNameCount
+     const char* const*                          ppEnabledExtensionNames
+     const VkPhysicalDeviceFeatures*             pEnabledFeatures
+ }
+@@ -1183,10 +1196,9 @@ class VkInstanceCreateInfo {
+     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
+     const VkApplicationInfo*                    pAppInfo
+-    const VkAllocCallbacks*                     pAllocCb
+-    u32                                         layerCount
++    u32                                         enabledLayerNameCount
+     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
+-    u32                                         extensionCount
++    u32                                         enabledExtensionNameCount
+     const char* const*                          ppEnabledExtensionNames    /// Extension names to be enabled
+ }
+@@ -1280,7 +1292,7 @@ class VkWriteDescriptorSet {
+     VkDescriptorSet                             destSet                    /// Destination descriptor set
+     u32                                         destBinding                /// Binding within the destination descriptor set to write
+     u32                                         destArrayElement           /// Array element within the destination binding to write
+-    u32                                         count                      /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
++    u32                                         descriptorCount            /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
+     VkDescriptorType                            descriptorType             /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
+     const VkDescriptorImageInfo*                pImageInfo
+     const VkDescriptorBufferInfo*               pBufferInfo
+@@ -1296,7 +1308,7 @@ class VkCopyDescriptorSet {
+     VkDescriptorSet                             destSet                    /// Destination descriptor set
+     u32                                         destBinding                /// Binding within the destination descriptor set to copy to
+     u32                                         destArrayElement           /// Array element within the destination binding to copy to
+-    u32                                         count                      /// Number of descriptors to copy
++    u32                                         descriptorCount            /// Number of descriptors to copy
+ }
+ class VkBufferCreateInfo {
+@@ -1306,7 +1318,7 @@ class VkBufferCreateInfo {
+     VkBufferUsageFlags                          usage                      /// Buffer usage flags
+     VkBufferCreateFlags                         flags                      /// Buffer creation flags
+     VkSharingMode                               sharingMode
+-    u32                                         queueFamilyCount
++    u32                                         queueFamilyIndexCount
+     const u32*                                  pQueueFamilyIndices
+ }
+@@ -1378,7 +1390,7 @@ class VkImageCreateInfo {
+     VkImageUsageFlags                           usage                      /// Image usage flags
+     VkImageCreateFlags                          flags                      /// Image creation flags
+     VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
+-    u32                                         queueFamilyCount           /// Number of queue families to share across
++    u32                                         queueFamilyIndexCount      /// Number of queue families to share across
+     const u32*                                  pQueueFamilyIndices        /// Array of queue family indices to share across
+     VkImageLayout                               initialLayout              /// Initial image layout for all subresources
+ }
+@@ -1492,13 +1504,13 @@ class VkDescriptorSetLayoutBinding {
+ class VkDescriptorSetLayoutCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+-    u32                                         count              /// Number of bindings in the descriptor set layout
+-    const VkDescriptorSetLayoutBinding*         pBinding           /// Array of descriptor set layout bindings
++    u32                                         bindingCount       /// Number of bindings in the descriptor set layout
++    const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
+ }
+ class VkDescriptorTypeCount {
+     VkDescriptorType                            type
+-    u32                                         count
++    u32                                         descriptorCount
+ }
+ class VkDescriptorPoolCreateInfo {
+@@ -1506,15 +1518,15 @@ class VkDescriptorPoolCreateInfo {
+     const void*                                 pNext              /// Pointer to next structure
+     VkDescriptorPoolCreateFlags                 flags
+     u32                                         maxSets
+-    u32                                         count
+-    const VkDescriptorTypeCount*                pTypeCount
++    u32                                         typeCount
++    const VkDescriptorTypeCount*                pTypeCounts
+ }
+ class VkDescriptorSetAllocInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
+     const void*                                 pNext              /// Pointer to next structure
+     VkDescriptorPool                            descriptorPool
+-    u32                                         count
++    u32                                         setCount
+     const VkDescriptorSetLayout*                pSetLayouts
+ }
+@@ -1562,11 +1574,11 @@ class VkVertexInputAttributeDescription {
+ }
+ class VkPipelineVertexInputStateCreateInfo {
+-    VkStructureType                             sType          /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
+-    const void*                                 pNext          /// Pointer to next structure
+-    u32                                         bindingCount   /// number of bindings
++    VkStructureType                             sType                           /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
++    const void*                                 pNext                           /// Pointer to next structure
++    u32                                         vertexBindingDescriptionCount   /// number of bindings
+     const VkVertexInputBindingDescription*      pVertexBindingDescriptions
+-    u32                                         attributeCount /// number of attributes
++    u32                                         vertexAttributeDescriptionCount /// number of attributes
+     const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions
+ }
+@@ -1702,14 +1714,14 @@ class VkPipelineCacheCreateInfo {
+ class VkPushConstantRange {
+     VkShaderStageFlags                          stageFlags   /// Which stages use the range
+-    u32                                         start        /// Start of the range, in bytes
+-    u32                                         length       /// Length of the range, in bytes
++    u32                                         offset       /// Start of the range, in bytes
++    u32                                         size        /// Length of the range, in bytes
+ }
+ class VkPipelineLayoutCreateInfo {
+     VkStructureType                             sType                   /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
+     const void*                                 pNext                   /// Pointer to next structure
+-    u32                                         descriptorSetCount      /// Number of descriptor sets interfaced by the pipeline
++    u32                                         setLayoutCount          /// Number of descriptor sets interfaced by the pipeline
+     const VkDescriptorSetLayout*                pSetLayouts             /// Array of <setCount> number of descriptor set layout objects defining the layout of the
+     u32                                         pushConstantRangeCount  /// Number of push-constant ranges used by the pipeline
+     const VkPushConstantRange*                  pPushConstantRanges     /// Array of pushConstantRangeCount number of ranges used by various shader stages
+@@ -1746,7 +1758,7 @@ class VkCmdBufferAllocInfo {
+     const void*                                 pNext      /// Pointer to next structure
+     VkCmdPool                                   cmdPool
+     VkCmdBufferLevel                            level
+-    u32                                         count
++    u32                                         bufferCount
+ }
+ class VkCmdBufferBeginInfo {
+@@ -1818,13 +1830,13 @@ class VkSubpassDescription {
+     const void*                                 pNext              /// Pointer to next structure
+     VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
+     VkSubpassDescriptionFlags                   flags
+-    u32                                         inputCount
++    u32                                         inputAttachmentCount
+     const VkAttachmentReference*                pInputAttachments
+-    u32                                         colorCount
++    u32                                         colorAttachmentCount
+     const VkAttachmentReference*                pColorAttachments
+     const VkAttachmentReference*                pResolveAttachments
+     VkAttachmentReference                       depthStencilAttachment
+-    u32                                         preserveCount
++    u32                                         preserveAttachmentCount
+     const VkAttachmentReference*                pPreserveAttachments
+ }
+@@ -1879,7 +1891,6 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
+     VkBool32                                    depthBounds                               /// depth bounds test
+     VkBool32                                    wideLines                                 /// lines with width greater than 1
+-    VkBool32                                    strictLines
+     VkBool32                                    largePoints                               /// points with size greater than 1
+     VkBool32                                    alphaToOne                                /// The fragment alpha channel can be forced to maximum representable alpha value
+     VkBool32                                    multiViewport
+@@ -1988,7 +1999,6 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxDrawIndexedIndexValue                  /// max index value for indexed draw calls (for 32-bit indices)
+     u32                                         maxDrawIndirectInstanceCount              /// max instance count for indirect draw calls
+-    VkBool32                                    primitiveRestartForPatches                /// is primitive restart supported for PATCHES
+     f32                                         maxSamplerLodBias                         /// max absolute sampler level of detail bias
+     f32                                         maxSamplerAnisotropy                      /// max degree of sampler anisotropy
+@@ -2037,6 +2047,7 @@ class VkPhysicalDeviceLimits {
+     f32[2]                                      lineWidthRange                            /// range (min,max) of supported line widths
+     f32                                         pointSizeGranularity                      /// granularity of supported point sizes
+     f32                                         lineWidthGranularity                      /// granularity of supported line widths
++    VkBool32                                    strictLines
+     u32                                         recommendedBufferCopyOffsetAlignment
+     u32                                         recommendedBufferCopyRowPitchAlignment
+@@ -2129,7 +2140,7 @@ class VkSwapchainCreateInfoKHR {
+     VkSurfaceTransformKHR                       preTransform
+     u32                                         imageArraySize
+     VkSharingMode                               sharingMode
+-    u32                                         queueFamilyCount
++    u32                                         queueFamilyIndexCount
+     const u32*                                  pQueueFamilyIndices
+     VkPresentModeKHR                            presentMode
+     VkSwapchainKHR                              oldSwapchain
+@@ -2141,7 +2152,7 @@ class VkPresentInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+     u32                                         swapchainCount
+-    const VkSwapchainKHR*                       swapchains
++    const VkSwapchainKHR*                       pSwapchains
+     const u32*                                  imageIndices
+ }
+@@ -2242,7 +2253,17 @@ class VkDisplayPresentInfoKHR {
+         void*                                       pUserData,
+         platform.size_t                             size,
+         platform.size_t                             alignment,
+-        VkSystemAllocType                           allocType) {
++        VkSystemAllocScope                          allocScope) {
++    return ?
++}
++
++@external type void* PFN_vkReallocFunction
++@pfn cmd void* vkReallocFunction(
++        void*                                       pUserData,
++        void*                                       pOriginal,
++        platform.size_t                             size,
++        platform.size_t                             alignment,
++        VkSystemAllocScope                          allocScope) {
+     return ?
+ }
+@@ -2252,12 +2273,28 @@ class VkDisplayPresentInfoKHR {
+         void*                                       pMem) {
+ }
++@external type void* PFN_vkInternalAllocNotification
++@pfn cmd void vkInternalAllocNotification(
++        void*                                       pUserData,
++        platform.size_t                             size,
++        VkInternalAllocType                         allocType,
++        VkSystemAllocScope                          allocScope) {
++}
++
++@external type void* PFN_vkInternalFreeNotification
++@pfn cmd void vkInternalFreeNotification(
++        void*                                       pUserData,
++        platform.size_t                             size,
++        VkInternalAllocType                         allocType,
++        VkSystemAllocScope                          allocScope) {
++}
+ // Global functions
+ @threadSafety("system")
+ cmd VkResult vkCreateInstance(
+         const VkInstanceCreateInfo*                 pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkInstance*                                 pInstance) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
+@@ -2265,15 +2302,16 @@ cmd VkResult vkCreateInstance(
+     pInstance[0] = instance
+     State.Instances[instance] = new!InstanceObject()
+-    layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.layerCount]
+-    extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.extensionCount]
++    layers := pCreateInfo.ppEnabledLayerNames[0:pCreateInfo.enabledLayerNameCount]
++    extensions := pCreateInfo.ppEnabledExtensionNames[0:pCreateInfo.enabledExtensionNameCount]
+     return ?
+ }
+ @threadSafety("system")
+ cmd void vkDestroyInstance(
+-        VkInstance                                  instance) {
++        VkInstance                                  instance,
++        const VkAllocCallbacks*                     pAllocator) {
+     instanceObject := GetInstance(instance)
+     State.Instances[instance] = null
+@@ -2332,7 +2370,7 @@ cmd void vkGetPhysicalDeviceProperties(
+ cmd void vkGetPhysicalDeviceQueueFamilyProperties(
+         VkPhysicalDevice                            physicalDevice,
+-        u32*                                        pCount,
++        u32*                                        pQueueFamilyPropertyCount,
+         VkQueueFamilyProperties*                    pQueueFamilyProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     // TODO: Figure out how to express fetch-count-or-properties
+@@ -2400,6 +2438,7 @@ cmd void vkGetPhysicalDeviceImageFormatProperties(
+ cmd VkResult vkCreateDevice(
+         VkPhysicalDevice                            physicalDevice,
+         const VkDeviceCreateInfo*                   pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkDevice*                                   pDevice) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+@@ -2413,7 +2452,8 @@ cmd VkResult vkCreateDevice(
+ @threadSafety("system")
+ cmd void vkDestroyDevice(
+-        VkDevice                                    device) {
++        VkDevice                                    device,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     State.Devices[device] = null
+@@ -2423,10 +2463,10 @@ cmd void vkDestroyDevice(
+ // Extension discovery functions
+ cmd VkResult vkEnumerateInstanceLayerProperties(
+-        u32*                                        pCount,
++        u32*                                        pPropertyCount,
+         VkLayerProperties*                          pProperties) {
+     count := as!u32(?)
+-    pCount[0] = count
++    pPropertyCount[0] = count
+     properties := pProperties[0:count]
+     for i in (0 .. count) {
+@@ -2439,10 +2479,10 @@ cmd VkResult vkEnumerateInstanceLayerProperties(
+ cmd VkResult vkEnumerateInstanceExtensionProperties(
+         const char*                                 pLayerName,
+-        u32*                                        pCount,
++        u32*                                        pPropertyCount,
+         VkExtensionProperties*                      pProperties) {
+     count := as!u32(?)
+-    pCount[0] = count
++    pPropertyCount[0] = count
+     properties := pProperties[0:count]
+     for i in (0 .. count) {
+@@ -2455,11 +2495,11 @@ cmd VkResult vkEnumerateInstanceExtensionProperties(
+ cmd VkResult vkEnumerateDeviceLayerProperties(
+         VkPhysicalDevice                            physicalDevice,
+-        u32*                                        pCount,
++        u32*                                        pPropertyCount,
+         VkLayerProperties*                          pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     count := as!u32(?)
+-    pCount[0] = count
++    pPropertyCount[0] = count
+     properties := pProperties[0:count]
+     for i in (0 .. count) {
+@@ -2473,12 +2513,12 @@ cmd VkResult vkEnumerateDeviceLayerProperties(
+ cmd VkResult vkEnumerateDeviceExtensionProperties(
+         VkPhysicalDevice                            physicalDevice,
+         const char*                                 pLayerName,
+-        u32*                                        pCount,
++        u32*                                        pPropertyCount,
+         VkExtensionProperties*                      pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     count := as!u32(?)
+-    pCount[0] = count
++    pPropertyCount[0] = count
+     properties := pProperties[0:count]
+     for i in (0 .. count) {
+@@ -2557,6 +2597,7 @@ cmd VkResult vkDeviceWaitIdle(
+ cmd VkResult vkAllocMemory(
+         VkDevice                                    device,
+         const VkMemoryAllocInfo*                    pAllocInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkDeviceMemory*                             pMem) {
+     assert(pAllocInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
+     deviceObject := GetDevice(device)
+@@ -2573,7 +2614,8 @@ cmd VkResult vkAllocMemory(
+ @threadSafety("system")
+ cmd void vkFreeMemory(
+         VkDevice                                    device,
+-        VkDeviceMemory                              mem) {
++        VkDeviceMemory                              mem,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     memObject := GetDeviceMemory(mem)
+     assert(memObject.device == device)
+@@ -2740,7 +2782,7 @@ cmd VkResult vkBindImageMemory(
+ cmd void vkGetImageSparseMemoryRequirements(
+         VkDevice                                    device,
+         VkImage                                     image,
+-        u32*                                        pNumRequirements,
++        u32*                                        pSparseMemoryRequirementCount,
+         VkSparseImageMemoryRequirements*            pSparseMemoryRequirements) {
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+@@ -2754,7 +2796,7 @@ cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
+         u32                                         samples,
+         VkImageUsageFlags                           usage,
+         VkImageTiling                               tiling,
+-        u32*                                        pNumProperties,
++        u32*                                        pPropertyCount,
+         VkSparseImageFormatProperties*              pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+ }
+@@ -2762,7 +2804,7 @@ cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
+ cmd VkResult vkQueueBindSparseBufferMemory(
+         VkQueue                                     queue,
+         VkBuffer                                    buffer,
+-        u32                                         numBindings,
++        u32                                         bindInfoCount,
+         const VkSparseMemoryBindInfo*               pBindInfo) {
+     queueObject := GetQueue(queue)
+     bufferObject := GetBuffer(buffer)
+@@ -2774,7 +2816,7 @@ cmd VkResult vkQueueBindSparseBufferMemory(
+ cmd VkResult vkQueueBindSparseImageOpaqueMemory(
+         VkQueue                                     queue,
+         VkImage                                     image,
+-        u32                                         numBindings,
++        u32                                         bindInfoCount,
+         const VkSparseMemoryBindInfo*               pBindInfo) {
+     queueObject := GetQueue(queue)
+     imageObject := GetImage(image)
+@@ -2783,11 +2825,10 @@ cmd VkResult vkQueueBindSparseImageOpaqueMemory(
+     return ?
+ }
+-
+ cmd VkResult vkQueueBindSparseImageMemory(
+         VkQueue                                     queue,
+         VkImage                                     image,
+-        u32                                         numBindings,
++        u32                                         bindInfoCount,
+         const VkSparseImageMemoryBindInfo*          pBindInfo) {
+     queueObject := GetQueue(queue)
+     imageObject := GetImage(image)
+@@ -2802,6 +2843,7 @@ cmd VkResult vkQueueBindSparseImageMemory(
+ cmd VkResult vkCreateFence(
+         VkDevice                                    device,
+         const VkFenceCreateInfo*                    pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkFence*                                    pFence) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -2817,7 +2859,8 @@ cmd VkResult vkCreateFence(
+ @threadSafety("system")
+ cmd void vkDestroyFence(
+         VkDevice                                    device,
+-        VkFence                                     fence) {
++        VkFence                                     fence,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     fenceObject := GetFence(fence)
+     assert(fenceObject.device == device)
+@@ -2880,6 +2923,7 @@ cmd VkResult vkWaitForFences(
+ cmd VkResult vkCreateSemaphore(
+         VkDevice                                    device,
+         const VkSemaphoreCreateInfo*                pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkSemaphore*                                pSemaphore) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -2894,7 +2938,8 @@ cmd VkResult vkCreateSemaphore(
+ @threadSafety("system")
+ cmd void vkDestroySemaphore(
+         VkDevice                                    device,
+-        VkSemaphore                                 semaphore) {
++        VkSemaphore                                 semaphore,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     semaphoreObject := GetSemaphore(semaphore)
+     assert(semaphoreObject.device == device)
+@@ -2909,6 +2954,7 @@ cmd void vkDestroySemaphore(
+ cmd VkResult vkCreateEvent(
+         VkDevice                                    device,
+         const VkEventCreateInfo*                    pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkEvent*                                    pEvent) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -2923,7 +2969,8 @@ cmd VkResult vkCreateEvent(
+ @threadSafety("system")
+ cmd void vkDestroyEvent(
+         VkDevice                                    device,
+-        VkEvent                                     event) {
++        VkEvent                                     event,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     eventObject := GetEvent(event)
+     assert(eventObject.device == device)
+@@ -2971,6 +3018,7 @@ cmd VkResult vkResetEvent(
+ cmd VkResult vkCreateQueryPool(
+         VkDevice                                    device,
+         const VkQueryPoolCreateInfo*                pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkQueryPool*                                pQueryPool) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -2985,7 +3033,8 @@ cmd VkResult vkCreateQueryPool(
+ @threadSafety("system")
+ cmd void vkDestroyQueryPool(
+         VkDevice                                    device,
+-        VkQueryPool                                 queryPool) {
++        VkQueryPool                                 queryPool,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     queryPoolObject := GetQueryPool(queryPool)
+     assert(queryPoolObject.device == device)
+@@ -3018,6 +3067,7 @@ cmd VkResult vkGetQueryPoolResults(
+ cmd VkResult vkCreateBuffer(
+         VkDevice                                    device,
+         const VkBufferCreateInfo*                   pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkBuffer*                                   pBuffer) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3032,7 +3082,8 @@ cmd VkResult vkCreateBuffer(
+ @threadSafety("system")
+ cmd void vkDestroyBuffer(
+         VkDevice                                    device,
+-        VkBuffer                                    buffer) {
++        VkBuffer                                    buffer,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     bufferObject := GetBuffer(buffer)
+     assert(bufferObject.device == device)
+@@ -3048,6 +3099,7 @@ cmd void vkDestroyBuffer(
+ cmd VkResult vkCreateBufferView(
+         VkDevice                                    device,
+         const VkBufferViewCreateInfo*               pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkBufferView*                               pView) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3065,7 +3117,8 @@ cmd VkResult vkCreateBufferView(
+ @threadSafety("system")
+ cmd void vkDestroyBufferView(
+         VkDevice                                    device,
+-        VkBufferView                                bufferView) {
++        VkBufferView                                bufferView,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     bufferViewObject := GetBufferView(bufferView)
+     assert(bufferViewObject.device == device)
+@@ -3080,6 +3133,7 @@ cmd void vkDestroyBufferView(
+ cmd VkResult vkCreateImage(
+         VkDevice                                    device,
+         const VkImageCreateInfo*                    pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkImage*                                    pImage) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3094,7 +3148,8 @@ cmd VkResult vkCreateImage(
+ @threadSafety("system")
+ cmd void vkDestroyImage(
+         VkDevice                                    device,
+-        VkImage                                     image) {
++        VkImage                                     image,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+     assert(imageObject.device == device)
+@@ -3120,6 +3175,7 @@ cmd void vkGetImageSubresourceLayout(
+ cmd VkResult vkCreateImageView(
+         VkDevice                                    device,
+         const VkImageViewCreateInfo*                pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkImageView*                                pView) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3137,7 +3193,8 @@ cmd VkResult vkCreateImageView(
+ @threadSafety("system")
+ cmd void vkDestroyImageView(
+         VkDevice                                    device,
+-        VkImageView                                 imageView) {
++        VkImageView                                 imageView,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     imageViewObject := GetImageView(imageView)
+     assert(imageViewObject.device == device)
+@@ -3151,6 +3208,7 @@ cmd void vkDestroyImageView(
+ cmd VkResult vkCreateShaderModule(
+         VkDevice                                    device,
+         const VkShaderModuleCreateInfo*             pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkShaderModule*                             pShaderModule) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3164,7 +3222,8 @@ cmd VkResult vkCreateShaderModule(
+ cmd void vkDestroyShaderModule(
+         VkDevice                                    device,
+-        VkShaderModule                              shaderModule) {
++        VkShaderModule                              shaderModule,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     shaderModuleObject := GetShaderModule(shaderModule)
+     assert(shaderModuleObject.device == device)
+@@ -3176,6 +3235,7 @@ cmd void vkDestroyShaderModule(
+ cmd VkResult vkCreateShader(
+         VkDevice                                    device,
+         const VkShaderCreateInfo*                   pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkShader*                                   pShader) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3190,7 +3250,8 @@ cmd VkResult vkCreateShader(
+ @threadSafety("system")
+ cmd void vkDestroyShader(
+         VkDevice                                    device,
+-        VkShader                                    shader) {
++        VkShader                                    shader,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     shaderObject := GetShader(shader)
+     assert(shaderObject.device == device)
+@@ -3204,6 +3265,7 @@ cmd void vkDestroyShader(
+ cmd VkResult vkCreatePipelineCache(
+         VkDevice                                    device,
+         const VkPipelineCacheCreateInfo*            pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkPipelineCache*                            pPipelineCache) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3217,7 +3279,8 @@ cmd VkResult vkCreatePipelineCache(
+ cmd void vkDestroyPipelineCache(
+         VkDevice                                    device,
+-        VkPipelineCache                             pipelineCache) {
++        VkPipelineCache                             pipelineCache,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     pipelineCacheObject := GetPipelineCache(pipelineCache)
+     assert(pipelineCacheObject.device == device)
+@@ -3259,8 +3322,9 @@ cmd VkResult vkMergePipelineCaches(
+ cmd VkResult vkCreateGraphicsPipelines(
+         VkDevice                                    device,
+         VkPipelineCache                             pipelineCache,
+-        u32                                         count,
++        u32                                         createInfoCount,
+         const VkGraphicsPipelineCreateInfo*         pCreateInfos,
++        const VkAllocCallbacks*                     pAllocator,
+         VkPipeline*                                 pPipelines) {
+     deviceObject := GetDevice(device)
+     if pipelineCache != NULL_HANDLE {
+@@ -3268,9 +3332,9 @@ cmd VkResult vkCreateGraphicsPipelines(
+         assert(pipelineCacheObject.device == device)
+     }
+-    createInfos := pCreateInfos[0:count]
+-    pipelines := pPipelines[0:count]
+-    for i in (0 .. count) {
++    createInfos := pCreateInfos[0:createInfoCount]
++    pipelines := pPipelines[0:createInfoCount]
++    for i in (0 .. createInfoCount) {
+         pipeline := ?
+         pipelines[i] = pipeline
+         State.Pipelines[pipeline] = new!PipelineObject(device: device)
+@@ -3282,8 +3346,9 @@ cmd VkResult vkCreateGraphicsPipelines(
+ cmd VkResult vkCreateComputePipelines(
+         VkDevice                                    device,
+         VkPipelineCache                             pipelineCache,
+-        u32                                         count,
++        u32                                         createInfoCount,
+         const VkComputePipelineCreateInfo*          pCreateInfos,
++        const VkAllocCallbacks*                     pAllocator,
+         VkPipeline*                                 pPipelines) {
+     deviceObject := GetDevice(device)
+     if pipelineCache != NULL_HANDLE {
+@@ -3291,9 +3356,9 @@ cmd VkResult vkCreateComputePipelines(
+         assert(pipelineCacheObject.device == device)
+     }
+-    createInfos := pCreateInfos[0:count]
+-    pipelines := pPipelines[0:count]
+-    for i in (0 .. count) {
++    createInfos := pCreateInfos[0:createInfoCount]
++    pipelines := pPipelines[0:createInfoCount]
++    for i in (0 .. createInfoCount) {
+         pipeline := ?
+         pipelines[i] = pipeline
+         State.Pipelines[pipeline] = new!PipelineObject(device: device)
+@@ -3305,7 +3370,8 @@ cmd VkResult vkCreateComputePipelines(
+ @threadSafety("system")
+ cmd void vkDestroyPipeline(
+         VkDevice                                    device,
+-        VkPipeline                                  pipeline) {
++        VkPipeline                                  pipeline,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     pipelineObjects := GetPipeline(pipeline)
+     assert(pipelineObjects.device == device)
+@@ -3320,6 +3386,7 @@ cmd void vkDestroyPipeline(
+ cmd VkResult vkCreatePipelineLayout(
+         VkDevice                                    device,
+         const VkPipelineLayoutCreateInfo*           pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkPipelineLayout*                           pPipelineLayout) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3334,7 +3401,8 @@ cmd VkResult vkCreatePipelineLayout(
+ @threadSafety("system")
+ cmd void vkDestroyPipelineLayout(
+         VkDevice                                    device,
+-        VkPipelineLayout                            pipelineLayout) {
++        VkPipelineLayout                            pipelineLayout,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
+     assert(pipelineLayoutObjects.device == device)
+@@ -3349,6 +3417,7 @@ cmd void vkDestroyPipelineLayout(
+ cmd VkResult vkCreateSampler(
+         VkDevice                                    device,
+         const VkSamplerCreateInfo*                  pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkSampler*                                  pSampler) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3363,7 +3432,8 @@ cmd VkResult vkCreateSampler(
+ @threadSafety("system")
+ cmd void vkDestroySampler(
+         VkDevice                                    device,
+-        VkSampler                                   sampler) {
++        VkSampler                                   sampler,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     samplerObject := GetSampler(sampler)
+     assert(samplerObject.device == device)
+@@ -3378,6 +3448,7 @@ cmd void vkDestroySampler(
+ cmd VkResult vkCreateDescriptorSetLayout(
+         VkDevice                                    device,
+         const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkDescriptorSetLayout*                      pSetLayout) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3392,7 +3463,8 @@ cmd VkResult vkCreateDescriptorSetLayout(
+ @threadSafety("system")
+ cmd void vkDestroyDescriptorSetLayout(
+         VkDevice                                    device,
+-        VkDescriptorSetLayout                       descriptorSetLayout) {
++        VkDescriptorSetLayout                       descriptorSetLayout,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
+     assert(descriptorSetLayoutObject.device == device)
+@@ -3403,7 +3475,8 @@ cmd void vkDestroyDescriptorSetLayout(
+ @threadSafety("system")
+ cmd VkResult vkCreateDescriptorPool(
+         VkDevice                                    device,
+-        const VkDescriptorPoolCreateInfo*           pCreateInfo
++        const VkDescriptorPoolCreateInfo*           pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkDescriptorPool*                           pDescriptorPool) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3418,7 +3491,8 @@ cmd VkResult vkCreateDescriptorPool(
+ @threadSafety("system")
+ cmd void vkDestroyDescriptorPool(
+         VkDevice                                    device,
+-        VkDescriptorPool                            descriptorPool) {
++        VkDescriptorPool                            descriptorPool,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     descriptorPoolObject := GetDescriptorPool(descriptorPool)
+     assert(descriptorPoolObject.device == device)
+@@ -3447,15 +3521,15 @@ cmd VkResult vkAllocDescriptorSets(
+     allocInfo := pAllocInfo[0]
+     descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
+-    setLayouts := allocInfo.pSetLayouts[0:allocInfo.count]
+-    for i in (0 .. allocInfo.count) {
++    setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
++    for i in (0 .. allocInfo.setCount) {
+         setLayout := setLayouts[i]
+         setLayoutObject := GetDescriptorSetLayout(setLayout)
+         assert(setLayoutObject.device == device)
+     }
+-    descriptorSets := pDescriptorSets[0:allocInfo.count]
+-    for i in (0 .. allocInfo.count) {
++    descriptorSets := pDescriptorSets[0:allocInfo.setCount]
++    for i in (0 .. allocInfo.setCount) {
+         descriptorSet := ?
+         descriptorSets[i] = descriptorSet
+         State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
+@@ -3467,13 +3541,13 @@ cmd VkResult vkAllocDescriptorSets(
+ cmd VkResult vkFreeDescriptorSets(
+         VkDevice                                    device,
+         VkDescriptorPool                            descriptorPool,
+-        u32                                         count,
++        u32                                         descriptorSetCount,
+         const VkDescriptorSet*                      pDescriptorSets) {
+     deviceObject := GetDevice(device)
+     descriptorPoolObject := GetDescriptorPool(descriptorPool)
+-    descriptorSets := pDescriptorSets[0:count]
+-    for i in (0 .. count) {
++    descriptorSets := pDescriptorSets[0:descriptorSetCount]
++    for i in (0 .. descriptorSetCount) {
+         descriptorSet := descriptorSets[i]
+         descriptorSetObject := GetDescriptorSet(descriptorSet)
+         assert(descriptorSetObject.device == device)
+@@ -3513,6 +3587,7 @@ cmd void vkUpdateDescriptorSets(
+ cmd VkResult vkCreateFramebuffer(
+         VkDevice                                    device,
+         const VkFramebufferCreateInfo*              pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkFramebuffer*                              pFramebuffer) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3527,7 +3602,8 @@ cmd VkResult vkCreateFramebuffer(
+ @threadSafety("system")
+ cmd void vkDestroyFramebuffer(
+         VkDevice                                    device,
+-        VkFramebuffer                               framebuffer) {
++        VkFramebuffer                               framebuffer,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     framebufferObject := GetFramebuffer(framebuffer)
+     assert(framebufferObject.device == device)
+@@ -3542,6 +3618,7 @@ cmd void vkDestroyFramebuffer(
+ cmd VkResult vkCreateRenderPass(
+         VkDevice                                    device,
+         const VkRenderPassCreateInfo*               pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkRenderPass*                               pRenderPass) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3556,7 +3633,8 @@ cmd VkResult vkCreateRenderPass(
+ @threadSafety("system")
+ cmd void vkDestroyRenderPass(
+         VkDevice                                    device,
+-        VkRenderPass                                renderPass) {
++        VkRenderPass                                renderPass,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     renderPassObject := GetRenderPass(renderPass)
+     assert(renderPassObject.device == device)
+@@ -3580,6 +3658,7 @@ cmd void vkGetRenderAreaGranularity(
+ cmd VkResult vkCreateCommandPool(
+         VkDevice                                    device,
+         const VkCmdPoolCreateInfo*                  pCreateInfo,
++        const VkAllocCallbacks*                     pAllocator,
+         VkCmdPool*                                  pCmdPool) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3593,7 +3672,8 @@ cmd VkResult vkCreateCommandPool(
+ cmd void vkDestroyCommandPool(
+         VkDevice                                    device,
+-        VkCmdPool                                   cmdPool) {
++        VkCmdPool                                   cmdPool,
++        const VkAllocCallbacks*                     pAllocator) {
+     deviceObject := GetDevice(device)
+     cmdPoolObject := GetCmdPool(cmdPool)
+     assert(cmdPoolObject.device == device)
+@@ -3637,7 +3717,7 @@ cmd VkResult vkAllocCommandBuffers(
+         VkCmdBuffer*                                pCmdBuffers) {
+     assert(pAllocInfo[0].sType == VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
+-    count := pAllocInfo[0].count
++    count := pAllocInfo[0].bufferCount
+     cmdBuffers := pCmdBuffers[0:count]
+     for i in (0 .. count) {
+         cmdBuffer := ?
+@@ -3652,12 +3732,12 @@ cmd VkResult vkAllocCommandBuffers(
+ cmd void vkFreeCommandBuffers(
+         VkDevice                                    device,
+         VkCmdPool                                   cmdPool,
+-        u32                                         count,
++        u32                                         commandBufferCount,
+         const VkCmdBuffer*                          pCommandBuffers) {
+     deviceObject := GetDevice(device)
+-    cmdBuffers := pCommandBuffers[0:count]
+-    for i in (0 .. count) {
++    cmdBuffers := pCommandBuffers[0:commandBufferCount]
++    for i in (0 .. commandBufferCount) {
+         cmdBufferObject := GetCmdBuffer(cmdBuffers[i])
+         assert(cmdBufferObject.device == device)
+         // TODO: iterate over boundObjects and clear memory bindings
+@@ -3804,14 +3884,14 @@ cmd void vkCmdBindDescriptorSets(
+         VkPipelineBindPoint                         pipelineBindPoint,
+         VkPipelineLayout                            layout,
+         u32                                         firstSet,
+-        u32                                         setCount,
++        u32                                         descriptorSetCount,
+         const VkDescriptorSet*                      pDescriptorSets,
+         u32                                         dynamicOffsetCount,
+         const u32*                                  pDynamicOffsets) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    descriptorSets := pDescriptorSets[0:setCount]
+-    for i in (0 .. setCount) {
++    descriptorSets := pDescriptorSets[0:descriptorSetCount]
++    for i in (0 .. descriptorSetCount) {
+         descriptorSet := descriptorSets[i]
+         descriptorSetObject := GetDescriptorSet(descriptorSet)
+         assert(cmdBufferObject.device == descriptorSetObject.device)
+@@ -3898,7 +3978,7 @@ cmd void vkCmdDrawIndirect(
+         VkCmdBuffer                                 cmdBuffer,
+         VkBuffer                                    buffer,
+         VkDeviceSize                                offset,
+-        u32                                         count,
++        u32                                         drawCount,
+         u32                                         stride) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     bufferObject := GetBuffer(buffer)
+@@ -3914,7 +3994,7 @@ cmd void vkCmdDrawIndexedIndirect(
+         VkCmdBuffer                                 cmdBuffer,
+         VkBuffer                                    buffer,
+         VkDeviceSize                                offset,
+-        u32                                         count,
++        u32                                         drawCount,
+         u32                                         stride) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     bufferObject := GetBuffer(buffer)
+@@ -4348,8 +4428,8 @@ cmd void vkCmdPushConstants(
+         VkCmdBuffer                                 cmdBuffer,
+         VkPipelineLayout                            layout,
+         VkShaderStageFlags                          stageFlags,
+-        u32                                         start,
+-        u32                                         length,
++        u32                                         offset,
++        u32                                         size,
+         const void*                                 values) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     layoutObject := GetPipelineLayout(layout)
+@@ -4438,12 +4518,12 @@ cmd VkResult vkGetSurfacePropertiesKHR(
+ cmd VkResult vkGetSurfaceFormatsKHR(
+         VkDevice                                    device,
+         VkSurfaceKHR                                surface,
+-        u32*                                        pCount,
++        u32*                                        pSurfaceFormatCount,
+         VkSurfaceFormatKHR*                         pSurfaceFormats) {
+     deviceObject := GetDevice(device)
+     count := as!u32(?)
+-    pCount[0] = count
++    pSurfaceFormatCount[0] = count
+     surfaceFormats := pSurfaceFormats[0:count]
+     for i in (0 .. count) {
+@@ -4458,12 +4538,12 @@ cmd VkResult vkGetSurfaceFormatsKHR(
+ cmd VkResult vkGetSurfacePresentModesKHR(
+         VkDevice                                    device,
+         VkSurfaceKHR                                surface,
+-        u32*                                        pCount,
++        u32*                                        pPresentModeCount,
+         VkPresentModeKHR*                           pPresentModes) {
+     deviceObject := GetDevice(device)
+     count := as!u32(?)
+-    pCount[0] = count
++    pPresentModeCount[0] = count
+     presentModes := pPresentModes[0:count]
+     for i in (0 .. count) {
+@@ -4504,12 +4584,12 @@ cmd void vkDestroySwapchainKHR(
+ cmd VkResult vkGetSwapchainImagesKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain,
+-        u32*                                     pCount,
++        u32*                                     pSwapchainImageCount,
+         VkImage*                                 pSwapchainImages) {
+     deviceObject := GetDevice(device)
+     count := as!u32(?)
+-    pCount[0] = count
++    pSwapchainImageCount[0] = count
+     swapchainImages := pSwapchainImages[0:count]
+     for i in (0 .. count) {
+@@ -4553,7 +4633,7 @@ cmd VkResult vkQueuePresentKHR(
+ @extension("VK_EXT_KHR_display")
+ cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+-        u32*                                    count,
++        u32*                                    pPropertyCount,
+         VkDisplayPropertiesKHR*                 pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     return ?
+@@ -4563,8 +4643,8 @@ cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
+ cmd VkResult vkGetDisplayModePropertiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+         VkDisplayKHR                            display,
+-        u32*                                    pCount,
+-        VkDisplayModePropertiesKHR*             pModeProperties) {
++        u32*                                    pPropertyCount,
++        VkDisplayModePropertiesKHR*             pProperties) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     return ?
+ }
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index ca2ff85..d061988 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 186, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 188, 0)
+ #define VK_NULL_HANDLE 0
+@@ -179,23 +179,34 @@ typedef enum {
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
+     VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 47,
++    VK_STRUCTURE_TYPE_SUBMIT_INFO = 48,
++    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 49,
++    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 50,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+-    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO,
+-    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
++    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
++    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+ typedef enum {
+-    VK_SYSTEM_ALLOC_TYPE_API_OBJECT = 0,
+-    VK_SYSTEM_ALLOC_TYPE_INTERNAL = 1,
+-    VK_SYSTEM_ALLOC_TYPE_INTERNAL_TEMP = 2,
+-    VK_SYSTEM_ALLOC_TYPE_INTERNAL_SHADER = 3,
+-    VK_SYSTEM_ALLOC_TYPE_DEBUG = 4,
+-    VK_SYSTEM_ALLOC_TYPE_BEGIN_RANGE = VK_SYSTEM_ALLOC_TYPE_API_OBJECT,
+-    VK_SYSTEM_ALLOC_TYPE_END_RANGE = VK_SYSTEM_ALLOC_TYPE_DEBUG,
+-    VK_SYSTEM_ALLOC_TYPE_NUM = (VK_SYSTEM_ALLOC_TYPE_DEBUG - VK_SYSTEM_ALLOC_TYPE_API_OBJECT + 1),
+-    VK_SYSTEM_ALLOC_TYPE_MAX_ENUM = 0x7FFFFFFF
+-} VkSystemAllocType;
++    VK_SYSTEM_ALLOC_SCOPE_FUNCTION = 0,
++    VK_SYSTEM_ALLOC_SCOPE_OBJECT = 1,
++    VK_SYSTEM_ALLOC_SCOPE_CACHE = 2,
++    VK_SYSTEM_ALLOC_SCOPE_DEVICE = 3,
++    VK_SYSTEM_ALLOC_SCOPE_INSTANCE = 4,
++    VK_SYSTEM_ALLOC_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOC_SCOPE_FUNCTION,
++    VK_SYSTEM_ALLOC_SCOPE_END_RANGE = VK_SYSTEM_ALLOC_SCOPE_INSTANCE,
++    VK_SYSTEM_ALLOC_SCOPE_NUM = (VK_SYSTEM_ALLOC_SCOPE_INSTANCE - VK_SYSTEM_ALLOC_SCOPE_FUNCTION + 1),
++    VK_SYSTEM_ALLOC_SCOPE_MAX_ENUM = 0x7FFFFFFF
++} VkSystemAllocScope;
++
++typedef enum {
++    VK_INTERNAL_ALLOC_TYPE_EXECUTABLE = 0,
++    VK_INTERNAL_ALLOC_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOC_TYPE_EXECUTABLE,
++    VK_INTERNAL_ALLOC_TYPE_END_RANGE = VK_INTERNAL_ALLOC_TYPE_EXECUTABLE,
++    VK_INTERNAL_ALLOC_TYPE_NUM = (VK_INTERNAL_ALLOC_TYPE_EXECUTABLE - VK_INTERNAL_ALLOC_TYPE_EXECUTABLE + 1),
++    VK_INTERNAL_ALLOC_TYPE_MAX_ENUM = 0x7FFFFFFF
++} VkInternalAllocType;
+ typedef enum {
+     VK_FORMAT_UNDEFINED = 0,
+@@ -1020,15 +1031,34 @@ typedef enum {
+ typedef VkFlags VkQueryControlFlags;
+ typedef void* (VKAPI *PFN_vkAllocFunction)(
+-    void*                           pUserData,
+-    size_t                          size,
+-    size_t                          alignment,
+-    VkSystemAllocType               allocType);
++    void*              pUserData,
++    size_t             size,
++    size_t             alignment,
++    VkSystemAllocScope allocScope);
++
++typedef void* (VKAPI *PFN_vkReallocFunction)(
++    void*              pUserData,
++    void*              pOriginal,
++    size_t             size,
++    size_t             alignment,
++    VkSystemAllocScope allocScope);
+ typedef void (VKAPI *PFN_vkFreeFunction)(
+     void*                           pUserData,
+     void*                           pMem);
++typedef void (VKAPI *PFN_vkInternalAllocNotification)(
++    void*              pUserData,
++    size_t                           size,
++    VkInternalAllocType              allocType,
++    VkSystemAllocScope               allocScope);
++
++typedef void (VKAPI *PFN_vkInternalFreeNotification)(
++    void*              pUserData,
++    size_t                           size,
++    VkInternalAllocType              allocType,
++    VkSystemAllocScope               allocScope);
++
+ typedef void (VKAPI *PFN_vkVoidFunction)(void);
+ typedef struct {
+@@ -1042,23 +1072,25 @@ typedef struct {
+ } VkApplicationInfo;
+ typedef struct {
+-    void*                                       pUserData;
+-    PFN_vkAllocFunction                         pfnAlloc;
+-    PFN_vkFreeFunction                          pfnFree;
+-} VkAllocCallbacks;
+-
+-typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     const VkApplicationInfo*                    pAppInfo;
+-    const VkAllocCallbacks*                     pAllocCb;
+-    uint32_t                                    layerCount;
++    uint32_t                                    enabledLayerNameCount;
+     const char*const*                           ppEnabledLayerNames;
+-    uint32_t                                    extensionCount;
++    uint32_t                                    enabledExtensionNameCount;
+     const char*const*                           ppEnabledExtensionNames;
+ } VkInstanceCreateInfo;
+ typedef struct {
++    void*                                       pUserData;
++    PFN_vkAllocFunction                         pfnAlloc;
++    PFN_vkReallocFunction                       pfnRealloc;
++    PFN_vkFreeFunction                          pfnFree;
++    PFN_vkInternalAllocNotification             pfnInternalAlloc;
++    PFN_vkInternalFreeNotification              pfnInternalFree;
++} VkAllocCallbacks;
++
++typedef struct {
+     VkBool32                                    robustBufferAccess;
+     VkBool32                                    fullDrawIndexUint32;
+     VkBool32                                    imageCubeArray;
+@@ -1074,7 +1106,6 @@ typedef struct {
+     VkBool32                                    fillModeNonSolid;
+     VkBool32                                    depthBounds;
+     VkBool32                                    wideLines;
+-    VkBool32                                    strictLines;
+     VkBool32                                    largePoints;
+     VkBool32                                    alphaToOne;
+     VkBool32                                    multiViewport;
+@@ -1193,7 +1224,6 @@ typedef struct {
+     uint32_t                                    mipmapPrecisionBits;
+     uint32_t                                    maxDrawIndexedIndexValue;
+     uint32_t                                    maxDrawIndirectInstanceCount;
+-    VkBool32                                    primitiveRestartForPatches;
+     float                                       maxSamplerLodBias;
+     float                                       maxSamplerAnisotropy;
+     uint32_t                                    maxViewports;
+@@ -1232,6 +1262,7 @@ typedef struct {
+     float                                       lineWidthRange[2];
+     float                                       pointSizeGranularity;
+     float                                       lineWidthGranularity;
++    VkBool32                                    strictLines;
+     uint32_t                                    recommendedBufferCopyOffsetAlignment;
+     uint32_t                                    recommendedBufferCopyRowPitchAlignment;
+ } VkPhysicalDeviceLimits;
+@@ -1284,7 +1315,7 @@ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     uint32_t                                    queueFamilyIndex;
+-    uint32_t                                    queueCount;
++    uint32_t                                    queuePriorityCount;
+     const float*                                pQueuePriorities;
+ } VkDeviceQueueCreateInfo;
+@@ -1293,9 +1324,9 @@ typedef struct {
+     const void*                                 pNext;
+     uint32_t                                    requestedQueueCount;
+     const VkDeviceQueueCreateInfo*              pRequestedQueues;
+-    uint32_t                                    layerCount;
++    uint32_t                                    enabledLayerNameCount;
+     const char*const*                           ppEnabledLayerNames;
+-    uint32_t                                    extensionCount;
++    uint32_t                                    enabledExtensionNameCount;
+     const char*const*                           ppEnabledExtensionNames;
+     const VkPhysicalDeviceFeatures*             pEnabledFeatures;
+ } VkDeviceCreateInfo;
+@@ -1313,11 +1344,13 @@ typedef struct {
+ } VkLayerProperties;
+ typedef struct {
+-    uint32_t                                    waitSemCount;
++    VkStructureType                             sType;
++    const void*                                 pNext;
++    uint32_t                                    waitSemaphoreCount;
+     const VkSemaphore*                          pWaitSemaphores;
+-    uint32_t                                    cmdBufferCount;
++    uint32_t                                    commandBufferCount;
+     const VkCmdBuffer*                          pCommandBuffers;
+-    uint32_t                                    signalSemCount;
++    uint32_t                                    signalSemaphoreCount;
+     const VkSemaphore*                          pSignalSemaphores;
+ } VkSubmitInfo;
+@@ -1418,7 +1451,7 @@ typedef struct {
+     VkBufferUsageFlags                          usage;
+     VkBufferCreateFlags                         flags;
+     VkSharingMode                               sharingMode;
+-    uint32_t                                    queueFamilyCount;
++    uint32_t                                    queueFamilyIndexCount;
+     const uint32_t*                             pQueueFamilyIndices;
+ } VkBufferCreateInfo;
+@@ -1444,7 +1477,7 @@ typedef struct {
+     VkImageUsageFlags                           usage;
+     VkImageCreateFlags                          flags;
+     VkSharingMode                               sharingMode;
+-    uint32_t                                    queueFamilyCount;
++    uint32_t                                    queueFamilyIndexCount;
+     const uint32_t*                             pQueueFamilyIndices;
+     VkImageLayout                               initialLayout;
+ } VkImageCreateInfo;
+@@ -1543,9 +1576,9 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    uint32_t                                    bindingCount;
++    uint32_t                                    vertexBindingDescriptionCount;
+     const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
+-    uint32_t                                    attributeCount;
++    uint32_t                                    vertexAttributeDescriptionCount;
+     const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
+ } VkPipelineVertexInputStateCreateInfo;
+@@ -1707,14 +1740,14 @@ typedef struct {
+ typedef struct {
+     VkShaderStageFlags                          stageFlags;
+-    uint32_t                                    start;
+-    uint32_t                                    length;
++    uint32_t                                    offset;
++    uint32_t                                    size;
+ } VkPushConstantRange;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    uint32_t                                    descriptorSetCount;
++    uint32_t                                    setLayoutCount;
+     const VkDescriptorSetLayout*                pSetLayouts;
+     uint32_t                                    pushConstantRangeCount;
+     const VkPushConstantRange*                  pPushConstantRanges;
+@@ -1749,13 +1782,13 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    uint32_t                                    count;
+-    const VkDescriptorSetLayoutBinding*         pBinding;
++    uint32_t                                    bindingCount;
++    const VkDescriptorSetLayoutBinding*         pBindings;
+ } VkDescriptorSetLayoutCreateInfo;
+ typedef struct {
+     VkDescriptorType                            type;
+-    uint32_t                                    count;
++    uint32_t                                    descriptorCount;
+ } VkDescriptorTypeCount;
+ typedef struct {
+@@ -1763,15 +1796,15 @@ typedef struct {
+     const void*                                 pNext;
+     VkDescriptorPoolCreateFlags                 flags;
+     uint32_t                                    maxSets;
+-    uint32_t                                    count;
+-    const VkDescriptorTypeCount*                pTypeCount;
++    uint32_t                                    typeCount;
++    const VkDescriptorTypeCount*                pTypeCounts;
+ } VkDescriptorPoolCreateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorPool                            descriptorPool;
+-    uint32_t                                    count;
++    uint32_t                                    setLayoutCount;
+     const VkDescriptorSetLayout*                pSetLayouts;
+ } VkDescriptorSetAllocInfo;
+@@ -1793,7 +1826,7 @@ typedef struct {
+     VkDescriptorSet                             destSet;
+     uint32_t                                    destBinding;
+     uint32_t                                    destArrayElement;
+-    uint32_t                                    count;
++    uint32_t                                    descriptorCount;
+     VkDescriptorType                            descriptorType;
+     const VkDescriptorImageInfo*                pImageInfo;
+     const VkDescriptorBufferInfo*               pBufferInfo;
+@@ -1809,7 +1842,7 @@ typedef struct {
+     VkDescriptorSet                             destSet;
+     uint32_t                                    destBinding;
+     uint32_t                                    destArrayElement;
+-    uint32_t                                    count;
++    uint32_t                                    descriptorCount;
+ } VkCopyDescriptorSet;
+ typedef struct {
+@@ -1847,13 +1880,13 @@ typedef struct {
+     const void*                                 pNext;
+     VkPipelineBindPoint                         pipelineBindPoint;
+     VkSubpassDescriptionFlags                   flags;
+-    uint32_t                                    inputCount;
++    uint32_t                                    inputAttachmentCount;
+     const VkAttachmentReference*                pInputAttachments;
+-    uint32_t                                    colorCount;
++    uint32_t                                    colorAttachmentCount;
+     const VkAttachmentReference*                pColorAttachments;
+     const VkAttachmentReference*                pResolveAttachments;
+     VkAttachmentReference                       depthStencilAttachment;
+-    uint32_t                                    preserveCount;
++    uint32_t                                    preserveAttachmentCount;
+     const VkAttachmentReference*                pPreserveAttachments;
+ } VkSubpassDescription;
+@@ -1892,7 +1925,7 @@ typedef struct {
+     const void*                                 pNext;
+     VkCmdPool                                   cmdPool;
+     VkCmdBufferLevel                            level;
+-    uint32_t                                    count;
++    uint32_t                                    bufferCount;
+ } VkCmdBufferAllocInfo;
+ typedef struct {
+@@ -2043,29 +2076,29 @@ typedef struct {
+ } VkMemoryBarrier;
+-typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance);
+-typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance);
++typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkInstance* pInstance);
++typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+ typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+ typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+-typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
+-typedef void (VKAPI *PFN_vkDestroyDevice)(VkDevice device);
+-typedef VkResult (VKAPI *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pCount, VkLayerProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
++typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDevice* pDevice);
++typedef void (VKAPI *PFN_vkDestroyDevice)(VkDevice device, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
++typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
++typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
++typedef VkResult (VKAPI *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+ typedef void (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+ typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
+ typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
+-typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem);
+-typedef void (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory mem);
++typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* pAllocator, VkDeviceMemory* pMem);
++typedef void (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory mem, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+ typedef void (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory mem);
+ typedef VkResult (VKAPI *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+@@ -2075,68 +2108,68 @@ typedef VkResult (VKAPI *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffe
+ typedef VkResult (VKAPI *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset);
+ typedef void (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+-typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageOpaqueMemory)(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo);
+-typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence);
+-typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence);
++typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
++typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo);
++typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageOpaqueMemory)(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo);
++typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo);
++typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFence* pFence);
++typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+ typedef VkResult (VKAPI *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+-typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore);
+-typedef void (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore);
+-typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent);
+-typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event);
++typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSemaphore* pSemaphore);
++typedef void (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkEvent* pEvent);
++typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+-typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool);
+-typedef void (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool);
++typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkQueryPool* pQueryPool);
++typedef void (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
+-typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer);
+-typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
+-typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView);
+-typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
+-typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image);
++typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBuffer* pBuffer);
++typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBufferView* pView);
++typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImage* pImage);
++typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocCallbacks* pAllocator);
+ typedef void (VKAPI *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+-typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView);
+-typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView);
+-typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule);
+-typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule);
+-typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader);
+-typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader);
+-typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
+-typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache);
++typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImageView* pView);
++typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShaderModule* pShaderModule);
++typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShader* pShader);
++typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
++typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+ typedef VkResult (VKAPI *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+-typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+-typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+-typedef void (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline);
+-typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout);
+-typedef void (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout);
+-typedef VkResult (VKAPI *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler);
+-typedef void (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler);
+-typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout);
+-typedef void (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout);
+-typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
+-typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
++typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines);
++typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines);
++typedef void (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
++typedef void (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSampler* pSampler);
++typedef void (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
++typedef void (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
++typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+ typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+-typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
++typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+ typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+-typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer);
+-typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer);
+-typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
+-typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass);
++typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
++typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkRenderPass* pRenderPass);
++typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* pAllocator);
+ typedef void (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+-typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
+-typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool);
++typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkCmdPool* pCmdPool);
++typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+ typedef VkResult (VKAPI *PFN_vkAllocCommandBuffers)(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers);
+-typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers);
++typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCmdPool cmdPool, uint32_t commandBufferCount, const VkCmdBuffer* pCommandBuffers);
+ typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo);
+ typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer);
+ typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
+@@ -2150,13 +2183,13 @@ typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCmdBuffer cmdBuffer, float minDe
+ typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+ typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+ typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
+-typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
++typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+ typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+ typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+ typedef void (VKAPI *PFN_vkCmdDraw)(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+ typedef void (VKAPI *PFN_vkCmdDrawIndexed)(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+-typedef void (VKAPI *PFN_vkCmdDrawIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
+-typedef void (VKAPI *PFN_vkCmdDrawIndexedIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
++typedef void (VKAPI *PFN_vkCmdDrawIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
++typedef void (VKAPI *PFN_vkCmdDrawIndexedIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+ typedef void (VKAPI *PFN_vkCmdDispatch)(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+ typedef void (VKAPI *PFN_vkCmdDispatchIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
+ typedef void (VKAPI *PFN_vkCmdCopyBuffer)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+@@ -2179,7 +2212,7 @@ typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool query
+ typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+ typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+ typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
++typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
+ typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+ typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCmdBuffer cmdBuffer, VkRenderPassContents contents);
+ typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCmdBuffer cmdBuffer);
+@@ -2188,10 +2221,12 @@ typedef void (VKAPI *PFN_vkCmdExecuteCommands)(VkCmdBuffer cmdBuffer, uint32_t c
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateInstance(
+     const VkInstanceCreateInfo*                 pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkInstance*                                 pInstance);
+ void VKAPI vkDestroyInstance(
+-    VkInstance                                  instance);
++    VkInstance                                  instance,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkEnumeratePhysicalDevices(
+     VkInstance                                  instance,
+@@ -2222,7 +2257,7 @@ void VKAPI vkGetPhysicalDeviceProperties(
+ void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
+     VkPhysicalDevice                            physicalDevice,
+-    uint32_t*                                   pCount,
++    uint32_t*                                   pQueueFamilyPropertyCount,
+     VkQueueFamilyProperties*                    pQueueFamilyProperties);
+ void VKAPI vkGetPhysicalDeviceMemoryProperties(
+@@ -2240,29 +2275,31 @@ PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(
+ VkResult VKAPI vkCreateDevice(
+     VkPhysicalDevice                            physicalDevice,
+     const VkDeviceCreateInfo*                   pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkDevice*                                   pDevice);
+ void VKAPI vkDestroyDevice(
+-    VkDevice                                    device);
++    VkDevice                                    device,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkEnumerateInstanceExtensionProperties(
+     const char*                                 pLayerName,
+-    uint32_t*                                   pCount,
++    uint32_t*                                   pPropertyCount,
+     VkExtensionProperties*                      pProperties);
+ VkResult VKAPI vkEnumerateDeviceExtensionProperties(
+     VkPhysicalDevice                            physicalDevice,
+     const char*                                 pLayerName,
+-    uint32_t*                                   pCount,
++    uint32_t*                                   pPropertyCount,
+     VkExtensionProperties*                      pProperties);
+ VkResult VKAPI vkEnumerateInstanceLayerProperties(
+-    uint32_t*                                   pCount,
++    uint32_t*                                   pPropertyCount,
+     VkLayerProperties*                          pProperties);
+ VkResult VKAPI vkEnumerateDeviceLayerProperties(
+     VkPhysicalDevice                            physicalDevice,
+-    uint32_t*                                   pCount,
++    uint32_t*                                   pPropertyCount,
+     VkLayerProperties*                          pProperties);
+ void VKAPI vkGetDeviceQueue(
+@@ -2286,11 +2323,13 @@ VkResult VKAPI vkDeviceWaitIdle(
+ VkResult VKAPI vkAllocMemory(
+     VkDevice                                    device,
+     const VkMemoryAllocInfo*                    pAllocInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkDeviceMemory*                             pMem);
+ void VKAPI vkFreeMemory(
+     VkDevice                                    device,
+-    VkDeviceMemory                              mem);
++    VkDeviceMemory                              mem,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkMapMemory(
+     VkDevice                                    device,
+@@ -2344,7 +2383,7 @@ void VKAPI vkGetImageMemoryRequirements(
+ void VKAPI vkGetImageSparseMemoryRequirements(
+     VkDevice                                    device,
+     VkImage                                     image,
+-    uint32_t*                                   pNumRequirements,
++    uint32_t*                                   pSparseMemoryRequirementCount,
+     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
+ void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
+@@ -2354,35 +2393,37 @@ void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
+     uint32_t                                    samples,
+     VkImageUsageFlags                           usage,
+     VkImageTiling                               tiling,
+-    uint32_t*                                   pNumProperties,
++    uint32_t*                                   pPropertyCount,
+     VkSparseImageFormatProperties*              pProperties);
+ VkResult VKAPI vkQueueBindSparseBufferMemory(
+     VkQueue                                     queue,
+     VkBuffer                                    buffer,
+-    uint32_t                                    numBindings,
++    uint32_t                                    bindInfoCount,
+     const VkSparseMemoryBindInfo*               pBindInfo);
+ VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
+     VkQueue                                     queue,
+     VkImage                                     image,
+-    uint32_t                                    numBindings,
++    uint32_t                                    bindInfoCount,
+     const VkSparseMemoryBindInfo*               pBindInfo);
+ VkResult VKAPI vkQueueBindSparseImageMemory(
+     VkQueue                                     queue,
+     VkImage                                     image,
+-    uint32_t                                    numBindings,
++    uint32_t                                    bindInfoCount,
+     const VkSparseImageMemoryBindInfo*          pBindInfo);
+ VkResult VKAPI vkCreateFence(
+     VkDevice                                    device,
+     const VkFenceCreateInfo*                    pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkFence*                                    pFence);
+ void VKAPI vkDestroyFence(
+     VkDevice                                    device,
+-    VkFence                                     fence);
++    VkFence                                     fence,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkResetFences(
+     VkDevice                                    device,
+@@ -2403,20 +2444,24 @@ VkResult VKAPI vkWaitForFences(
+ VkResult VKAPI vkCreateSemaphore(
+     VkDevice                                    device,
+     const VkSemaphoreCreateInfo*                pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkSemaphore*                                pSemaphore);
+ void VKAPI vkDestroySemaphore(
+     VkDevice                                    device,
+-    VkSemaphore                                 semaphore);
++    VkSemaphore                                 semaphore,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateEvent(
+     VkDevice                                    device,
+     const VkEventCreateInfo*                    pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkEvent*                                    pEvent);
+ void VKAPI vkDestroyEvent(
+     VkDevice                                    device,
+-    VkEvent                                     event);
++    VkEvent                                     event,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkGetEventStatus(
+     VkDevice                                    device,
+@@ -2433,11 +2478,13 @@ VkResult VKAPI vkResetEvent(
+ VkResult VKAPI vkCreateQueryPool(
+     VkDevice                                    device,
+     const VkQueryPoolCreateInfo*                pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkQueryPool*                                pQueryPool);
+ void VKAPI vkDestroyQueryPool(
+     VkDevice                                    device,
+-    VkQueryPool                                 queryPool);
++    VkQueryPool                                 queryPool,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkGetQueryPoolResults(
+     VkDevice                                    device,
+@@ -2452,29 +2499,35 @@ VkResult VKAPI vkGetQueryPoolResults(
+ VkResult VKAPI vkCreateBuffer(
+     VkDevice                                    device,
+     const VkBufferCreateInfo*                   pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkBuffer*                                   pBuffer);
+ void VKAPI vkDestroyBuffer(
+     VkDevice                                    device,
+-    VkBuffer                                    buffer);
++    VkBuffer                                    buffer,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateBufferView(
+     VkDevice                                    device,
+     const VkBufferViewCreateInfo*               pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkBufferView*                               pView);
+ void VKAPI vkDestroyBufferView(
+     VkDevice                                    device,
+-    VkBufferView                                bufferView);
++    VkBufferView                                bufferView,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateImage(
+     VkDevice                                    device,
+     const VkImageCreateInfo*                    pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkImage*                                    pImage);
+ void VKAPI vkDestroyImage(
+     VkDevice                                    device,
+-    VkImage                                     image);
++    VkImage                                     image,
++    const VkAllocCallbacks*                     pAllocator);
+ void VKAPI vkGetImageSubresourceLayout(
+     VkDevice                                    device,
+@@ -2485,38 +2538,46 @@ void VKAPI vkGetImageSubresourceLayout(
+ VkResult VKAPI vkCreateImageView(
+     VkDevice                                    device,
+     const VkImageViewCreateInfo*                pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkImageView*                                pView);
+ void VKAPI vkDestroyImageView(
+     VkDevice                                    device,
+-    VkImageView                                 imageView);
++    VkImageView                                 imageView,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateShaderModule(
+     VkDevice                                    device,
+     const VkShaderModuleCreateInfo*             pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkShaderModule*                             pShaderModule);
+ void VKAPI vkDestroyShaderModule(
+     VkDevice                                    device,
+-    VkShaderModule                              shaderModule);
++    VkShaderModule                              shaderModule,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateShader(
+     VkDevice                                    device,
+     const VkShaderCreateInfo*                   pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkShader*                                   pShader);
+ void VKAPI vkDestroyShader(
+     VkDevice                                    device,
+-    VkShader                                    shader);
++    VkShader                                    shader,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreatePipelineCache(
+     VkDevice                                    device,
+     const VkPipelineCacheCreateInfo*            pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkPipelineCache*                            pPipelineCache);
+ void VKAPI vkDestroyPipelineCache(
+     VkDevice                                    device,
+-    VkPipelineCache                             pipelineCache);
++    VkPipelineCache                             pipelineCache,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkGetPipelineCacheData(
+     VkDevice                                    device,
+@@ -2533,56 +2594,67 @@ VkResult VKAPI vkMergePipelineCaches(
+ VkResult VKAPI vkCreateGraphicsPipelines(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+-    uint32_t                                    count,
++    uint32_t                                    createInfoCount,
+     const VkGraphicsPipelineCreateInfo*         pCreateInfos,
++    const VkAllocCallbacks*                     pAllocator,
+     VkPipeline*                                 pPipelines);
+ VkResult VKAPI vkCreateComputePipelines(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+-    uint32_t                                    count,
++    uint32_t                                    createInfoCount,
+     const VkComputePipelineCreateInfo*          pCreateInfos,
++    const VkAllocCallbacks*                     pAllocator,
+     VkPipeline*                                 pPipelines);
+ void VKAPI vkDestroyPipeline(
+     VkDevice                                    device,
+-    VkPipeline                                  pipeline);
++    VkPipeline                                  pipeline,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreatePipelineLayout(
+     VkDevice                                    device,
+     const VkPipelineLayoutCreateInfo*           pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkPipelineLayout*                           pPipelineLayout);
+ void VKAPI vkDestroyPipelineLayout(
+     VkDevice                                    device,
+-    VkPipelineLayout                            pipelineLayout);
++    VkPipelineLayout                            pipelineLayout,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateSampler(
+     VkDevice                                    device,
+     const VkSamplerCreateInfo*                  pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkSampler*                                  pSampler);
+ void VKAPI vkDestroySampler(
+     VkDevice                                    device,
+-    VkSampler                                   sampler);
++    VkSampler                                   sampler,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateDescriptorSetLayout(
+     VkDevice                                    device,
+     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkDescriptorSetLayout*                      pSetLayout);
+ void VKAPI vkDestroyDescriptorSetLayout(
+     VkDevice                                    device,
+-    VkDescriptorSetLayout                       descriptorSetLayout);
++    VkDescriptorSetLayout                       descriptorSetLayout,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateDescriptorPool(
+     VkDevice                                    device,
+     const VkDescriptorPoolCreateInfo*           pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkDescriptorPool*                           pDescriptorPool);
+ void VKAPI vkDestroyDescriptorPool(
+     VkDevice                                    device,
+-    VkDescriptorPool                            descriptorPool);
++    VkDescriptorPool                            descriptorPool,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkResetDescriptorPool(
+     VkDevice                                    device,
+@@ -2597,7 +2669,7 @@ VkResult VKAPI vkAllocDescriptorSets(
+ VkResult VKAPI vkFreeDescriptorSets(
+     VkDevice                                    device,
+     VkDescriptorPool                            descriptorPool,
+-    uint32_t                                    count,
++    uint32_t                                    descriptorSetCount,
+     const VkDescriptorSet*                      pDescriptorSets);
+ void VKAPI vkUpdateDescriptorSets(
+@@ -2610,20 +2682,24 @@ void VKAPI vkUpdateDescriptorSets(
+ VkResult VKAPI vkCreateFramebuffer(
+     VkDevice                                    device,
+     const VkFramebufferCreateInfo*              pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkFramebuffer*                              pFramebuffer);
+ void VKAPI vkDestroyFramebuffer(
+     VkDevice                                    device,
+-    VkFramebuffer                               framebuffer);
++    VkFramebuffer                               framebuffer,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkCreateRenderPass(
+     VkDevice                                    device,
+     const VkRenderPassCreateInfo*               pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkRenderPass*                               pRenderPass);
+ void VKAPI vkDestroyRenderPass(
+     VkDevice                                    device,
+-    VkRenderPass                                renderPass);
++    VkRenderPass                                renderPass,
++    const VkAllocCallbacks*                     pAllocator);
+ void VKAPI vkGetRenderAreaGranularity(
+     VkDevice                                    device,
+@@ -2633,11 +2709,13 @@ void VKAPI vkGetRenderAreaGranularity(
+ VkResult VKAPI vkCreateCommandPool(
+     VkDevice                                    device,
+     const VkCmdPoolCreateInfo*                  pCreateInfo,
++    const VkAllocCallbacks*                     pAllocator,
+     VkCmdPool*                                  pCmdPool);
+ void VKAPI vkDestroyCommandPool(
+     VkDevice                                    device,
+-    VkCmdPool                                   cmdPool);
++    VkCmdPool                                   cmdPool,
++    const VkAllocCallbacks*                     pAllocator);
+ VkResult VKAPI vkResetCommandPool(
+     VkDevice                                    device,
+@@ -2652,7 +2730,7 @@ VkResult VKAPI vkAllocCommandBuffers(
+ void VKAPI vkFreeCommandBuffers(
+     VkDevice                                    device,
+     VkCmdPool                                   cmdPool,
+-    uint32_t                                    count,
++    uint32_t                                    commandBufferCount,
+     const VkCmdBuffer*                          pCommandBuffers);
+ VkResult VKAPI vkBeginCommandBuffer(
+@@ -2720,7 +2798,7 @@ void VKAPI vkCmdBindDescriptorSets(
+     VkPipelineBindPoint                         pipelineBindPoint,
+     VkPipelineLayout                            layout,
+     uint32_t                                    firstSet,
+-    uint32_t                                    setCount,
++    uint32_t                                    descriptorSetCount,
+     const VkDescriptorSet*                      pDescriptorSets,
+     uint32_t                                    dynamicOffsetCount,
+     const uint32_t*                             pDynamicOffsets);
+@@ -2757,14 +2835,14 @@ void VKAPI vkCmdDrawIndirect(
+     VkCmdBuffer                                 cmdBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+-    uint32_t                                    count,
++    uint32_t                                    drawCount,
+     uint32_t                                    stride);
+ void VKAPI vkCmdDrawIndexedIndirect(
+     VkCmdBuffer                                 cmdBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+-    uint32_t                                    count,
++    uint32_t                                    drawCount,
+     uint32_t                                    stride);
+ void VKAPI vkCmdDispatch(
+@@ -2930,8 +3008,8 @@ void VKAPI vkCmdPushConstants(
+     VkCmdBuffer                                 cmdBuffer,
+     VkPipelineLayout                            layout,
+     VkShaderStageFlags                          stageFlags,
+-    uint32_t                                    start,
+-    uint32_t                                    length,
++    uint32_t                                    offset,
++    uint32_t                                    size,
+     const void*                                 values);
+ void VKAPI vkCmdBeginRenderPass(
+@@ -3014,9 +3092,10 @@ typedef enum {
+     VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+     VK_PRESENT_MODE_MAILBOX_KHR = 1,
+     VK_PRESENT_MODE_FIFO_KHR = 2,
++    VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
+     VK_PRESENT_MODE_BEGIN_RANGE = VK_PRESENT_MODE_IMMEDIATE_KHR,
+-    VK_PRESENT_MODE_END_RANGE = VK_PRESENT_MODE_FIFO_KHR,
+-    VK_PRESENT_MODE_NUM = (VK_PRESENT_MODE_FIFO_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
++    VK_PRESENT_MODE_END_RANGE = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
++    VK_PRESENT_MODE_NUM = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
+     VK_PRESENT_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkPresentModeKHR;
+@@ -3063,7 +3142,7 @@ typedef struct {
+     VkSurfaceTransformKHR                       preTransform;
+     uint32_t                                    imageArraySize;
+     VkSharingMode                               sharingMode;
+-    uint32_t                                    queueFamilyCount;
++    uint32_t                                    queueFamilyIndexCount;
+     const uint32_t*                             pQueueFamilyIndices;
+     VkPresentModeKHR                            presentMode;
+     VkSwapchainKHR                              oldSwapchain;
+@@ -3074,17 +3153,17 @@ typedef struct {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     uint32_t                                    swapchainCount;
+-    const VkSwapchainKHR*                       swapchains;
++    const VkSwapchainKHR*                       pSwapchains;
+     const uint32_t*                             imageIndices;
+ } VkPresentInfoKHR;
+ typedef VkResult (VKAPI *PFN_vkGetSurfacePropertiesKHR)(VkDevice  device, VkSurfaceKHR  surface, VkSurfacePropertiesKHR*  pSurfaceProperties);
+-typedef VkResult (VKAPI *PFN_vkGetSurfaceFormatsKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pCount, VkSurfaceFormatKHR*  pSurfaceFormats);
+-typedef VkResult (VKAPI *PFN_vkGetSurfacePresentModesKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pCount, VkPresentModeKHR*  pPresentModes);
++typedef VkResult (VKAPI *PFN_vkGetSurfaceFormatsKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pSurfaceFormatCount, VkSurfaceFormatKHR*  pSurfaceFormats);
++typedef VkResult (VKAPI *PFN_vkGetSurfacePresentModesKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pPresentModeCount, VkPresentModeKHR*  pPresentModes);
+ typedef VkResult (VKAPI *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, VkSwapchainKHR*  pSwapchain);
+ typedef void (VKAPI *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain);
+-typedef VkResult (VKAPI *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pCount, VkImage*  pSwapchainImages);
++typedef VkResult (VKAPI *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pSwapchainImageCount, VkImage*  pSwapchainImages);
+ typedef VkResult (VKAPI *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint64_t  timeout, VkSemaphore  semaphore, VkFence  fence, uint32_t*  pImageIndex);
+ typedef VkResult (VKAPI *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
+@@ -3097,13 +3176,13 @@ VkResult VKAPI vkGetSurfacePropertiesKHR(
+ VkResult VKAPI vkGetSurfaceFormatsKHR(
+     VkDevice                                     device,
+     VkSurfaceKHR                                 surface,
+-    uint32_t*                                    pCount,
++    uint32_t*                                    pSurfaceFormatCount,
+     VkSurfaceFormatKHR*                          pSurfaceFormats);
+ VkResult VKAPI vkGetSurfacePresentModesKHR(
+     VkDevice                                     device,
+     VkSurfaceKHR                                 surface,
+-    uint32_t*                                    pCount,
++    uint32_t*                                    pPresentModeCount,
+     VkPresentModeKHR*                            pPresentModes);
+ VkResult VKAPI vkCreateSwapchainKHR(
+@@ -3118,7 +3197,7 @@ void VKAPI vkDestroySwapchainKHR(
+ VkResult VKAPI vkGetSwapchainImagesKHR(
+     VkDevice                                     device,
+     VkSwapchainKHR                               swapchain,
+-    uint32_t*                                    pCount,
++    uint32_t*                                    pSwapchainImageCount,
+     VkImage*                                     pSwapchainImages);
+ VkResult VKAPI vkAcquireNextImageKHR(
+@@ -3154,7 +3233,7 @@ typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+ typedef struct {
+     VkDisplayKHR                                display;
+-    const char*                                   displayName;
++    const char*                                 displayName;
+     VkExtent2D                                  physicalDimensions;
+     VkExtent2D                                  physicalResolution;
+     VkSurfaceTransformFlagsKHR                  supportedTransforms;
+@@ -3213,22 +3292,22 @@ typedef struct {
+ } VkSurfaceDescriptionDisplayPlaneKHR;
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkDisplayPropertiesKHR* pProperties);
+-typedef VkResult (VKAPI *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pCount, VkDisplayModePropertiesKHR* pModeProperties);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
++typedef VkResult (VKAPI *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+ typedef VkResult (VKAPI *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
+ typedef VkResult (VKAPI *PFN_vkGetDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlanePropertiesKHR* pProperties);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkGetPhysicalDeviceDisplayPropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+-    uint32_t*                                   pCount,
++    uint32_t*                                   pPropertyCount,
+     VkDisplayPropertiesKHR*                     pProperties);
+ VkResult VKAPI vkGetDisplayModePropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkDisplayKHR                                display,
+-    uint32_t*                                   pCount,
+-    VkDisplayModePropertiesKHR*                 pModeProperties);
++    uint32_t*                                   pPropertyCount,
++    VkDisplayModePropertiesKHR*                 pProperties);
+ VkResult VKAPI vkCreateDisplayModeKHR(
+     VkPhysicalDevice                            physicalDevice,
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 255ad97..7622e4d 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -42,13 +42,13 @@ namespace {
+ } // namespace
+ __attribute__((visibility("default")))
+-VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance) {
+-    return vulkan::CreateInstance(pCreateInfo, pInstance);
++VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkInstance* pInstance) {
++    return vulkan::CreateInstance(pCreateInfo, pAllocator, pInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyInstance(VkInstance instance) {
+-    GetVtbl(instance).DestroyInstance(instance);
++void vkDestroyInstance(VkInstance instance, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(instance).DestroyInstance(instance, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -72,8 +72,8 @@ void vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDe
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
+-    GetVtbl(physicalDevice).GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueFamilyProperties);
++void vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
+ }
+ __attribute__((visibility("default")))
+@@ -97,33 +97,33 @@ void vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, V
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice) {
+-    return GetVtbl(physicalDevice).CreateDevice(physicalDevice, pCreateInfo, pDevice);
++VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDevice* pDevice) {
++    return GetVtbl(physicalDevice).CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDevice(VkDevice device) {
+-    vulkan::DestroyDevice(device);
++void vkDestroyDevice(VkDevice device, const VkAllocCallbacks* pAllocator) {
++    vulkan::DestroyDevice(device, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
+-    return vulkan::EnumerateInstanceLayerProperties(pCount, pProperties);
++VkResult vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) {
++    return vulkan::EnumerateInstanceLayerProperties(pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
+-    return vulkan::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties);
++VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) {
++    return vulkan::EnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
+-    return GetVtbl(physicalDevice).EnumerateDeviceLayerProperties(physicalDevice, pCount, pProperties);
++VkResult vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties) {
++    return GetVtbl(physicalDevice).EnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
+-    return GetVtbl(physicalDevice).EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
++VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) {
++    return GetVtbl(physicalDevice).EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+@@ -147,13 +147,13 @@ VkResult vkDeviceWaitIdle(VkDevice device) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem) {
+-    return GetVtbl(device).AllocMemory(device, pAllocInfo, pMem);
++VkResult vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* pAllocator, VkDeviceMemory* pMem) {
++    return GetVtbl(device).AllocMemory(device, pAllocInfo, pAllocator, pMem);
+ }
+ __attribute__((visibility("default")))
+-void vkFreeMemory(VkDevice device, VkDeviceMemory mem) {
+-    GetVtbl(device).FreeMemory(device, mem);
++void vkFreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).FreeMemory(device, mem, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -202,38 +202,38 @@ VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, V
+ }
+ __attribute__((visibility("default")))
+-void vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
+-    GetVtbl(device).GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
++void vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
++    GetVtbl(device).GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
+-    GetVtbl(physicalDevice).GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
++void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) {
++    GetVtbl(physicalDevice).GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
+-    return GetVtbl(queue).QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
++VkResult vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo) {
++    return GetVtbl(queue).QueueBindSparseBufferMemory(queue, buffer, bindInfoCount, pBindInfo);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
+-    return GetVtbl(queue).QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
++VkResult vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo) {
++    return GetVtbl(queue).QueueBindSparseImageOpaqueMemory(queue, image, bindInfoCount, pBindInfo);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) {
+-    return GetVtbl(queue).QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
++VkResult vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo) {
++    return GetVtbl(queue).QueueBindSparseImageMemory(queue, image, bindInfoCount, pBindInfo);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence) {
+-    return GetVtbl(device).CreateFence(device, pCreateInfo, pFence);
++VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFence* pFence) {
++    return GetVtbl(device).CreateFence(device, pCreateInfo, pAllocator, pFence);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyFence(VkDevice device, VkFence fence) {
+-    GetVtbl(device).DestroyFence(device, fence);
++void vkDestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyFence(device, fence, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -252,23 +252,23 @@ VkResult vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pF
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore) {
+-    return GetVtbl(device).CreateSemaphore(device, pCreateInfo, pSemaphore);
++VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSemaphore* pSemaphore) {
++    return GetVtbl(device).CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore) {
+-    GetVtbl(device).DestroySemaphore(device, semaphore);
++void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroySemaphore(device, semaphore, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent) {
+-    return GetVtbl(device).CreateEvent(device, pCreateInfo, pEvent);
++VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkEvent* pEvent) {
++    return GetVtbl(device).CreateEvent(device, pCreateInfo, pAllocator, pEvent);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyEvent(VkDevice device, VkEvent event) {
+-    GetVtbl(device).DestroyEvent(device, event);
++void vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyEvent(device, event, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -287,13 +287,13 @@ VkResult vkResetEvent(VkDevice device, VkEvent event) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool) {
+-    return GetVtbl(device).CreateQueryPool(device, pCreateInfo, pQueryPool);
++VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkQueryPool* pQueryPool) {
++    return GetVtbl(device).CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
+-    GetVtbl(device).DestroyQueryPool(device, queryPool);
++void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyQueryPool(device, queryPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -302,33 +302,33 @@ VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer) {
+-    return GetVtbl(device).CreateBuffer(device, pCreateInfo, pBuffer);
++VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBuffer* pBuffer) {
++    return GetVtbl(device).CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyBuffer(VkDevice device, VkBuffer buffer) {
+-    GetVtbl(device).DestroyBuffer(device, buffer);
++void vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyBuffer(device, buffer, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView) {
+-    return GetVtbl(device).CreateBufferView(device, pCreateInfo, pView);
++VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBufferView* pView) {
++    return GetVtbl(device).CreateBufferView(device, pCreateInfo, pAllocator, pView);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyBufferView(VkDevice device, VkBufferView bufferView) {
+-    GetVtbl(device).DestroyBufferView(device, bufferView);
++void vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyBufferView(device, bufferView, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage) {
+-    return GetVtbl(device).CreateImage(device, pCreateInfo, pImage);
++VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImage* pImage) {
++    return GetVtbl(device).CreateImage(device, pCreateInfo, pAllocator, pImage);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyImage(VkDevice device, VkImage image) {
+-    GetVtbl(device).DestroyImage(device, image);
++void vkDestroyImage(VkDevice device, VkImage image, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyImage(device, image, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -337,43 +337,43 @@ void vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSu
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView) {
+-    return GetVtbl(device).CreateImageView(device, pCreateInfo, pView);
++VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImageView* pView) {
++    return GetVtbl(device).CreateImageView(device, pCreateInfo, pAllocator, pView);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyImageView(VkDevice device, VkImageView imageView) {
+-    GetVtbl(device).DestroyImageView(device, imageView);
++void vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyImageView(device, imageView, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule) {
+-    return GetVtbl(device).CreateShaderModule(device, pCreateInfo, pShaderModule);
++VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShaderModule* pShaderModule) {
++    return GetVtbl(device).CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
+-    GetVtbl(device).DestroyShaderModule(device, shaderModule);
++void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyShaderModule(device, shaderModule, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader) {
+-    return GetVtbl(device).CreateShader(device, pCreateInfo, pShader);
++VkResult vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShader* pShader) {
++    return GetVtbl(device).CreateShader(device, pCreateInfo, pAllocator, pShader);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyShader(VkDevice device, VkShader shader) {
+-    GetVtbl(device).DestroyShader(device, shader);
++void vkDestroyShader(VkDevice device, VkShader shader, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyShader(device, shader, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache) {
+-    return GetVtbl(device).CreatePipelineCache(device, pCreateInfo, pPipelineCache);
++VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineCache* pPipelineCache) {
++    return GetVtbl(device).CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
+-    GetVtbl(device).DestroyPipelineCache(device, pipelineCache);
++void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyPipelineCache(device, pipelineCache, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -387,58 +387,58 @@ VkResult vkMergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint3
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines) {
+-    return GetVtbl(device).CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
++VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines) {
++    return GetVtbl(device).CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines) {
+-    return GetVtbl(device).CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
++VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines) {
++    return GetVtbl(device).CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipeline(VkDevice device, VkPipeline pipeline) {
+-    GetVtbl(device).DestroyPipeline(device, pipeline);
++void vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyPipeline(device, pipeline, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout) {
+-    return GetVtbl(device).CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
++VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) {
++    return GetVtbl(device).CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
+-    GetVtbl(device).DestroyPipelineLayout(device, pipelineLayout);
++void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyPipelineLayout(device, pipelineLayout, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler) {
+-    return GetVtbl(device).CreateSampler(device, pCreateInfo, pSampler);
++VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSampler* pSampler) {
++    return GetVtbl(device).CreateSampler(device, pCreateInfo, pAllocator, pSampler);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySampler(VkDevice device, VkSampler sampler) {
+-    GetVtbl(device).DestroySampler(device, sampler);
++void vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroySampler(device, sampler, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout) {
+-    return GetVtbl(device).CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
++VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) {
++    return GetVtbl(device).CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
+-    GetVtbl(device).DestroyDescriptorSetLayout(device, descriptorSetLayout);
++void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool) {
+-    return GetVtbl(device).CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
++VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) {
++    return GetVtbl(device).CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
+-    GetVtbl(device).DestroyDescriptorPool(device, descriptorPool);
++void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyDescriptorPool(device, descriptorPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -452,8 +452,8 @@ VkResult vkAllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo*
+ }
+ __attribute__((visibility("default")))
+-VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets) {
+-    return GetVtbl(device).FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
++VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) {
++    return GetVtbl(device).FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
+ }
+ __attribute__((visibility("default")))
+@@ -462,23 +462,23 @@ void vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteD
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer) {
+-    return GetVtbl(device).CreateFramebuffer(device, pCreateInfo, pFramebuffer);
++VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFramebuffer* pFramebuffer) {
++    return GetVtbl(device).CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
+-    GetVtbl(device).DestroyFramebuffer(device, framebuffer);
++void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyFramebuffer(device, framebuffer, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass) {
+-    return GetVtbl(device).CreateRenderPass(device, pCreateInfo, pRenderPass);
++VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkRenderPass* pRenderPass) {
++    return GetVtbl(device).CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
+-    GetVtbl(device).DestroyRenderPass(device, renderPass);
++void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyRenderPass(device, renderPass, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -487,13 +487,13 @@ void vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExte
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool) {
+-    return GetVtbl(device).CreateCommandPool(device, pCreateInfo, pCmdPool);
++VkResult vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkCmdPool* pCmdPool) {
++    return GetVtbl(device).CreateCommandPool(device, pCreateInfo, pAllocator, pCmdPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
+-    GetVtbl(device).DestroyCommandPool(device, cmdPool);
++void vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool, const VkAllocCallbacks* pAllocator) {
++    GetVtbl(device).DestroyCommandPool(device, cmdPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -507,8 +507,8 @@ VkResult vkAllocCommandBuffers(VkDevice device, const VkCmdBufferAllocInfo* pAll
+ }
+ __attribute__((visibility("default")))
+-void vkFreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers) {
+-    GetVtbl(device).FreeCommandBuffers(device, cmdPool, count, pCommandBuffers);
++void vkFreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t commandBufferCount, const VkCmdBuffer* pCommandBuffers) {
++    GetVtbl(device).FreeCommandBuffers(device, cmdPool, commandBufferCount, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+@@ -577,8 +577,8 @@ void vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
+-    GetVtbl(cmdBuffer).CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
++void vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
++    GetVtbl(cmdBuffer).CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
+ }
+ __attribute__((visibility("default")))
+@@ -602,13 +602,13 @@ void vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t insta
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
+-    GetVtbl(cmdBuffer).CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
++void vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
++    GetVtbl(cmdBuffer).CmdDrawIndirect(cmdBuffer, buffer, offset, drawCount, stride);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
+-    GetVtbl(cmdBuffer).CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
++void vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
++    GetVtbl(cmdBuffer).CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, drawCount, stride);
+ }
+ __attribute__((visibility("default")))
+@@ -722,8 +722,8 @@ void vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uin
+ }
+ __attribute__((visibility("default")))
+-void vkCmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
+-    GetVtbl(cmdBuffer).CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
++void vkCmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values) {
++    GetVtbl(cmdBuffer).CmdPushConstants(cmdBuffer, layout, stageFlags, offset, size, values);
+ }
+ __attribute__((visibility("default")))
+@@ -762,13 +762,13 @@ VkResult vkGetSurfacePropertiesKHR(VkDevice device, VkSurfaceKHR surface, VkSurf
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfaceFormatsKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pCount, VkSurfaceFormatKHR* pSurfaceFormats) {
+-    return GetVtbl(device).GetSurfaceFormatsKHR(device, surface, pCount, pSurfaceFormats);
++VkResult vkGetSurfaceFormatsKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) {
++    return GetVtbl(device).GetSurfaceFormatsKHR(device, surface, pSurfaceFormatCount, pSurfaceFormats);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pCount, VkPresentModeKHR* pPresentModes) {
+-    return GetVtbl(device).GetSurfacePresentModesKHR(device, surface, pCount, pPresentModes);
++VkResult vkGetSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) {
++    return GetVtbl(device).GetSurfacePresentModesKHR(device, surface, pPresentModeCount, pPresentModes);
+ }
+ __attribute__((visibility("default")))
+@@ -782,8 +782,8 @@ void vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pCount, VkImage* pSwapchainImages) {
+-    return GetVtbl(device).GetSwapchainImagesKHR(device, swapchain, pCount, pSwapchainImages);
++VkResult vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) {
++    return GetVtbl(device).GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index a44026f..d5795d7 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -22,8 +22,8 @@
+ #include <dirent.h>
+ #include <dlfcn.h>
+ #include <inttypes.h>
+-#include <malloc.h>
+ #include <pthread.h>
++#include <stdlib.h>
+ #include <string.h>
+ // standard C++ headers
+ #include <algorithm>
+@@ -58,7 +58,13 @@ typedef struct VkLayerLinkedListElem_ {
+ // Define Handle typedef to be void* as returned from dlopen.
+ typedef void* SharedLibraryHandle;
+-// Custom versions of std classes that use the vulkan alloc callback.
++// Standard-library allocator that delegates to VkAllocCallbacks.
++//
++// TODO(jessehall): This class currently always uses
++// VK_SYSTEM_ALLOC_SCOPE_INSTANCE. The scope to use could be a template
++// parameter or a constructor parameter. The former would help catch bugs
++// where we use the wrong scope, e.g. adding a command-scope string to an
++// instance-scope vector. But that might also be pretty annoying to deal with.
+ template <class T>
+ class CallbackAllocator {
+    public:
+@@ -73,7 +79,7 @@ class CallbackAllocator {
+     T* allocate(std::size_t n) {
+         void* mem = alloc->pfnAlloc(alloc->pUserData, n * sizeof(T), alignof(T),
+-                                    VK_SYSTEM_ALLOC_TYPE_INTERNAL);
++                                    VK_SYSTEM_ALLOC_SCOPE_INSTANCE);
+         return static_cast<T*>(mem);
+     }
+@@ -208,8 +214,39 @@ inline const DeviceVtbl* GetVtbl(VkQueue queue) {
+     return *reinterpret_cast<DeviceVtbl**>(queue);
+ }
+-void* DefaultAlloc(void*, size_t size, size_t alignment, VkSystemAllocType) {
+-    return memalign(alignment, size);
++void* DefaultAlloc(void*, size_t size, size_t alignment, VkSystemAllocScope) {
++    void* ptr = nullptr;
++    return posix_memalign(&ptr, alignment, size) == 0 ? ptr : nullptr;
++}
++
++void* DefaultRealloc(void*,
++                     void* ptr,
++                     size_t size,
++                     size_t alignment,
++                     VkSystemAllocScope) {
++    if (size == 0) {
++        free(ptr);
++        return nullptr;
++    }
++
++    // TODO(jessehall): Right now we never shrink allocations; if the new
++    // request is smaller than the existing chunk, we just continue using it.
++    // Right now the loader never reallocs, so this doesn't matter. If that
++    // changes, or if this code is copied into some other project, this should
++    // probably have a heuristic to allocate-copy-free when doing so will save
++    // "enough" space.
++    size_t old_size = ptr ? malloc_usable_size(ptr) : 0;
++    if (size <= old_size)
++        return ptr;
++
++    void* new_ptr = nullptr;
++    if (posix_memalign(&new_ptr, alignment, size) != 0)
++        return nullptr;
++    if (ptr) {
++        memcpy(new_ptr, ptr, std::min(old_size, size));
++        free(ptr);
++    }
++    return new_ptr;
+ }
+ void DefaultFree(void*, void* pMem) {
+@@ -219,6 +256,7 @@ void DefaultFree(void*, void* pMem) {
+ const VkAllocCallbacks kDefaultAllocCallbacks = {
+     .pUserData = nullptr,
+     .pfnAlloc = DefaultAlloc,
++    .pfnRealloc = DefaultRealloc,
+     .pfnFree = DefaultFree,
+ };
+@@ -418,7 +456,7 @@ VkResult ActivateAllLayers(TInfo create_info, Instance* instance, TObject* objec
+         }
+     }
+     // Load app layers
+-    for (uint32_t i = 0; i < create_info->layerCount; ++i) {
++    for (uint32_t i = 0; i < create_info->enabledLayerNameCount; ++i) {
+         String layer_name(create_info->ppEnabledLayerNames[i],
+                           string_allocator);
+         auto element = instance->layers.find(layer_name);
+@@ -439,17 +477,18 @@ template <class TCreateInfo>
+ bool AddExtensionToCreateInfo(TCreateInfo& local_create_info,
+                               const char* extension_name,
+                               const VkAllocCallbacks* alloc) {
+-    for (uint32_t i = 0; i < local_create_info.extensionCount; ++i) {
++    for (uint32_t i = 0; i < local_create_info.enabledExtensionNameCount; ++i) {
+         if (!strcmp(extension_name,
+                     local_create_info.ppEnabledExtensionNames[i])) {
+             return false;
+         }
+     }
+-    uint32_t extension_count = local_create_info.extensionCount;
+-    local_create_info.extensionCount++;
++    uint32_t extension_count = local_create_info.enabledExtensionNameCount;
++    local_create_info.enabledExtensionNameCount++;
+     void* mem = alloc->pfnAlloc(
+-        alloc->pUserData, local_create_info.extensionCount * sizeof(char*),
+-        alignof(char*), VK_SYSTEM_ALLOC_TYPE_INTERNAL);
++        alloc->pUserData,
++        local_create_info.enabledExtensionNameCount * sizeof(char*),
++        alignof(char*), VK_SYSTEM_ALLOC_SCOPE_INSTANCE);
+     if (mem) {
+         const char** enabled_extensions = static_cast<const char**>(mem);
+         for (uint32_t i = 0; i < extension_count; ++i) {
+@@ -461,7 +500,7 @@ bool AddExtensionToCreateInfo(TCreateInfo& local_create_info,
+     } else {
+         ALOGW("%s extension cannot be enabled: memory allocation failed",
+               extension_name);
+-        local_create_info.extensionCount--;
++        local_create_info.enabledExtensionNameCount--;
+         return false;
+     }
+     return true;
+@@ -537,12 +576,14 @@ PFN_vkVoidFunction GetLayerDeviceProcAddr(VkDevice device, const char* name) {
+ // "Bottom" functions. These are called at the end of the instance dispatch
+ // chain.
+-void DestroyInstanceBottom(VkInstance instance) {
++void DestroyInstanceBottom(VkInstance instance,
++                           const VkAllocCallbacks* allocator) {
+     // These checks allow us to call DestroyInstanceBottom from any error path
+     // in CreateInstanceBottom, before the driver instance is fully initialized.
+     if (instance->drv.vtbl.instance != VK_NULL_HANDLE &&
+         instance->drv.vtbl.DestroyInstance) {
+-        instance->drv.vtbl.DestroyInstance(instance->drv.vtbl.instance);
++        instance->drv.vtbl.DestroyInstance(instance->drv.vtbl.instance,
++                                           allocator);
+     }
+     if (instance->message) {
+         PFN_vkDbgDestroyMsgCallback DebugDestroyMessageCallback;
+@@ -561,21 +602,22 @@ void DestroyInstanceBottom(VkInstance instance) {
+ }
+ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
++                              const VkAllocCallbacks* allocator,
+                               VkInstance* instance_ptr) {
+     Instance* instance = *instance_ptr;
+     VkResult result;
+-    result =
+-        g_hwdevice->CreateInstance(create_info, &instance->drv.vtbl.instance);
++    result = g_hwdevice->CreateInstance(create_info, instance->alloc,
++                                        &instance->drv.vtbl.instance);
+     if (result != VK_SUCCESS) {
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return result;
+     }
+     if (!LoadInstanceVtbl(
+             instance->drv.vtbl.instance, instance->drv.vtbl.instance,
+             g_hwdevice->GetInstanceProcAddr, instance->drv.vtbl)) {
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+@@ -587,7 +629,7 @@ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+                                         "vkGetDeviceProcAddr"));
+     if (!instance->drv.GetDeviceProcAddr) {
+         ALOGE("missing instance proc: \"%s\"", "vkGetDeviceProcAddr");
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+@@ -600,7 +642,7 @@ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+     } else {
+         ALOGE("invalid VkInstance dispatch magic: 0x%" PRIxPTR,
+               dispatch->magic);
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+@@ -608,7 +650,7 @@ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+     result = instance->drv.vtbl.EnumeratePhysicalDevices(
+         instance->drv.vtbl.instance, &num_physical_devices, nullptr);
+     if (result != VK_SUCCESS) {
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     num_physical_devices = std::min(num_physical_devices, kMaxPhysicalDevices);
+@@ -616,7 +658,7 @@ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+         instance->drv.vtbl.instance, &num_physical_devices,
+         instance->physical_devices);
+     if (result != VK_SUCCESS) {
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+     for (uint32_t i = 0; i < num_physical_devices; i++) {
+@@ -625,7 +667,7 @@ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+         if (dispatch->magic != HWVULKAN_DISPATCH_MAGIC) {
+             ALOGE("invalid VkPhysicalDevice dispatch magic: 0x%" PRIxPTR,
+                   dispatch->magic);
+-            DestroyInstanceBottom(instance);
++            DestroyInstanceBottom(instance, allocator);
+             return VK_ERROR_INITIALIZATION_FAILED;
+         }
+         dispatch->vtbl = instance->vtbl;
+@@ -696,13 +738,21 @@ void GetPhysicalDeviceMemoryPropertiesBottom(
+ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+                             const VkDeviceCreateInfo* create_info,
++                            const VkAllocCallbacks* allocator,
+                             VkDevice* out_device) {
+     Instance& instance = *static_cast<Instance*>(GetVtbl(pdev)->instance);
+     VkResult result;
+-    void* mem = instance.alloc->pfnAlloc(instance.alloc->pUserData,
+-                                         sizeof(Device), alignof(Device),
+-                                         VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
++    if (!allocator) {
++        if (instance.alloc)
++            allocator = instance.alloc;
++        else
++            allocator = &kDefaultAllocCallbacks;
++    }
++
++    void* mem =
++        allocator->pfnAlloc(allocator->pUserData, sizeof(Device),
++                            alignof(Device), VK_SYSTEM_ALLOC_SCOPE_DEVICE);
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Device* device = new (mem) Device(&instance);
+@@ -714,7 +764,8 @@ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+     }
+     VkDevice drv_device;
+-    result = instance.drv.vtbl.CreateDevice(pdev, create_info, &drv_device);
++    result = instance.drv.vtbl.CreateDevice(pdev, create_info, allocator,
++                                            &drv_device);
+     if (result != VK_SUCCESS) {
+         DestroyDevice(device);
+         return result;
+@@ -727,7 +778,7 @@ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+         PFN_vkDestroyDevice destroy_device =
+             reinterpret_cast<PFN_vkDestroyDevice>(
+                 instance.drv.GetDeviceProcAddr(drv_device, "vkDestroyDevice"));
+-        destroy_device(drv_device);
++        destroy_device(drv_device, allocator);
+         DestroyDevice(device);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+@@ -778,7 +829,7 @@ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+         reinterpret_cast<PFN_vkCreateDevice>(
+             device->vtbl_storage.GetDeviceProcAddr(drv_device,
+                                                    "vkCreateDevice"));
+-    layer_createDevice(pdev, create_info, &drv_device);
++    layer_createDevice(pdev, create_info, allocator, &drv_device);
+     // TODO(mlentine) : This is needed to use WSI layer validation. Remove this
+     // when new version of layer initialization exits.
+@@ -896,23 +947,25 @@ VkResult EnumerateInstanceLayerProperties(uint32_t* count,
+ }
+ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
++                        const VkAllocCallbacks* allocator,
+                         VkInstance* out_instance) {
+     VkResult result;
+     if (!EnsureInitialized())
+         return VK_ERROR_INITIALIZATION_FAILED;
++    if (!allocator)
++        allocator = &kDefaultAllocCallbacks;
++
+     VkInstanceCreateInfo local_create_info = *create_info;
+-    if (!local_create_info.pAllocCb)
+-        local_create_info.pAllocCb = &kDefaultAllocCallbacks;
+     create_info = &local_create_info;
+-    void* instance_mem = create_info->pAllocCb->pfnAlloc(
+-        create_info->pAllocCb->pUserData, sizeof(Instance), alignof(Instance),
+-        VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
++    void* instance_mem =
++        allocator->pfnAlloc(allocator->pUserData, sizeof(Instance),
++                            alignof(Instance), VK_SYSTEM_ALLOC_SCOPE_INSTANCE);
+     if (!instance_mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+-    Instance* instance = new (instance_mem) Instance(create_info->pAllocCb);
++    Instance* instance = new (instance_mem) Instance(allocator);
+     instance->vtbl_storage = kBottomInstanceFunctions;
+     instance->vtbl_storage.instance = instance;
+@@ -930,7 +983,7 @@ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+     result = ActivateAllLayers(create_info, instance, instance);
+     if (result != VK_SUCCESS) {
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return result;
+     }
+@@ -973,7 +1026,7 @@ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+     if (!LoadInstanceVtbl(static_cast<VkInstance>(base_object),
+                           static_cast<VkInstance>(next_object),
+                           next_get_proc_addr, instance->vtbl_storage)) {
+-        DestroyInstanceBottom(instance);
++        DestroyInstanceBottom(instance, allocator);
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+@@ -988,7 +1041,8 @@ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+     }
+     *out_instance = instance;
+-    result = instance->vtbl_storage.CreateInstance(create_info, out_instance);
++    result = instance->vtbl_storage.CreateInstance(create_info, allocator,
++                                                   out_instance);
+     if (enable_callback)
+         FreeAllocatedCreateInfo(local_create_info, instance->alloc);
+     if (result <= 0) {
+@@ -1079,7 +1133,7 @@ VkResult AllocCommandBuffers(VkDevice device,
+     VkResult result = vtbl->AllocCommandBuffers(device, alloc_info, cmdbuffers);
+     if (result != VK_SUCCESS)
+         return result;
+-    for (uint32_t i = 0; i < alloc_info->count; i++) {
++    for (uint32_t i = 0; i < alloc_info->bufferCount; i++) {
+         hwvulkan_dispatch_t* dispatch =
+             reinterpret_cast<hwvulkan_dispatch_t*>(cmdbuffers[i]);
+         ALOGE_IF(dispatch->magic != HWVULKAN_DISPATCH_MAGIC,
+@@ -1090,14 +1144,15 @@ VkResult AllocCommandBuffers(VkDevice device,
+     return VK_SUCCESS;
+ }
+-VkResult DestroyDevice(VkDevice drv_device) {
++VkResult DestroyDevice(VkDevice drv_device,
++                       const VkAllocCallbacks* /*allocator*/) {
+     const DeviceVtbl* vtbl = GetVtbl(drv_device);
+     Device* device = static_cast<Device*>(vtbl->device);
+     for (auto it = device->active_layers.begin();
+          it != device->active_layers.end(); ++it) {
+         DeactivateLayer(device->instance, it);
+     }
+-    vtbl->DestroyDevice(drv_device);
++    vtbl->DestroyDevice(drv_device, device->instance->alloc);
+     DestroyDevice(device);
+     return VK_SUCCESS;
+ }
+@@ -1105,9 +1160,9 @@ VkResult DestroyDevice(VkDevice drv_device) {
+ void* AllocMem(VkInstance instance,
+                size_t size,
+                size_t align,
+-               VkSystemAllocType type) {
++               VkSystemAllocScope scope) {
+     const VkAllocCallbacks* alloc_cb = instance->alloc;
+-    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, type);
++    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, scope);
+ }
+ void FreeMem(VkInstance instance, void* ptr) {
+@@ -1118,10 +1173,10 @@ void FreeMem(VkInstance instance, void* ptr) {
+ void* AllocMem(VkDevice device,
+                size_t size,
+                size_t align,
+-               VkSystemAllocType type) {
++               VkSystemAllocScope scope) {
+     const VkAllocCallbacks* alloc_cb =
+         static_cast<Device*>(GetVtbl(device)->device)->instance->alloc;
+-    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, type);
++    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, scope);
+ }
+ void FreeMem(VkDevice device, void* ptr) {
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 15e2779..e166887 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -216,6 +216,7 @@ VkResult EnumerateInstanceExtensionProperties(
+ VkResult EnumerateInstanceLayerProperties(uint32_t* count,
+                                           VkLayerProperties* properties);
+ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
++                        const VkAllocCallbacks* pAllocator,
+                         VkInstance* instance);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice drv_device, const char* name);
+@@ -226,17 +227,17 @@ void GetDeviceQueue(VkDevice drv_device,
+ VkResult AllocCommandBuffers(VkDevice device,
+                              const VkCmdBufferAllocInfo* alloc_info,
+                              VkCmdBuffer* cmdbuffers);
+-VkResult DestroyDevice(VkDevice drv_device);
++VkResult DestroyDevice(VkDevice drv_device, const VkAllocCallbacks* pAllocator);
+ void* AllocMem(VkInstance instance,
+                size_t size,
+                size_t align,
+-               VkSystemAllocType type);
++               VkSystemAllocScope scope);
+ void FreeMem(VkInstance instance, void* ptr);
+ void* AllocMem(VkDevice device,
+                size_t size,
+                size_t align,
+-               VkSystemAllocType type);
++               VkSystemAllocScope scope);
+ void FreeMem(VkDevice device, void* ptr);
+ const DeviceVtbl& GetDriverVtbl(VkDevice device);
+ const DeviceVtbl& GetDriverVtbl(VkQueue queue);
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 2922465..f6ab081 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -49,6 +49,19 @@ struct NativeBaseDeleter {
+     void operator()(T* obj) { obj->common.decRef(&obj->common); }
+ };
++template <typename Host>
++struct AllocScope {};
++
++template <>
++struct AllocScope<VkInstance> {
++    static const VkSystemAllocScope kScope = VK_SYSTEM_ALLOC_SCOPE_INSTANCE;
++};
++
++template <>
++struct AllocScope<VkDevice> {
++    static const VkSystemAllocScope kScope = VK_SYSTEM_ALLOC_SCOPE_DEVICE;
++};
++
+ template <typename T, typename Host>
+ class VulkanAllocator {
+    public:
+@@ -62,7 +75,7 @@ class VulkanAllocator {
+     T* allocate(size_t n) const {
+         return static_cast<T*>(AllocMem(host_, n * sizeof(T), alignof(T),
+-                                        VK_SYSTEM_ALLOC_TYPE_INTERNAL));
++                                        AllocScope<Host>::kScope));
+     }
+     void deallocate(T* p, size_t) const { return FreeMem(host_, p); }
+@@ -129,7 +142,7 @@ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+                                  ANativeWindow* window,
+                                  VkSurfaceKHR* out_surface) {
+     void* mem = AllocMem(instance, sizeof(Surface), alignof(Surface),
+-                         VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
++                         VK_SYSTEM_ALLOC_SCOPE_OBJECT);
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Surface* surface = new (mem) Surface;
+@@ -362,7 +375,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     // After this point, we must deallocate the swapchain on error.
+     void* mem = AllocMem(device, sizeof(Swapchain), alignof(Swapchain),
+-                         VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
++                         VK_SYSTEM_ALLOC_SCOPE_OBJECT);
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Swapchain* swapchain = new (mem) Swapchain(surface, num_images);
+@@ -391,7 +404,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         .usage = create_info->imageUsageFlags,
+         .flags = 0,
+         .sharingMode = create_info->sharingMode,
+-        .queueFamilyCount = create_info->queueFamilyCount,
++        .queueFamilyIndexCount = create_info->queueFamilyIndexCount,
+         .pQueueFamilyIndices = create_info->pQueueFamilyIndices,
+     };
+@@ -418,7 +431,8 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         image_native_buffer.format = img.buffer->format;
+         image_native_buffer.usage = img.buffer->usage;
+-        result = driver_vtbl.CreateImage(device, &image_create, &img.image);
++        result =
++            driver_vtbl.CreateImage(device, &image_create, nullptr, &img.image);
+         if (result != VK_SUCCESS) {
+             ALOGD("vkCreateImage w/ native buffer failed: %u", result);
+             break;
+@@ -441,7 +455,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         }
+         if (result != VK_SUCCESS) {
+             if (img.image)
+-                driver_vtbl.DestroyImage(device, img.image);
++                driver_vtbl.DestroyImage(device, img.image, nullptr);
+         }
+     }
+@@ -469,7 +483,7 @@ VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle) {
+             img.dequeued = false;
+         }
+         if (img.image) {
+-            driver_vtbl.DestroyImage(device, img.image);
++            driver_vtbl.DestroyImage(device, img.image, nullptr);
+         }
+     }
+@@ -592,7 +606,7 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+     VkResult final_result = VK_SUCCESS;
+     for (uint32_t sc = 0; sc < present_info->swapchainCount; sc++) {
+         Swapchain& swapchain =
+-            *SwapchainFromHandle(present_info->swapchains[sc]);
++            *SwapchainFromHandle(present_info->pSwapchains[sc]);
+         ANativeWindow* window = swapchain.surface.window.get();
+         uint32_t image_idx = present_info->imageIndices[sc];
+         Swapchain::Image& img = swapchain.images[image_idx];
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 0f8382f..fe6a1e8 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -35,7 +35,7 @@ struct VkPhysicalDevice_T {
+ struct VkInstance_T {
+     hwvulkan_dispatch_t dispatch;
+-    const VkAllocCallbacks* alloc;
++    VkAllocCallbacks allocator;
+     VkPhysicalDevice_T physical_device;
+ };
+@@ -67,7 +67,6 @@ namespace {
+ namespace HandleType {
+ enum Enum {
+     kBufferView,
+-    kCmdPool,
+     kDescriptorPool,
+     kDescriptorSet,
+     kDescriptorSetLayout,
+@@ -96,6 +95,7 @@ const VkDeviceSize kMaxDeviceMemory = VkDeviceSize(INTPTR_MAX) + 1;
+ struct VkDevice_T {
+     hwvulkan_dispatch_t dispatch;
++    VkAllocCallbacks allocator;
+     VkInstance_T* instance;
+     VkQueue_T queue;
+     std::array<uint64_t, HandleType::kNumTypes> next_handle;
+@@ -130,22 +130,22 @@ __attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = {
+ namespace {
+-VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
++VkResult CreateInstance(const VkInstanceCreateInfo* /*create_info*/,
++                        const VkAllocCallbacks* allocator,
+                         VkInstance* out_instance) {
+     // Assume the loader provided alloc callbacks even if the app didn't.
+     ALOG_ASSERT(
+-        create_info->pAllocCb,
++        allocator,
+         "Missing alloc callbacks, loader or app should have provided them");
+-    VkInstance_T* instance =
+-        static_cast<VkInstance_T*>(create_info->pAllocCb->pfnAlloc(
+-            create_info->pAllocCb->pUserData, sizeof(VkInstance_T),
+-            alignof(VkInstance_T), VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++    VkInstance_T* instance = static_cast<VkInstance_T*>(allocator->pfnAlloc(
++        allocator->pUserData, sizeof(VkInstance_T), alignof(VkInstance_T),
++        VK_SYSTEM_ALLOC_SCOPE_INSTANCE));
+     if (!instance)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     instance->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
+-    instance->alloc = create_info->pAllocCb;
++    instance->allocator = *allocator;
+     instance->physical_device.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
+     *out_instance = instance;
+@@ -244,8 +244,9 @@ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) {
+ // -----------------------------------------------------------------------------
+ // Instance
+-void DestroyInstance(VkInstance instance) {
+-    instance->alloc->pfnFree(instance->alloc->pUserData, instance);
++void DestroyInstance(VkInstance instance,
++                     const VkAllocCallbacks* /*allocator*/) {
++    instance->allocator.pfnFree(instance->allocator.pUserData, instance);
+ }
+ // -----------------------------------------------------------------------------
+@@ -302,15 +303,19 @@ void GetPhysicalDeviceMemoryProperties(
+ VkResult CreateDevice(VkPhysicalDevice physical_device,
+                       const VkDeviceCreateInfo*,
++                      const VkAllocCallbacks* allocator,
+                       VkDevice* out_device) {
+     VkInstance_T* instance = GetInstanceFromPhysicalDevice(physical_device);
+-    VkDevice_T* device = static_cast<VkDevice_T*>(instance->alloc->pfnAlloc(
+-        instance->alloc->pUserData, sizeof(VkDevice_T), alignof(VkDevice_T),
+-        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++    if (!allocator)
++        allocator = &instance->allocator;
++    VkDevice_T* device = static_cast<VkDevice_T*>(
++        allocator->pfnAlloc(allocator->pUserData, sizeof(VkDevice_T),
++                            alignof(VkDevice_T), VK_SYSTEM_ALLOC_SCOPE_DEVICE));
+     if (!device)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     device->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
++    device->allocator = *allocator;
+     device->instance = instance;
+     device->queue.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
+     std::fill(device->next_handle.begin(), device->next_handle.end(),
+@@ -320,11 +325,10 @@ VkResult CreateDevice(VkPhysicalDevice physical_device,
+     return VK_SUCCESS;
+ }
+-void DestroyDevice(VkDevice device) {
++void DestroyDevice(VkDevice device, const VkAllocCallbacks* /*allocator*/) {
+     if (!device)
+         return;
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
+-    alloc->pfnFree(alloc->pUserData, device);
++    device->allocator.pfnFree(device->allocator.pUserData, device);
+ }
+ void GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
+@@ -332,19 +336,50 @@ void GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
+ }
+ // -----------------------------------------------------------------------------
++// CmdPool
++
++struct CmdPool {
++    typedef VkCmdPool HandleType;
++    VkAllocCallbacks allocator;
++};
++DEFINE_OBJECT_HANDLE_CONVERSION(CmdPool)
++
++VkResult CreateCommandPool(VkDevice device,
++                           const VkCmdPoolCreateInfo* /*create_info*/,
++                           const VkAllocCallbacks* allocator,
++                           VkCmdPool* cmd_pool) {
++    if (!allocator)
++        allocator = &device->allocator;
++    CmdPool* pool = static_cast<CmdPool*>(
++        allocator->pfnAlloc(allocator->pUserData, sizeof(CmdPool),
++                            alignof(CmdPool), VK_SYSTEM_ALLOC_SCOPE_OBJECT));
++    if (!pool)
++        return VK_ERROR_OUT_OF_HOST_MEMORY;
++    pool->allocator = *allocator;
++    *cmd_pool = GetHandleToCmdPool(pool);
++    return VK_SUCCESS;
++}
++
++void DestroyCommandPool(VkDevice /*device*/,
++                        VkCmdPool cmd_pool,
++                        const VkAllocCallbacks* /*allocator*/) {
++    CmdPool* pool = GetCmdPoolFromHandle(cmd_pool);
++    pool->allocator.pfnFree(pool->allocator.pUserData, pool);
++}
++
++// -----------------------------------------------------------------------------
+ // CmdBuffer
+-VkResult AllocCommandBuffers(VkDevice device,
++VkResult AllocCommandBuffers(VkDevice /*device*/,
+                              const VkCmdBufferAllocInfo* alloc_info,
+                              VkCmdBuffer* cmdbufs) {
+     VkResult result = VK_SUCCESS;
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
+-
+-    std::fill(cmdbufs, cmdbufs + alloc_info->count, nullptr);
+-    for (uint32_t i = 0; i < alloc_info->count; i++) {
+-        cmdbufs[i] = static_cast<VkCmdBuffer_T*>(alloc->pfnAlloc(
+-            alloc->pUserData, sizeof(VkCmdBuffer_T), alignof(VkCmdBuffer_T),
+-            VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++    CmdPool& pool = *GetCmdPoolFromHandle(alloc_info->cmdPool);
++    std::fill(cmdbufs, cmdbufs + alloc_info->bufferCount, nullptr);
++    for (uint32_t i = 0; i < alloc_info->bufferCount; i++) {
++        cmdbufs[i] = static_cast<VkCmdBuffer_T*>(pool.allocator.pfnAlloc(
++            pool.allocator.pUserData, sizeof(VkCmdBuffer_T),
++            alignof(VkCmdBuffer_T), VK_SYSTEM_ALLOC_SCOPE_OBJECT));
+         if (!cmdbufs[i]) {
+             result = VK_ERROR_OUT_OF_HOST_MEMORY;
+             break;
+@@ -352,23 +387,22 @@ VkResult AllocCommandBuffers(VkDevice device,
+         cmdbufs[i]->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
+     }
+     if (result != VK_SUCCESS) {
+-        for (uint32_t i = 0; i < alloc_info->count; i++) {
++        for (uint32_t i = 0; i < alloc_info->bufferCount; i++) {
+             if (!cmdbufs[i])
+                 break;
+-            alloc->pfnFree(alloc->pUserData, cmdbufs[i]);
++            pool.allocator.pfnFree(pool.allocator.pUserData, cmdbufs[i]);
+         }
+     }
+-
+     return result;
+ }
+-void FreeCommandBuffers(VkDevice device,
+-                        VkCmdPool,
++void FreeCommandBuffers(VkDevice /*device*/,
++                        VkCmdPool cmd_pool,
+                         uint32_t count,
+                         const VkCmdBuffer* cmdbufs) {
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++    CmdPool& pool = *GetCmdPoolFromHandle(cmd_pool);
+     for (uint32_t i = 0; i < count; i++)
+-        alloc->pfnFree(alloc->pUserData, cmdbufs[i]);
++        pool.allocator.pfnFree(pool.allocator.pUserData, cmdbufs[i]);
+ }
+ // -----------------------------------------------------------------------------
+@@ -383,15 +417,17 @@ DEFINE_OBJECT_HANDLE_CONVERSION(DeviceMemory)
+ VkResult AllocMemory(VkDevice device,
+                      const VkMemoryAllocInfo* alloc_info,
++                     const VkAllocCallbacks* allocator,
+                      VkDeviceMemory* mem_handle) {
+     if (SIZE_MAX - sizeof(DeviceMemory) <= alloc_info->allocationSize)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
++    if (!allocator)
++        allocator = &device->allocator;
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
+     size_t size = sizeof(DeviceMemory) + size_t(alloc_info->allocationSize);
+     DeviceMemory* mem = static_cast<DeviceMemory*>(
+-        alloc->pfnAlloc(alloc->pUserData, size, alignof(DeviceMemory),
+-                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++        allocator->pfnAlloc(allocator->pUserData, size, alignof(DeviceMemory),
++                            VK_SYSTEM_ALLOC_SCOPE_OBJECT));
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     mem->size = size;
+@@ -399,10 +435,13 @@ VkResult AllocMemory(VkDevice device,
+     return VK_SUCCESS;
+ }
+-void FreeMemory(VkDevice device, VkDeviceMemory mem_handle) {
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++void FreeMemory(VkDevice device,
++                VkDeviceMemory mem_handle,
++                const VkAllocCallbacks* allocator) {
++    if (!allocator)
++        allocator = &device->allocator;
+     DeviceMemory* mem = GetDeviceMemoryFromHandle(mem_handle);
+-    alloc->pfnFree(alloc->pUserData, mem);
++    allocator->pfnFree(allocator->pUserData, mem);
+ }
+ VkResult MapMemory(VkDevice,
+@@ -427,16 +466,17 @@ DEFINE_OBJECT_HANDLE_CONVERSION(Buffer)
+ VkResult CreateBuffer(VkDevice device,
+                       const VkBufferCreateInfo* create_info,
++                      const VkAllocCallbacks* allocator,
+                       VkBuffer* buffer_handle) {
+     ALOGW_IF(create_info->size > kMaxDeviceMemory,
+              "CreateBuffer: requested size 0x%" PRIx64
+              " exceeds max device memory size 0x%" PRIx64,
+              create_info->size, kMaxDeviceMemory);
+-
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++    if (!allocator)
++        allocator = &device->allocator;
+     Buffer* buffer = static_cast<Buffer*>(
+-        alloc->pfnAlloc(alloc->pUserData, sizeof(Buffer), alignof(Buffer),
+-                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++        allocator->pfnAlloc(allocator->pUserData, sizeof(Buffer),
++                            alignof(Buffer), VK_SYSTEM_ALLOC_SCOPE_OBJECT));
+     if (!buffer)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     buffer->size = create_info->size;
+@@ -453,10 +493,13 @@ void GetBufferMemoryRequirements(VkDevice,
+     requirements->memoryTypeBits = 0x1;
+ }
+-void DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++void DestroyBuffer(VkDevice device,
++                   VkBuffer buffer_handle,
++                   const VkAllocCallbacks* allocator) {
++    if (!allocator)
++        allocator = &device->allocator;
+     Buffer* buffer = GetBufferFromHandle(buffer_handle);
+-    alloc->pfnFree(alloc->pUserData, buffer);
++    allocator->pfnFree(allocator->pUserData, buffer);
+ }
+ // -----------------------------------------------------------------------------
+@@ -470,6 +513,7 @@ DEFINE_OBJECT_HANDLE_CONVERSION(Image)
+ VkResult CreateImage(VkDevice device,
+                      const VkImageCreateInfo* create_info,
++                     const VkAllocCallbacks* allocator,
+                      VkImage* image_handle) {
+     if (create_info->imageType != VK_IMAGE_TYPE_2D ||
+         create_info->format != VK_FORMAT_R8G8B8A8_UNORM ||
+@@ -488,10 +532,11 @@ VkResult CreateImage(VkDevice device,
+              " exceeds max device memory size 0x%" PRIx64,
+              size, kMaxDeviceMemory);
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++    if (!allocator)
++        allocator = &device->allocator;
+     Image* image = static_cast<Image*>(
+-        alloc->pfnAlloc(alloc->pUserData, sizeof(Image), alignof(Image),
+-                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
++        allocator->pfnAlloc(allocator->pUserData, sizeof(Image), alignof(Image),
++                            VK_SYSTEM_ALLOC_SCOPE_OBJECT));
+     if (!image)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     image->size = size;
+@@ -508,10 +553,13 @@ void GetImageMemoryRequirements(VkDevice,
+     requirements->memoryTypeBits = 0x1;
+ }
+-void DestroyImage(VkDevice device, VkImage image_handle) {
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++void DestroyImage(VkDevice device,
++                  VkImage image_handle,
++                  const VkAllocCallbacks* allocator) {
++    if (!allocator)
++        allocator = &device->allocator;
+     Image* image = GetImageFromHandle(image_handle);
+-    alloc->pfnFree(alloc->pUserData, image);
++    allocator->pfnFree(allocator->pUserData, image);
+ }
+ // -----------------------------------------------------------------------------
+@@ -519,20 +567,15 @@ void DestroyImage(VkDevice device, VkImage image_handle) {
+ VkResult CreateBufferView(VkDevice device,
+                           const VkBufferViewCreateInfo*,
++                          const VkAllocCallbacks* /*allocator*/,
+                           VkBufferView* view) {
+     *view = AllocHandle(device, HandleType::kBufferView);
+     return VK_SUCCESS;
+ }
+-VkResult CreateCommandPool(VkDevice device,
+-                           const VkCmdPoolCreateInfo*,
+-                           VkCmdPool* pool) {
+-    *pool = AllocHandle(device, HandleType::kCmdPool);
+-    return VK_SUCCESS;
+-}
+-
+ VkResult CreateDescriptorPool(VkDevice device,
+                               const VkDescriptorPoolCreateInfo*,
++                              const VkAllocCallbacks* /*allocator*/,
+                               VkDescriptorPool* pool) {
+     *pool = AllocHandle(device, HandleType::kDescriptorPool);
+     return VK_SUCCESS;
+@@ -541,13 +584,14 @@ VkResult CreateDescriptorPool(VkDevice device,
+ VkResult AllocDescriptorSets(VkDevice device,
+                              const VkDescriptorSetAllocInfo* alloc_info,
+                              VkDescriptorSet* descriptor_sets) {
+-    for (uint32_t i = 0; i < alloc_info->count; i++)
++    for (uint32_t i = 0; i < alloc_info->setLayoutCount; i++)
+         descriptor_sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
+     return VK_SUCCESS;
+ }
+ VkResult CreateDescriptorSetLayout(VkDevice device,
+                                    const VkDescriptorSetLayoutCreateInfo*,
++                                   const VkAllocCallbacks* /*allocator*/,
+                                    VkDescriptorSetLayout* layout) {
+     *layout = AllocHandle(device, HandleType::kDescriptorSetLayout);
+     return VK_SUCCESS;
+@@ -555,6 +599,7 @@ VkResult CreateDescriptorSetLayout(VkDevice device,
+ VkResult CreateEvent(VkDevice device,
+                      const VkEventCreateInfo*,
++                     const VkAllocCallbacks* /*allocator*/,
+                      VkEvent* event) {
+     *event = AllocHandle(device, HandleType::kEvent);
+     return VK_SUCCESS;
+@@ -562,6 +607,7 @@ VkResult CreateEvent(VkDevice device,
+ VkResult CreateFence(VkDevice device,
+                      const VkFenceCreateInfo*,
++                     const VkAllocCallbacks* /*allocator*/,
+                      VkFence* fence) {
+     *fence = AllocHandle(device, HandleType::kFence);
+     return VK_SUCCESS;
+@@ -569,6 +615,7 @@ VkResult CreateFence(VkDevice device,
+ VkResult CreateFramebuffer(VkDevice device,
+                            const VkFramebufferCreateInfo*,
++                           const VkAllocCallbacks* /*allocator*/,
+                            VkFramebuffer* framebuffer) {
+     *framebuffer = AllocHandle(device, HandleType::kFramebuffer);
+     return VK_SUCCESS;
+@@ -576,6 +623,7 @@ VkResult CreateFramebuffer(VkDevice device,
+ VkResult CreateImageView(VkDevice device,
+                          const VkImageViewCreateInfo*,
++                         const VkAllocCallbacks* /*allocator*/,
+                          VkImageView* view) {
+     *view = AllocHandle(device, HandleType::kImageView);
+     return VK_SUCCESS;
+@@ -585,6 +633,7 @@ VkResult CreateGraphicsPipelines(VkDevice device,
+                                  VkPipelineCache,
+                                  uint32_t count,
+                                  const VkGraphicsPipelineCreateInfo*,
++                                 const VkAllocCallbacks* /*allocator*/,
+                                  VkPipeline* pipelines) {
+     for (uint32_t i = 0; i < count; i++)
+         pipelines[i] = AllocHandle(device, HandleType::kPipeline);
+@@ -595,6 +644,7 @@ VkResult CreateComputePipelines(VkDevice device,
+                                 VkPipelineCache,
+                                 uint32_t count,
+                                 const VkComputePipelineCreateInfo*,
++                                const VkAllocCallbacks* /*allocator*/,
+                                 VkPipeline* pipelines) {
+     for (uint32_t i = 0; i < count; i++)
+         pipelines[i] = AllocHandle(device, HandleType::kPipeline);
+@@ -603,6 +653,7 @@ VkResult CreateComputePipelines(VkDevice device,
+ VkResult CreatePipelineCache(VkDevice device,
+                              const VkPipelineCacheCreateInfo*,
++                             const VkAllocCallbacks* /*allocator*/,
+                              VkPipelineCache* cache) {
+     *cache = AllocHandle(device, HandleType::kPipelineCache);
+     return VK_SUCCESS;
+@@ -610,6 +661,7 @@ VkResult CreatePipelineCache(VkDevice device,
+ VkResult CreatePipelineLayout(VkDevice device,
+                               const VkPipelineLayoutCreateInfo*,
++                              const VkAllocCallbacks* /*allocator*/,
+                               VkPipelineLayout* layout) {
+     *layout = AllocHandle(device, HandleType::kPipelineLayout);
+     return VK_SUCCESS;
+@@ -617,6 +669,7 @@ VkResult CreatePipelineLayout(VkDevice device,
+ VkResult CreateQueryPool(VkDevice device,
+                          const VkQueryPoolCreateInfo*,
++                         const VkAllocCallbacks* /*allocator*/,
+                          VkQueryPool* pool) {
+     *pool = AllocHandle(device, HandleType::kQueryPool);
+     return VK_SUCCESS;
+@@ -624,6 +677,7 @@ VkResult CreateQueryPool(VkDevice device,
+ VkResult CreateRenderPass(VkDevice device,
+                           const VkRenderPassCreateInfo*,
++                          const VkAllocCallbacks* /*allocator*/,
+                           VkRenderPass* renderpass) {
+     *renderpass = AllocHandle(device, HandleType::kRenderPass);
+     return VK_SUCCESS;
+@@ -631,6 +685,7 @@ VkResult CreateRenderPass(VkDevice device,
+ VkResult CreateSampler(VkDevice device,
+                        const VkSamplerCreateInfo*,
++                       const VkAllocCallbacks* /*allocator*/,
+                        VkSampler* sampler) {
+     *sampler = AllocHandle(device, HandleType::kSampler);
+     return VK_SUCCESS;
+@@ -638,6 +693,7 @@ VkResult CreateSampler(VkDevice device,
+ VkResult CreateSemaphore(VkDevice device,
+                          const VkSemaphoreCreateInfo*,
++                         const VkAllocCallbacks* /*allocator*/,
+                          VkSemaphore* semaphore) {
+     *semaphore = AllocHandle(device, HandleType::kSemaphore);
+     return VK_SUCCESS;
+@@ -645,6 +701,7 @@ VkResult CreateSemaphore(VkDevice device,
+ VkResult CreateShader(VkDevice device,
+                       const VkShaderCreateInfo*,
++                      const VkAllocCallbacks* /*allocator*/,
+                       VkShader* shader) {
+     *shader = AllocHandle(device, HandleType::kShader);
+     return VK_SUCCESS;
+@@ -652,6 +709,7 @@ VkResult CreateShader(VkDevice device,
+ VkResult CreateShaderModule(VkDevice device,
+                             const VkShaderModuleCreateInfo*,
++                            const VkAllocCallbacks* /*allocator*/,
+                             VkShaderModule* module) {
+     *module = AllocHandle(device, HandleType::kShaderModule);
+     return VK_SUCCESS;
+@@ -772,7 +830,7 @@ VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBi
+     return VK_SUCCESS;
+ }
+-void DestroyFence(VkDevice device, VkFence fence) {
++void DestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* allocator) {
+ }
+ VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
+@@ -788,10 +846,10 @@ VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFen
+     return VK_SUCCESS;
+ }
+-void DestroySemaphore(VkDevice device, VkSemaphore semaphore) {
++void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyEvent(VkDevice device, VkEvent event) {
++void DestroyEvent(VkDevice device, VkEvent event, const VkAllocCallbacks* allocator) {
+ }
+ VkResult GetEventStatus(VkDevice device, VkEvent event) {
+@@ -809,7 +867,7 @@ VkResult ResetEvent(VkDevice device, VkEvent event) {
+     return VK_SUCCESS;
+ }
+-void DestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
++void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* allocator) {
+ }
+ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) {
+@@ -817,23 +875,23 @@ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t st
+     return VK_SUCCESS;
+ }
+-void DestroyBufferView(VkDevice device, VkBufferView bufferView) {
++void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* allocator) {
+ }
+ void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-void DestroyImageView(VkDevice device, VkImageView imageView) {
++void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
++void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyShader(VkDevice device, VkShader shader) {
++void DestroyShader(VkDevice device, VkShader shader, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
++void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* allocator) {
+ }
+ VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) {
+@@ -846,19 +904,19 @@ VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_
+     return VK_SUCCESS;
+ }
+-void DestroyPipeline(VkDevice device, VkPipeline pipeline) {
++void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
++void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* allocator) {
+ }
+-void DestroySampler(VkDevice device, VkSampler sampler) {
++void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
++void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
++void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* allocator) {
+ }
+ VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
+@@ -875,19 +933,16 @@ VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, ui
+     return VK_SUCCESS;
+ }
+-void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
++void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* allocator) {
+ }
+-void DestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
++void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* allocator) {
+ }
+ void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
+-}
+-
+ VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index f07d61c..557d0db 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -27,7 +27,7 @@ PFN_vkVoidFunction LookupInstanceProcAddr(const char* name);
+ PFN_vkVoidFunction LookupDeviceProcAddr(const char* name);
+ // clang-format off
+-void DestroyInstance(VkInstance instance);
++void DestroyInstance(VkInstance instance, const VkAllocCallbacks* allocator);
+ VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+ void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+ void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+@@ -37,8 +37,8 @@ void GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uin
+ void GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
+-VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
+-void DestroyDevice(VkDevice device);
++VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkDevice* pDevice);
++void DestroyDevice(VkDevice device, const VkAllocCallbacks* allocator);
+ VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+ VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
+@@ -47,8 +47,8 @@ void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIn
+ VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
+ VkResult QueueWaitIdle(VkQueue queue);
+ VkResult DeviceWaitIdle(VkDevice device);
+-VkResult AllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem);
+-void FreeMemory(VkDevice device, VkDeviceMemory mem);
++VkResult AllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* allocator, VkDeviceMemory* pMem);
++void FreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocCallbacks* allocator);
+ VkResult MapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+ void UnmapMemory(VkDevice device, VkDeviceMemory mem);
+ VkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+@@ -63,60 +63,60 @@ void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevic
+ VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+ VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+ VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo);
+-VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence);
+-void DestroyFence(VkDevice device, VkFence fence);
++VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkFence* pFence);
++void DestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* allocator);
+ VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+ VkResult GetFenceStatus(VkDevice device, VkFence fence);
+ VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+-VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore);
+-void DestroySemaphore(VkDevice device, VkSemaphore semaphore);
+-VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent);
+-void DestroyEvent(VkDevice device, VkEvent event);
++VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkSemaphore* pSemaphore);
++void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* allocator);
++VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkEvent* pEvent);
++void DestroyEvent(VkDevice device, VkEvent event, const VkAllocCallbacks* allocator);
+ VkResult GetEventStatus(VkDevice device, VkEvent event);
+ VkResult SetEvent(VkDevice device, VkEvent event);
+ VkResult ResetEvent(VkDevice device, VkEvent event);
+-VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool);
+-void DestroyQueryPool(VkDevice device, VkQueryPool queryPool);
++VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkQueryPool* pQueryPool);
++void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* allocator);
+ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+-VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
+-void DestroyBuffer(VkDevice device, VkBuffer buffer);
+-VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
+-void DestroyBufferView(VkDevice device, VkBufferView bufferView);
+-VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
+-void DestroyImage(VkDevice device, VkImage image);
++VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkBuffer* pBuffer);
++void DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocCallbacks* allocator);
++VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkBufferView* pView);
++void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* allocator);
++VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkImage* pImage);
++void DestroyImage(VkDevice device, VkImage image, const VkAllocCallbacks* allocator);
+ void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+-VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView);
+-void DestroyImageView(VkDevice device, VkImageView imageView);
+-VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule);
+-void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule);
+-VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader);
+-void DestroyShader(VkDevice device, VkShader shader);
+-VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
+-void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache);
++VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkImageView* pView);
++void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocCallbacks* allocator);
++VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkShaderModule* pShaderModule);
++void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* allocator);
++VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkShader* pShader);
++void DestroyShader(VkDevice device, VkShader shader, const VkAllocCallbacks* allocator);
++VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkPipelineCache* pPipelineCache);
++void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* allocator);
+ VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+ VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+-VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+-VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, VkPipeline* pPipelines);
+-void DestroyPipeline(VkDevice device, VkPipeline pipeline);
+-VkResult CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout);
+-void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout);
+-VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler);
+-void DestroySampler(VkDevice device, VkSampler sampler);
+-VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout);
+-void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout);
+-VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
+-void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool);
++VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* allocator, VkPipeline* pPipelines);
++VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* allocator, VkPipeline* pPipelines);
++void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* allocator);
++VkResult CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkPipelineLayout* pPipelineLayout);
++void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* allocator);
++VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkSampler* pSampler);
++void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocCallbacks* allocator);
++VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkDescriptorSetLayout* pSetLayout);
++void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* allocator);
++VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkDescriptorPool* pDescriptorPool);
++void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* allocator);
+ VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+ VkResult AllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+ VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
+ void UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+-VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer);
+-void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer);
+-VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
+-void DestroyRenderPass(VkDevice device, VkRenderPass renderPass);
++VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkFramebuffer* pFramebuffer);
++void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* allocator);
++VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkRenderPass* pRenderPass);
++void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* allocator);
+ void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+-VkResult CreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
+-void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool);
++VkResult CreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkCmdPool* pCmdPool);
++void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool, const VkAllocCallbacks* allocator);
+ VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+ VkResult AllocCommandBuffers(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers);
+ void FreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers);
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index f92b62c..63e0d5f 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -158,13 +158,12 @@ int main(int /*argc*/, char const* /*argv*/ []) {
+         .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+         .pNext = nullptr,
+         .pAppInfo = nullptr,
+-        .pAllocCb = nullptr,
+-        .layerCount = 0,
++        .enabledLayerNameCount = 0,
+         .ppEnabledLayerNames = nullptr,
+-        .extensionCount = 0,
++        .enabledExtensionNameCount = 0,
+         .ppEnabledExtensionNames = nullptr,
+     };
+-    result = vkCreateInstance(&create_info, &instance);
++    result = vkCreateInstance(&create_info, nullptr, &instance);
+     if (result != VK_SUCCESS)
+         die("vkCreateInstance", result);
+@@ -189,7 +188,7 @@ int main(int /*argc*/, char const* /*argv*/ []) {
+     for (uint32_t i = 0; i < physical_devices.size(); i++)
+         DumpPhysicalDevice(i, physical_devices[i]);
+-    vkDestroyInstance(instance);
++    vkDestroyInstance(instance, nullptr);
+     return 0;
+ }
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0013-vulkan-Update-from-version-0.188.0-to-0.189.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0013-vulkan-Update-from-version-0.188.0-to-0.189.0.patch
new file mode 100644 (file)
index 0000000..67d99fd
--- /dev/null
@@ -0,0 +1,245 @@
+From 5dd913c12f8eccf523b4588806711e3b45ed8b79 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 14:36:39 -0800
+Subject: [PATCH 13/30] vulkan: Update from version 0.188.0 to 0.189.0
+
+Change-Id: Ib8171ce1d3f804f9a866e1c216db0911043056c6
+---
+ vulkan/api/vulkan.api          | 42 +++++++++++++-------------
+ vulkan/include/vulkan/vulkan.h | 68 +++++++++++++++++++++---------------------
+ vulkan/libvulkan/entry.cpp     |  2 +-
+ vulkan/nulldrv/null_driver.cpp |  2 +-
+ vulkan/nulldrv/null_driver.h   |  2 +-
+ 5 files changed, 58 insertions(+), 58 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index b95c96e..5d0a7f8 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 188
++define VERSION_MINOR 189
+ define VERSION_PATCH 0
+ // API limits
+@@ -256,23 +256,23 @@ enum VkIndexType {
+     VK_INDEX_TYPE_UINT32                                    = 0x00000001,
+ }
+-enum VkTexFilter {
+-    VK_TEX_FILTER_NEAREST                                   = 0x00000000,
+-    VK_TEX_FILTER_LINEAR                                    = 0x00000001,
++enum VkFilter {
++    VK_FILTER_NEAREST                                       = 0x00000000,
++    VK_FILTER_LINEAR                                        = 0x00000001,
+ }
+-enum VkTexMipmapMode {
+-    VK_TEX_MIPMAP_MODE_BASE                                 = 0x00000000,   /// Always choose base level
+-    VK_TEX_MIPMAP_MODE_NEAREST                              = 0x00000001,   /// Choose nearest mip level
+-    VK_TEX_MIPMAP_MODE_LINEAR                               = 0x00000002,   /// Linear filter between mip levels
++enum VkSamplerMipmapMode {
++    VK_SAMPLER_MIPMAP_MODE_BASE                             = 0x00000000,   /// Always choose base level
++    VK_SAMPLER_MIPMAP_MODE_NEAREST                          = 0x00000001,   /// Choose nearest mip level
++    VK_SAMPLER_MIPMAP_MODE_LINEAR                           = 0x00000002,   /// Linear filter between mip levels
+ }
+-enum VkTexAddressMode {
+-    VK_TEX_ADDRESS_MODE_WRAP                                = 0x00000000,
+-    VK_TEX_ADDRESS_MODE_MIRROR                              = 0x00000001,
+-    VK_TEX_ADDRESS_MODE_CLAMP                               = 0x00000002,
+-    VK_TEX_ADDRESS_MODE_MIRROR_ONCE                         = 0x00000003,
+-    VK_TEX_ADDRESS_MODE_CLAMP_BORDER                        = 0x00000004,
++enum VkSamplerAddressMode {
++    VK_SAMPLER_ADDRESS_MODE_WRAP                            = 0x00000000,
++    VK_SAMPLER_ADDRESS_MODE_MIRROR                          = 0x00000001,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP                           = 0x00000002,
++    VK_SAMPLER_ADDRESS_MODE_MIRROR_ONCE                     = 0x00000003,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER                    = 0x00000004,
+ }
+ enum VkCompareOp {
+@@ -1730,12 +1730,12 @@ class VkPipelineLayoutCreateInfo {
+ class VkSamplerCreateInfo {
+     VkStructureType                             sType          /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+     const void*                                 pNext          /// Pointer to next structure
+-    VkTexFilter                                 magFilter      /// Filter mode for magnification
+-    VkTexFilter                                 minFilter      /// Filter mode for minifiation
+-    VkTexMipmapMode                             mipMode        /// Mipmap selection mode
+-    VkTexAddressMode                            addressModeU
+-    VkTexAddressMode                            addressModeV
+-    VkTexAddressMode                            addressModeW
++    VkFilter                                    magFilter      /// Filter mode for magnification
++    VkFilter                                    minFilter      /// Filter mode for minifiation
++    VkSamplerMipmapMode                         mipmapMode     /// Mipmap selection mode
++    VkSamplerAddressMode                        addressModeU
++    VkSamplerAddressMode                        addressModeV
++    VkSamplerAddressMode                        addressModeW
+     f32                                         mipLodBias
+     f32                                         maxAnisotropy
+     VkBool32                                    compareEnable
+@@ -4089,7 +4089,7 @@ cmd void vkCmdBlitImage(
+         VkImageLayout                               destImageLayout,
+         u32                                         regionCount,
+         const VkImageBlit*                          pRegions,
+-        VkTexFilter                                 filter) {
++        VkFilter                                    filter) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     srcImageObject := GetImage(srcImage)
+     destImageObject := GetImage(destImage)
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index d061988..dc977e5 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 188, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 189, 0)
+ #define VK_NULL_HANDLE 0
+@@ -647,35 +647,35 @@ typedef enum {
+ } VkDynamicState;
+ typedef enum {
+-    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_TEX_FILTER_NUM = (VK_TEX_FILTER_LINEAR - VK_TEX_FILTER_NEAREST + 1),
+-    VK_TEX_FILTER_MAX_ENUM = 0x7FFFFFFF
+-} VkTexFilter;
++    VK_FILTER_NEAREST = 0,
++    VK_FILTER_LINEAR = 1,
++    VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
++    VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
++    VK_FILTER_NUM = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
++    VK_FILTER_MAX_ENUM = 0x7FFFFFFF
++} VkFilter;
+ typedef enum {
+-    VK_TEX_MIPMAP_MODE_BASE = 0,
+-    VK_TEX_MIPMAP_MODE_NEAREST = 1,
+-    VK_TEX_MIPMAP_MODE_LINEAR = 2,
+-    VK_TEX_MIPMAP_MODE_BEGIN_RANGE = VK_TEX_MIPMAP_MODE_BASE,
+-    VK_TEX_MIPMAP_MODE_END_RANGE = VK_TEX_MIPMAP_MODE_LINEAR,
+-    VK_TEX_MIPMAP_MODE_NUM = (VK_TEX_MIPMAP_MODE_LINEAR - VK_TEX_MIPMAP_MODE_BASE + 1),
+-    VK_TEX_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+-} VkTexMipmapMode;
++    VK_SAMPLER_MIPMAP_MODE_BASE = 0,
++    VK_SAMPLER_MIPMAP_MODE_NEAREST = 1,
++    VK_SAMPLER_MIPMAP_MODE_LINEAR = 2,
++    VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_BASE,
++    VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
++    VK_SAMPLER_MIPMAP_MODE_NUM = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_BASE + 1),
++    VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
++} VkSamplerMipmapMode;
+ typedef enum {
+-    VK_TEX_ADDRESS_MODE_WRAP = 0,
+-    VK_TEX_ADDRESS_MODE_MIRROR = 1,
+-    VK_TEX_ADDRESS_MODE_CLAMP = 2,
+-    VK_TEX_ADDRESS_MODE_MIRROR_ONCE = 3,
+-    VK_TEX_ADDRESS_MODE_CLAMP_BORDER = 4,
+-    VK_TEX_ADDRESS_MODE_BEGIN_RANGE = VK_TEX_ADDRESS_MODE_WRAP,
+-    VK_TEX_ADDRESS_MODE_END_RANGE = VK_TEX_ADDRESS_MODE_CLAMP_BORDER,
+-    VK_TEX_ADDRESS_MODE_NUM = (VK_TEX_ADDRESS_MODE_CLAMP_BORDER - VK_TEX_ADDRESS_MODE_WRAP + 1),
+-    VK_TEX_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+-} VkTexAddressMode;
++    VK_SAMPLER_ADDRESS_MODE_WRAP = 0,
++    VK_SAMPLER_ADDRESS_MODE_MIRROR = 1,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP = 2,
++    VK_SAMPLER_ADDRESS_MODE_MIRROR_ONCE = 3,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER = 4,
++    VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_WRAP,
++    VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER,
++    VK_SAMPLER_ADDRESS_MODE_NUM = (VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER - VK_SAMPLER_ADDRESS_MODE_WRAP + 1),
++    VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
++} VkSamplerAddressMode;
+ typedef enum {
+     VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+@@ -1756,12 +1756,12 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkTexFilter                                 magFilter;
+-    VkTexFilter                                 minFilter;
+-    VkTexMipmapMode                             mipMode;
+-    VkTexAddressMode                            addressModeU;
+-    VkTexAddressMode                            addressModeV;
+-    VkTexAddressMode                            addressModeW;
++    VkFilter                                    magFilter;
++    VkFilter                                    minFilter;
++    VkSamplerMipmapMode                         mipmapMode;
++    VkSamplerAddressMode                        addressModeU;
++    VkSamplerAddressMode                        addressModeV;
++    VkSamplerAddressMode                        addressModeW;
+     float                                       mipLodBias;
+     float                                       maxAnisotropy;
+     VkBool32                                    compareEnable;
+@@ -2194,7 +2194,7 @@ typedef void (VKAPI *PFN_vkCmdDispatch)(VkCmdBuffer cmdBuffer, uint32_t x, uint3
+ typedef void (VKAPI *PFN_vkCmdDispatchIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
+ typedef void (VKAPI *PFN_vkCmdCopyBuffer)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+ typedef void (VKAPI *PFN_vkCmdCopyImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdBlitImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter);
++typedef void (VKAPI *PFN_vkCmdBlitImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+ typedef void (VKAPI *PFN_vkCmdCopyBufferToImage)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+ typedef void (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+ typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
+@@ -2880,7 +2880,7 @@ void VKAPI vkCmdBlitImage(
+     VkImageLayout                               destImageLayout,
+     uint32_t                                    regionCount,
+     const VkImageBlit*                          pRegions,
+-    VkTexFilter                                 filter);
++    VkFilter                                    filter);
+ void VKAPI vkCmdCopyBufferToImage(
+     VkCmdBuffer                                 cmdBuffer,
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 7622e4d..386acbf 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -632,7 +632,7 @@ void vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcIm
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) {
++void vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
+     GetVtbl(cmdBuffer).CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
+ }
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index fe6a1e8..9c56982 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -1024,7 +1024,7 @@ void CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffe
+ void CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
+ }
+-void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) {
++void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
+ }
+ void CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 557d0db..dd6dc6b 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -144,7 +144,7 @@ void CmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+ void CmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
+ void CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+ void CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+-void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter);
++void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+ void CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+ void CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+ void CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0014-vulkan-Update-from-version-0.189.0-to-0.190.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0014-vulkan-Update-from-version-0.189.0-to-0.190.0.patch
new file mode 100644 (file)
index 0000000..d23327b
--- /dev/null
@@ -0,0 +1,2052 @@
+From ef949b4f570c963e3d4e8362b3a6a3d41f3ce4b8 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 18:59:42 -0800
+Subject: [PATCH 14/30] vulkan: Update from version 0.189.0 to 0.190.0
+
+Change-Id: I0ac3f2797b65ef49cca90e76a47f1e6ca3a341a3
+---
+ vulkan/api/platform.api                 |   4 +-
+ vulkan/api/vulkan.api                   | 408 ++++++++++++++++++++++++--------
+ vulkan/include/vulkan/vk_platform.h     |   2 +-
+ vulkan/include/vulkan/vulkan.h          | 303 ++++++++++++++++--------
+ vulkan/libvulkan/entry.cpp              |  16 +-
+ vulkan/libvulkan/get_proc_addr.cpp      |  24 +-
+ vulkan/libvulkan/get_proc_addr.cpp.tmpl |   2 +-
+ vulkan/libvulkan/loader.h               |   6 +-
+ vulkan/libvulkan/swapchain.cpp          |   4 +-
+ vulkan/nulldrv/null_driver.cpp          |  12 +-
+ vulkan/nulldrv/null_driver.h            |   4 +-
+ vulkan/nulldrv/null_driver_gen.cpp      |   4 +-
+ 12 files changed, 541 insertions(+), 248 deletions(-)
+
+diff --git a/vulkan/api/platform.api b/vulkan/api/platform.api
+index 889ac2c..980722d 100644
+--- a/vulkan/api/platform.api
++++ b/vulkan/api/platform.api
+@@ -23,13 +23,15 @@
+ type u64 size_t
+-// VK_USE_PLATFORM_X11_KHR
++// VK_USE_PLATFORM_XLIB_KHR
+ @internal class Display {}
+ @internal class Window {}
++@internal type u64 VisualID
+ // VK_USE_PLATFORM_XCB_KHR
+ @internal class xcb_connection_t {}
+ @internal type u32 xcb_window_t
++@internal type u32 xcb_visualid_t
+ // VK_USE_PLATFORM_WAYLAND_KHR
+ @internal class wl_display {}
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 5d0a7f8..0c6a3cc 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 189
++define VERSION_MINOR 190
+ define VERSION_PATCH 0
+ // API limits
+@@ -45,35 +45,35 @@ define VK_FALSE       0
+ // API keyword, but needs special handling by some templates
+ define NULL_HANDLE 0
+-@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION                     19
++@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION                     20
+ @extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER             1
+ @extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NAME               "VK_EXT_KHR_surface"
+-@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION                 59
++@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION                 62
+ @extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
+ @extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_EXT_KHR_swapchain"
+-@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION                     16
++@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION                     17
+ @extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER             3
+ @extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME               "VK_EXT_KHR_display"
+-@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION           14
++@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION           6
+ @extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER   4
+ @extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME     "VK_EXT_KHR_display_swapchain"
+-@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_REVISION             1
+-@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NUMBER               4
+-@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NAME                 "VK_EXT_KHR_x11_surface"
++@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_REVISION           3
++@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_NUMBER             5
++@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_NAME               "VK_EXT_KHR_xlib_surface"
+-@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION             1
++@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION             3
+ @extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NUMBER               6
+ @extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NAME                 "VK_EXT_KHR_xcb_surface"
+-@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION     1
++@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION     2
+ @extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NUMBER       7
+ @extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NAME         "VK_EXT_KHR_wayland_surface"
+-@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION             1
++@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION             2
+ @extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NUMBER               8
+ @extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NAME                 "VK_EXT_KHR_mir_surface"
+@@ -81,7 +81,7 @@ define NULL_HANDLE 0
+ @extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NUMBER       8
+ @extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NAME         "VK_EXT_KHR_android_surface"
+-@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION         1
++@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION         2
+ @extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NUMBER           9
+ @extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NAME             "VK_EXT_KHR_win32_surface"
+@@ -620,13 +620,14 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 48,
+     VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 49,
+     VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 50,
++    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 51,
+     //@extension("VK_EXT_KHR_swapchain")
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
+     //@extension("VK_EXT_KHR_display")
+     VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 0xc0000c00,
+-    VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLAN_KHR      = 0xc0000c01,
++    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 0xc0000c01,
+     //@extension("VK_EXT_KHR_display_swapchain")
+     VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR         = 0xc0001000,
+@@ -663,6 +664,9 @@ enum VkResult {
+     VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+     VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
++    //@extension("VK_EXT_KHR_surface")
++    VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
++
+     //@extension("VK_EXT_KHR_swapchain")
+     VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
+@@ -810,8 +814,8 @@ bitfield VkDescriptorPoolCreateFlagBits {
+ /// Descriptor pool reset flags
+ type VkFlags VkDescriptorPoolResetFlags
+-bitfield VkDescriptorPoolResetFlagBits {
+-}
++//bitfield VkDescriptorPoolResetFlagBits {
++//}
+ /// Image usage flags
+ type VkFlags VkImageUsageFlags
+@@ -868,8 +872,8 @@ bitfield VkFenceCreateFlagBits {
+ /// Semaphore creation flags
+ type VkFlags VkSemaphoreCreateFlags
+-bitfield VkSemaphoreCreateFlagBits {
+-}
++//bitfield VkSemaphoreCreateFlagBits {
++//}
+ /// Format capability flags
+ type VkFlags VkFormatFeatureFlags
+@@ -906,18 +910,18 @@ bitfield VkQueryResultFlagBits {
+ /// Shader module creation flags
+ type VkFlags VkShaderModuleCreateFlags
+-bitfield VkShaderModuleCreateFlagBits {
+-}
++//bitfield VkShaderModuleCreateFlagBits {
++//}
+ /// Shader creation flags
+ type VkFlags VkShaderCreateFlags
+-bitfield VkShaderCreateFlagBits {
+-}
++//bitfield VkShaderCreateFlagBits {
++//}
+ /// Event creation flags
+ type VkFlags VkEventCreateFlags
+-bitfield VkEventCreateFlagBits {
+-}
++//bitfield VkEventCreateFlagBits {
++//}
+ /// Command buffer usage flags
+ type VkFlags VkCmdBufferUsageFlags
+@@ -945,8 +949,8 @@ bitfield VkQueryPipelineStatisticFlagBits {
+ /// Memory mapping flags
+ type VkFlags VkMemoryMapFlags
+-bitfield VkMemoryMapFlagBits {
+-}
++//bitfield VkMemoryMapFlagBits {
++//}
+ /// Bitfield of image aspects
+ type VkFlags VkImageAspectFlags
+@@ -1040,6 +1044,111 @@ bitfield VkStencilFaceFlagBits {
+     VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
+ }
++/// Instance creation flags
++type VkFlags VkInstanceCreateFlags
++//bitfield VkInstanceCreateFlagBits {
++//}
++
++/// Device creation flags
++type VkFlags VkDeviceCreateFlags
++//bitfield VkDeviceCreateFlagBits {
++//}
++
++/// Device queue creation flags
++type VkFlags VkDeviceQueueCreateFlags
++//bitfield VkDeviceQueueCreateFlagBits {
++//}
++
++/// Query pool creation flags
++type VkFlags VkQueryPoolCreateFlags
++//bitfield VkQueryPoolCreateFlagBits {
++//}
++
++/// Buffer view creation flags
++type VkFlags VkBufferViewCreateFlags
++//bitfield VkBufferViewCreateFlagBits {
++//}
++
++/// Pipeline cache creation flags
++type VkFlags VkPipelineCacheCreateFlags
++//bitfield VkPipelineCacheCreateFlagBits {
++//}
++
++/// Pipeline shader stage creation flags
++type VkFlags VkPipelineShaderStageCreateFlags
++//bitfield VkPipelineShaderStageCreateFlagBits {
++//}
++
++/// Descriptor set layout creation flags
++type VkFlags VkDescriptorSetLayoutCreateFlags
++//bitfield VkDescriptorSetLayoutCreateFlagBits {
++//}
++
++/// Pipeline vertex input state creation flags
++type VkFlags VkPipelineVertexInputStateCreateFlags
++//bitfield VkPipelineVertexInputStateCreateFlagBits {
++//}
++
++/// Pipeline input assembly state creation flags
++type VkFlags VkPipelineInputAssemblyStateCreateFlags
++//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
++//}
++
++/// Tessellation state creation flags
++type VkFlags VkPipelineTessellationStateCreateFlags
++//bitfield VkPipelineTessellationStateCreateFlagBits {
++//}
++
++/// Viewport state creation flags
++type VkFlags VkPipelineViewportStateCreateFlags
++//bitfield VkPipelineViewportStateCreateFlagBits {
++//}
++
++/// Raster state creation flags
++type VkFlags VkPipelineRasterStateCreateFlags
++//bitfield VkPipelineRasterStateCreateFlagBits {
++//}
++
++/// Multisample state creation flags
++type VkFlags VkPipelineMultisampleStateCreateFlags
++//bitfield VkPipelineMultisampleStateCreateFlagBits {
++//}
++
++/// Color blend state creation flags
++type VkFlags VkPipelineColorBlendStateCreateFlags
++//bitfield VkPipelineColorBlendStateCreateFlagBits {
++//}
++
++/// Depth/stencil state creation flags
++type VkFlags VkPipelineDepthStencilStateCreateFlags
++//bitfield VkPipelineDepthStencilStateCreateFlagBits {
++//}
++
++/// Dynamic state creation flags
++type VkFlags VkPipelineDynamicStateCreateFlags
++//bitfield VkPipelineDynamicStateCreateFlagBits {
++//}
++
++/// Pipeline layout creation flags
++type VkFlags VkPipelineLayoutCreateFlags
++//bitfield VkPipelineLayoutCreateFlagBits {
++//}
++
++/// Sampler creation flags
++type VkFlags VkSamplerCreateFlags
++//bitfield VkSamplerCreateFlagBits {
++//}
++
++/// Render pass creation flags
++type VkFlags VkRenderPassCreateFlags
++//bitfield VkRenderPassCreateFlagBits {
++//}
++
++/// Framebuffer creation flags
++type VkFlags VkFramebufferCreateFlags
++//bitfield VkFramebufferCreateFlagBits {
++//}
++
+ @extension("VK_EXT_KHR_swapchain")
+ type VkFlags VkSurfaceTransformFlagsKHR
+ @extension("VK_EXT_KHR_swapchain")
+@@ -1055,6 +1164,16 @@ bitfield VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                    = 0x00000100,
+ }
++@extension("VK_EXT_KHR_swapchain")
++type VkFlags VkCompositeAlphaFlagsKHR
++@extension("VK_EXT_KHR_swapchain")
++bitfield VkCompositeAlphaFlagBitsKHR {
++    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
++    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
++    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR              = 0x00000004,
++    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
++}
++
+ @extension("VK_EXT_KHR_display")
+ type VkFlags VkDisplayPlaneAlphaFlagsKHR
+ @extension("VK_EXT_KHR_display")
+@@ -1175,6 +1294,7 @@ class VkAllocCallbacks {
+ class VkDeviceQueueCreateInfo {
+     VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
+     const void*                                 pNext                     /// Pointer to next structure
++    VkDeviceQueueCreateFlags                    flags
+     u32                                         queueFamilyIndex
+     u32                                         queuePriorityCount
+     const f32*                                  pQueuePriorities
+@@ -1183,6 +1303,7 @@ class VkDeviceQueueCreateInfo {
+ class VkDeviceCreateInfo {
+     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
++    VkDeviceCreateFlags                         flags
+     u32                                         requestedQueueRecordCount
+     const VkDeviceQueueCreateInfo*              pRequestedQueues
+     u32                                         enabledLayerNameCount
+@@ -1195,6 +1316,7 @@ class VkDeviceCreateInfo {
+ class VkInstanceCreateInfo {
+     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
++    VkInstanceCreateFlags                       flags
+     const VkApplicationInfo*                    pAppInfo
+     u32                                         enabledLayerNameCount
+     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
+@@ -1314,9 +1436,9 @@ class VkCopyDescriptorSet {
+ class VkBufferCreateInfo {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure.
++    VkBufferCreateFlags                         flags                      /// Buffer creation flags
+     VkDeviceSize                                size                       /// Specified in bytes
+     VkBufferUsageFlags                          usage                      /// Buffer usage flags
+-    VkBufferCreateFlags                         flags                      /// Buffer creation flags
+     VkSharingMode                               sharingMode
+     u32                                         queueFamilyIndexCount
+     const u32*                                  pQueueFamilyIndices
+@@ -1325,6 +1447,7 @@ class VkBufferCreateInfo {
+ class VkBufferViewCreateInfo {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure.
++    VkBufferViewCreateFlags                     flags
+     VkBuffer                                    buffer
+     VkFormat                                    format                     /// Optionally specifies format of elements
+     VkDeviceSize                                offset                     /// Specified in bytes
+@@ -1380,6 +1503,7 @@ class VkImageMemoryBarrier {
+ class VkImageCreateInfo {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure.
++    VkImageCreateFlags                          flags                      /// Image creation flags
+     VkImageType                                 imageType
+     VkFormat                                    format
+     VkExtent3D                                  extent
+@@ -1388,7 +1512,6 @@ class VkImageCreateInfo {
+     u32                                         samples
+     VkImageTiling                               tiling
+     VkImageUsageFlags                           usage                      /// Image usage flags
+-    VkImageCreateFlags                          flags                      /// Image creation flags
+     VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
+     u32                                         queueFamilyIndexCount      /// Number of queue families to share across
+     const u32*                                  pQueueFamilyIndices        /// Array of queue family indices to share across
+@@ -1405,12 +1528,12 @@ class VkSubresourceLayout {
+ class VkImageViewCreateInfo {
+     VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
+     const void*                                 pNext                  /// Pointer to next structure
++    VkImageViewCreateFlags                      flags
+     VkImage                                     image
+     VkImageViewType                             viewType
+     VkFormat                                    format
+     VkChannelMapping                            channels
+     VkImageSubresourceRange                     subresourceRange
+-    VkImageViewCreateFlags                      flags
+ }
+ class VkBufferCopy {
+@@ -1419,7 +1542,7 @@ class VkBufferCopy {
+     VkDeviceSize                                copySize               /// Specified in bytes
+ }
+-class VkSparseMemoryBindInfo {
++class VkSparseMemoryBind {
+     VkDeviceSize                                rangeOffset           /// Specified in bytes
+     VkDeviceSize                                rangeSize             /// Specified in bytes
+     VkDeviceSize                                memOffset             /// Specified in bytes
+@@ -1427,7 +1550,7 @@ class VkSparseMemoryBindInfo {
+     VkSparseMemoryBindFlags                     flags
+ }
+-class VkSparseImageMemoryBindInfo {
++class VkSparseImageMemoryBind {
+     VkImageSubresource                          subresource
+     VkOffset3D                                  offset
+     VkExtent3D                                  extent
+@@ -1436,6 +1559,39 @@ class VkSparseImageMemoryBindInfo {
+     VkSparseMemoryBindFlags                     flags
+ }
++class VkSparseBufferMemoryBindInfo {
++    VkBuffer                                    buffer
++    u32                                         bindCount
++    const VkSparseMemoryBind*                   pBinds
++}
++
++class VkSparseImageOpaqueMemoryBindInfo {
++    VkImage                                     image
++    u32                                         bindCount
++    const VkSparseMemoryBind*                   pBinds
++}
++
++class VkSparseImageMemoryBindInfo {
++    VkImage                                     image
++    u32                                         bindCount
++    const VkSparseMemoryBind*                   pBinds
++}
++
++class VkBindSparseInfo {
++    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
++    const void*                                 pNext
++    u32                                         waitSemaphoreCount
++    const VkSemaphore*                          pWaitSemaphores
++    u32                                         numBufferBinds
++    const VkSparseBufferMemoryBindInfo*         pBufferBinds
++    u32                                         numImageOpaqueBinds
++    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds
++    u32                                         numImageBinds
++    const VkSparseImageMemoryBindInfo*          pImageBinds
++    u32                                         signalSemaphoreCount
++    const VkSemaphore*                          pSignalSemaphores
++}
++
+ class VkImageSubresourceCopy {
+     VkImageAspectFlags                          aspect
+     u32                                         mipLevel
+@@ -1480,17 +1636,17 @@ class VkImageResolve {
+ class VkShaderModuleCreateInfo {
+     VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
+     const void*                                 pNext                  /// Pointer to next structure
++    VkShaderModuleCreateFlags                   flags                  /// Reserved
+     platform.size_t                             codeSize               /// Specified in bytes
+     const u32*                                  pCode                  /// Binary code of size codeSize
+-    VkShaderModuleCreateFlags                   flags                  /// Reserved
+ }
+ class VkShaderCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
++    VkShaderCreateFlags                         flags              /// Reserved
+     VkShaderModule                              module             /// Module containing entry point
+     const char*                                 pName              /// Null-terminated entry point name
+-    VkShaderCreateFlags                         flags              /// Reserved
+     VkShaderStageFlagBits                       stage
+ }
+@@ -1504,6 +1660,7 @@ class VkDescriptorSetLayoutBinding {
+ class VkDescriptorSetLayoutCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
++    VkDescriptorSetLayoutCreateFlags            flags
+     u32                                         bindingCount       /// Number of bindings in the descriptor set layout
+     const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
+ }
+@@ -1546,6 +1703,7 @@ class VkSpecializationInfo {
+ class VkPipelineShaderStageCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
++    VkPipelineShaderStageCreateFlags            flags
+     VkShader                                    shader
+     const VkSpecializationInfo*                 pSpecializationInfo
+ }
+@@ -1553,8 +1711,8 @@ class VkPipelineShaderStageCreateInfo {
+ class VkComputePipelineCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+-    VkPipelineShaderStageCreateInfo             stage
+     VkPipelineCreateFlags                       flags              /// Pipeline creation flags
++    VkPipelineShaderStageCreateInfo             stage
+     VkPipelineLayout                            layout             /// Interface layout of the pipeline
+     VkPipeline                                  basePipelineHandle /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
+     s32                                         basePipelineIndex  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
+@@ -1576,6 +1734,7 @@ class VkVertexInputAttributeDescription {
+ class VkPipelineVertexInputStateCreateInfo {
+     VkStructureType                             sType                           /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
+     const void*                                 pNext                           /// Pointer to next structure
++    VkPipelineVertexInputStateCreateFlags       flags
+     u32                                         vertexBindingDescriptionCount   /// number of bindings
+     const VkVertexInputBindingDescription*      pVertexBindingDescriptions
+     u32                                         vertexAttributeDescriptionCount /// number of attributes
+@@ -1585,6 +1744,7 @@ class VkPipelineVertexInputStateCreateInfo {
+ class VkPipelineInputAssemblyStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineInputAssemblyStateCreateFlags     flags
+     VkPrimitiveTopology                         topology
+     VkBool32                                    primitiveRestartEnable
+ }
+@@ -1592,12 +1752,14 @@ class VkPipelineInputAssemblyStateCreateInfo {
+ class VkPipelineTessellationStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineTessellationStateCreateFlags      flags
+     u32                                         patchControlPoints
+ }
+ class VkPipelineViewportStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineViewportStateCreateFlags          flags
+     u32                                         viewportCount
+     const VkViewport*                           pViewports
+     u32                                         scissorCount
+@@ -1607,6 +1769,7 @@ class VkPipelineViewportStateCreateInfo {
+ class VkPipelineRasterStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineRasterStateCreateFlags            flags
+     VkBool32                                    depthClampEnable
+     VkBool32                                    rasterizerDiscardEnable
+     VkFillMode                                  fillMode                   /// optional (GL45)
+@@ -1622,6 +1785,7 @@ class VkPipelineRasterStateCreateInfo {
+ class VkPipelineMultisampleStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineMultisampleStateCreateFlags       flags
+     u32                                         rasterSamples              /// Number of samples used for rasterization
+     VkBool32                                    sampleShadingEnable        /// optional (GL45)
+     f32                                         minSampleShading           /// optional (GL45)
+@@ -1644,6 +1808,7 @@ class VkPipelineColorBlendAttachmentState {
+ class VkPipelineColorBlendStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineColorBlendStateCreateFlags        flags
+     VkBool32                                    logicOpEnable
+     VkLogicOp                                   logicOp
+     u32                                         attachmentCount    /// # of pAttachments
+@@ -1664,6 +1829,7 @@ class VkStencilOpState {
+ class VkPipelineDepthStencilStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineDepthStencilStateCreateFlags      flags
+     VkBool32                                    depthTestEnable
+     VkBool32                                    depthWriteEnable
+     VkCompareOp                                 depthCompareOp
+@@ -1678,15 +1844,17 @@ class VkPipelineDepthStencilStateCreateInfo {
+ class VkPipelineDynamicStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkPipelineDynamicStateCreateFlags           flags
+     u32                                         dynamicStateCount
+     const VkDynamicState*                       pDynamicStates
+ }
+ class VkGraphicsPipelineCreateInfo {
+-    VkStructureType                                 sType      /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+-    const void*                                     pNext      /// Pointer to next structure
++    VkStructureType                                 sType               /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
++    const void*                                     pNext               /// Pointer to next structure
++    VkPipelineCreateFlags                           flags               /// Pipeline creation flags
+     u32                                             stageCount
+-    const VkPipelineShaderStageCreateInfo*          pStages    /// One entry for each active shader stage
++    const VkPipelineShaderStageCreateInfo*          pStages             /// One entry for each active shader stage
+     const VkPipelineVertexInputStateCreateInfo*     pVertexInputState
+     const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState
+     const VkPipelineTessellationStateCreateInfo*    pTessellationState
+@@ -1696,17 +1864,17 @@ class VkGraphicsPipelineCreateInfo {
+     const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
+     const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
+     const VkPipelineDynamicStateCreateInfo*         pDynamicState
+-    VkPipelineCreateFlags                           flags              /// Pipeline creation flags
+-    VkPipelineLayout                                layout             /// Interface layout of the pipeline
++    VkPipelineLayout                                layout              /// Interface layout of the pipeline
+     VkRenderPass                                    renderPass
+     u32                                             subpass
+-    VkPipeline                                      basePipelineHandle /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
+-    s32                                             basePipelineIndex  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
++    VkPipeline                                      basePipelineHandle  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
++    s32                                             basePipelineIndex   /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
+ }
+ class VkPipelineCacheCreateInfo {
+     VkStructureType                             sType        /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
+     const void*                                 pNext        /// Pointer to next structure
++    VkPipelineCacheCreateFlags                  flags
+     platform.size_t                             initialSize  /// Size of initial data to populate cache, in bytes
+     const void*                                 initialData  /// Initial data to populate cache
+     platform.size_t                             maxSize      /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
+@@ -1721,6 +1889,7 @@ class VkPushConstantRange {
+ class VkPipelineLayoutCreateInfo {
+     VkStructureType                             sType                   /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
+     const void*                                 pNext                   /// Pointer to next structure
++    VkPipelineLayoutCreateFlags                 flags
+     u32                                         setLayoutCount          /// Number of descriptor sets interfaced by the pipeline
+     const VkDescriptorSetLayout*                pSetLayouts             /// Array of <setCount> number of descriptor set layout objects defining the layout of the
+     u32                                         pushConstantRangeCount  /// Number of push-constant ranges used by the pipeline
+@@ -1730,6 +1899,7 @@ class VkPipelineLayoutCreateInfo {
+ class VkSamplerCreateInfo {
+     VkStructureType                             sType          /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+     const void*                                 pNext          /// Pointer to next structure
++    VkSamplerCreateFlags                        flags
+     VkFilter                                    magFilter      /// Filter mode for magnification
+     VkFilter                                    minFilter      /// Filter mode for minifiation
+     VkSamplerMipmapMode                         mipmapMode     /// Mipmap selection mode
+@@ -1749,8 +1919,8 @@ class VkSamplerCreateInfo {
+ class VkCmdPoolCreateInfo {
+     VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO
+     const void*                                 pNext            /// Pointer to next structure
+-    u32                                         queueFamilyIndex
+     VkCmdPoolCreateFlags                        flags            /// Command pool creation flags
++    u32                                         queueFamilyIndex
+ }
+ class VkCmdBufferAllocInfo {
+@@ -1809,6 +1979,7 @@ class VkClearAttachment {
+ class VkAttachmentDescription {
+     VkStructureType                             sType           /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION
+     const void*                                 pNext           /// Pointer to next structure
++    VkAttachmentDescriptionFlags                flags
+     VkFormat                                    format
+     u32                                         samples
+     VkAttachmentLoadOp                          loadOp          /// Load op for color or depth data
+@@ -1817,7 +1988,6 @@ class VkAttachmentDescription {
+     VkAttachmentStoreOp                         stencilStoreOp  /// Store op for stencil data
+     VkImageLayout                               initialLayout
+     VkImageLayout                               finalLayout
+-    VkAttachmentDescriptionFlags                flags
+ }
+ class VkAttachmentReference {
+@@ -1828,8 +1998,8 @@ class VkAttachmentReference {
+ class VkSubpassDescription {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_SUBPASS_DESCRIPTION
+     const void*                                 pNext              /// Pointer to next structure
+-    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
+     VkSubpassDescriptionFlags                   flags
++    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
+     u32                                         inputAttachmentCount
+     const VkAttachmentReference*                pInputAttachments
+     u32                                         colorAttachmentCount
+@@ -1855,6 +2025,7 @@ class VkSubpassDependency {
+ class VkRenderPassCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
++    VkRenderPassCreateFlags                     flags
+     u32                                         attachmentCount
+     const VkAttachmentDescription*              pAttachments
+     u32                                         subpassCount
+@@ -2071,6 +2242,7 @@ class VkSemaphoreCreateInfo {
+ class VkQueryPoolCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
++    VkQueryPoolCreateFlags                      flags
+     VkQueryType                                 queryType
+     u32                                         slots
+     VkQueryPipelineStatisticFlags               pipelineStatistics /// Optional
+@@ -2079,6 +2251,7 @@ class VkQueryPoolCreateInfo {
+ class VkFramebufferCreateInfo {
+     VkStructureType                             sType  /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
+     const void*                                 pNext  /// Pointer to next structure
++    VkFramebufferCreateFlags                    flags
+     VkRenderPass                                renderPass
+     u32                                         attachmentCount
+     const VkImageView*                          pAttachments
+@@ -2117,6 +2290,7 @@ class VkSurfacePropertiesKHR {
+     VkExtent2D                                  maxImageExtent
+     VkSurfaceTransformFlagsKHR                  supportedTransforms
+     VkSurfaceTransformKHR                       currentTransform
++    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
+     u32                                         maxImageArraySize
+     VkImageUsageFlags                           supportedUsageFlags
+ }
+@@ -2138,6 +2312,7 @@ class VkSwapchainCreateInfoKHR {
+     VkExtent2D                                  imageExtent
+     VkImageUsageFlags                           imageUsageFlags
+     VkSurfaceTransformKHR                       preTransform
++    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
+     u32                                         imageArraySize
+     VkSharingMode                               sharingMode
+     u32                                         queueFamilyIndexCount
+@@ -2163,41 +2338,37 @@ class VkDisplayPropertiesKHR {
+     VkExtent2D                                  physicalDimensions
+     VkExtent2D                                  physicalResolution
+     VkSurfaceTransformFlagsKHR                  supportedTransforms
+-    u32                                         planeCount
+     VkBool32                                    planeReorderPossible
++    VkBool32                                    persistentContent
+ }
+ @extension("VK_EXT_KHR_display")
+-class VkDisplayTimingKHR {
+-    u32                                         pixelClock
++class VkDisplayModeParametersKHR {
+     VkExtent2D                                  visibleRegion
+-    VkExtent2D                                  totalRegion
+-    VkExtent2D                                  physicalDimensions
+-    u32                                         hSyncStart
+-    u32                                         hSyncEnd
+-    u32                                         vSyncStart
+-    u32                                         vSyncEnd
+-    VkBool32                                    interlaced
+-    VkBool32                                    doublescan
+-    VkBool32                                    hSyncPos
+-    VkBool32                                    vSyncPos
++    u32                                         refreshRate
+ }
+ @extension("VK_EXT_KHR_display")
+ class VkDisplayModePropertiesKHR {
+     VkDisplayModeKHR                            displayMode
+-    VkDisplayTimingKHR                          timing
++    VkDisplayModeParametersKHR                  parameters
+ }
+ @extension("VK_EXT_KHR_display")
+ class VkDisplayModeCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+-    VkDisplayTimingKHR                          timing
++    VkDisplayModeParametersKHR                  parameters
+ }
+ @extension("VK_EXT_KHR_display")
+ class VkDisplayPlanePropertiesKHR {
++    VkDisplayKHR                                currentDisplay
++    u32                                         currentStackIndex
++}
++
++@extension("VK_EXT_KHR_display")
++class VkDisplayPlaneCapabilitiesKHR {
+     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
+     VkOffset2D                                  minSrcPosition
+     VkOffset2D                                  maxSrcPosition
+@@ -2210,7 +2381,7 @@ class VkDisplayPlanePropertiesKHR {
+ }
+ @extension("VK_EXT_KHR_display")
+-class VkSurfaceDescriptionDisplayPlaneKHR {
++class VkDisplaySurfaceCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+     VkDisplayModeKHR                            displayMode
+@@ -2235,6 +2406,7 @@ class VkDisplayPresentInfoKHR {
+     const void*                                 pNext
+     VkRect2D                                    srcRect
+     VkRect2D                                    dstRect
++    VkBool32                                    persistent
+ }
+@@ -2801,37 +2973,12 @@ cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+ }
+-cmd VkResult vkQueueBindSparseBufferMemory(
++cmd VkResult vkQueueBindSparse(
+         VkQueue                                     queue,
+-        VkBuffer                                    buffer,
+         u32                                         bindInfoCount,
+-        const VkSparseMemoryBindInfo*               pBindInfo) {
+-    queueObject := GetQueue(queue)
+-    bufferObject := GetBuffer(buffer)
+-    assert(bufferObject.device == queueObject.device)
+-
+-    return ?
+-}
+-
+-cmd VkResult vkQueueBindSparseImageOpaqueMemory(
+-        VkQueue                                     queue,
+-        VkImage                                     image,
+-        u32                                         bindInfoCount,
+-        const VkSparseMemoryBindInfo*               pBindInfo) {
+-    queueObject := GetQueue(queue)
+-    imageObject := GetImage(image)
+-    assert(imageObject.device == queueObject.device)
+-
+-    return ?
+-}
+-
+-cmd VkResult vkQueueBindSparseImageMemory(
+-        VkQueue                                     queue,
+-        VkImage                                     image,
+-        u32                                         bindInfoCount,
+-        const VkSparseImageMemoryBindInfo*          pBindInfo) {
++        const VkBindSparseInfo*                     pBindInfo,
++        VkFence                                     fence) {
+     queueObject := GetQueue(queue)
+-    imageObject := GetImage(image)
+     return ?
+ }
+@@ -4490,7 +4637,7 @@ cmd void vkDestroySurfaceKHR(
+ }
+ @extension("VK_EXT_KHR_surface")
+-cmd VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(
++cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
+         VkPhysicalDevice                            physicalDevice,
+         u32                                         queueFamilyIndex,
+         VkSurfaceKHR                                surface) {
+@@ -4640,6 +4787,24 @@ cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
+ }
+ @extension("VK_EXT_KHR_display")
++cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32*                                    pPropertyCount,
++        VkDisplayPlanePropertiesKHR*            pProperties) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
++@extension("VK_EXT_KHR_display")
++cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32*                                    pPropertyCount,
++        VkDisplayKHR*                           pProperties) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
++@extension("VK_EXT_KHR_display")
+ cmd VkResult vkGetDisplayModePropertiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+         VkDisplayKHR                            display,
+@@ -4660,38 +4825,63 @@ cmd VkResult vkCreateDisplayModeKHR(
+ }
+ @extension("VK_EXT_KHR_display")
+-cmd VkResult vkGetDisplayPlanePropertiesKHR(
++cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+-        VkDisplayKHR                            display,
+-        VkDisplayModeKHR                        mode,
++        VkDisplayModeCreateInfoKHR              mode,
+         u32                                     planeIndex,
+-        VkDisplayPlanePropertiesKHR*            pProperties) {
++        VkDisplayPlaneCapabilitiesKHR*          pCapabilities) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     return ?
+ }
+-@extension("VK_EXT_KHR_x11_surface")
+-cmd VkResult vkCreateX11SurfaceKHR(
++@extension("VK_EXT_KHR_display")
++cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
++        VkInstance                              instance,
++        const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
++        VkSurfaceKHR*                           pSurface) {
++    return ?
++}
++
++@extension("VK_EXT_KHR_xlib_surface")
++cmd VkResult vkCreateXlibSurfaceKHR(
+         VkInstance                              instance,
+         platform.Display*                       dpy,
+-        platform.Window                         root,
+         platform.Window                         window,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+ }
++@extension("VK_EXT_KHR_xlib_surface")
++cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32                                     queueFamilyIndex,
++        platform.Display*                       dpy,
++        platform.VisualID                       visualId) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
+ @extension("VK_EXT_KHR_xcb_surface")
+ cmd VkResult vkCreateXCBSurfaceKHR(
+         VkInstance                              instance,
+         platform.xcb_connection_t*              connection,
+-        platform.xcb_window_t                   root,
+         platform.xcb_window_t                   window,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+ }
++@extension("VK_EXT_KHR_xlib_surface")
++cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32                                     queueFamilyIndex,
++        platform.xcb_connection_t*              connection,
++        platform.xcb_visualid_t                 visual_id) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
+ @extension("VK_EXT_KHR_wayland_surface")
+ cmd VkResult vkCreateWaylandSurfaceKHR(
+         VkInstance                              instance,
+@@ -4702,6 +4892,15 @@ cmd VkResult vkCreateWaylandSurfaceKHR(
+     return ?
+ }
++@extension("VK_EXT_KHR_wayland_surface")
++cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32                                     queueFamilyIndex,
++        platform.wl_display*                    display) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
+ @extension("VK_EXT_KHR_mir_surface")
+ cmd VkResult vkCreateMirSurfaceKHR(
+         VkInstance                              instance,
+@@ -4712,6 +4911,15 @@ cmd VkResult vkCreateMirSurfaceKHR(
+     return ?
+ }
++@extension("VK_EXT_KHR_mir_surface")
++cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32                                     queueFamilyIndex,
++        platform.MirConnection*                 connection) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
++    return ?
++}
++
+ @extension("VK_EXT_KHR_android_surface")
+ cmd VkResult vkCreateAndroidSurfaceKHR(
+         VkInstance                              instance,
+@@ -4731,6 +4939,14 @@ cmd VkResult vkCreateWin32SurfaceKHR(
+     return ?
+ }
++@extension("VK_EXT_KHR_win32_surface")
++cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
++        VkPhysicalDevice                        physicalDevice,
++        u32                                     queueFamilyIndex) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)    
++    return ?
++}
++
+ ////////////////
+ // Validation //
+diff --git a/vulkan/include/vulkan/vk_platform.h b/vulkan/include/vulkan/vk_platform.h
+index 14dc553..8d51524 100644
+--- a/vulkan/include/vulkan/vk_platform.h
++++ b/vulkan/include/vulkan/vk_platform.h
+@@ -91,7 +91,7 @@ extern "C"
+ #include <windows.h>
+ #endif
+-#ifdef VK_USE_PLATFORM_X11_KHR
++#ifdef VK_USE_PLATFORM_XLIB_KHR
+ #include <X11/Xlib.h>
+ #endif
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index dc977e5..dcc5301 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -1,5 +1,5 @@
+-#ifndef __vulkan_h_
+-#define __vulkan_h_ 1
++#ifndef __vulkanext_h_
++#define __vulkanext_h_ 1
+ #ifdef __cplusplus
+ extern "C" {
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 189, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 190, 0)
+ #define VK_NULL_HANDLE 0
+@@ -59,8 +59,8 @@ extern "C" {
+-typedef uint32_t VkBool32;
+ typedef uint32_t VkFlags;
++typedef uint32_t VkBool32;
+ typedef uint64_t VkDeviceSize;
+ typedef uint32_t VkSampleMask;
+@@ -182,9 +182,10 @@ typedef enum {
+     VK_STRUCTURE_TYPE_SUBMIT_INFO = 48,
+     VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 49,
+     VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 50,
++    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 51,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+-    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
+-    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
++    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
++    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_BIND_SPARSE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+@@ -763,6 +764,7 @@ typedef enum {
+     VK_RENDER_PASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+ } VkRenderPassContents;
++typedef VkFlags VkInstanceCreateFlags;
+ typedef enum {
+     VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
+@@ -833,6 +835,8 @@ typedef enum {
+     VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001,
+ } VkMemoryHeapFlagBits;
+ typedef VkFlags VkMemoryHeapFlags;
++typedef VkFlags VkDeviceCreateFlags;
++typedef VkFlags VkDeviceQueueCreateFlags;
+ typedef VkFlags VkMemoryMapFlags;
+ typedef enum {
+@@ -860,6 +864,7 @@ typedef enum {
+ typedef VkFlags VkFenceCreateFlags;
+ typedef VkFlags VkSemaphoreCreateFlags;
+ typedef VkFlags VkEventCreateFlags;
++typedef VkFlags VkQueryPoolCreateFlags;
+ typedef enum {
+     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
+@@ -886,6 +891,13 @@ typedef enum {
+ typedef VkFlags VkQueryResultFlags;
+ typedef enum {
++    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
++    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
++    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
++} VkBufferCreateFlagBits;
++typedef VkFlags VkBufferCreateFlags;
++
++typedef enum {
+     VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001,
+     VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002,
+     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+@@ -897,20 +909,14 @@ typedef enum {
+     VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
+ } VkBufferUsageFlagBits;
+ typedef VkFlags VkBufferUsageFlags;
+-
+-typedef enum {
+-    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+-    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+-    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+-} VkBufferCreateFlagBits;
+-typedef VkFlags VkBufferCreateFlags;
+-typedef VkFlags VkImageAspectFlags;
++typedef VkFlags VkBufferViewCreateFlags;
+ typedef enum {
+     VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
+     VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
+ } VkImageViewCreateFlagBits;
+ typedef VkFlags VkImageViewCreateFlags;
++typedef VkFlags VkImageAspectFlags;
+ typedef VkFlags VkShaderModuleCreateFlags;
+ typedef VkFlags VkShaderCreateFlags;
+@@ -923,6 +929,23 @@ typedef enum {
+     VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
+     VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+ } VkShaderStageFlagBits;
++typedef VkFlags VkPipelineCacheCreateFlags;
++
++typedef enum {
++    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
++    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
++    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
++} VkPipelineCreateFlagBits;
++typedef VkFlags VkPipelineCreateFlags;
++typedef VkFlags VkPipelineShaderStageCreateFlags;
++typedef VkFlags VkPipelineVertexInputStateCreateFlags;
++typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
++typedef VkFlags VkPipelineTesselationStateCreateFlags;
++typedef VkFlags VkPipelineViewportStateCreateFlags;
++typedef VkFlags VkPipelineRasterStateCreateFlags;
++typedef VkFlags VkPipelineMultisampleStateCreateFlags;
++typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
++typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+ typedef enum {
+     VK_CHANNEL_R_BIT = 0x00000001,
+@@ -931,20 +954,19 @@ typedef enum {
+     VK_CHANNEL_A_BIT = 0x00000008,
+ } VkChannelFlagBits;
+ typedef VkFlags VkChannelFlags;
+-
+-typedef enum {
+-    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+-    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+-    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+-} VkPipelineCreateFlagBits;
+-typedef VkFlags VkPipelineCreateFlags;
++typedef VkFlags VkPipelineDynamicStateCreateFlags;
++typedef VkFlags VkPipelineLayoutCreateFlags;
+ typedef VkFlags VkShaderStageFlags;
++typedef VkFlags VkSamplerCreateFlags;
++typedef VkFlags VkDescriptorSetLayoutCreateFlags;
+ typedef enum {
+     VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
+ } VkDescriptorPoolCreateFlagBits;
+ typedef VkFlags VkDescriptorPoolCreateFlags;
+ typedef VkFlags VkDescriptorPoolResetFlags;
++typedef VkFlags VkFramebufferCreateFlags;
++typedef VkFlags VkRenderPassCreateFlags;
+ typedef enum {
+     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+@@ -1074,6 +1096,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkInstanceCreateFlags                       flags;
+     const VkApplicationInfo*                    pAppInfo;
+     uint32_t                                    enabledLayerNameCount;
+     const char*const*                           ppEnabledLayerNames;
+@@ -1314,6 +1337,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkDeviceQueueCreateFlags                    flags;
+     uint32_t                                    queueFamilyIndex;
+     uint32_t                                    queuePriorityCount;
+     const float*                                pQueuePriorities;
+@@ -1322,6 +1346,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkDeviceCreateFlags                         flags;
+     uint32_t                                    requestedQueueCount;
+     const VkDeviceQueueCreateInfo*              pRequestedQueues;
+     uint32_t                                    enabledLayerNameCount;
+@@ -1395,7 +1420,19 @@ typedef struct {
+     VkDeviceSize                                memOffset;
+     VkDeviceMemory                              mem;
+     VkSparseMemoryBindFlags                     flags;
+-} VkSparseMemoryBindInfo;
++} VkSparseMemoryBind;
++
++typedef struct {
++    VkBuffer                                    buffer;
++    uint32_t                                    bindCount;
++    const VkSparseMemoryBind*                   pBinds;
++} VkSparseBufferMemoryBindInfo;
++
++typedef struct {
++    VkImage                                     image;
++    uint32_t                                    bindCount;
++    const VkSparseMemoryBind*                   pBinds;
++} VkSparseImageOpaqueMemoryBindInfo;
+ typedef struct {
+     VkImageAspectFlagBits                       aspect;
+@@ -1416,11 +1453,32 @@ typedef struct {
+     VkDeviceSize                                memOffset;
+     VkDeviceMemory                              mem;
+     VkSparseMemoryBindFlags                     flags;
++} VkSparseImageMemoryBind;
++
++typedef struct {
++    VkImage                                     image;
++    uint32_t                                    bindCount;
++    const VkSparseImageMemoryBind*              pBinds;
+ } VkSparseImageMemoryBindInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    uint32_t                                    waitSemaphoreCount;
++    const VkSemaphore*                          pWaitSemaphores;
++    uint32_t                                    bufferBindCount;
++    const VkSparseBufferMemoryBindInfo*         pBufferBinds;
++    uint32_t                                    imageOpaqueBindCount;
++    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
++    uint32_t                                    imageBindCount;
++    const VkSparseImageMemoryBindInfo*          pImageBinds;
++    uint32_t                                    signalSemaphoreCount;
++    const VkSemaphore*                          pSignalSemaphores;
++} VkBindSparseInfo;
++
++typedef struct {
++    VkStructureType                             sType;
++    const void*                                 pNext;
+     VkFenceCreateFlags                          flags;
+ } VkFenceCreateInfo;
+@@ -1439,6 +1497,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkQueryPoolCreateFlags                      flags;
+     VkQueryType                                 queryType;
+     uint32_t                                    slots;
+     VkQueryPipelineStatisticFlags               pipelineStatistics;
+@@ -1447,9 +1506,9 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkBufferCreateFlags                         flags;
+     VkDeviceSize                                size;
+     VkBufferUsageFlags                          usage;
+-    VkBufferCreateFlags                         flags;
+     VkSharingMode                               sharingMode;
+     uint32_t                                    queueFamilyIndexCount;
+     const uint32_t*                             pQueueFamilyIndices;
+@@ -1458,6 +1517,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkBufferViewCreateFlags                     flags;
+     VkBuffer                                    buffer;
+     VkFormat                                    format;
+     VkDeviceSize                                offset;
+@@ -1467,6 +1527,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkImageCreateFlags                          flags;
+     VkImageType                                 imageType;
+     VkFormat                                    format;
+     VkExtent3D                                  extent;
+@@ -1475,7 +1536,6 @@ typedef struct {
+     uint32_t                                    samples;
+     VkImageTiling                               tiling;
+     VkImageUsageFlags                           usage;
+-    VkImageCreateFlags                          flags;
+     VkSharingMode                               sharingMode;
+     uint32_t                                    queueFamilyIndexCount;
+     const uint32_t*                             pQueueFamilyIndices;
+@@ -1507,34 +1567,35 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkImageViewCreateFlags                      flags;
+     VkImage                                     image;
+     VkImageViewType                             viewType;
+     VkFormat                                    format;
+     VkChannelMapping                            channels;
+     VkImageSubresourceRange                     subresourceRange;
+-    VkImageViewCreateFlags                      flags;
+ } VkImageViewCreateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkShaderModuleCreateFlags                   flags;
+     size_t                                      codeSize;
+     const uint32_t*                             pCode;
+-    VkShaderModuleCreateFlags                   flags;
+ } VkShaderModuleCreateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkShaderCreateFlags                         flags;
+     VkShaderModule                              module;
+     const char*                                 pName;
+-    VkShaderCreateFlags                         flags;
+     VkShaderStageFlagBits                       stage;
+ } VkShaderCreateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineCacheCreateFlags                  flags;
+     size_t                                      initialSize;
+     const void*                                 initialData;
+     size_t                                      maxSize;
+@@ -1556,6 +1617,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineShaderStageCreateFlags            flags;
+     VkShader                                    shader;
+     const VkSpecializationInfo*                 pSpecializationInfo;
+ } VkPipelineShaderStageCreateInfo;
+@@ -1576,6 +1638,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineVertexInputStateCreateFlags       flags;
+     uint32_t                                    vertexBindingDescriptionCount;
+     const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
+     uint32_t                                    vertexAttributeDescriptionCount;
+@@ -1585,6 +1648,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineInputAssemblyStateCreateFlags     flags;
+     VkPrimitiveTopology                         topology;
+     VkBool32                                    primitiveRestartEnable;
+ } VkPipelineInputAssemblyStateCreateInfo;
+@@ -1592,6 +1656,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineTesselationStateCreateFlags       flags;
+     uint32_t                                    patchControlPoints;
+ } VkPipelineTessellationStateCreateInfo;
+@@ -1622,6 +1687,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineViewportStateCreateFlags          flags;
+     uint32_t                                    viewportCount;
+     const VkViewport*                           pViewports;
+     uint32_t                                    scissorCount;
+@@ -1631,6 +1697,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineRasterStateCreateFlags            flags;
+     VkBool32                                    depthClampEnable;
+     VkBool32                                    rasterizerDiscardEnable;
+     VkFillMode                                  fillMode;
+@@ -1646,6 +1713,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineMultisampleStateCreateFlags       flags;
+     uint32_t                                    rasterSamples;
+     VkBool32                                    sampleShadingEnable;
+     float                                       minSampleShading;
+@@ -1667,6 +1735,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineDepthStencilStateCreateFlags      flags;
+     VkBool32                                    depthTestEnable;
+     VkBool32                                    depthWriteEnable;
+     VkCompareOp                                 depthCompareOp;
+@@ -1692,6 +1761,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineColorBlendStateCreateFlags        flags;
+     VkBool32                                    logicOpEnable;
+     VkLogicOp                                   logicOp;
+     uint32_t                                    attachmentCount;
+@@ -1702,6 +1772,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineDynamicStateCreateFlags           flags;
+     uint32_t                                    dynamicStateCount;
+     const VkDynamicState*                       pDynamicStates;
+ } VkPipelineDynamicStateCreateInfo;
+@@ -1709,6 +1780,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineCreateFlags                       flags;
+     uint32_t                                    stageCount;
+     const VkPipelineShaderStageCreateInfo*      pStages;
+     const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
+@@ -1720,7 +1792,6 @@ typedef struct {
+     const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
+     const VkPipelineColorBlendStateCreateInfo*  pColorBlendState;
+     const VkPipelineDynamicStateCreateInfo*     pDynamicState;
+-    VkPipelineCreateFlags                       flags;
+     VkPipelineLayout                            layout;
+     VkRenderPass                                renderPass;
+     uint32_t                                    subpass;
+@@ -1731,8 +1802,8 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkPipelineShaderStageCreateInfo             stage;
+     VkPipelineCreateFlags                       flags;
++    VkPipelineShaderStageCreateInfo             stage;
+     VkPipelineLayout                            layout;
+     VkPipeline                                  basePipelineHandle;
+     int32_t                                     basePipelineIndex;
+@@ -1747,6 +1818,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkPipelineLayoutCreateFlags                 flags;
+     uint32_t                                    setLayoutCount;
+     const VkDescriptorSetLayout*                pSetLayouts;
+     uint32_t                                    pushConstantRangeCount;
+@@ -1756,6 +1828,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkSamplerCreateFlags                        flags;
+     VkFilter                                    magFilter;
+     VkFilter                                    minFilter;
+     VkSamplerMipmapMode                         mipmapMode;
+@@ -1782,6 +1855,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkDescriptorSetLayoutCreateFlags            flags;
+     uint32_t                                    bindingCount;
+     const VkDescriptorSetLayoutBinding*         pBindings;
+ } VkDescriptorSetLayoutCreateInfo;
+@@ -1848,6 +1922,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkFramebufferCreateFlags                    flags;
+     VkRenderPass                                renderPass;
+     uint32_t                                    attachmentCount;
+     const VkImageView*                          pAttachments;
+@@ -1859,6 +1934,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkAttachmentDescriptionFlags                flags;
+     VkFormat                                    format;
+     uint32_t                                    samples;
+     VkAttachmentLoadOp                          loadOp;
+@@ -1867,7 +1943,6 @@ typedef struct {
+     VkAttachmentStoreOp                         stencilStoreOp;
+     VkImageLayout                               initialLayout;
+     VkImageLayout                               finalLayout;
+-    VkAttachmentDescriptionFlags                flags;
+ } VkAttachmentDescription;
+ typedef struct {
+@@ -1878,8 +1953,8 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkPipelineBindPoint                         pipelineBindPoint;
+     VkSubpassDescriptionFlags                   flags;
++    VkPipelineBindPoint                         pipelineBindPoint;
+     uint32_t                                    inputAttachmentCount;
+     const VkAttachmentReference*                pInputAttachments;
+     uint32_t                                    colorAttachmentCount;
+@@ -1905,6 +1980,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkRenderPassCreateFlags                     flags;
+     uint32_t                                    attachmentCount;
+     const VkAttachmentDescription*              pAttachments;
+     uint32_t                                    subpassCount;
+@@ -1916,8 +1992,8 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    uint32_t                                    queueFamilyIndex;
+     VkCmdPoolCreateFlags                        flags;
++    uint32_t                                    queueFamilyIndex;
+ } VkCmdPoolCreateInfo;
+ typedef struct {
+@@ -2110,9 +2186,7 @@ typedef void (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffe
+ typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageOpaqueMemory)(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo);
++typedef VkResult (VKAPI *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFence* pFence);
+ typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+@@ -2396,23 +2470,11 @@ void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
+     uint32_t*                                   pPropertyCount,
+     VkSparseImageFormatProperties*              pProperties);
+-VkResult VKAPI vkQueueBindSparseBufferMemory(
++VkResult VKAPI vkQueueBindSparse(
+     VkQueue                                     queue,
+-    VkBuffer                                    buffer,
+     uint32_t                                    bindInfoCount,
+-    const VkSparseMemoryBindInfo*               pBindInfo);
+-
+-VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
+-    VkQueue                                     queue,
+-    VkImage                                     image,
+-    uint32_t                                    bindInfoCount,
+-    const VkSparseMemoryBindInfo*               pBindInfo);
+-
+-VkResult VKAPI vkQueueBindSparseImageMemory(
+-    VkQueue                                     queue,
+-    VkImage                                     image,
+-    uint32_t                                    bindInfoCount,
+-    const VkSparseImageMemoryBindInfo*          pBindInfo);
++    const VkBindSparseInfo*                     pBindInfo,
++    VkFence                                     fence);
+ VkResult VKAPI vkCreateFence(
+     VkDevice                                    device,
+@@ -3033,19 +3095,20 @@ void VKAPI vkCmdExecuteCommands(
+ #define vk_ext_khr_surface 1
+ VK_DEFINE_NONDISP_HANDLE(VkSurfaceKHR)
+-#define VK_EXT_KHR_SURFACE_REVISION       19
++#define VK_EXT_KHR_SURFACE_REVISION       20
+ #define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER 1
+ #define VK_EXT_KHR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_surface"
++#define VK_ERROR_SURFACE_LOST_KHR         ((VkResult)(int)0xc0000400)
+ typedef void (VKAPI *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface);
+ #ifdef VK_PROTOTYPES
+ void VKAPI vkDestroySurfaceKHR(
+     VkInstance                                   instance,
+     VkSurfaceKHR                                 surface);
+-VkBool32 VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
++VkResult VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     VkSurfaceKHR                                surface);
+@@ -3054,7 +3117,7 @@ VkBool32 VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
+ #define vk_ext_khr_swapchain 1
+ VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR)
+-#define VK_EXT_KHR_SWAPCHAIN_REVISION     59
++#define VK_EXT_KHR_SWAPCHAIN_REVISION     62
+ #define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+ #define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
+ #define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+@@ -3113,6 +3176,14 @@ typedef enum {
+ } VkSurfaceTransformFlagBitsKHR;
+ typedef VkFlags VkSurfaceTransformFlagsKHR;
++typedef enum {
++    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
++    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
++    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
++    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
++} VkCompositeAlphaFlagBitsKHR;
++typedef VkFlags VkCompositeAlphaFlagsKHR;
++
+ typedef struct {
+     uint32_t                                    minImageCount;
+     uint32_t                                    maxImageCount;
+@@ -3121,6 +3192,7 @@ typedef struct {
+     VkExtent2D                                  maxImageExtent;
+     VkSurfaceTransformFlagsKHR                  supportedTransforms;
+     VkSurfaceTransformKHR                       currentTransform;
++    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha;
+     uint32_t                                    maxImageArraySize;
+     VkImageUsageFlags                           supportedUsageFlags;
+ } VkSurfacePropertiesKHR;
+@@ -3140,6 +3212,7 @@ typedef struct {
+     VkExtent2D                                  imageExtent;
+     VkImageUsageFlags                           imageUsageFlags;
+     VkSurfaceTransformKHR                       preTransform;
++    VkCompositeAlphaFlagBitsKHR                 compositeAlpha;
+     uint32_t                                    imageArraySize;
+     VkSharingMode                               sharingMode;
+     uint32_t                                    queueFamilyIndexCount;
+@@ -3217,11 +3290,11 @@ VkResult VKAPI vkQueuePresentKHR(
+ VK_DEFINE_NONDISP_HANDLE(VkDisplayKHR)
+ VK_DEFINE_NONDISP_HANDLE(VkDisplayModeKHR)
+-#define VK_EXT_KHR_DISPLAY_REVISION       16
++#define VK_EXT_KHR_DISPLAY_REVISION       17
+ #define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 3
+ #define VK_EXT_KHR_DISPLAY_EXTENSION_NAME "VK_EXT_KHR_display"
+ #define VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c00)
+-#define VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLANE_KHR ((VkStructureType)(int)0xc0000c01)
++#define VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c01)
+ typedef enum {
+@@ -3237,37 +3310,32 @@ typedef struct {
+     VkExtent2D                                  physicalDimensions;
+     VkExtent2D                                  physicalResolution;
+     VkSurfaceTransformFlagsKHR                  supportedTransforms;
+-    uint32_t                                    planeCount;
+     VkBool32                                    planeReorderPossible;
++    VkBool32                                    persistentContent;
+ } VkDisplayPropertiesKHR;
+ typedef struct {
+-    uint32_t                                    pixelClock;
+     VkExtent2D                                  visibleRegion;
+-    VkExtent2D                                  totalRegion;
+-    VkExtent2D                                  physicalDimensions;
+-    uint32_t                                    hSyncStart;
+-    uint32_t                                    hSyncEnd;
+-    uint32_t                                    vSyncStart;
+-    uint32_t                                    vSyncEnd;
+-    VkBool32                                    interlaced;
+-    VkBool32                                    doublescan;
+-    VkBool32                                    hSyncPos;
+-    VkBool32                                    vSyncPos;
+-} VkDisplayTimingKHR;
++    uint32_t                                    refreshRate;
++} VkDisplayModeParametersKHR;
+ typedef struct {
+     VkDisplayModeKHR                            displayMode;
+-    VkDisplayTimingKHR                          timing;
++    VkDisplayModeParametersKHR                  parameters;
+ } VkDisplayModePropertiesKHR;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+-    VkDisplayTimingKHR                          timing;
++    VkDisplayModeParametersKHR                  parameters;
+ } VkDisplayModeCreateInfoKHR;
+ typedef struct {
++    VkDisplayKHR                                currentDisplay;
++    uint32_t                                    currentStackIndex;
++} VkDisplayPlanePropertiesKHR;
++
++typedef struct {
+     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha;
+     VkOffset2D                                  minSrcPosition;
+     VkOffset2D                                  maxSrcPosition;
+@@ -3277,7 +3345,7 @@ typedef struct {
+     VkOffset2D                                  maxDstPosition;
+     VkExtent2D                                  minDstExtent;
+     VkExtent2D                                  maxDstExtent;
+-} VkDisplayPlanePropertiesKHR;
++} VkDisplayPlaneCapabilitiesKHR;
+ typedef struct {
+     VkStructureType                             sType;
+@@ -3289,13 +3357,16 @@ typedef struct {
+     float                                       globalAlpha;
+     VkDisplayPlaneAlphaFlagsKHR                 alphaMode;
+     VkExtent2D                                  imageSize;
+-} VkSurfaceDescriptionDisplayPlaneKHR;
++} VkDisplaySurfaceCreateInfoKHR;
+ typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
++typedef VkResult (VKAPI *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayKHR* pProperties);
+ typedef VkResult (VKAPI *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+ typedef VkResult (VKAPI *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
+-typedef VkResult (VKAPI *PFN_vkGetDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlanePropertiesKHR* pProperties);
++typedef VkResult (VKAPI *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
++typedef VkResult (VKAPI *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, VkSurfaceKHR* pSurface);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkGetPhysicalDeviceDisplayPropertiesKHR(
+@@ -3303,6 +3374,16 @@ VkResult VKAPI vkGetPhysicalDeviceDisplayPropertiesKHR(
+     uint32_t*                                   pPropertyCount,
+     VkDisplayPropertiesKHR*                     pProperties);
++VkResult VKAPI vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t*                                   pPropertyCount,
++    VkDisplayPlanePropertiesKHR*                pProperties);
++
++VkResult VKAPI vkGetDisplayPlaneSupportedDisplaysKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t*                                   pPropertyCount,
++    VkDisplayKHR*                               pProperties);
++
+ VkResult VKAPI vkGetDisplayModePropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkDisplayKHR                                display,
+@@ -3315,16 +3396,20 @@ VkResult VKAPI vkCreateDisplayModeKHR(
+     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
+     VkDisplayModeKHR*                           pMode);
+-VkResult VKAPI vkGetDisplayPlanePropertiesKHR(
++VkResult VKAPI vkGetDisplayPlaneCapabilitiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+-    VkDisplayKHR                                display,
+-    VkDisplayModeKHR                            mode,
++    VkDisplayModeCreateInfoKHR                  mode,
+     uint32_t                                    planeIndex,
+-    VkDisplayPlanePropertiesKHR*                pProperties);
++    VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
++
++VkResult VKAPI vkCreateDisplayPlaneSurfaceKHR(
++    VkInstance                                  instance,
++    const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
++    VkSurfaceKHR*                               pSurface);
+ #endif
+ #define vk_ext_khr_display_swapchain 1
+-#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_REVISION 4
++#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_REVISION 6
+ #define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+ #define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_display_swapchain"
+ #define VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0001000)
+@@ -3342,47 +3427,60 @@ typedef struct {
+     const void*                                   pNext;
+     VkRect2D                                    srcRect;
+     VkRect2D                                    dstRect;
++    VkBool32                                    persistent;
+ } VkDisplayPresentInfoKHR;
+-#ifdef VK_USE_PLATFORM_X11_KHR
+-#define vk_ext_khr_x11_surface 1
++#ifdef VK_USE_PLATFORM_XLIB_KHR
++#define vk_ext_khr_xlib_surface 1
+ #include <X11/Xlib.h>
+-#define VK_EXT_KHR_X11_SURFACE_REVISION   1
+-#define VK_EXT_KHR_X11_SURFACE_EXTENSION_NUMBER 5
+-#define VK_EXT_KHR_X11_SURFACE_EXTENSION_NAME "VK_EXT_KHR_x11_surface"
++#define VK_EXT_KHR_XLIB_SURFACE_REVISION  3
++#define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
++#define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NAME "vk_ext_khr_xlib_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateX11SurfaceKHR)(VkInstance instance, Display* dpy, Window root, Window window, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualId);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateX11SurfaceKHR(
++VkResult VKAPI vkCreateXlibSurfaceKHR(
+     VkInstance                                  instance,
+     Display*                                    dpy,
+-    Window                                      root,
+     Window                                      window,
+     VkSurfaceKHR*                               pSurface);
++
++VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex,
++    Display*                                    dpy,
++    VisualID                                    visualId);
+ #endif
+-#endif /* VK_USE_PLATFORM_X11_KHR */
++#endif /* VK_USE_PLATFORM_XLIB_KHR */
+ #ifdef VK_USE_PLATFORM_XCB_KHR
+ #define vk_ext_khr_xcb_surface 1
+ #include <xcb/xcb.h>
+-#define VK_EXT_KHR_XCB_SURFACE_REVISION   1
++#define VK_EXT_KHR_XCB_SURFACE_REVISION   3
+ #define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
+ #define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NAME "VK_EXT_KHR_xcb_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t root, xcb_window_t window, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateXcbSurfaceKHR(
+     VkInstance                                  instance,
+     xcb_connection_t*                           connection,
+-    xcb_window_t                                root,
+     xcb_window_t                                window,
+     VkSurfaceKHR*                               pSurface);
++
++VkBool32 VKAPI vkGetPhysicalDeviceXcbPresentationSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex,
++    xcb_connection_t*                           connection,
++    xcb_visualid_t                              visual_id);
+ #endif
+ #endif /* VK_USE_PLATFORM_XCB_KHR */
+@@ -3390,11 +3488,12 @@ VkResult VKAPI vkCreateXcbSurfaceKHR(
+ #define vk_ext_khr_wayland_surface 1
+ #include <wayland-client.h>
+-#define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 1
++#define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 2
+ #define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
+ #define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_EXT_KHR_wayland_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateWaylandSurfaceKHR(
+@@ -3402,6 +3501,11 @@ VkResult VKAPI vkCreateWaylandSurfaceKHR(
+     struct wl_display*                          display,
+     struct wl_surface*                          surface,
+     VkSurfaceKHR*                               pSurface);
++
++VkBool32 VKAPI vkGetPhysicalDeviceWaylandPresentationSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex,
++    struct wl_display*                          display);
+ #endif
+ #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
+@@ -3409,11 +3513,12 @@ VkResult VKAPI vkCreateWaylandSurfaceKHR(
+ #define vk_ext_khr_mir_surface 1
+ #include <mir_toolkit/client_types.h>
+-#define VK_EXT_KHR_MIR_SURFACE_REVISION   1
++#define VK_EXT_KHR_MIR_SURFACE_REVISION   2
+ #define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
+ #define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_mir_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateMirSurfaceKHR(
+@@ -3421,6 +3526,11 @@ VkResult VKAPI vkCreateMirSurfaceKHR(
+     MirConnection*                              connection,
+     MirSurface*                                 mirSurface,
+     VkSurfaceKHR*                               pSurface);
++
++VkBool32 VKAPI vkGetPhysicalDeviceMirPresentationSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex,
++    MirConnection*                              connection);
+ #endif
+ #endif /* VK_USE_PLATFORM_MIR_KHR */
+@@ -3448,11 +3558,12 @@ VkResult VKAPI vkCreateAndroidSurfaceKHR(
+ #define vk_ext_khr_win32_surface 1
+ #include <windows.h>
+-#define VK_EXT_KHR_WIN32_SURFACE_REVISION 1
++#define VK_EXT_KHR_WIN32_SURFACE_REVISION 2
+ #define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
+ #define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_EXT_KHR_win32_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateWin32SurfaceKHR(
+@@ -3460,6 +3571,10 @@ VkResult VKAPI vkCreateWin32SurfaceKHR(
+     HINSTANCE                                   hinstance,
+     HWND                                        hwnd,
+     VkSurfaceKHR*                               pSurface);
++
++VkBool32 VKAPI vkGetPhysicalDeviceWin32PresentationSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex);
+ #endif
+ #endif /* VK_USE_PLATFORM_WIN32_KHR */
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 386acbf..1360862 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -212,18 +212,8 @@ void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDev
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo) {
+-    return GetVtbl(queue).QueueBindSparseBufferMemory(queue, buffer, bindInfoCount, pBindInfo);
+-}
+-
+-__attribute__((visibility("default")))
+-VkResult vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo) {
+-    return GetVtbl(queue).QueueBindSparseImageOpaqueMemory(queue, image, bindInfoCount, pBindInfo);
+-}
+-
+-__attribute__((visibility("default")))
+-VkResult vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo) {
+-    return GetVtbl(queue).QueueBindSparseImageMemory(queue, image, bindInfoCount, pBindInfo);
++VkResult vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) {
++    return GetVtbl(queue).QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
+ }
+ __attribute__((visibility("default")))
+@@ -752,7 +742,7 @@ void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface) {
+ }
+ __attribute__((visibility("default")))
+-VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface) {
++VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface) {
+     return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface);
+ }
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index 68a77d5..a0987e2 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -188,9 +188,7 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
+     {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
+     {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(vkMergePipelineCaches)},
+-    {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseBufferMemory)},
+-    {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
+-    {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
++    {"vkQueueBindSparse", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparse)},
+     {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
+     {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
+     {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
+@@ -347,9 +345,7 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
+     {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
+     {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
+-    {"vkQueueBindSparseBufferMemory", offsetof(DeviceVtbl, QueueBindSparseBufferMemory)},
+-    {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
+-    {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
++    {"vkQueueBindSparse", offsetof(DeviceVtbl, QueueBindSparse)},
+     {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
+     {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
+     {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
+@@ -591,19 +587,9 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
+         success = false;
+     }
+-    vtbl.QueueBindSparseBufferMemory = reinterpret_cast<PFN_vkQueueBindSparseBufferMemory>(get_proc_addr(device, "vkQueueBindSparseBufferMemory"));
+-    if (UNLIKELY(!vtbl.QueueBindSparseBufferMemory)) {
+-        ALOGE("missing device proc: %s", "vkQueueBindSparseBufferMemory");
+-        success = false;
+-    }
+-    vtbl.QueueBindSparseImageOpaqueMemory = reinterpret_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(get_proc_addr(device, "vkQueueBindSparseImageOpaqueMemory"));
+-    if (UNLIKELY(!vtbl.QueueBindSparseImageOpaqueMemory)) {
+-        ALOGE("missing device proc: %s", "vkQueueBindSparseImageOpaqueMemory");
+-        success = false;
+-    }
+-    vtbl.QueueBindSparseImageMemory = reinterpret_cast<PFN_vkQueueBindSparseImageMemory>(get_proc_addr(device, "vkQueueBindSparseImageMemory"));
+-    if (UNLIKELY(!vtbl.QueueBindSparseImageMemory)) {
+-        ALOGE("missing device proc: %s", "vkQueueBindSparseImageMemory");
++    vtbl.QueueBindSparse = reinterpret_cast<PFN_vkQueueBindSparse>(get_proc_addr(device, "vkQueueBindSparse"));
++    if (UNLIKELY(!vtbl.QueueBindSparse)) {
++        ALOGE("missing device proc: %s", "vkQueueBindSparse");
+         success = false;
+     }
+     vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp.tmpl b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+index c6ec0d1..217647f 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp.tmpl
++++ b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+@@ -279,7 +279,7 @@ bool LoadDeviceVtbl(VkDevice device,
+   {{$ext := index $.Arguments 0}}
+   {{     if eq $ext "VK_EXT_KHR_display"}}true
+   {{else if eq $ext "VK_EXT_KHR_display_swapchain"}}true
+-  {{else if eq $ext "VK_EXT_KHR_x11_surface"}}true
++  {{else if eq $ext "VK_EXT_KHR_xlib_surface"}}true
+   {{else if eq $ext "VK_EXT_KHR_xcb_surface"}}true
+   {{else if eq $ext "VK_EXT_KHR_wayland_surface"}}true
+   {{else if eq $ext "VK_EXT_KHR_mir_surface"}}true
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index e166887..5c176db 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -136,9 +136,7 @@ struct DeviceVtbl {
+     PFN_vkQueueSubmit QueueSubmit;
+     PFN_vkQueueWaitIdle QueueWaitIdle;
+-    PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
+-    PFN_vkQueueBindSparseImageOpaqueMemory QueueBindSparseImageOpaqueMemory;
+-    PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
++    PFN_vkQueueBindSparse QueueBindSparse;
+     PFN_vkBeginCommandBuffer BeginCommandBuffer;
+     PFN_vkEndCommandBuffer EndCommandBuffer;
+@@ -268,7 +266,7 @@ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+                                  ANativeWindow* window,
+                                  VkSurfaceKHR* surface);
+ void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
+-VkBool32 GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
++VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
+                                             uint32_t queue_family,
+                                             VkSurfaceKHR surface);
+ VkResult GetSurfacePropertiesKHR(VkDevice device,
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index f6ab081..8861918 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -175,10 +175,10 @@ void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface_handle) {
+     FreeMem(instance, surface);
+ }
+-VkBool32 GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
++VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
+                                             uint32_t /*queue_family*/,
+                                             VkSurfaceKHR /*surface*/) {
+-    return VK_TRUE;
++    return VK_SUCCESS;
+ }
+ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 9c56982..d6a879e 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -815,17 +815,7 @@ void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevic
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
+-    ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+-}
+-
+-VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
+-    ALOGV("TODO: vk%s", __FUNCTION__);
+-    return VK_SUCCESS;
+-}
+-
+-VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) {
++VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index dd6dc6b..70283c4 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -60,9 +60,7 @@ void GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequi
+ void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+ void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+ void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+-VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+-VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
+-VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo);
++VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+ VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkFence* pFence);
+ void DestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* allocator);
+ VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index a026bbf..f836a70 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -178,9 +178,7 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkInvalidateMappedMemoryRanges>(InvalidateMappedMemoryRanges))},
+     {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkMapMemory>(MapMemory))},
+     {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkMergePipelineCaches>(MergePipelineCaches))},
+-    {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseBufferMemory>(QueueBindSparseBufferMemory))},
+-    {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseImageMemory>(QueueBindSparseImageMemory))},
+-    {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(QueueBindSparseImageOpaqueMemory))},
++    {"vkQueueBindSparse", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparse>(QueueBindSparse))},
+     {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueSubmit>(QueueSubmit))},
+     {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueWaitIdle>(QueueWaitIdle))},
+     {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkResetCommandBuffer>(ResetCommandBuffer))},
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0015-vulkan-Update-from-version-0.190.0-to-0.192.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0015-vulkan-Update-from-version-0.190.0-to-0.192.0.patch
new file mode 100644 (file)
index 0000000..63065c0
--- /dev/null
@@ -0,0 +1,246 @@
+From f31710155f9bfdd726bc95f648a821d84de55b69 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 19:12:15 -0800
+Subject: [PATCH 15/30] vulkan: Update from version 0.190.0 to 0.192.0
+
+Change-Id: I5d38543a4ae1c522cacb45a3c011ceab62d2e1d5
+---
+ vulkan/api/vulkan.api          | 33 ++++++++++++++++++---------------
+ vulkan/include/vulkan/vulkan.h | 38 ++++++++++++++++++++------------------
+ vulkan/libvulkan/entry.cpp     |  4 ++--
+ vulkan/nulldrv/null_driver.cpp |  2 +-
+ vulkan/nulldrv/null_driver.h   |  2 +-
+ 5 files changed, 42 insertions(+), 37 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 0c6a3cc..d2a15b5 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 190
++define VERSION_MINOR 192
+ define VERSION_PATCH 0
+ // API limits
+@@ -1149,6 +1149,12 @@ type VkFlags VkFramebufferCreateFlags
+ //bitfield VkFramebufferCreateFlagBits {
+ //}
++/// Dependency flags
++type VkFlags VkDependencyFlags
++bitfield VkDependencyFlagBits {
++    VK_DEPENDENCY_BY_REGION_BIT                             = 0x00000001,
++}
++
+ @extension("VK_EXT_KHR_swapchain")
+ type VkFlags VkSurfaceTransformFlagsKHR
+ @extension("VK_EXT_KHR_swapchain")
+@@ -2019,7 +2025,7 @@ class VkSubpassDependency {
+     VkPipelineStageFlags                        destStageMask
+     VkMemoryOutputFlags                         outputMask
+     VkMemoryInputFlags                          inputMask
+-    VkBool32                                    byRegion
++    VkDependencyFlags                           dependencyFlags
+ }
+ class VkRenderPassCreateInfo {
+@@ -2071,12 +2077,9 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    textureCompressionBC                      /// BC1-7 texture compressed formats
+     VkBool32                                    occlusionQueryNonConservative             /// non-conservative (exact) occlusion queries
+     VkBool32                                    pipelineStatisticsQuery                   /// pipeline statistics query
+-    VkBool32                                    vertexSideEffects                         /// storage buffers and images in vertex stage
+-    VkBool32                                    tessellationSideEffects                   /// storage buffers and images in tessellation stage
+-    VkBool32                                    geometrySideEffects                       /// storage buffers and images in geometry stage
+-    VkBool32                                    fragmentSideEffects                       /// storage buffers and images in fragment stage
+-    VkBool32                                    shaderTessellationPointSize               /// tessellation stage can export point size
+-    VkBool32                                    shaderGeometryPointSize                   /// geometry stage can export point size
++    VkBool32                                    vertexPipelineStoresAndAtomics
++    VkBool32                                    fragmentStoresAndAtomics
++    VkBool32                                    shaderTessellationAndGeometryPointSize
+     VkBool32                                    shaderImageGatherExtended                 /// texture gather with run-time values and independent offsets
+     VkBool32                                    shaderStorageImageExtendedFormats         /// the extended set of formats can be used for storage images
+     VkBool32                                    shaderStorageImageMultisample             /// multisample images can be used for storage images
+@@ -2179,10 +2182,10 @@ class VkPhysicalDeviceLimits {
+     f32[2]                                      viewportBoundsRange                       /// viewport bounds range (min,max)
+     u32                                         viewportSubPixelBits                      /// num bits of subpixel precision for viewport
+-    u32                                         minMemoryMapAlignment                     /// min required alignment of pointers returned by MapMemory (bytes)
+-    u32                                         minTexelBufferOffsetAlignment             /// min required alignment for texel buffer offsets (bytes)
+-    u32                                         minUniformBufferOffsetAlignment           /// min required alignment for uniform buffer sizes and offsets (bytes)
+-    u32                                         minStorageBufferOffsetAlignment           /// min required alignment for storage buffer offsets (bytes)
++    platform.size_t                             minMemoryMapAlignment                     /// min required alignment of pointers returned by MapMemory (bytes)
++    VkDeviceSize                                minTexelBufferOffsetAlignment             /// min required alignment for texel buffer offsets (bytes)
++    VkDeviceSize                                minUniformBufferOffsetAlignment           /// min required alignment for uniform buffer sizes and offsets (bytes)
++    VkDeviceSize                                minStorageBufferOffsetAlignment           /// min required alignment for storage buffer offsets (bytes)
+     s32                                         minTexelOffset                            /// min texel offset for OpTextureSampleOffset
+     u32                                         maxTexelOffset                            /// max texel offset for OpTextureSampleOffset
+@@ -2220,8 +2223,8 @@ class VkPhysicalDeviceLimits {
+     f32                                         lineWidthGranularity                      /// granularity of supported line widths
+     VkBool32                                    strictLines
+-    u32                                         recommendedBufferCopyOffsetAlignment
+-    u32                                         recommendedBufferCopyRowPitchAlignment
++    VkDeviceSize                                recommendedBufferCopyOffsetAlignment
++    VkDeviceSize                                recommendedBufferCopyRowPitchAlignment
+ }
+ class VkPhysicalDeviceSparseProperties {
+@@ -4486,7 +4489,7 @@ cmd void vkCmdPipelineBarrier(
+         VkCmdBuffer                                 cmdBuffer,
+         VkPipelineStageFlags                        srcStageMask,
+         VkPipelineStageFlags                        destStageMask,
+-        VkBool32                                    byRegion,
++        VkDependencyFlags                           dependencyFlags,
+         u32                                         memBarrierCount,
+         const void* const*                          ppMemBarriers) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index dcc5301..fd09209 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -1,5 +1,5 @@
+-#ifndef __vulkanext_h_
+-#define __vulkanext_h_ 1
++#ifndef __vulkan_h_
++#define __vulkan_h_ 1
+ #ifdef __cplusplus
+ extern "C" {
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 190, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 192, 0)
+ #define VK_NULL_HANDLE 0
+@@ -1018,6 +1018,11 @@ typedef enum {
+ typedef VkFlags VkMemoryInputFlags;
+ typedef enum {
++    VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
++} VkDependencyFlagBits;
++typedef VkFlags VkDependencyFlags;
++
++typedef enum {
+     VK_CMD_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+     VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+ } VkCmdPoolCreateFlagBits;
+@@ -1138,12 +1143,9 @@ typedef struct {
+     VkBool32                                    textureCompressionBC;
+     VkBool32                                    occlusionQueryNonConservative;
+     VkBool32                                    pipelineStatisticsQuery;
+-    VkBool32                                    vertexSideEffects;
+-    VkBool32                                    tessellationSideEffects;
+-    VkBool32                                    geometrySideEffects;
+-    VkBool32                                    fragmentSideEffects;
+-    VkBool32                                    shaderTessellationPointSize;
+-    VkBool32                                    shaderGeometryPointSize;
++    VkBool32                                    vertexPipelineStoresAndAtomics;
++    VkBool32                                    fragmentStoresAndAtomics;
++    VkBool32                                    shaderTessellationAndGeometryPointSize;
+     VkBool32                                    shaderImageGatherExtended;
+     VkBool32                                    shaderStorageImageExtendedFormats;
+     VkBool32                                    shaderStorageImageMultisample;
+@@ -1253,10 +1255,10 @@ typedef struct {
+     uint32_t                                    maxViewportDimensions[2];
+     float                                       viewportBoundsRange[2];
+     uint32_t                                    viewportSubPixelBits;
+-    uint32_t                                    minMemoryMapAlignment;
+-    uint32_t                                    minTexelBufferOffsetAlignment;
+-    uint32_t                                    minUniformBufferOffsetAlignment;
+-    uint32_t                                    minStorageBufferOffsetAlignment;
++    size_t                                      minMemoryMapAlignment;
++    VkDeviceSize                                minTexelBufferOffsetAlignment;
++    VkDeviceSize                                minUniformBufferOffsetAlignment;
++    VkDeviceSize                                minStorageBufferOffsetAlignment;
+     int32_t                                     minTexelOffset;
+     uint32_t                                    maxTexelOffset;
+     int32_t                                     minTexelGatherOffset;
+@@ -1286,8 +1288,8 @@ typedef struct {
+     float                                       pointSizeGranularity;
+     float                                       lineWidthGranularity;
+     VkBool32                                    strictLines;
+-    uint32_t                                    recommendedBufferCopyOffsetAlignment;
+-    uint32_t                                    recommendedBufferCopyRowPitchAlignment;
++    VkDeviceSize                                recommendedBufferCopyOffsetAlignment;
++    VkDeviceSize                                recommendedBufferCopyRowPitchAlignment;
+ } VkPhysicalDeviceLimits;
+ typedef struct {
+@@ -1974,7 +1976,7 @@ typedef struct {
+     VkPipelineStageFlags                        destStageMask;
+     VkMemoryOutputFlags                         outputMask;
+     VkMemoryInputFlags                          inputMask;
+-    VkBool32                                    byRegion;
++    VkDependencyFlags                           dependencyFlags;
+ } VkSubpassDependency;
+ typedef struct {
+@@ -2280,7 +2282,7 @@ typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCmdBuffer cmdBuffer, VkImage srcIm
+ typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ typedef void (VKAPI *PFN_vkCmdWaitEvents)(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers);
++typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+ typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+ typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+@@ -3029,7 +3031,7 @@ void VKAPI vkCmdPipelineBarrier(
+     VkCmdBuffer                                 cmdBuffer,
+     VkPipelineStageFlags                        srcStageMask,
+     VkPipelineStageFlags                        destStageMask,
+-    VkBool32                                    byRegion,
++    VkDependencyFlags                           dependencyFlags,
+     uint32_t                                    memBarrierCount,
+     const void* const*                          ppMemBarriers);
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 1360862..9198f64 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -682,8 +682,8 @@ void vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent*
+ }
+ __attribute__((visibility("default")))
+-void vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+-    GetVtbl(cmdBuffer).CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
++void vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
++    GetVtbl(cmdBuffer).CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, dependencyFlags, memBarrierCount, ppMemBarriers);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index d6a879e..698dbd0 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -1050,7 +1050,7 @@ void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags st
+ void CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+ }
+-void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
++void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+ }
+ void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 70283c4..5f3e53e 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -154,7 +154,7 @@ void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcI
+ void CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ void CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers);
++void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+ void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+ void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+ void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0016-vulkan-Update-from-version-0.192.0-to-0.193.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0016-vulkan-Update-from-version-0.192.0-to-0.193.0.patch
new file mode 100644 (file)
index 0000000..5496741
--- /dev/null
@@ -0,0 +1,1095 @@
+From 45aa1055a77ee030591c989f737ff7c4f635a46b Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 19:46:20 -0800
+Subject: [PATCH 16/30] vulkan: Update from version 0.192.0 to 0.193.0
+
+Change-Id: I4387b28368c38c5165c1da99d8dc4e632ad2b42a
+---
+ vulkan/api/vulkan.api              | 127 ++++++++++++++-------------
+ vulkan/include/vulkan/vulkan.h     | 171 ++++++++++++++++++-------------------
+ vulkan/libvulkan/entry.cpp         |  32 +++----
+ vulkan/libvulkan/get_proc_addr.cpp |  30 ++-----
+ vulkan/libvulkan/loader.cpp        |  12 +--
+ vulkan/libvulkan/loader.h          |  32 +++----
+ vulkan/libvulkan/swapchain.cpp     |  45 +++++-----
+ vulkan/tools/vkinfo.cpp            |   2 +-
+ 8 files changed, 218 insertions(+), 233 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index d2a15b5..bd3049c 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 192
++define VERSION_MINOR 193
+ define VERSION_PATCH 0
+ // API limits
+@@ -726,7 +726,7 @@ bitfield VkQueueFlagBits {
+     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_SPARSE_MEMMGR_BIT                              = 0x00000008,    /// Queue supports sparse resource memory management operations
++    VK_QUEUE_SPARSE_BINDING_BIT                             = 0x00000008,    /// Queue supports sparse resource memory management operations
+ }
+ /// Memory properties passed into vkAllocMemory().
+@@ -840,12 +840,10 @@ bitfield VkImageCreateFlagBits {
+     VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000010,    /// Allows creating image views with cube type from the created image
+ }
+-/// Framebuffer attachment view creation flags
++/// Image view creation flags
+ type VkFlags VkImageViewCreateFlags
+-bitfield VkImageViewCreateFlagBits {
+-    VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT                = 0x00000001,
+-    VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT              = 0x00000002,
+-}
++//bitfield VkImageViewCreateFlagBits {
++//}
+ /// Pipeline creation flags
+ type VkFlags VkPipelineCreateFlags
+@@ -970,9 +968,9 @@ bitfield VkSparseMemoryBindFlagBits {
+ /// Sparse image memory requirements flags
+ type VkFlags VkSparseImageFormatFlags
+ bitfield VkSparseImageFormatFlagBits {
+-    VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT                  = 0x00000001,  /// Image uses a single miptail region for all array slices
+-    VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT                = 0x00000002,  /// Image requires mip levels to be an exact multiple of the sparse iamge block size for non-mip-tail levels.
+-    VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT               = 0x00000004,  /// Image uses a non-standard sparse block size
++    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT                  = 0x00000001,  /// Image uses a single miptail region for all array slices
++    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT                = 0x00000002,  /// Image requires mip levels to be an exact multiple of the sparse iamge block size for non-mip-tail levels.
++    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT          = 0x00000004,  /// Image uses a non-standard sparse block size
+ }
+ /// Pipeline stages
+@@ -1363,7 +1361,7 @@ class VkSparseImageFormatProperties {
+ }
+ class VkSparseImageMemoryRequirements {
+-    VkSparseImageFormatProperties               formatProps
++    VkSparseImageFormatProperties               formatProperties
+     u32                                         imageMipTailStartLOD
+     VkDeviceSize                                imageMipTailSize           /// Specified in bytes, must be a multiple of image block size / alignment
+     VkDeviceSize                                imageMipTailOffset         /// Specified in bytes, must be a multiple of image block size / alignment
+@@ -1545,14 +1543,14 @@ class VkImageViewCreateInfo {
+ class VkBufferCopy {
+     VkDeviceSize                                srcOffset              /// Specified in bytes
+     VkDeviceSize                                destOffset             /// Specified in bytes
+-    VkDeviceSize                                copySize               /// Specified in bytes
++    VkDeviceSize                                size                   /// Specified in bytes
+ }
+ class VkSparseMemoryBind {
+-    VkDeviceSize                                rangeOffset           /// Specified in bytes
+-    VkDeviceSize                                rangeSize             /// Specified in bytes
+-    VkDeviceSize                                memOffset             /// Specified in bytes
++    VkDeviceSize                                resourceOffset        /// Specified in bytes
++    VkDeviceSize                                size                  /// Specified in bytes
+     VkDeviceMemory                              mem
++    VkDeviceSize                                memOffset             /// Specified in bytes
+     VkSparseMemoryBindFlags                     flags
+ }
+@@ -1560,8 +1558,8 @@ class VkSparseImageMemoryBind {
+     VkImageSubresource                          subresource
+     VkOffset3D                                  offset
+     VkExtent3D                                  extent
+-    VkDeviceSize                                memOffset             /// Specified in bytes
+     VkDeviceMemory                              mem
++    VkDeviceSize                                memOffset             /// Specified in bytes
+     VkSparseMemoryBindFlags                     flags
+ }
+@@ -1695,13 +1693,13 @@ class VkDescriptorSetAllocInfo {
+ class VkSpecializationMapEntry {
+     u32                                         constantId         /// The SpecConstant ID specified in the BIL
+-    platform.size_t                             size               /// Size in bytes of the SpecConstant
+     u32                                         offset             /// Offset of the value in the data block
++    platform.size_t                             size               /// Size in bytes of the SpecConstant
+ }
+ class VkSpecializationInfo {
+     u32                                         mapEntryCount      /// Number of entries in the map
+-    const VkSpecializationMapEntry*             pMap               /// Array of map entries
++    const VkSpecializationMapEntry*             pMapEntries        /// Array of map entries
+     platform.size_t                             dataSize           /// Size in bytes of pData
+     const void*                                 pData              /// Pointer to SpecConstant data
+ }
+@@ -1725,16 +1723,16 @@ class VkComputePipelineCreateInfo {
+ }
+ class VkVertexInputBindingDescription {
+-    u32                                         binding        /// Vertex buffer binding id
+-    u32                                         strideInBytes  /// Distance between vertices in bytes (0 = no advancement)
+-    VkVertexInputStepRate                       stepRate       /// Rate at which binding is incremented
++    u32                                         binding               /// Vertex buffer binding id
++    u32                                         stride                /// Distance between vertices in bytes (0 = no advancement)
++    VkVertexInputStepRate                       stepRate              /// Rate at which binding is incremented
+ }
+ class VkVertexInputAttributeDescription {
+-    u32                                         location       /// location of the shader vertex attrib
+-    u32                                         binding        /// Vertex buffer binding id
+-    VkFormat                                    format         /// format of source data
+-    u32                                         offsetInBytes  /// Offset of first element in bytes from base of vertex
++    u32                                         location              /// location of the shader vertex attrib
++    u32                                         binding               /// Vertex buffer binding id
++    VkFormat                                    format                /// format of source data
++    u32                                         offset                /// Offset of first element in bytes from base of vertex
+ }
+ class VkPipelineVertexInputStateCreateInfo {
+@@ -1819,7 +1817,7 @@ class VkPipelineColorBlendStateCreateInfo {
+     VkLogicOp                                   logicOp
+     u32                                         attachmentCount    /// # of pAttachments
+     const VkPipelineColorBlendAttachmentState*  pAttachments
+-    f32[4]                                      blendConst
++    f32[4]                                      blendConstants
+ }
+ class VkStencilOpState {
+@@ -1878,12 +1876,12 @@ class VkGraphicsPipelineCreateInfo {
+ }
+ class VkPipelineCacheCreateInfo {
+-    VkStructureType                             sType        /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
+-    const void*                                 pNext        /// Pointer to next structure
++    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
++    const void*                                 pNext                 /// Pointer to next structure
+     VkPipelineCacheCreateFlags                  flags
+-    platform.size_t                             initialSize  /// Size of initial data to populate cache, in bytes
+-    const void*                                 initialData  /// Initial data to populate cache
+-    platform.size_t                             maxSize      /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
++    platform.size_t                             initialDataSize       /// Size of initial data to populate cache, in bytes
++    const void*                                 pInitialData          /// Initial data to populate cache
++    platform.size_t                             maxSize               /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
+ }
+ class VkPushConstantRange {
+@@ -2113,7 +2111,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxImageDimensionCube                     /// max cubemap image dimension
+     u32                                         maxImageArrayLayers                       /// max layers for image arrays
+     VkSampleCountFlags                          sampleCounts                              /// sample counts supported for all images supporting rendering and sampling
+-    u32                                         maxTexelBufferSize                        /// max texel buffer size (bytes)
++    u32                                         maxTexelBufferElements
+     u32                                         maxUniformBufferRange                     /// max uniform buffer size (bytes)
+     u32                                         maxStorageBufferRange                     /// max storage buffer size (bytes)
+     u32                                         maxPushConstantsSize                      /// max size of the push constants pool (bytes)
+@@ -2229,7 +2227,7 @@ class VkPhysicalDeviceLimits {
+ class VkPhysicalDeviceSparseProperties {
+     VkBool32                                    residencyStandard2DBlockShape             /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
+-    VkBool32                                    residencyStandard2DMSBlockShape           /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
++    VkBool32                                    residencyStandard2DMultisampleBlockShape  /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
+     VkBool32                                    residencyStandard3DBlockShape             /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
+     VkBool32                                    residencyAlignedMipSize                   /// Sparse resources support: Images with mip-level dimensions that are NOT a multiple of the block size will be placed in the mip tail
+     VkBool32                                    residencyNonResident                      /// Sparse resources support: GPU can safely access non-resident regions of a resource, read values from read-write resources are undefined
+@@ -2284,8 +2282,8 @@ class VkDispatchIndirectCmd {
+     u32                                         z
+ }
+-@extension("VK_EXT_KHR_swapchain")
+-class VkSurfacePropertiesKHR {
++@extension("VK_EXT_KHR_surface")
++class VkSurfaceCapabilitiesKHR {
+     u32                                         minImageCount
+     u32                                         maxImageCount
+     VkExtent2D                                  currentExtent
+@@ -2298,7 +2296,7 @@ class VkSurfacePropertiesKHR {
+     VkImageUsageFlags                           supportedUsageFlags
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_EXT_KHR_surface")
+ class VkSurfaceFormatKHR {
+     VkFormat                                    format
+     VkColorSpaceKHR                             colorSpace
+@@ -2329,6 +2327,8 @@ class VkSwapchainCreateInfoKHR {
+ class VkPresentInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
++    u32                                         waitSemaphoreCount
++    const VkSemaphore*                          pWaitSemaphores
+     u32                                         swapchainCount
+     const VkSwapchainKHR*                       pSwapchains
+     const u32*                                  imageIndices
+@@ -2727,7 +2727,7 @@ cmd void vkGetDeviceQueue(
+ cmd VkResult vkQueueSubmit(
+         VkQueue                                     queue,
+         u32                                         submitCount,
+-        const VkSubmitInfo*                         pSubmitInfo,
++        const VkSubmitInfo*                         pSubmits,
+         VkFence                                     fence) {
+     queueObject := GetQueue(queue)
+@@ -3709,21 +3709,21 @@ cmd VkResult vkFreeDescriptorSets(
+ cmd void vkUpdateDescriptorSets(
+         VkDevice                                    device,
+-        u32                                         writeCount,
++        u32                                         descriptorWriteCount,
+         const VkWriteDescriptorSet*                 pDescriptorWrites,
+-        u32                                         copyCount,
++        u32                                         descriptorCopyCount,
+         const VkCopyDescriptorSet*                  pDescriptorCopies) {
+     deviceObject := GetDevice(device)
+-    descriptorWrites := pDescriptorWrites[0:writeCount]
+-    for i in (0 .. writeCount) {
++    descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
++    for i in (0 .. descriptorWriteCount) {
+         descriptorWrite := descriptorWrites[i]
+         descriptorWriteObject := GetDescriptorSet(descriptorWrite.destSet)
+         assert(descriptorWriteObject.device == device)
+     }
+-    descriptorCopies := pDescriptorCopies[0:copyCount]
+-    for i in (0 .. copyCount) {
++    descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
++    for i in (0 .. descriptorCopyCount) {
+         descriptorCopy := descriptorCopies[i]
+         descriptorCopyObject := GetDescriptorSet(descriptorCopy.destSet)
+         assert(descriptorCopyObject.device == device)
+@@ -3987,7 +3987,7 @@ cmd void vkCmdSetBlendConstants(
+         // TODO(jessehall): apic only supports 'const' on pointer types. Using
+         // an annotation as a quick hack to pass this to the template without
+         // having to modify the AST and semantic model.
+-        @readonly f32[4]                            blendConst) {
++        @readonly f32[4]                            blendConstants) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+@@ -4330,7 +4330,7 @@ cmd void vkCmdFillBuffer(
+         VkCmdBuffer                                 cmdBuffer,
+         VkBuffer                                    destBuffer,
+         VkDeviceSize                                destOffset,
+-        VkDeviceSize                                fillSize,
++        VkDeviceSize                                size,
+         u32                                         data) {
+     cmdBufferObject := GetCmdBuffer(cmdBuffer)
+     destBufferObject := GetBuffer(destBuffer)
+@@ -4643,34 +4643,33 @@ cmd void vkDestroySurfaceKHR(
+ cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
+         VkPhysicalDevice                            physicalDevice,
+         u32                                         queueFamilyIndex,
+-        VkSurfaceKHR                                surface) {
++        VkSurfaceKHR                                surface,
++        VkBool32*                                   pSupported) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+-    //supported := ?
+-
+-    return ?//supported
++    return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
+-cmd VkResult vkGetSurfacePropertiesKHR(
+-        VkDevice                                    device,
++@extension("VK_EXT_KHR_surface")
++cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
++        VkPhysicalDevice                            physicalDevice,
+         VkSurfaceKHR                                surface,
+-        VkSurfacePropertiesKHR*                     pSurfaceProperties) {
+-    deviceObject := GetDevice(device)
++        VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities) {
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+-    surfaceProperties := ?
+-    pSurfaceProperties[0] = surfaceProperties
++    surfaceCapabilities := ?
++    pSurfaceCapabilities[0] = surfaceCapabilities
+     return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
+-cmd VkResult vkGetSurfaceFormatsKHR(
+-        VkDevice                                    device,
++@extension("VK_EXT_KHR_surface")
++cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
++        VkPhysicalDevice                            physicalDevice,
+         VkSurfaceKHR                                surface,
+         u32*                                        pSurfaceFormatCount,
+         VkSurfaceFormatKHR*                         pSurfaceFormats) {
+-    deviceObject := GetDevice(device)
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     count := as!u32(?)
+     pSurfaceFormatCount[0] = count
+@@ -4684,13 +4683,13 @@ cmd VkResult vkGetSurfaceFormatsKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
+-cmd VkResult vkGetSurfacePresentModesKHR(
+-        VkDevice                                    device,
++@extension("VK_EXT_KHR_surface")
++cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
++        VkPhysicalDevice                            physicalDevice,
+         VkSurfaceKHR                                surface,
+         u32*                                        pPresentModeCount,
+         VkPresentModeKHR*                           pPresentModes) {
+-    deviceObject := GetDevice(device)
++    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     count := as!u32(?)
+     pPresentModeCount[0] = count
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index fd09209..8442325 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 192, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 193, 0)
+ #define VK_NULL_HANDLE 0
+@@ -818,7 +818,7 @@ typedef enum {
+     VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+     VK_QUEUE_COMPUTE_BIT = 0x00000002,
+     VK_QUEUE_DMA_BIT = 0x00000004,
+-    VK_QUEUE_SPARSE_MEMMGR_BIT = 0x00000008,
++    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
+ } VkQueueFlagBits;
+ typedef VkFlags VkQueueFlags;
+@@ -847,9 +847,9 @@ typedef enum {
+ } VkImageAspectFlagBits;
+ typedef enum {
+-    VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT = 0x00000001,
+-    VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+-    VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT = 0x00000004,
++    VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
++    VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
++    VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+ } VkSparseImageFormatFlagBits;
+ typedef VkFlags VkSparseImageFormatFlags;
+@@ -910,11 +910,6 @@ typedef enum {
+ } VkBufferUsageFlagBits;
+ typedef VkFlags VkBufferUsageFlags;
+ typedef VkFlags VkBufferViewCreateFlags;
+-
+-typedef enum {
+-    VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
+-    VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
+-} VkImageViewCreateFlagBits;
+ typedef VkFlags VkImageViewCreateFlags;
+ typedef VkFlags VkImageAspectFlags;
+ typedef VkFlags VkShaderModuleCreateFlags;
+@@ -1198,7 +1193,7 @@ typedef struct {
+     uint32_t                                    maxImageDimensionCube;
+     uint32_t                                    maxImageArrayLayers;
+     VkSampleCountFlags                          sampleCounts;
+-    uint32_t                                    maxTexelBufferSize;
++    uint32_t                                    maxTexelBufferElements;
+     uint32_t                                    maxUniformBufferRange;
+     uint32_t                                    maxStorageBufferRange;
+     uint32_t                                    maxPushConstantsSize;
+@@ -1294,7 +1289,7 @@ typedef struct {
+ typedef struct {
+     VkBool32                                    residencyStandard2DBlockShape;
+-    VkBool32                                    residencyStandard2DMSBlockShape;
++    VkBool32                                    residencyStandard2DMultisampleBlockShape;
+     VkBool32                                    residencyStandard3DBlockShape;
+     VkBool32                                    residencyAlignedMipSize;
+     VkBool32                                    residencyNonResident;
+@@ -1409,7 +1404,7 @@ typedef struct {
+ } VkSparseImageFormatProperties;
+ typedef struct {
+-    VkSparseImageFormatProperties               formatProps;
++    VkSparseImageFormatProperties               formatProperties;
+     uint32_t                                    imageMipTailStartLOD;
+     VkDeviceSize                                imageMipTailSize;
+     VkDeviceSize                                imageMipTailOffset;
+@@ -1417,10 +1412,10 @@ typedef struct {
+ } VkSparseImageMemoryRequirements;
+ typedef struct {
+-    VkDeviceSize                                rangeOffset;
+-    VkDeviceSize                                rangeSize;
+-    VkDeviceSize                                memOffset;
++    VkDeviceSize                                resourceOffset;
++    VkDeviceSize                                size;
+     VkDeviceMemory                              mem;
++    VkDeviceSize                                memOffset;
+     VkSparseMemoryBindFlags                     flags;
+ } VkSparseMemoryBind;
+@@ -1452,8 +1447,8 @@ typedef struct {
+     VkImageSubresource                          subresource;
+     VkOffset3D                                  offset;
+     VkExtent3D                                  extent;
+-    VkDeviceSize                                memOffset;
+     VkDeviceMemory                              mem;
++    VkDeviceSize                                memOffset;
+     VkSparseMemoryBindFlags                     flags;
+ } VkSparseImageMemoryBind;
+@@ -1598,20 +1593,20 @@ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineCacheCreateFlags                  flags;
+-    size_t                                      initialSize;
+-    const void*                                 initialData;
++    size_t                                      initialDataSize;
++    const void*                                 pInitialData;
+     size_t                                      maxSize;
+ } VkPipelineCacheCreateInfo;
+ typedef struct {
+     uint32_t                                    constantId;
+-    size_t                                      size;
+     uint32_t                                    offset;
++    size_t                                      size;
+ } VkSpecializationMapEntry;
+ typedef struct {
+     uint32_t                                    mapEntryCount;
+-    const VkSpecializationMapEntry*             pMap;
++    const VkSpecializationMapEntry*             pMapEntries;
+     size_t                                      dataSize;
+     const void*                                 pData;
+ } VkSpecializationInfo;
+@@ -1626,7 +1621,7 @@ typedef struct {
+ typedef struct {
+     uint32_t                                    binding;
+-    uint32_t                                    strideInBytes;
++    uint32_t                                    stride;
+     VkVertexInputStepRate                       stepRate;
+ } VkVertexInputBindingDescription;
+@@ -1634,7 +1629,7 @@ typedef struct {
+     uint32_t                                    location;
+     uint32_t                                    binding;
+     VkFormat                                    format;
+-    uint32_t                                    offsetInBytes;
++    uint32_t                                    offset;
+ } VkVertexInputAttributeDescription;
+ typedef struct {
+@@ -1768,7 +1763,7 @@ typedef struct {
+     VkLogicOp                                   logicOp;
+     uint32_t                                    attachmentCount;
+     const VkPipelineColorBlendAttachmentState*  pAttachments;
+-    float                                       blendConst[4];
++    float                                       blendConstants[4];
+ } VkPipelineColorBlendStateCreateInfo;
+ typedef struct {
+@@ -2018,7 +2013,7 @@ typedef struct {
+ typedef struct {
+     VkDeviceSize                                srcOffset;
+     VkDeviceSize                                destOffset;
+-    VkDeviceSize                                copySize;
++    VkDeviceSize                                size;
+ } VkBufferCopy;
+ typedef struct {
+@@ -2172,7 +2167,7 @@ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDev
+ typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+ typedef void (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+-typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
++typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
+ typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
+ typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* pAllocator, VkDeviceMemory* pMem);
+@@ -2235,7 +2230,7 @@ typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorP
+ typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+ typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+ typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+-typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
++typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+ typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+ typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkRenderPass* pRenderPass);
+@@ -2254,7 +2249,7 @@ typedef void (VKAPI *PFN_vkCmdSetViewport)(VkCmdBuffer cmdBuffer, uint32_t viewp
+ typedef void (VKAPI *PFN_vkCmdSetScissor)(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+ typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCmdBuffer cmdBuffer, float lineWidth);
+ typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+-typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCmdBuffer cmdBuffer, const float blendConst[4]);
++typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCmdBuffer cmdBuffer, const float blendConstants[4]);
+ typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
+ typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+ typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+@@ -2274,7 +2269,7 @@ typedef void (VKAPI *PFN_vkCmdBlitImage)(VkCmdBuffer cmdBuffer, VkImage srcImage
+ typedef void (VKAPI *PFN_vkCmdCopyBufferToImage)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+ typedef void (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+ typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
+-typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
++typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize size, uint32_t data);
+ typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+ typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+ typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+@@ -2387,7 +2382,7 @@ void VKAPI vkGetDeviceQueue(
+ VkResult VKAPI vkQueueSubmit(
+     VkQueue                                     queue,
+     uint32_t                                    submitCount,
+-    const VkSubmitInfo*                         pSubmitInfo,
++    const VkSubmitInfo*                         pSubmits,
+     VkFence                                     fence);
+ VkResult VKAPI vkQueueWaitIdle(
+@@ -2738,9 +2733,9 @@ VkResult VKAPI vkFreeDescriptorSets(
+ void VKAPI vkUpdateDescriptorSets(
+     VkDevice                                    device,
+-    uint32_t                                    writeCount,
++    uint32_t                                    descriptorWriteCount,
+     const VkWriteDescriptorSet*                 pDescriptorWrites,
+-    uint32_t                                    copyCount,
++    uint32_t                                    descriptorCopyCount,
+     const VkCopyDescriptorSet*                  pDescriptorCopies);
+ VkResult VKAPI vkCreateFramebuffer(
+@@ -2835,7 +2830,7 @@ void VKAPI vkCmdSetDepthBias(
+ void VKAPI vkCmdSetBlendConstants(
+     VkCmdBuffer                                 cmdBuffer,
+-    const float                                 blendConst[4]);
++    const float                                 blendConstants[4]);
+ void VKAPI vkCmdSetDepthBounds(
+     VkCmdBuffer                                 cmdBuffer,
+@@ -2973,7 +2968,7 @@ void VKAPI vkCmdFillBuffer(
+     VkCmdBuffer                                 cmdBuffer,
+     VkBuffer                                    destBuffer,
+     VkDeviceSize                                destOffset,
+-    VkDeviceSize                                fillSize,
++    VkDeviceSize                                size,
+     uint32_t                                    data);
+ void VKAPI vkCmdClearColorImage(
+@@ -3102,32 +3097,6 @@ VK_DEFINE_NONDISP_HANDLE(VkSurfaceKHR)
+ #define VK_EXT_KHR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_surface"
+ #define VK_ERROR_SURFACE_LOST_KHR         ((VkResult)(int)0xc0000400)
+-typedef void (VKAPI *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface);
+-
+-#ifdef VK_PROTOTYPES
+-void VKAPI vkDestroySurfaceKHR(
+-    VkInstance                                   instance,
+-    VkSurfaceKHR                                 surface);
+-
+-VkResult VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
+-    VkPhysicalDevice                            physicalDevice,
+-    uint32_t                                    queueFamilyIndex,
+-    VkSurfaceKHR                                surface);
+-#endif
+-
+-#define vk_ext_khr_swapchain 1
+-VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR)
+-
+-#define VK_EXT_KHR_SWAPCHAIN_REVISION     62
+-#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+-#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
+-#define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+-#define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0000801)
+-#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR ((VkImageLayout)(int)0xc0000802)
+-#define VK_SUBOPTIMAL_KHR                 ((VkResult)(int)0x40000403)
+-#define VK_ERROR_OUT_OF_DATE_KHR          ((VkResult)(int)0xc0000804)
+-
+ typedef enum {
+     VK_SURFACE_TRANSFORM_NONE_KHR = 0,
+@@ -3197,13 +3166,61 @@ typedef struct {
+     VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha;
+     uint32_t                                    maxImageArraySize;
+     VkImageUsageFlags                           supportedUsageFlags;
+-} VkSurfacePropertiesKHR;
++} VkSurfaceCapabilitiesKHR;
+ typedef struct {
+     VkFormat                                    format;
+     VkColorSpaceKHR                             colorSpace;
+ } VkSurfaceFormatKHR;
++
++typedef void (VKAPI *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
++
++#ifdef VK_PROTOTYPES
++void VKAPI vkDestroySurfaceKHR(
++    VkInstance                                   instance,
++    VkSurfaceKHR                                 surface);
++
++VkResult VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
++    VkPhysicalDevice                            physicalDevice,
++    uint32_t                                    queueFamilyIndex,
++    VkSurfaceKHR                                surface,
++    VkBool32*                                   pSupported);
++
++VkResult VKAPI vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
++    VkPhysicalDevice                            physicalDevice,
++    VkSurfaceKHR                                surface,
++    VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities);
++
++VkResult VKAPI vkGetPhysicalDeviceSurfaceFormatsKHR(
++    VkPhysicalDevice                            physicalDevice,
++    VkSurfaceKHR                                surface,
++    uint32_t*                                   pSurfaceFormatCount,
++    VkSurfaceFormatKHR*                         pSurfaceFormats);
++
++VkResult VKAPI vkGetPhysicalDeviceSurfacePresentModesKHR(
++    VkPhysicalDevice                            physicalDevice,
++    VkSurfaceKHR                                surface,
++    uint32_t*                                   pPresentModeCount,
++    VkPresentModeKHR*                           pPresentModes);
++#endif
++
++#define vk_ext_khr_swapchain 1
++VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR)
++
++#define VK_EXT_KHR_SWAPCHAIN_REVISION     62
++#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
++#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
++#define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
++#define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0000801)
++#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR ((VkImageLayout)(int)0xc0000802)
++#define VK_SUBOPTIMAL_KHR                 ((VkResult)(int)0x40000403)
++#define VK_ERROR_OUT_OF_DATE_KHR          ((VkResult)(int)0xc0000804)
++
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+@@ -3227,15 +3244,14 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                   pNext;
++    uint32_t                                    waitSemaphoreCount;
++    const VkSemaphore*                          pWaitSemaphores;
+     uint32_t                                    swapchainCount;
+     const VkSwapchainKHR*                       pSwapchains;
+     const uint32_t*                             imageIndices;
+ } VkPresentInfoKHR;
+-typedef VkResult (VKAPI *PFN_vkGetSurfacePropertiesKHR)(VkDevice  device, VkSurfaceKHR  surface, VkSurfacePropertiesKHR*  pSurfaceProperties);
+-typedef VkResult (VKAPI *PFN_vkGetSurfaceFormatsKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pSurfaceFormatCount, VkSurfaceFormatKHR*  pSurfaceFormats);
+-typedef VkResult (VKAPI *PFN_vkGetSurfacePresentModesKHR)(VkDevice  device, VkSurfaceKHR  surface, uint32_t*  pPresentModeCount, VkPresentModeKHR*  pPresentModes);
+ typedef VkResult (VKAPI *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, VkSwapchainKHR*  pSwapchain);
+ typedef void (VKAPI *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain);
+ typedef VkResult (VKAPI *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pSwapchainImageCount, VkImage*  pSwapchainImages);
+@@ -3243,23 +3259,6 @@ typedef VkResult (VKAPI *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchai
+ typedef VkResult (VKAPI *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkGetSurfacePropertiesKHR(
+-    VkDevice                                     device,
+-    VkSurfaceKHR                                 surface,
+-    VkSurfacePropertiesKHR*                      pSurfaceProperties);
+-
+-VkResult VKAPI vkGetSurfaceFormatsKHR(
+-    VkDevice                                     device,
+-    VkSurfaceKHR                                 surface,
+-    uint32_t*                                    pSurfaceFormatCount,
+-    VkSurfaceFormatKHR*                          pSurfaceFormats);
+-
+-VkResult VKAPI vkGetSurfacePresentModesKHR(
+-    VkDevice                                     device,
+-    VkSurfaceKHR                                 surface,
+-    uint32_t*                                    pPresentModeCount,
+-    VkPresentModeKHR*                            pPresentModes);
+-
+ VkResult VKAPI vkCreateSwapchainKHR(
+     VkDevice                                     device,
+     const VkSwapchainCreateInfoKHR*              pCreateInfo,
+@@ -3333,11 +3332,6 @@ typedef struct {
+ } VkDisplayModeCreateInfoKHR;
+ typedef struct {
+-    VkDisplayKHR                                currentDisplay;
+-    uint32_t                                    currentStackIndex;
+-} VkDisplayPlanePropertiesKHR;
+-
+-typedef struct {
+     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha;
+     VkOffset2D                                  minSrcPosition;
+     VkOffset2D                                  maxSrcPosition;
+@@ -3350,6 +3344,11 @@ typedef struct {
+ } VkDisplayPlaneCapabilitiesKHR;
+ typedef struct {
++    VkDisplayKHR                                currentDisplay;
++    uint32_t                                    currentStackIndex;
++} VkDisplayPlanePropertiesKHR;
++
++typedef struct {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     VkDisplayModeKHR                            displayMode;
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 9198f64..31f0231 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -132,8 +132,8 @@ void vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queue
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence) {
+-    return GetVtbl(queue).QueueSubmit(queue, submitCount, pSubmitInfo, fence);
++VkResult vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) {
++    return GetVtbl(queue).QueueSubmit(queue, submitCount, pSubmits, fence);
+ }
+ __attribute__((visibility("default")))
+@@ -447,8 +447,8 @@ VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool,
+ }
+ __attribute__((visibility("default")))
+-void vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
+-    GetVtbl(device).UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
++void vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
++    GetVtbl(device).UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
+ }
+ __attribute__((visibility("default")))
+@@ -542,8 +542,8 @@ void vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, flo
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4]) {
+-    GetVtbl(cmdBuffer).CmdSetBlendConstants(cmdBuffer, blendConst);
++void vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConstants[4]) {
++    GetVtbl(cmdBuffer).CmdSetBlendConstants(cmdBuffer, blendConstants);
+ }
+ __attribute__((visibility("default")))
+@@ -642,8 +642,8 @@ void vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize
+ }
+ __attribute__((visibility("default")))
+-void vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) {
+-    GetVtbl(cmdBuffer).CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
++void vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize size, uint32_t data) {
++    GetVtbl(cmdBuffer).CmdFillBuffer(cmdBuffer, destBuffer, destOffset, size, data);
+ }
+ __attribute__((visibility("default")))
+@@ -742,23 +742,23 @@ void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface) {
+-    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface);
++VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported) {
++    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfacePropertiesKHR(VkDevice device, VkSurfaceKHR surface, VkSurfacePropertiesKHR* pSurfaceProperties) {
+-    return GetVtbl(device).GetSurfacePropertiesKHR(device, surface, pSurfaceProperties);
++VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
++    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfaceFormatsKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) {
+-    return GetVtbl(device).GetSurfaceFormatsKHR(device, surface, pSurfaceFormatCount, pSurfaceFormats);
++VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) {
++    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) {
+-    return GetVtbl(device).GetSurfacePresentModesKHR(device, surface, pPresentModeCount, pPresentModes);
++VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) {
++    return GetVtbl(physicalDevice).GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index a0987e2..4e08015 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -64,6 +64,9 @@ const NameProcEntry kInstanceProcTbl[] = {
+     {"vkGetPhysicalDeviceProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceProperties)},
+     {"vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceQueueFamilyProperties)},
+     {"vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSparseImageFormatProperties)},
++    {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceCapabilitiesKHR)},
++    {"vkGetPhysicalDeviceSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceFormatsKHR)},
++    {"vkGetPhysicalDeviceSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfacePresentModesKHR)},
+     {"vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceSupportKHR)},
+     // clang-format on
+ };
+@@ -181,9 +184,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
+     {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
+     {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
+-    {"vkGetSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfaceFormatsKHR)},
+-    {"vkGetSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePresentModesKHR)},
+-    {"vkGetSurfacePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePropertiesKHR)},
+     {"vkGetSwapchainImagesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSwapchainImagesKHR)},
+     {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
+     {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
+@@ -221,6 +221,9 @@ const NameOffsetEntry kInstanceOffsetTbl[] = {
+     {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
+     {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
+     {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
++    {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceCapabilitiesKHR)},
++    {"vkGetPhysicalDeviceSurfaceFormatsKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceFormatsKHR)},
++    {"vkGetPhysicalDeviceSurfacePresentModesKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfacePresentModesKHR)},
+     {"vkGetPhysicalDeviceSurfaceSupportKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceSupportKHR)},
+     // clang-format on
+ };
+@@ -338,9 +341,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkGetPipelineCacheData", offsetof(DeviceVtbl, GetPipelineCacheData)},
+     {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
+     {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
+-    {"vkGetSurfaceFormatsKHR", offsetof(DeviceVtbl, GetSurfaceFormatsKHR)},
+-    {"vkGetSurfacePresentModesKHR", offsetof(DeviceVtbl, GetSurfacePresentModesKHR)},
+-    {"vkGetSurfacePropertiesKHR", offsetof(DeviceVtbl, GetSurfacePropertiesKHR)},
+     {"vkGetSwapchainImagesKHR", offsetof(DeviceVtbl, GetSwapchainImagesKHR)},
+     {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
+     {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
+@@ -486,6 +486,9 @@ bool LoadInstanceVtbl(VkInstance instance,
+     }
+     vtbl.DestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(get_proc_addr(instance, "vkDestroySurfaceKHR"));
+     vtbl.GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
++    vtbl.GetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
++    vtbl.GetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"));
++    vtbl.GetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfacePresentModesKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"));
+     vtbl.CreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(get_proc_addr(instance, "vkCreateAndroidSurfaceKHR"));
+     // clang-format on
+     return success;
+@@ -1112,21 +1115,6 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkCmdExecuteCommands");
+         success = false;
+     }
+-    vtbl.GetSurfacePropertiesKHR = reinterpret_cast<PFN_vkGetSurfacePropertiesKHR>(get_proc_addr(device, "vkGetSurfacePropertiesKHR"));
+-    if (UNLIKELY(!vtbl.GetSurfacePropertiesKHR)) {
+-        ALOGE("missing device proc: %s", "vkGetSurfacePropertiesKHR");
+-        success = false;
+-    }
+-    vtbl.GetSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetSurfaceFormatsKHR>(get_proc_addr(device, "vkGetSurfaceFormatsKHR"));
+-    if (UNLIKELY(!vtbl.GetSurfaceFormatsKHR)) {
+-        ALOGE("missing device proc: %s", "vkGetSurfaceFormatsKHR");
+-        success = false;
+-    }
+-    vtbl.GetSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetSurfacePresentModesKHR>(get_proc_addr(device, "vkGetSurfacePresentModesKHR"));
+-    if (UNLIKELY(!vtbl.GetSurfacePresentModesKHR)) {
+-        ALOGE("missing device proc: %s", "vkGetSurfacePresentModesKHR");
+-        success = false;
+-    }
+     vtbl.CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(get_proc_addr(device, "vkCreateSwapchainKHR"));
+     if (UNLIKELY(!vtbl.CreateSwapchainKHR)) {
+         ALOGE("missing device proc: %s", "vkCreateSwapchainKHR");
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index d5795d7..4e68f88 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -542,15 +542,6 @@ PFN_vkVoidFunction GetLayerDeviceProcAddr(VkDevice device, const char* name) {
+         return reinterpret_cast<PFN_vkVoidFunction>(Noop);
+     }
+     // WSI extensions are not in the driver so return the loader functions
+-    if (strcmp(name, "vkGetSurfacePropertiesKHR") == 0) {
+-        return reinterpret_cast<PFN_vkVoidFunction>(GetSurfacePropertiesKHR);
+-    }
+-    if (strcmp(name, "vkGetSurfaceFormatsKHR") == 0) {
+-        return reinterpret_cast<PFN_vkVoidFunction>(GetSurfaceFormatsKHR);
+-    }
+-    if (strcmp(name, "vkGetSurfacePresentModesKHR") == 0) {
+-        return reinterpret_cast<PFN_vkVoidFunction>(GetSurfacePresentModesKHR);
+-    }
+     if (strcmp(name, "vkCreateSwapchainKHR") == 0) {
+         return reinterpret_cast<PFN_vkVoidFunction>(CreateSwapchainKHR);
+     }
+@@ -896,6 +887,9 @@ const InstanceVtbl kBottomInstanceFunctions = {
+     .EnumerateDeviceLayerProperties = EnumerateDeviceLayerPropertiesBottom,
+     .GetPhysicalDeviceSparseImageFormatProperties = GetPhysicalDeviceSparseImageFormatPropertiesBottom,
+     .GetPhysicalDeviceSurfaceSupportKHR = GetPhysicalDeviceSurfaceSupportKHR,
++    .GetPhysicalDeviceSurfaceCapabilitiesKHR = GetPhysicalDeviceSurfaceCapabilitiesKHR,
++    .GetPhysicalDeviceSurfaceFormatsKHR = GetPhysicalDeviceSurfaceFormatsKHR,
++    .GetPhysicalDeviceSurfacePresentModesKHR = GetPhysicalDeviceSurfacePresentModesKHR,
+     // clang-format on
+ };
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 5c176db..b6c8552 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -51,6 +51,9 @@ struct InstanceVtbl {
+     PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
+     // Layers and loader only, not implemented by drivers
++    PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
++    PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
++    PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
+     PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
+     PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
+     PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
+@@ -187,9 +190,6 @@ struct DeviceVtbl {
+     PFN_vkCmdExecuteCommands CmdExecuteCommands;
+     // Layers and loader only, not implemented by drivers
+-    PFN_vkGetSurfacePropertiesKHR GetSurfacePropertiesKHR;
+-    PFN_vkGetSurfaceFormatsKHR GetSurfaceFormatsKHR;
+-    PFN_vkGetSurfacePresentModesKHR GetSurfacePresentModesKHR;
+     PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
+     PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
+     PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
+@@ -268,18 +268,20 @@ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+ void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
+ VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
+                                             uint32_t queue_family,
+-                                            VkSurfaceKHR surface);
+-VkResult GetSurfacePropertiesKHR(VkDevice device,
+-                                 VkSurfaceKHR surface,
+-                                 VkSurfacePropertiesKHR* properties);
+-VkResult GetSurfaceFormatsKHR(VkDevice device,
+-                              VkSurfaceKHR surface,
+-                              uint32_t* count,
+-                              VkSurfaceFormatKHR* formats);
+-VkResult GetSurfacePresentModesKHR(VkDevice device,
+-                                   VkSurfaceKHR surface,
+-                                   uint32_t* count,
+-                                   VkPresentModeKHR* modes);
++                                            VkSurfaceKHR surface,
++                                            VkBool32* pSupported);
++VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
++    VkPhysicalDevice pdev,
++    VkSurfaceKHR surface,
++    VkSurfaceCapabilitiesKHR* capabilities);
++VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev,
++                                            VkSurfaceKHR surface,
++                                            uint32_t* count,
++                                            VkSurfaceFormatKHR* formats);
++VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice pdev,
++                                                 VkSurfaceKHR surface,
++                                                 uint32_t* count,
++                                                 VkPresentModeKHR* modes);
+ VkResult CreateSwapchainKHR(VkDevice device,
+                             const VkSwapchainCreateInfoKHR* create_info,
+                             VkSwapchainKHR* swapchain_handle);
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 8861918..f1fe236 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -177,13 +177,16 @@ void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface_handle) {
+ VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
+                                             uint32_t /*queue_family*/,
+-                                            VkSurfaceKHR /*surface*/) {
++                                            VkSurfaceKHR /*surface*/,
++                                            VkBool32* pSupported) {
++    *pSupported = VK_TRUE;
+     return VK_SUCCESS;
+ }
+-VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+-                                 VkSurfaceKHR surface,
+-                                 VkSurfacePropertiesKHR* properties) {
++VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
++    VkPhysicalDevice /*pdev*/,
++    VkSurfaceKHR surface,
++    VkSurfaceCapabilitiesKHR* capabilities) {
+     int err;
+     ANativeWindow* window = SurfaceFromHandle(surface)->window.get();
+@@ -201,25 +204,25 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+         return VK_ERROR_INITIALIZATION_FAILED;
+     }
+-    properties->currentExtent = VkExtent2D{width, height};
++    capabilities->currentExtent = VkExtent2D{width, height};
+     // TODO(jessehall): Figure out what the min/max values should be.
+-    properties->minImageCount = 2;
+-    properties->maxImageCount = 3;
++    capabilities->minImageCount = 2;
++    capabilities->maxImageCount = 3;
+     // TODO(jessehall): Figure out what the max extent should be. Maximum
+     // texture dimension maybe?
+-    properties->minImageExtent = VkExtent2D{1, 1};
+-    properties->maxImageExtent = VkExtent2D{4096, 4096};
++    capabilities->minImageExtent = VkExtent2D{1, 1};
++    capabilities->maxImageExtent = VkExtent2D{4096, 4096};
+     // TODO(jessehall): We can support all transforms, fix this once
+     // implemented.
+-    properties->supportedTransforms = VK_SURFACE_TRANSFORM_NONE_BIT_KHR;
++    capabilities->supportedTransforms = VK_SURFACE_TRANSFORM_NONE_BIT_KHR;
+     // TODO(jessehall): Implement based on NATIVE_WINDOW_TRANSFORM_HINT.
+-    properties->currentTransform = VK_SURFACE_TRANSFORM_NONE_KHR;
++    capabilities->currentTransform = VK_SURFACE_TRANSFORM_NONE_KHR;
+-    properties->maxImageArraySize = 1;
++    capabilities->maxImageArraySize = 1;
+     // TODO(jessehall): I think these are right, but haven't thought hard about
+     // it. Do we need to query the driver for support of any of these?
+@@ -227,7 +230,7 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+     // - VK_IMAGE_USAGE_GENERAL: maybe? does this imply cpu mappable?
+     // - VK_IMAGE_USAGE_DEPTH_STENCIL_BIT: definitely not
+     // - VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT: definitely not
+-    properties->supportedUsageFlags =
++    capabilities->supportedUsageFlags =
+         VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT |
+         VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT | VK_IMAGE_USAGE_SAMPLED_BIT |
+         VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+@@ -236,10 +239,10 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
+     return VK_SUCCESS;
+ }
+-VkResult GetSurfaceFormatsKHR(VkDevice /*device*/,
+-                              VkSurfaceKHR /*surface*/,
+-                              uint32_t* count,
+-                              VkSurfaceFormatKHR* formats) {
++VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice /*pdev*/,
++                                            VkSurfaceKHR /*surface*/,
++                                            uint32_t* count,
++                                            VkSurfaceFormatKHR* formats) {
+     // TODO(jessehall): Fill out the set of supported formats. Longer term, add
+     // a new gralloc method to query whether a (format, usage) pair is
+     // supported, and check that for each gralloc format that corresponds to a
+@@ -262,10 +265,10 @@ VkResult GetSurfaceFormatsKHR(VkDevice /*device*/,
+     return result;
+ }
+-VkResult GetSurfacePresentModesKHR(VkDevice /*device*/,
+-                                   VkSurfaceKHR /*surface*/,
+-                                   uint32_t* count,
+-                                   VkPresentModeKHR* modes) {
++VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice /*pdev*/,
++                                                 VkSurfaceKHR /*surface*/,
++                                                 uint32_t* count,
++                                                 VkPresentModeKHR* modes) {
+     const VkPresentModeKHR kModes[] = {
+         VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_KHR,
+     };
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 63e0d5f..eaec272 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -77,7 +77,7 @@ const char* VkQueueFlagBitStr(VkQueueFlagBits bit) {
+             return "COMPUTE";
+         case VK_QUEUE_DMA_BIT:
+             return "DMA";
+-        case VK_QUEUE_SPARSE_MEMMGR_BIT:
++        case VK_QUEUE_SPARSE_BINDING_BIT:
+             return "SPARSE";
+     }
+ }
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0017-vulkan-Update-from-version-0.193.0-to-0.194.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0017-vulkan-Update-from-version-0.193.0-to-0.194.0.patch
new file mode 100644 (file)
index 0000000..fffd40c
--- /dev/null
@@ -0,0 +1,613 @@
+From 3b2e2ef030d38b5c2a6e200a4d5ccdaea36ec906 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 21:05:26 -0800
+Subject: [PATCH 17/30] vulkan: Update from version 0.193.0 to 0.194.0
+
+Change-Id: I6a4508a61414375112bae3ffd16b0490ce3e4294
+---
+ vulkan/api/vulkan.api          | 163 +++++++++++++++++-----------------
+ vulkan/include/vulkan/vulkan.h | 196 ++++++++++++++++++++---------------------
+ 2 files changed, 174 insertions(+), 185 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index bd3049c..418318a 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 193
++define VERSION_MINOR 194
+ define VERSION_PATCH 0
+ // API limits
+@@ -170,8 +170,8 @@ enum VkImageType {
+ }
+ enum VkImageTiling {
+-    VK_IMAGE_TILING_LINEAR                                  = 0x00000000,
+-    VK_IMAGE_TILING_OPTIMAL                                 = 0x00000001,
++    VK_IMAGE_TILING_OPTIMAL                                 = 0x00000000,
++    VK_IMAGE_TILING_LINEAR                                  = 0x00000001,
+ }
+ enum VkImageViewType {
+@@ -190,12 +190,13 @@ enum VkCmdBufferLevel {
+ }
+ enum VkChannelSwizzle {
+-    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_IDENTITY                             = 0x00000000,
++    VK_CHANNEL_SWIZZLE_ZERO                                 = 0x00000001,
++    VK_CHANNEL_SWIZZLE_ONE                                  = 0x00000002,
++    VK_CHANNEL_SWIZZLE_R                                    = 0x00000003,
++    VK_CHANNEL_SWIZZLE_G                                    = 0x00000004,
++    VK_CHANNEL_SWIZZLE_B                                    = 0x00000005,
++    VK_CHANNEL_SWIZZLE_A                                    = 0x00000006,
+ }
+ enum VkDescriptorType {
+@@ -228,8 +229,8 @@ enum VkBorderColor {
+ }
+ enum VkPipelineBindPoint {
+-    VK_PIPELINE_BIND_POINT_COMPUTE                          = 0x00000000,
+-    VK_PIPELINE_BIND_POINT_GRAPHICS                         = 0x00000001,
++    VK_PIPELINE_BIND_POINT_GRAPHICS                         = 0x00000000,
++    VK_PIPELINE_BIND_POINT_COMPUTE                          = 0x00000001,
+ }
+ enum VkPrimitiveTopology {
+@@ -268,11 +269,11 @@ enum VkSamplerMipmapMode {
+ }
+ enum VkSamplerAddressMode {
+-    VK_SAMPLER_ADDRESS_MODE_WRAP                            = 0x00000000,
+-    VK_SAMPLER_ADDRESS_MODE_MIRROR                          = 0x00000001,
+-    VK_SAMPLER_ADDRESS_MODE_CLAMP                           = 0x00000002,
+-    VK_SAMPLER_ADDRESS_MODE_MIRROR_ONCE                     = 0x00000003,
+-    VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER                    = 0x00000004,
++    VK_SAMPLER_ADDRESS_MODE_REPEAT                          = 0x00000000,
++    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT                 = 0x00000001,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE                   = 0x00000002,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER                 = 0x00000003,
++    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE            = 0x00000004,
+ }
+ enum VkCompareOp {
+@@ -287,16 +288,9 @@ enum VkCompareOp {
+ }
+ enum VkFillMode {
+-    VK_FILL_MODE_POINTS                                     = 0x00000000,
++    VK_FILL_MODE_SOLID                                      = 0x00000000,
+     VK_FILL_MODE_WIREFRAME                                  = 0x00000001,
+-    VK_FILL_MODE_SOLID                                      = 0x00000002,
+-}
+-
+-enum VkCullMode {
+-    VK_CULL_MODE_NONE                                       = 0x00000000,
+-    VK_CULL_MODE_FRONT                                      = 0x00000001,
+-    VK_CULL_MODE_BACK                                       = 0x00000002,
+-    VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
++    VK_FILL_MODE_POINTS                                     = 0x00000002,
+ }
+ enum VkFrontFace {
+@@ -570,57 +564,54 @@ enum VkFormat {
+ /// Structure type enumerant
+ enum VkStructureType {
+     VK_STRUCTURE_TYPE_APPLICATION_INFO                          = 0,
+-    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                        = 1,
+-    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                         = 2,
+-    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                    = 3,
+-    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 4,
+-    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO                        = 5,
+-    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 6,
+-    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 7,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 8,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO                     = 9,
++    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                      = 1,
++    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 2,
++    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                        = 3,
++    VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 4,
++    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                         = 5,
++    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 6,
++    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 7,
++    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 8,
++    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 9,
+     VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                         = 10,
+-    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 11,
+-    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 12,
+-    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                    = 13,
+-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 14,
+-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 15,
+-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 16,
+-    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17,
+-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 18,
+-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 19,
+-    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO         = 20,
+-    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 21,
+-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 22,
+-    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 23,
+-    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 24,
+-    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                        = 25,
+-    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                   = 26,
+-    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 27,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                     = 28,
+-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 29,
+-    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 30,
+-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 31,
+-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 32,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 33,
+-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 34,
+-    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 35,
+-    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                      = 36,
+-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 37,
+-    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 38,
+-    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 39,
+-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION                    = 40,
+-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION                       = 41,
+-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY                        = 42,
++    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                    = 11,
++    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                        = 12,
++    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                   = 13,
++    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 14,
++    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                    = 15,
++    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 16,
++    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO                        = 17,
++    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 18,
++    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 19,
++    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 20,
++    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21,
++    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 22,
++    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 23,
++    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO         = 24,
++    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 25,
++    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 26,
++    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 27,
++    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 28,
++    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 29,
++    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 30,
++    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 31,
++    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 32,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 33,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 34,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 35,
++    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 36,
++    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 37,
++    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 38,
++    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 39,
++    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO                      = 40,
++    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO                     = 41,
++    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                     = 42,
+     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 43,
+-    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO                      = 44,
+-    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 45,
+-    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 46,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 47,
+-    VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 48,
+-    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 49,
+-    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 50,
+-    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 51,
++    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 44,
++    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 45,
++    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 46,
++    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 47,
++    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 48,
+     //@extension("VK_EXT_KHR_swapchain")
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
+@@ -802,6 +793,7 @@ bitfield VkShaderStageFlagBits {
+     VK_SHADER_STAGE_GEOMETRY_BIT                            = 0x00000008,
+     VK_SHADER_STAGE_FRAGMENT_BIT                            = 0x00000010,
+     VK_SHADER_STAGE_COMPUTE_BIT                             = 0x00000020,
++    VK_SHADER_STAGE_ALL_GRAPHICS                            = 0x0000001F,
+     VK_SHADER_STAGE_ALL                                     = 0x7FFFFFFF,
+ }
+@@ -1040,6 +1032,7 @@ bitfield VkStencilFaceFlagBits {
+     VK_STENCIL_FACE_NONE                                    = 0x00000000,   /// No faces
+     VK_STENCIL_FACE_FRONT_BIT                               = 0x00000001,   /// Front face
+     VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
++    VK_STENCIL_FRONT_AND_BACK                               = 0x00000003,
+ }
+ /// Instance creation flags
+@@ -1153,6 +1146,15 @@ bitfield VkDependencyFlagBits {
+     VK_DEPENDENCY_BY_REGION_BIT                             = 0x00000001,
+ }
++/// Cull mode flags
++type VkFlags VkCullModeFlags
++bitfield VkCullModeFlagBits {
++    VK_CULL_MODE_NONE                                       = 0x00000000,
++    VK_CULL_MODE_FRONT_BIT                                  = 0x00000001,
++    VK_CULL_MODE_BACK_BIT                                   = 0x00000002,
++    VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
++}
++
+ @extension("VK_EXT_KHR_swapchain")
+ type VkFlags VkSurfaceTransformFlagsKHR
+ @extension("VK_EXT_KHR_swapchain")
+@@ -1777,7 +1779,7 @@ class VkPipelineRasterStateCreateInfo {
+     VkBool32                                    depthClampEnable
+     VkBool32                                    rasterizerDiscardEnable
+     VkFillMode                                  fillMode                   /// optional (GL45)
+-    VkCullMode                                  cullMode
++    VkCullModeFlags                             cullMode
+     VkFrontFace                                 frontFace
+     VkBool32                                    depthBiasEnable
+     f32                                         depthBiasConstantFactor
+@@ -1981,8 +1983,6 @@ class VkClearAttachment {
+ }
+ class VkAttachmentDescription {
+-    VkStructureType                             sType           /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION
+-    const void*                                 pNext           /// Pointer to next structure
+     VkAttachmentDescriptionFlags                flags
+     VkFormat                                    format
+     u32                                         samples
+@@ -2000,8 +2000,6 @@ class VkAttachmentReference {
+ }
+ class VkSubpassDescription {
+-    VkStructureType                             sType              /// Must be VK_STRUCTURE_SUBPASS_DESCRIPTION
+-    const void*                                 pNext              /// Pointer to next structure
+     VkSubpassDescriptionFlags                   flags
+     VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
+     u32                                         inputAttachmentCount
+@@ -2009,14 +2007,12 @@ class VkSubpassDescription {
+     u32                                         colorAttachmentCount
+     const VkAttachmentReference*                pColorAttachments
+     const VkAttachmentReference*                pResolveAttachments
+-    VkAttachmentReference                       depthStencilAttachment
++    const VkAttachmentReference*                pDepthStencilAttachment
+     u32                                         preserveAttachmentCount
+     const VkAttachmentReference*                pPreserveAttachments
+ }
+ class VkSubpassDependency {
+-    VkStructureType                             sType      /// Must be VK_STRUCTURE_SUBPASS_DEPENDENCY
+-    const void*                                 pNext      /// Pointer to next structure
+     u32                                         srcSubpass
+     u32                                         destSubpass
+     VkPipelineStageFlags                        srcStageMask
+@@ -2202,7 +2198,8 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxColorAttachments                       /// max num of framebuffer color attachments
+     u32                                         maxSampledImageColorSamples               /// max num of color samples for a non-integer sampled image
+-    u32                                         maxSampledImageDepthSamples               /// max num of depth/stencil samples for a sampled image
++    u32                                         maxSampledImageDepthSamples               /// max num of depth samples for a sampled image
++    u32                                         maxSampledImageStencilSamples             /// max num of stencil samples for a sampled image
+     u32                                         maxSampledImageIntegerSamples             /// max num of samples supported for an integer image
+     u32                                         maxStorageImageSamples                    /// max num of samples for a storage image
+     u32                                         maxSampleMaskWords                        /// max num of sample mask words
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 8442325..af0ccdf 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 193, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 194, 0)
+ #define VK_NULL_HANDLE 0
+@@ -132,60 +132,57 @@ typedef enum {
+ typedef enum {
+     VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+-    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1,
+-    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2,
+-    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 3,
+-    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 4,
+-    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 5,
+-    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6,
+-    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 9,
++    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
++    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
++    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
++    VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
++    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 5,
++    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
++    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
++    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
++    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
+     VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
+-    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11,
+-    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12,
+-    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 13,
+-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 14,
+-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 15,
+-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 16,
+-    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17,
+-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 18,
+-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 19,
+-    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 20,
+-    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 21,
+-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 22,
+-    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 23,
+-    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 24,
+-    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 25,
+-    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 26,
+-    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 27,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 28,
+-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 29,
+-    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 30,
+-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 31,
+-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 32,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 34,
+-    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 35,
+-    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 36,
+-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 37,
+-    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 38,
+-    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 39,
+-    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 40,
+-    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 41,
+-    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 42,
++    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
++    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
++    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
++    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
++    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
++    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
++    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 17,
++    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 18,
++    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 19,
++    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 20,
++    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21,
++    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 22,
++    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 23,
++    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 24,
++    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 25,
++    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 26,
++    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 27,
++    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 28,
++    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 29,
++    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 30,
++    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 31,
++    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 32,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 33,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 34,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 35,
++    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 36,
++    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 37,
++    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 38,
++    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 39,
++    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 40,
++    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 41,
++    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 42,
+     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+-    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44,
+-    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45,
+-    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 47,
+-    VK_STRUCTURE_TYPE_SUBMIT_INFO = 48,
+-    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 49,
+-    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 50,
+-    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 51,
++    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
++    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
++    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
++    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 47,
++    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 48,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+-    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
+-    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_BIND_SPARSE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
++    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
++    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+@@ -401,11 +398,11 @@ typedef enum {
+ } VkImageType;
+ typedef enum {
+-    VK_IMAGE_TILING_LINEAR = 0,
+-    VK_IMAGE_TILING_OPTIMAL = 1,
+-    VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_LINEAR,
+-    VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_OPTIMAL,
+-    VK_IMAGE_TILING_NUM = (VK_IMAGE_TILING_OPTIMAL - VK_IMAGE_TILING_LINEAR + 1),
++    VK_IMAGE_TILING_OPTIMAL = 0,
++    VK_IMAGE_TILING_LINEAR = 1,
++    VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
++    VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
++    VK_IMAGE_TILING_NUM = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
+     VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+ } VkImageTiling;
+@@ -471,15 +468,16 @@ typedef enum {
+ } VkImageViewType;
+ typedef enum {
+-    VK_CHANNEL_SWIZZLE_ZERO = 0,
+-    VK_CHANNEL_SWIZZLE_ONE = 1,
+-    VK_CHANNEL_SWIZZLE_R = 2,
+-    VK_CHANNEL_SWIZZLE_G = 3,
+-    VK_CHANNEL_SWIZZLE_B = 4,
+-    VK_CHANNEL_SWIZZLE_A = 5,
+-    VK_CHANNEL_SWIZZLE_BEGIN_RANGE = VK_CHANNEL_SWIZZLE_ZERO,
++    VK_CHANNEL_SWIZZLE_IDENTITY = 0,
++    VK_CHANNEL_SWIZZLE_ZERO = 1,
++    VK_CHANNEL_SWIZZLE_ONE = 2,
++    VK_CHANNEL_SWIZZLE_R = 3,
++    VK_CHANNEL_SWIZZLE_G = 4,
++    VK_CHANNEL_SWIZZLE_B = 5,
++    VK_CHANNEL_SWIZZLE_A = 6,
++    VK_CHANNEL_SWIZZLE_BEGIN_RANGE = VK_CHANNEL_SWIZZLE_IDENTITY,
+     VK_CHANNEL_SWIZZLE_END_RANGE = VK_CHANNEL_SWIZZLE_A,
+-    VK_CHANNEL_SWIZZLE_NUM = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_ZERO + 1),
++    VK_CHANNEL_SWIZZLE_NUM = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_IDENTITY + 1),
+     VK_CHANNEL_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+ } VkChannelSwizzle;
+@@ -511,27 +509,16 @@ typedef enum {
+ } VkPrimitiveTopology;
+ typedef enum {
+-    VK_FILL_MODE_POINTS = 0,
++    VK_FILL_MODE_SOLID = 0,
+     VK_FILL_MODE_WIREFRAME = 1,
+-    VK_FILL_MODE_SOLID = 2,
+-    VK_FILL_MODE_BEGIN_RANGE = VK_FILL_MODE_POINTS,
+-    VK_FILL_MODE_END_RANGE = VK_FILL_MODE_SOLID,
+-    VK_FILL_MODE_NUM = (VK_FILL_MODE_SOLID - VK_FILL_MODE_POINTS + 1),
++    VK_FILL_MODE_POINTS = 2,
++    VK_FILL_MODE_BEGIN_RANGE = VK_FILL_MODE_SOLID,
++    VK_FILL_MODE_END_RANGE = VK_FILL_MODE_POINTS,
++    VK_FILL_MODE_NUM = (VK_FILL_MODE_POINTS - VK_FILL_MODE_SOLID + 1),
+     VK_FILL_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkFillMode;
+ typedef enum {
+-    VK_CULL_MODE_NONE = 0,
+-    VK_CULL_MODE_FRONT = 1,
+-    VK_CULL_MODE_BACK = 2,
+-    VK_CULL_MODE_FRONT_AND_BACK = 3,
+-    VK_CULL_MODE_BEGIN_RANGE = VK_CULL_MODE_NONE,
+-    VK_CULL_MODE_END_RANGE = VK_CULL_MODE_FRONT_AND_BACK,
+-    VK_CULL_MODE_NUM = (VK_CULL_MODE_FRONT_AND_BACK - VK_CULL_MODE_NONE + 1),
+-    VK_CULL_MODE_MAX_ENUM = 0x7FFFFFFF
+-} VkCullMode;
+-
+-typedef enum {
+     VK_FRONT_FACE_CCW = 0,
+     VK_FRONT_FACE_CW = 1,
+     VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_CCW,
+@@ -667,14 +654,14 @@ typedef enum {
+ } VkSamplerMipmapMode;
+ typedef enum {
+-    VK_SAMPLER_ADDRESS_MODE_WRAP = 0,
+-    VK_SAMPLER_ADDRESS_MODE_MIRROR = 1,
+-    VK_SAMPLER_ADDRESS_MODE_CLAMP = 2,
+-    VK_SAMPLER_ADDRESS_MODE_MIRROR_ONCE = 3,
+-    VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER = 4,
+-    VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_WRAP,
+-    VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER,
+-    VK_SAMPLER_ADDRESS_MODE_NUM = (VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER - VK_SAMPLER_ADDRESS_MODE_WRAP + 1),
++    VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
++    VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
++    VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
++    VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
++    VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
++    VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE,
++    VK_SAMPLER_ADDRESS_MODE_NUM = (VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
+     VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSamplerAddressMode;
+@@ -729,11 +716,11 @@ typedef enum {
+ } VkAttachmentStoreOp;
+ typedef enum {
+-    VK_PIPELINE_BIND_POINT_COMPUTE = 0,
+-    VK_PIPELINE_BIND_POINT_GRAPHICS = 1,
+-    VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
+-    VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
+-    VK_PIPELINE_BIND_POINT_NUM = (VK_PIPELINE_BIND_POINT_GRAPHICS - VK_PIPELINE_BIND_POINT_COMPUTE + 1),
++    VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
++    VK_PIPELINE_BIND_POINT_COMPUTE = 1,
++    VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
++    VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
++    VK_PIPELINE_BIND_POINT_NUM = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
+     VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+ } VkPipelineBindPoint;
+@@ -922,6 +909,7 @@ typedef enum {
+     VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
+     VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
+     VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
++    VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F,
+     VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+ } VkShaderStageFlagBits;
+ typedef VkFlags VkPipelineCacheCreateFlags;
+@@ -938,6 +926,14 @@ typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+ typedef VkFlags VkPipelineTesselationStateCreateFlags;
+ typedef VkFlags VkPipelineViewportStateCreateFlags;
+ typedef VkFlags VkPipelineRasterStateCreateFlags;
++
++typedef enum {
++    VK_CULL_MODE_NONE = 0,
++    VK_CULL_MODE_FRONT_BIT = 0x00000001,
++    VK_CULL_MODE_BACK_BIT = 0x00000002,
++    VK_CULL_MODE_FRONT_AND_BACK = 0x3,
++} VkCullModeFlagBits;
++typedef VkFlags VkCullModeFlags;
+ typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+ typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+ typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+@@ -1044,6 +1040,7 @@ typedef enum {
+     VK_STENCIL_FACE_NONE = 0,
+     VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+     VK_STENCIL_FACE_BACK_BIT = 0x00000002,
++    VK_STENCIL_FRONT_AND_BACK = 0x3,
+ } VkStencilFaceFlagBits;
+ typedef VkFlags VkStencilFaceFlags;
+@@ -1270,6 +1267,7 @@ typedef struct {
+     uint32_t                                    maxColorAttachments;
+     uint32_t                                    maxSampledImageColorSamples;
+     uint32_t                                    maxSampledImageDepthSamples;
++    uint32_t                                    maxSampledImageStencilSamples;
+     uint32_t                                    maxSampledImageIntegerSamples;
+     uint32_t                                    maxStorageImageSamples;
+     uint32_t                                    maxSampleMaskWords;
+@@ -1698,7 +1696,7 @@ typedef struct {
+     VkBool32                                    depthClampEnable;
+     VkBool32                                    rasterizerDiscardEnable;
+     VkFillMode                                  fillMode;
+-    VkCullMode                                  cullMode;
++    VkCullModeFlags                             cullMode;
+     VkFrontFace                                 frontFace;
+     VkBool32                                    depthBiasEnable;
+     float                                       depthBiasConstantFactor;
+@@ -1929,8 +1927,6 @@ typedef struct {
+ } VkFramebufferCreateInfo;
+ typedef struct {
+-    VkStructureType                             sType;
+-    const void*                                 pNext;
+     VkAttachmentDescriptionFlags                flags;
+     VkFormat                                    format;
+     uint32_t                                    samples;
+@@ -1948,8 +1944,6 @@ typedef struct {
+ } VkAttachmentReference;
+ typedef struct {
+-    VkStructureType                             sType;
+-    const void*                                 pNext;
+     VkSubpassDescriptionFlags                   flags;
+     VkPipelineBindPoint                         pipelineBindPoint;
+     uint32_t                                    inputAttachmentCount;
+@@ -1957,14 +1951,12 @@ typedef struct {
+     uint32_t                                    colorAttachmentCount;
+     const VkAttachmentReference*                pColorAttachments;
+     const VkAttachmentReference*                pResolveAttachments;
+-    VkAttachmentReference                       depthStencilAttachment;
++    const VkAttachmentReference*                pDepthStencilAttachment;
+     uint32_t                                    preserveAttachmentCount;
+     const VkAttachmentReference*                pPreserveAttachments;
+ } VkSubpassDescription;
+ typedef struct {
+-    VkStructureType                             sType;
+-    const void*                                 pNext;
+     uint32_t                                    srcSubpass;
+     uint32_t                                    destSubpass;
+     VkPipelineStageFlags                        srcStageMask;
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0018-vulkan-Update-from-version-0.194.0-to-0.196.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0018-vulkan-Update-from-version-0.194.0-to-0.196.0.patch
new file mode 100644 (file)
index 0000000..eab1cd7
--- /dev/null
@@ -0,0 +1,6993 @@
+From 8d00e63b01003f7269fd31c82698427641eca3bf Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 22:10:52 -0800
+Subject: [PATCH 18/30] vulkan: Update from version 0.194.0 to 0.196.0
+
+Change-Id: Ib62cc358b1f2575daeaa2a893eb4afca458ec5c3
+---
+ vulkan/api/templates/vulkan_common.tmpl        |    2 +-
+ vulkan/api/vulkan.api                          | 1131 ++++++++++++------------
+ vulkan/include/vulkan/vk_debug_report_lunarg.h |    2 +-
+ vulkan/include/vulkan/vulkan.h                 |  909 ++++++++++---------
+ vulkan/libvulkan/entry.cpp                     |  334 +++----
+ vulkan/libvulkan/entry.cpp.tmpl                |    6 +-
+ vulkan/libvulkan/get_proc_addr.cpp             |   30 +-
+ vulkan/libvulkan/loader.cpp                    |   98 +-
+ vulkan/libvulkan/loader.h                      |   19 +-
+ vulkan/libvulkan/swapchain.cpp                 |   19 +-
+ vulkan/nulldrv/null_driver.cpp                 |  283 +++---
+ vulkan/nulldrv/null_driver.h                   |  190 ++--
+ vulkan/nulldrv/null_driver_gen.cpp             |    6 +-
+ vulkan/tools/vkinfo.cpp                        |    2 +-
+ 14 files changed, 1520 insertions(+), 1511 deletions(-)
+
+diff --git a/vulkan/api/templates/vulkan_common.tmpl b/vulkan/api/templates/vulkan_common.tmpl
+index 12d5788..ce37a13 100644
+--- a/vulkan/api/templates/vulkan_common.tmpl
++++ b/vulkan/api/templates/vulkan_common.tmpl
+@@ -211,7 +211,7 @@
+ {{define "Vtbl#VkPhysicalDevice"}}Instance{{end}}
+ {{define "Vtbl#VkDevice"        }}Device{{end}}
+ {{define "Vtbl#VkQueue"         }}Device{{end}}
+-{{define "Vtbl#VkCmdBuffer"     }}Device{{end}}
++{{define "Vtbl#VkCommandBuffer" }}Device{{end}}
+ {{define "Vtbl_Default"         }}Global{{end}}
+ {{define "Vtbl"}}
+   {{AssertType $ "Function"}}
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 418318a..7313904 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 194
++define VERSION_MINOR 196
+ define VERSION_PATCH 0
+ // API limits
+@@ -100,11 +100,11 @@ type u32 VkSampleMask
+ @dispatchHandle type u64 VkPhysicalDevice
+ @dispatchHandle type u64 VkDevice
+ @dispatchHandle type u64 VkQueue
+-@dispatchHandle type u64 VkCmdBuffer
++@dispatchHandle type u64 VkCommandBuffer
+ /// Non dispatchable handle types.
+ @nonDispatchHandle type u64 VkDeviceMemory
+-@nonDispatchHandle type u64 VkCmdPool
++@nonDispatchHandle type u64 VkCommandPool
+ @nonDispatchHandle type u64 VkBuffer
+ @nonDispatchHandle type u64 VkBufferView
+ @nonDispatchHandle type u64 VkImage
+@@ -144,12 +144,12 @@ enum VkImageLayout {
+     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_TRANSFER_SOURCE_OPTIMAL                 = 0x00000006,   /// Optimal layout when image is used only as source of transfer operations
+-    VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL            = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
++    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL                    = 0x00000006,   /// Optimal layout when image is used only as source of transfer operations
++    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                    = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
+     VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
+     //@extension("VK_EXT_KHR_swapchain")
+-    VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR                      = 0xc0000802,
++    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 0xc0000802,
+ }
+ enum VkAttachmentLoadOp {
+@@ -184,9 +184,9 @@ enum VkImageViewType {
+     VK_IMAGE_VIEW_TYPE_CUBE_ARRAY                           = 0x00000006,
+ }
+-enum VkCmdBufferLevel {
+-    VK_CMD_BUFFER_LEVEL_PRIMARY                             = 0x00000000,
+-    VK_CMD_BUFFER_LEVEL_SECONDARY                           = 0x00000001,
++enum VkCommandBufferLevel {
++    VK_COMMAND_BUFFER_LEVEL_PRIMARY                         = 0x00000000,
++    VK_COMMAND_BUFFER_LEVEL_SECONDARY                       = 0x00000001,
+ }
+ enum VkChannelSwizzle {
+@@ -240,10 +240,10 @@ enum VkPrimitiveTopology {
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST                     = 0x00000003,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP                    = 0x00000004,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN                      = 0x00000005,
+-    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ                     = 0x00000006,
+-    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ                    = 0x00000007,
+-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ                 = 0x00000008,
+-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ                = 0x00000009,
++    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY          = 0x00000006,
++    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY         = 0x00000007,
++    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY      = 0x00000008,
++    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY     = 0x00000009,
+     VK_PRIMITIVE_TOPOLOGY_PATCH                             = 0x0000000a,
+ }
+@@ -280,10 +280,10 @@ enum VkCompareOp {
+     VK_COMPARE_OP_NEVER                                     = 0x00000000,
+     VK_COMPARE_OP_LESS                                      = 0x00000001,
+     VK_COMPARE_OP_EQUAL                                     = 0x00000002,
+-    VK_COMPARE_OP_LESS_EQUAL                                = 0x00000003,
++    VK_COMPARE_OP_LESS_OR_EQUAL                             = 0x00000003,
+     VK_COMPARE_OP_GREATER                                   = 0x00000004,
+     VK_COMPARE_OP_NOT_EQUAL                                 = 0x00000005,
+-    VK_COMPARE_OP_GREATER_EQUAL                             = 0x00000006,
++    VK_COMPARE_OP_GREATER_OR_EQUAL                          = 0x00000006,
+     VK_COMPARE_OP_ALWAYS                                    = 0x00000007,
+ }
+@@ -294,8 +294,8 @@ enum VkFillMode {
+ }
+ enum VkFrontFace {
+-    VK_FRONT_FACE_CCW                                       = 0x00000000,
+-    VK_FRONT_FACE_CW                                        = 0x00000001,
++    VK_FRONT_FACE_COUNTER_CLOCKWISE                         = 0x00000000,
++    VK_FRONT_FACE_CLOCKWISE                                 = 0x00000001,
+ }
+ enum VkBlend {
+@@ -303,12 +303,12 @@ enum VkBlend {
+     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_DST_COLOR                                      = 0x00000004,
++    VK_BLEND_ONE_MINUS_DST_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_DST_ALPHA                                      = 0x00000008,
++    VK_BLEND_ONE_MINUS_DST_ALPHA                            = 0x00000009,
+     VK_BLEND_CONSTANT_COLOR                                 = 0x0000000a,
+     VK_BLEND_ONE_MINUS_CONSTANT_COLOR                       = 0x0000000b,
+     VK_BLEND_CONSTANT_ALPHA                                 = 0x0000000c,
+@@ -332,11 +332,11 @@ enum VkStencilOp {
+     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_INCREMENT_AND_CLAMP                       = 0x00000003,
++    VK_STENCIL_OP_DECREMENT_AND_CLAMP                       = 0x00000004,
+     VK_STENCIL_OP_INVERT                                    = 0x00000005,
+-    VK_STENCIL_OP_INC_WRAP                                  = 0x00000006,
+-    VK_STENCIL_OP_DEC_WRAP                                  = 0x00000007,
++    VK_STENCIL_OP_INCREMENT_AND_WRAP                        = 0x00000006,
++    VK_STENCIL_OP_DECREMENT_AND_WRAP                        = 0x00000007,
+ }
+ enum VkLogicOp {
+@@ -345,11 +345,11 @@ enum VkLogicOp {
+     VK_LOGIC_OP_AND_REVERSE                                 = 0x00000002,
+     VK_LOGIC_OP_COPY                                        = 0x00000003,
+     VK_LOGIC_OP_AND_INVERTED                                = 0x00000004,
+-    VK_LOGIC_OP_NOOP                                        = 0x00000005,
++    VK_LOGIC_OP_NO_OP                                       = 0x00000005,
+     VK_LOGIC_OP_XOR                                         = 0x00000006,
+     VK_LOGIC_OP_OR                                          = 0x00000007,
+     VK_LOGIC_OP_NOR                                         = 0x00000008,
+-    VK_LOGIC_OP_EQUIV                                       = 0x00000009,
++    VK_LOGIC_OP_EQUIVALENT                                  = 0x00000009,
+     VK_LOGIC_OP_INVERT                                      = 0x0000000a,
+     VK_LOGIC_OP_OR_REVERSE                                  = 0x0000000b,
+     VK_LOGIC_OP_COPY_INVERTED                               = 0x0000000c,
+@@ -358,16 +358,16 @@ enum VkLogicOp {
+     VK_LOGIC_OP_SET                                         = 0x0000000f,
+ }
+-enum VkSystemAllocScope {
+-    VK_SYSTEM_ALLOC_SCOPE_FUNCTION                          = 0x00000000,
+-    VK_SYSTEM_ALLOC_SCOPE_OBJECT                            = 0x00000001,
+-    VK_SYSTEM_ALLOC_SCOPE_CACHE                             = 0x00000002,
+-    VK_SYSTEM_ALLOC_SCOPE_DEVICE                            = 0x00000003,
+-    VK_SYSTEM_ALLOC_SCOPE_INSTANCE                          = 0x00000004,
++enum VkSystemAllocationScope {
++    VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION                     = 0x00000000,
++    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT                       = 0x00000001,
++    VK_SYSTEM_ALLOCATION_SCOPE_CACHE                        = 0x00000002,
++    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE                       = 0x00000003,
++    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE                     = 0x00000004,
+ }
+-enum VkInternalAllocType {
+-    VK_INTERNAL_ALLOC_TYPE_EXECUTABLE                       = 0x00000000,
++enum VkInternalAllocationType {
++    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE                  = 0x00000000,
+ }
+ enum VkPhysicalDeviceType {
+@@ -603,9 +603,9 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 37,
+     VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 38,
+     VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 39,
+-    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO                      = 40,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO                     = 41,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                     = 42,
++    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 40,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO                 = 41,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 42,
+     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 43,
+     VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 44,
+     VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 45,
+@@ -627,7 +627,7 @@ enum VkStructureType {
+ enum VkRenderPassContents {
+     VK_RENDER_PASS_CONTENTS_INLINE                          = 0x00000000,
+-    VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS           = 0x00000001,
++    VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS       = 0x00000001,
+ }
+ @lastUnused(-8)
+@@ -765,8 +765,8 @@ bitfield VkMemoryInputFlagBits {
+ /// Buffer usage flags
+ type VkFlags VkBufferUsageFlags
+ bitfield VkBufferUsageFlagBits {
+-    VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT                     = 0x00000001,    /// Can be used as a source of transfer operations
+-    VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT                = 0x00000002,    /// Can be used as a destination of transfer operations
++    VK_BUFFER_USAGE_TRANSFER_SRC_BIT                        = 0x00000001,    /// Can be used as a source of transfer operations
++    VK_BUFFER_USAGE_TRANSFER_DST_BIT                        = 0x00000002,    /// Can be used as a destination of transfer operations
+     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT                = 0x00000004,    /// Can be used as TBO
+     VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT                = 0x00000008,    /// Can be used as IBO
+     VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT                      = 0x00000010,    /// Can be used as UBO
+@@ -812,8 +812,8 @@ type VkFlags VkDescriptorPoolResetFlags
+ /// Image usage flags
+ type VkFlags VkImageUsageFlags
+ bitfield VkImageUsageFlagBits {
+-    VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT                      = 0x00000001,    /// Can be used as a source of transfer operations
+-    VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT                 = 0x00000002,    /// Can be used as a destination of transfer operations
++    VK_IMAGE_USAGE_TRANSFER_SRC_BIT                         = 0x00000001,    /// Can be used as a source of transfer operations
++    VK_IMAGE_USAGE_TRANSFER_DST_BIT                         = 0x00000002,    /// Can be used as a destination of transfer operations
+     VK_IMAGE_USAGE_SAMPLED_BIT                              = 0x00000004,    /// Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
+     VK_IMAGE_USAGE_STORAGE_BIT                              = 0x00000008,    /// Can be used as storage image (STORAGE_IMAGE descriptor type)
+     VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT                     = 0x00000010,    /// Can be used as framebuffer color attachment
+@@ -878,8 +878,8 @@ bitfield VkFormatFeatureFlagBits {
+     VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT                  = 0x00000080,    /// Format can be used for color attachment images
+     VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT            = 0x00000100,    /// Format supports blending in case it's used for color attachment images
+     VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT          = 0x00000200,    /// Format can be used for depth/stencil attachment images
+-    VK_FORMAT_FEATURE_BLIT_SOURCE_BIT                       = 0x00000400,    /// Format can be used as the source image of blits with vkCmdBlitImage
+-    VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT                  = 0x00000800,    /// Format can be used as the destination image of blits with vkCmdBlitImage
++    VK_FORMAT_FEATURE_BLIT_SRC_BIT                          = 0x00000400,    /// Format can be used as the source image of blits with vkCommandBlitImage
++    VK_FORMAT_FEATURE_BLIT_DST_BIT                          = 0x00000800,    /// Format can be used as the destination image of blits with vkCommandBlitImage
+ }
+ /// Query control flags
+@@ -914,11 +914,11 @@ type VkFlags VkEventCreateFlags
+ //}
+ /// Command buffer usage flags
+-type VkFlags VkCmdBufferUsageFlags
+-bitfield VkCmdBufferUsageFlagBits {
+-    VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT                 = 0x00000001,
+-    VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT            = 0x00000002,
+-    VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT                = 0x00000004,
++type VkFlags VkCommandBufferUsageFlags
++bitfield VkCommandBufferUsageFlagBits {
++    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT             = 0x00000001,
++    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT        = 0x00000002,
++    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT            = 0x00000004,
+ }
+ /// Pipeline statistics flags
+@@ -999,21 +999,21 @@ bitfield VkSubpassDescriptionFlagBits {
+ }
+ /// Command pool creation flags
+-type VkFlags VkCmdPoolCreateFlags
+-bitfield VkCmdPoolCreateFlagBits {
+-    VK_CMD_POOL_CREATE_TRANSIENT_BIT                        = 0x00000001,  /// Command buffers have a short lifetime
+-    VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT             = 0x00000002,  /// Command buffers may release their memory individually
++type VkFlags VkCommandPoolCreateFlags
++bitfield VkCommandPoolCreateFlagBits {
++    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT                    = 0x00000001,  /// Command buffers have a short lifetime
++    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT         = 0x00000002,  /// Command buffers may release their memory individually
+ }
+ /// Command pool reset flags
+-type VkFlags VkCmdPoolResetFlags
+-bitfield VkCmdPoolResetFlagBits {
+-    VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT                 = 0x00000001,  /// Release resources owned by the pool
++type VkFlags VkCommandPoolResetFlags
++bitfield VkCommandPoolResetFlagBits {
++    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT             = 0x00000001,  /// Release resources owned by the pool
+ }
+-type VkFlags VkCmdBufferResetFlags
+-bitfield VkCmdBufferResetFlagBits {
+-    VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT               = 0x00000001,  /// Release resources owned by the buffer
++type VkFlags VkCommandBufferResetFlags
++bitfield VkCommandBufferResetFlagBits {
++    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT           = 0x00000001,  /// Release resources owned by the buffer
+ }
+ type VkFlags VkSampleCountFlags
+@@ -1095,9 +1095,9 @@ type VkFlags VkPipelineViewportStateCreateFlags
+ //bitfield VkPipelineViewportStateCreateFlagBits {
+ //}
+-/// Raster state creation flags
+-type VkFlags VkPipelineRasterStateCreateFlags
+-//bitfield VkPipelineRasterStateCreateFlagBits {
++/// Rasterization state creation flags
++type VkFlags VkPipelineRasterizationStateCreateFlags
++//bitfield VkPipelineRasterizationStateCreateFlagBits {
+ //}
+ /// Multisample state creation flags
+@@ -1233,7 +1233,7 @@ class VkRect2D {
+ class VkClearRect {
+     VkRect2D                                    rect
+     u32                                         baseArrayLayer
+-    u32                                         numLayers
++    u32                                         layerCount
+ }
+ class VkChannelMapping {
+@@ -1256,15 +1256,15 @@ class VkPhysicalDeviceProperties {
+ }
+ class VkExtensionProperties {
+-    char[VK_MAX_EXTENSION_NAME]                 extName            /// extension name
++    char[VK_MAX_EXTENSION_NAME]                 extensionName      /// extension name
+     u32                                         specVersion        /// version of the extension specification implemented
+ }
+ class VkLayerProperties {
+-    char[VK_MAX_EXTENSION_NAME]                 layerName          /// layer name
+-    u32                                         specVersion        /// version of the layer specification implemented
+-    u32                                         implVersion        /// build or release version of the layer's library
+-    char[VK_MAX_DESCRIPTION]                    description        /// Free-form description of the layer
++    char[VK_MAX_EXTENSION_NAME]                 layerName               /// layer name
++    u32                                         specVersion             /// version of the layer specification implemented
++    u32                                         implementationVersion   /// build or release version of the layer's library
++    char[VK_MAX_DESCRIPTION]                    description             /// Free-form description of the layer
+ }
+ class VkSubmitInfo {
+@@ -1273,7 +1273,7 @@ class VkSubmitInfo {
+     u32                                         waitSemaphoreCount
+     const VkSemaphore*                          pWaitSemaphores
+     u32                                         commandBufferCount
+-    const VkCmdBuffer*                          pCommandBuffers
++    const VkCommandBuffer*                      pCommandBuffers
+     u32                                         signalSemaphoreCount
+     const VkSemaphore*                          pSignalSemaphores
+ }
+@@ -1281,19 +1281,19 @@ class VkSubmitInfo {
+ class VkApplicationInfo {
+     VkStructureType                             sType              /// Type of structure. Should be VK_STRUCTURE_TYPE_APPLICATION_INFO
+     const void*                                 pNext              /// Next structure in chain
+-    const char*                                 pAppName
+-    u32                                         appVersion
++    const char*                                 pApplicationName
++    u32                                         applicationVersion
+     const char*                                 pEngineName
+     u32                                         engineVersion
+     u32                                         apiVersion
+ }
+-class VkAllocCallbacks {
++class VkAllocationCallbacks {
+     void*                                       pUserData
+-    PFN_vkAllocFunction                         pfnAlloc
+-    PFN_vkReallocFunction                       pfnRealloc
++    PFN_vkAllocationFunction                    pfnAllocation
++    PFN_vkReallocationFunction                  pfnReallocation
+     PFN_vkFreeFunction                          pfnFree
+-    PFN_vkInternalAllocNotification             pfnInternalAlloc
++    PFN_vkInternalAllocationNotification        pfnInternalAllocation
+     PFN_vkInternalFreeNotification              pfnInternalFree
+ }
+@@ -1323,7 +1323,7 @@ class VkInstanceCreateInfo {
+     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
+     VkInstanceCreateFlags                       flags
+-    const VkApplicationInfo*                    pAppInfo
++    const VkApplicationInfo*                    pApplicationInfo
+     u32                                         enabledLayerNameCount
+     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
+     u32                                         enabledExtensionNameCount
+@@ -1343,7 +1343,7 @@ class VkPhysicalDeviceMemoryProperties {
+     VkMemoryHeap[VK_MAX_MEMORY_HEAPS]           memoryHeaps
+ }
+-class VkMemoryAllocInfo {
++class VkMemoryAllocateInfo {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
+     const void*                                 pNext                      /// Pointer to next structure
+     VkDeviceSize                                allocationSize             /// Size of memory allocation
+@@ -1383,7 +1383,7 @@ class VkMemoryHeap {
+ class VkMappedMemoryRange {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
+     const void*                                 pNext                      /// Pointer to next structure
+-    VkDeviceMemory                              mem                        /// Mapped memory object
++    VkDeviceMemory                              memory                     /// Mapped memory object
+     VkDeviceSize                                offset                     /// Offset within the mapped memory the range starts from
+     VkDeviceSize                                size                       /// Size of the range within the mapped memory
+ }
+@@ -1417,9 +1417,9 @@ class VkDescriptorBufferInfo {
+ class VkWriteDescriptorSet {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
+     const void*                                 pNext                      /// Pointer to next structure
+-    VkDescriptorSet                             destSet                    /// Destination descriptor set
+-    u32                                         destBinding                /// Binding within the destination descriptor set to write
+-    u32                                         destArrayElement           /// Array element within the destination binding to write
++    VkDescriptorSet                             dstSet                     /// Destination descriptor set
++    u32                                         dstBinding                 /// Binding within the destination descriptor set to write
++    u32                                         dstArrayElement            /// Array element within the destination binding to write
+     u32                                         descriptorCount            /// Number of descriptors to write (determines the size of the array pointed by <pDescriptors>)
+     VkDescriptorType                            descriptorType             /// Descriptor type to write (determines which fields of the array pointed by <pDescriptors> are going to be used)
+     const VkDescriptorImageInfo*                pImageInfo
+@@ -1433,9 +1433,9 @@ class VkCopyDescriptorSet {
+     VkDescriptorSet                             srcSet                     /// Source descriptor set
+     u32                                         srcBinding                 /// Binding within the source descriptor set to copy from
+     u32                                         srcArrayElement            /// Array element within the source binding to copy from
+-    VkDescriptorSet                             destSet                    /// Destination descriptor set
+-    u32                                         destBinding                /// Binding within the destination descriptor set to copy to
+-    u32                                         destArrayElement           /// Array element within the destination binding to copy to
++    VkDescriptorSet                             dstSet                     /// Destination descriptor set
++    u32                                         dstBinding                 /// Binding within the destination descriptor set to copy to
++    u32                                         dstArrayElement            /// Array element within the destination binding to copy to
+     u32                                         descriptorCount            /// Number of descriptors to copy
+ }
+@@ -1469,9 +1469,9 @@ class VkImageSubresource {
+ class VkImageSubresourceRange {
+     VkImageAspectFlags                          aspectMask
+     u32                                         baseMipLevel
+-    u32                                         numLevels
++    u32                                         levelCount
+     u32                                         baseArrayLayer
+-    u32                                         numLayers
++    u32                                         layerCount
+ }
+ class VkMemoryBarrier {
+@@ -1487,7 +1487,7 @@ class VkBufferMemoryBarrier {
+     VkMemoryOutputFlags                         outputMask                 /// Outputs the barrier should sync
+     VkMemoryInputFlags                          inputMask                  /// Inputs the barrier should sync to
+     u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
+-    u32                                         destQueueFamilyIndex       /// Queue family to transition ownership to
++    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
+     VkBuffer                                    buffer                     /// Buffer to sync
+     VkDeviceSize                                offset                     /// Offset within the buffer to sync
+     VkDeviceSize                                size                       /// Amount of bytes to sync
+@@ -1501,7 +1501,7 @@ class VkImageMemoryBarrier {
+     VkImageLayout                               oldLayout                  /// Current layout of the image
+     VkImageLayout                               newLayout                  /// New layout to transition the image to
+     u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
+-    u32                                         destQueueFamilyIndex       /// Queue family to transition ownership to
++    u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
+     VkImage                                     image                      /// Image to sync
+     VkImageSubresourceRange                     subresourceRange           /// Subresource range to sync
+ }
+@@ -1544,15 +1544,15 @@ class VkImageViewCreateInfo {
+ class VkBufferCopy {
+     VkDeviceSize                                srcOffset              /// Specified in bytes
+-    VkDeviceSize                                destOffset             /// Specified in bytes
++    VkDeviceSize                                dstOffset              /// Specified in bytes
+     VkDeviceSize                                size                   /// Specified in bytes
+ }
+ class VkSparseMemoryBind {
+     VkDeviceSize                                resourceOffset        /// Specified in bytes
+     VkDeviceSize                                size                  /// Specified in bytes
+-    VkDeviceMemory                              mem
+-    VkDeviceSize                                memOffset             /// Specified in bytes
++    VkDeviceMemory                              memory
++    VkDeviceSize                                memoryOffset          /// Specified in bytes
+     VkSparseMemoryBindFlags                     flags
+ }
+@@ -1560,8 +1560,8 @@ class VkSparseImageMemoryBind {
+     VkImageSubresource                          subresource
+     VkOffset3D                                  offset
+     VkExtent3D                                  extent
+-    VkDeviceMemory                              mem
+-    VkDeviceSize                                memOffset             /// Specified in bytes
++    VkDeviceMemory                              memory
++    VkDeviceSize                                memoryOffset          /// Specified in bytes
+     VkSparseMemoryBindFlags                     flags
+ }
+@@ -1602,14 +1602,14 @@ class VkImageSubresourceCopy {
+     VkImageAspectFlags                          aspect
+     u32                                         mipLevel
+     u32                                         baseArrayLayer
+-    u32                                         numLayers
++    u32                                         layerCount
+ }
+ class VkImageCopy {
+     VkImageSubresourceCopy                      srcSubresource
+     VkOffset3D                                  srcOffset             /// Specified in pixels for both compressed and uncompressed images
+-    VkImageSubresourceCopy                      destSubresource
+-    VkOffset3D                                  destOffset            /// Specified in pixels for both compressed and uncompressed images
++    VkImageSubresourceCopy                      dstSubresource
++    VkOffset3D                                  dstOffset             /// Specified in pixels for both compressed and uncompressed images
+     VkExtent3D                                  extent                /// Specified in pixels for both compressed and uncompressed images
+ }
+@@ -1617,9 +1617,9 @@ class VkImageBlit {
+     VkImageSubresourceCopy                      srcSubresource
+     VkOffset3D                                  srcOffset              /// Specified in pixels for both compressed and uncompressed images
+     VkExtent3D                                  srcExtent              /// Specified in pixels for both compressed and uncompressed images
+-    VkImageSubresourceCopy                      destSubresource
+-    VkOffset3D                                  destOffset             /// Specified in pixels for both compressed and uncompressed images
+-    VkExtent3D                                  destExtent             /// Specified in pixels for both compressed and uncompressed images
++    VkImageSubresourceCopy                      dstSubresource
++    VkOffset3D                                  dstOffset              /// Specified in pixels for both compressed and uncompressed images
++    VkExtent3D                                  dstExtent              /// Specified in pixels for both compressed and uncompressed images
+ }
+ class VkBufferImageCopy {
+@@ -1634,8 +1634,8 @@ class VkBufferImageCopy {
+ class VkImageResolve {
+     VkImageSubresourceCopy                      srcSubresource
+     VkOffset3D                                  srcOffset
+-    VkImageSubresourceCopy                      destSubresource
+-    VkOffset3D                                  destOffset
++    VkImageSubresourceCopy                      dstSubresource
++    VkOffset3D                                  dstOffset
+     VkExtent3D                                  extent
+ }
+@@ -1685,7 +1685,7 @@ class VkDescriptorPoolCreateInfo {
+     const VkDescriptorTypeCount*                pTypeCounts
+ }
+-class VkDescriptorSetAllocInfo {
++class VkDescriptorSetAllocateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
+     const void*                                 pNext              /// Pointer to next structure
+     VkDescriptorPool                            descriptorPool
+@@ -1772,10 +1772,10 @@ class VkPipelineViewportStateCreateInfo {
+     const VkRect2D*                             pScissors
+ }
+-class VkPipelineRasterStateCreateInfo {
++class VkPipelineRasterizationStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+-    VkPipelineRasterStateCreateFlags            flags
++    VkPipelineRasterizationStateCreateFlags     flags
+     VkBool32                                    depthClampEnable
+     VkBool32                                    rasterizerDiscardEnable
+     VkFillMode                                  fillMode                   /// optional (GL45)
+@@ -1792,7 +1792,7 @@ class VkPipelineMultisampleStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+     VkPipelineMultisampleStateCreateFlags       flags
+-    u32                                         rasterSamples              /// Number of samples used for rasterization
++    u32                                         rasterizationSamples       /// Number of samples used for rasterization
+     VkBool32                                    sampleShadingEnable        /// optional (GL45)
+     f32                                         minSampleShading           /// optional (GL45)
+     const VkSampleMask*                         pSampleMask
+@@ -1803,10 +1803,10 @@ class VkPipelineMultisampleStateCreateInfo {
+ class VkPipelineColorBlendAttachmentState {
+     VkBool32                                    blendEnable
+     VkBlend                                     srcBlendColor
+-    VkBlend                                     destBlendColor
++    VkBlend                                     dstBlendColor
+     VkBlendOp                                   blendOpColor
+     VkBlend                                     srcBlendAlpha
+-    VkBlend                                     destBlendAlpha
++    VkBlend                                     dstBlendAlpha
+     VkBlendOp                                   blendOpAlpha
+     VkChannelFlags                              channelWriteMask
+ }
+@@ -1865,7 +1865,7 @@ class VkGraphicsPipelineCreateInfo {
+     const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState
+     const VkPipelineTessellationStateCreateInfo*    pTessellationState
+     const VkPipelineViewportStateCreateInfo*        pViewportState
+-    const VkPipelineRasterStateCreateInfo*          pRasterState
++    const VkPipelineRasterizationStateCreateInfo*   pRasterizationState
+     const VkPipelineMultisampleStateCreateInfo*     pMultisampleState
+     const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
+     const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
+@@ -1883,7 +1883,6 @@ class VkPipelineCacheCreateInfo {
+     VkPipelineCacheCreateFlags                  flags
+     platform.size_t                             initialDataSize       /// Size of initial data to populate cache, in bytes
+     const void*                                 pInitialData          /// Initial data to populate cache
+-    platform.size_t                             maxSize               /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
+ }
+ class VkPushConstantRange {
+@@ -1922,25 +1921,25 @@ class VkSamplerCreateInfo {
+     VkBool32                                    unnormalizedCoordinates
+ }
+-class VkCmdPoolCreateInfo {
+-    VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO
++class VkCommandPoolCreateInfo {
++    VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
+     const void*                                 pNext            /// Pointer to next structure
+-    VkCmdPoolCreateFlags                        flags            /// Command pool creation flags
++    VkCommandPoolCreateFlags                    flags            /// Command pool creation flags
+     u32                                         queueFamilyIndex
+ }
+-class VkCmdBufferAllocInfo {
+-    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO
++class VkCommandBufferAllocateInfo {
++    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO
+     const void*                                 pNext      /// Pointer to next structure
+-    VkCmdPool                                   cmdPool
+-    VkCmdBufferLevel                            level
++    VkCommandPool                               commandPool
++    VkCommandBufferLevel                        level
+     u32                                         bufferCount
+ }
+-class VkCmdBufferBeginInfo {
+-    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
++class VkCommandBufferBeginInfo {
++    VkStructureType                             sType       /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
+     const void*                                 pNext       /// Pointer to next structure
+-    VkCmdBufferUsageFlags                       flags       /// Command buffer usage flags
++    VkCommandBufferUsageFlags                   flags       /// Command buffer usage flags
+     VkRenderPass                                renderPass  /// Render pass for secondary command buffers
+     u32                                         subpass
+     VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
+@@ -2014,9 +2013,9 @@ class VkSubpassDescription {
+ class VkSubpassDependency {
+     u32                                         srcSubpass
+-    u32                                         destSubpass
++    u32                                         dstSubpass
+     VkPipelineStageFlags                        srcStageMask
+-    VkPipelineStageFlags                        destStageMask
++    VkPipelineStageFlags                        dstStageMask
+     VkMemoryOutputFlags                         outputMask
+     VkMemoryInputFlags                          inputMask
+     VkDependencyFlags                           dependencyFlags
+@@ -2054,7 +2053,7 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    geometryShader                            /// geometry stage
+     VkBool32                                    tessellationShader                        /// tessellation control and evaluation stage
+     VkBool32                                    sampleRateShading                         /// per-sample shading and interpolation
+-    VkBool32                                    dualSourceBlend                           /// blend operations which take two sources
++    VkBool32                                    dualSrcBlend                              /// blend operations which take two sources
+     VkBool32                                    logicOp                                   /// logic operations
+     VkBool32                                    multiDrawIndirect                         /// multi draw indirect
+     VkBool32                                    depthClamp                                /// depth clamping
+@@ -2136,7 +2135,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxVertexInputBindingStride               /// max vertex input binding stride
+     u32                                         maxVertexOutputComponents                 /// max num of output components written by vertex shader
+     /// tessellation control stage limits
+-    u32                                         maxTessellationGenLevel                         /// max level supported by tess primitive generator
++    u32                                         maxTessellationGenerationLevel                  /// max level supported by tess primitive generator
+     u32                                         maxTessellationPatchSize                        /// max patch size (vertices)
+     u32                                         maxTessellationControlPerVertexInputComponents  /// max num of input components per-vertex in TCS
+     u32                                         maxTessellationControlPerVertexOutputComponents /// max num of output components per-vertex in TCS
+@@ -2153,7 +2152,7 @@ class VkPhysicalDeviceLimits {
+     /// fragment stage limits
+     u32                                         maxFragmentInputComponents                /// max num of input compontents read in fragment stage
+     u32                                         maxFragmentOutputAttachments              /// max num of output attachments written in fragment stage
+-    u32                                         maxFragmentDualSourceAttachments          /// max num of output attachments written when using dual source blending
++    u32                                         maxFragmentDualSrcAttachments             /// max num of output attachments written when using dual source blending
+     u32                                         maxFragmentCombinedOutputResources        /// max total num of storage buffers, storage images and output buffers
+     /// compute stage limits
+     u32                                         maxComputeSharedMemorySize                /// max total storage size of work group local storage (bytes)
+@@ -2258,14 +2257,14 @@ class VkFramebufferCreateInfo {
+     u32                                         layers
+ }
+-class VkDrawIndirectCmd {
++class VkDrawIndirectCommand {
+     u32                                         vertexCount
+     u32                                         instanceCount
+     u32                                         firstVertex
+     u32                                         firstInstance
+ }
+-class VkDrawIndexedIndirectCmd {
++class VkDrawIndexedIndirectCommand {
+     u32                                         indexCount
+     u32                                         instanceCount
+     u32                                         firstIndex
+@@ -2273,7 +2272,7 @@ class VkDrawIndexedIndirectCmd {
+     u32                                         firstInstance
+ }
+-class VkDispatchIndirectCmd {
++class VkDispatchIndirectCommand {
+     u32                                         x
+     u32                                         y
+     u32                                         z
+@@ -2420,45 +2419,45 @@ class VkDisplayPresentInfoKHR {
+ @pfn cmd void vkVoidFunction() {
+ }
+-@external type void* PFN_vkAllocFunction
+-@pfn cmd void* vkAllocFunction(
++@external type void* PFN_vkAllocationFunction
++@pfn cmd void* vkAllocationFunction(
+         void*                                       pUserData,
+         platform.size_t                             size,
+         platform.size_t                             alignment,
+-        VkSystemAllocScope                          allocScope) {
++        VkSystemAllocationScope                     allocationScope) {
+     return ?
+ }
+-@external type void* PFN_vkReallocFunction
+-@pfn cmd void* vkReallocFunction(
++@external type void* PFN_vkReallocationFunction
++@pfn cmd void* vkReallocationFunction(
+         void*                                       pUserData,
+         void*                                       pOriginal,
+         platform.size_t                             size,
+         platform.size_t                             alignment,
+-        VkSystemAllocScope                          allocScope) {
++        VkSystemAllocationScope                     allocationScope) {
+     return ?
+ }
+ @external type void* PFN_vkFreeFunction
+ @pfn cmd void vkFreeFunction(
+         void*                                       pUserData,
+-        void*                                       pMem) {
++        void*                                       pMemory) {
+ }
+-@external type void* PFN_vkInternalAllocNotification
+-@pfn cmd void vkInternalAllocNotification(
++@external type void* PFN_vkInternalAllocationNotification
++@pfn cmd void vkInternalAllocationNotification(
+         void*                                       pUserData,
+         platform.size_t                             size,
+-        VkInternalAllocType                         allocType,
+-        VkSystemAllocScope                          allocScope) {
++        VkInternalAllocationType                    allocationType,
++        VkSystemAllocationScope                     allocationScope) {
+ }
+ @external type void* PFN_vkInternalFreeNotification
+ @pfn cmd void vkInternalFreeNotification(
+         void*                                       pUserData,
+         platform.size_t                             size,
+-        VkInternalAllocType                         allocType,
+-        VkSystemAllocScope                          allocScope) {
++        VkInternalAllocationType                    allocationType,
++        VkSystemAllocationScope                     allocationScope) {
+ }
+ // Global functions
+@@ -2466,7 +2465,7 @@ class VkDisplayPresentInfoKHR {
+ @threadSafety("system")
+ cmd VkResult vkCreateInstance(
+         const VkInstanceCreateInfo*                 pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkInstance*                                 pInstance) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
+@@ -2483,7 +2482,7 @@ cmd VkResult vkCreateInstance(
+ @threadSafety("system")
+ cmd void vkDestroyInstance(
+         VkInstance                                  instance,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     instanceObject := GetInstance(instance)
+     State.Instances[instance] = null
+@@ -2610,7 +2609,7 @@ cmd void vkGetPhysicalDeviceImageFormatProperties(
+ cmd VkResult vkCreateDevice(
+         VkPhysicalDevice                            physicalDevice,
+         const VkDeviceCreateInfo*                   pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkDevice*                                   pDevice) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+@@ -2625,7 +2624,7 @@ cmd VkResult vkCreateDevice(
+ @threadSafety("system")
+ cmd void vkDestroyDevice(
+         VkDevice                                    device,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     State.Devices[device] = null
+@@ -2733,14 +2732,14 @@ cmd VkResult vkQueueSubmit(
+         assert(fenceObject.device == queueObject.device)
+     }
+-    // cmdBuffers := pCmdBuffers[0:cmdBufferCount]
+-    // for i in (0 .. cmdBufferCount) {
+-    //    cmdBuffer := cmdBuffers[i]
+-    //    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    //    assert(cmdBufferObject.device == queueObject.device)
++    // commandBuffers := pcommandBuffers[0:commandBufferCount]
++    // for i in (0 .. commandBufferCount) {
++    //    commandBuffer := commandBuffers[i]
++    //    commandBufferObject := GetCommandBuffer(commandBuffer)
++    //    assert(commandBufferObject.device == queueObject.device)
+     //
+-    //    validate("QueueCheck", cmdBufferObject.queueFlags in queueObject.flags,
+-    //        "vkQueueSubmit: enqueued cmdBuffer requires missing queue capabilities.")
++    //    validate("QueueCheck", commandBufferObject.queueFlags in queueObject.flags,
++    //        "vkQueueSubmit: enqueued commandBuffer requires missing queue capabilities.")
+     // }
+     return ?
+@@ -2766,19 +2765,19 @@ cmd VkResult vkDeviceWaitIdle(
+ // Memory functions
+ @threadSafety("system")
+-cmd VkResult vkAllocMemory(
++cmd VkResult vkAllocateMemory(
+         VkDevice                                    device,
+-        const VkMemoryAllocInfo*                    pAllocInfo,
+-        const VkAllocCallbacks*                     pAllocator,
+-        VkDeviceMemory*                             pMem) {
+-    assert(pAllocInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
++        const VkMemoryAllocateInfo*                 pAllocateInfo,
++        const VkAllocationCallbacks*                pAllocator,
++        VkDeviceMemory*                             pMemory) {
++    assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
+     deviceObject := GetDevice(device)
+-    mem := ?
+-    pMem[0] = mem
+-    State.DeviceMemories[mem] = new!DeviceMemoryObject(
++    memory := ?
++    pMemory[0] = memory
++    State.DeviceMemories[memory] = new!DeviceMemoryObject(
+         device: device,
+-        allocationSize: pAllocInfo[0].allocationSize)
++        allocationSize: pAllocateInfo[0].allocationSize)
+     return ?
+ }
+@@ -2786,34 +2785,34 @@ cmd VkResult vkAllocMemory(
+ @threadSafety("system")
+ cmd void vkFreeMemory(
+         VkDevice                                    device,
+-        VkDeviceMemory                              mem,
+-        const VkAllocCallbacks*                     pAllocator) {
++        VkDeviceMemory                              memory,
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+-    memObject := GetDeviceMemory(mem)
+-    assert(memObject.device == device)
++    memoryObject := GetDeviceMemory(memory)
++    assert(memoryObject.device == device)
+     // Check that no objects are still bound before freeing.
+-    validate("MemoryCheck", len(memObject.boundObjects) == 0,
++    validate("MemoryCheck", len(memoryObject.boundObjects) == 0,
+         "vkFreeMemory: objects still bound")
+-    validate("MemoryCheck", len(memObject.boundCommandBuffers) == 0,
+-        "vkFreeMemory: cmdBuffers still bound")
+-    State.DeviceMemories[mem] = null
++    validate("MemoryCheck", len(memoryObject.boundCommandBuffers) == 0,
++        "vkFreeMemory: commandBuffers still bound")
++    State.DeviceMemories[memory] = null
+ }
+ @threadSafety("app")
+ cmd VkResult vkMapMemory(
+         VkDevice                                    device,
+-        VkDeviceMemory                              mem,
++        VkDeviceMemory                              memory,
+         VkDeviceSize                                offset,
+         VkDeviceSize                                size,
+         VkMemoryMapFlags                            flags,
+         void**                                      ppData) {
+     deviceObject := GetDevice(device)
+-    memObject := GetDeviceMemory(mem)
+-    assert(memObject.device == device)
++    memoryObject := GetDeviceMemory(memory)
++    assert(memoryObject.device == device)
+     assert(flags == as!VkMemoryMapFlags(0))
+-    assert((offset + size) <= memObject.allocationSize)
++    assert((offset + size) <= memoryObject.allocationSize)
+     return ?
+ }
+@@ -2821,24 +2820,24 @@ cmd VkResult vkMapMemory(
+ @threadSafety("app")
+ cmd void vkUnmapMemory(
+         VkDevice                                    device,
+-        VkDeviceMemory                              mem) {
++        VkDeviceMemory                              memory) {
+     deviceObject := GetDevice(device)
+-    memObject := GetDeviceMemory(mem)
+-    assert(memObject.device == device)
++    memoryObject := GetDeviceMemory(memory)
++    assert(memoryObject.device == device)
+ }
+ cmd VkResult vkFlushMappedMemoryRanges(
+         VkDevice                                    device,
+-        u32                                         memRangeCount
+-        const VkMappedMemoryRange*                  pMemRanges) {
++        u32                                         memoryRangeCount
++        const VkMappedMemoryRange*                  pMemoryRanges) {
+     deviceObject := GetDevice(device)
+-    memRanges := pMemRanges[0:memRangeCount]
+-    for i in (0 .. memRangeCount) {
+-        memRange := memRanges[i]
+-        memObject := GetDeviceMemory(memRange.mem)
+-        assert(memObject.device == device)
+-        assert((memRange.offset + memRange.size) <= memObject.allocationSize)
++    memoryRanges := pMemoryRanges[0:memoryRangeCount]
++    for i in (0 .. memoryRangeCount) {
++        memoryRange := memoryRanges[i]
++        memoryObject := GetDeviceMemory(memoryRange.memory)
++        assert(memoryObject.device == device)
++        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
+     }
+     return ?
+@@ -2846,16 +2845,16 @@ cmd VkResult vkFlushMappedMemoryRanges(
+ cmd VkResult vkInvalidateMappedMemoryRanges(
+         VkDevice                                    device,
+-        u32                                         memRangeCount,
+-        const VkMappedMemoryRange*                  pMemRanges) {
++        u32                                         memoryRangeCount,
++        const VkMappedMemoryRange*                  pMemoryRanges) {
+     deviceObject := GetDevice(device)
+-    memRanges := pMemRanges[0:memRangeCount]
+-    for i in (0 .. memRangeCount) {
+-        memRange := memRanges[i]
+-        memObject := GetDeviceMemory(memRange.mem)
+-        assert(memObject.device == device)
+-        assert((memRange.offset + memRange.size) <= memObject.allocationSize)
++    memoryRanges := pMemoryRanges[0:memoryRangeCount]
++    for i in (0 .. memoryRangeCount) {
++        memoryRange := memoryRanges[i]
++        memoryObject := GetDeviceMemory(memoryRange.memory)
++        assert(memoryObject.device == device)
++        assert((memoryRange.offset + memoryRange.size) <= memoryObject.allocationSize)
+     }
+     return ?
+@@ -2891,26 +2890,26 @@ cmd void vkGetBufferMemoryRequirements(
+ cmd VkResult vkBindBufferMemory(
+         VkDevice                                    device,
+         VkBuffer                                    buffer,
+-        VkDeviceMemory                              mem,
+-        VkDeviceSize                                memOffset) {
++        VkDeviceMemory                              memory,
++        VkDeviceSize                                memoryOffset) {
+     deviceObject := GetDevice(device)
+     bufferObject := GetBuffer(buffer)
+     assert(bufferObject.device == device)
+     // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
+-    if bufferObject.mem != NULL_HANDLE {
+-        memObject := GetDeviceMemory(bufferObject.mem)
+-        memObject.boundObjects[as!u64(buffer)] = null
++    if bufferObject.memory != NULL_HANDLE {
++        memoryObject := GetDeviceMemory(bufferObject.memory)
++        memoryObject.boundObjects[as!u64(buffer)] = null
+     }
+     // Bind buffer to given memory object, if not VK_NULL_HANDLE.
+-    if mem != NULL_HANDLE {
+-        memObject := GetDeviceMemory(mem)
+-        assert(memObject.device == device)
+-        memObject.boundObjects[as!u64(buffer)] = memOffset
++    if memory != NULL_HANDLE {
++        memoryObject := GetDeviceMemory(memory)
++        assert(memoryObject.device == device)
++        memoryObject.boundObjects[as!u64(buffer)] = memoryOffset
+     }
+-    bufferObject.mem = mem
+-    bufferObject.memOffset = memOffset
++    bufferObject.memory = memory
++    bufferObject.memoryOffset = memoryOffset
+     return ?
+ }
+@@ -2927,26 +2926,26 @@ cmd void vkGetImageMemoryRequirements(
+ cmd VkResult vkBindImageMemory(
+         VkDevice                                    device,
+         VkImage                                     image,
+-        VkDeviceMemory                              mem,
+-        VkDeviceSize                                memOffset) {
++        VkDeviceMemory                              memory,
++        VkDeviceSize                                memoryOffset) {
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+     assert(imageObject.device == device)
+     // Unbind image from previous memory object, if not VK_NULL_HANDLE.
+-    if imageObject.mem != NULL_HANDLE {
+-        memObject := GetDeviceMemory(imageObject.mem)
+-        memObject.boundObjects[as!u64(image)] = null
++    if imageObject.memory != NULL_HANDLE {
++        memoryObject := GetDeviceMemory(imageObject.memory)
++        memoryObject.boundObjects[as!u64(image)] = null
+     }
+     // Bind image to given memory object, if not VK_NULL_HANDLE.
+-    if mem != NULL_HANDLE {
+-        memObject := GetDeviceMemory(mem)
+-        assert(memObject.device == device)
+-        memObject.boundObjects[as!u64(image)] = memOffset
++    if memory != NULL_HANDLE {
++        memoryObject := GetDeviceMemory(memory)
++        assert(memoryObject.device == device)
++        memoryObject.boundObjects[as!u64(image)] = memoryOffset
+     }
+-    imageObject.mem = mem
+-    imageObject.memOffset = memOffset
++    imageObject.memory = memory
++    imageObject.memoryOffset = memoryOffset
+     return ?
+ }
+@@ -2990,7 +2989,7 @@ cmd VkResult vkQueueBindSparse(
+ cmd VkResult vkCreateFence(
+         VkDevice                                    device,
+         const VkFenceCreateInfo*                    pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkFence*                                    pFence) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3007,7 +3006,7 @@ cmd VkResult vkCreateFence(
+ cmd void vkDestroyFence(
+         VkDevice                                    device,
+         VkFence                                     fence,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     fenceObject := GetFence(fence)
+     assert(fenceObject.device == device)
+@@ -3070,7 +3069,7 @@ cmd VkResult vkWaitForFences(
+ cmd VkResult vkCreateSemaphore(
+         VkDevice                                    device,
+         const VkSemaphoreCreateInfo*                pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkSemaphore*                                pSemaphore) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3086,7 +3085,7 @@ cmd VkResult vkCreateSemaphore(
+ cmd void vkDestroySemaphore(
+         VkDevice                                    device,
+         VkSemaphore                                 semaphore,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     semaphoreObject := GetSemaphore(semaphore)
+     assert(semaphoreObject.device == device)
+@@ -3101,7 +3100,7 @@ cmd void vkDestroySemaphore(
+ cmd VkResult vkCreateEvent(
+         VkDevice                                    device,
+         const VkEventCreateInfo*                    pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkEvent*                                    pEvent) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3117,7 +3116,7 @@ cmd VkResult vkCreateEvent(
+ cmd void vkDestroyEvent(
+         VkDevice                                    device,
+         VkEvent                                     event,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     eventObject := GetEvent(event)
+     assert(eventObject.device == device)
+@@ -3165,7 +3164,7 @@ cmd VkResult vkResetEvent(
+ cmd VkResult vkCreateQueryPool(
+         VkDevice                                    device,
+         const VkQueryPoolCreateInfo*                pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkQueryPool*                                pQueryPool) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3181,7 +3180,7 @@ cmd VkResult vkCreateQueryPool(
+ cmd void vkDestroyQueryPool(
+         VkDevice                                    device,
+         VkQueryPool                                 queryPool,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     queryPoolObject := GetQueryPool(queryPool)
+     assert(queryPoolObject.device == device)
+@@ -3214,7 +3213,7 @@ cmd VkResult vkGetQueryPoolResults(
+ cmd VkResult vkCreateBuffer(
+         VkDevice                                    device,
+         const VkBufferCreateInfo*                   pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkBuffer*                                   pBuffer) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3230,12 +3229,12 @@ cmd VkResult vkCreateBuffer(
+ cmd void vkDestroyBuffer(
+         VkDevice                                    device,
+         VkBuffer                                    buffer,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     bufferObject := GetBuffer(buffer)
+     assert(bufferObject.device == device)
+-    assert(bufferObject.mem == 0)
++    assert(bufferObject.memory == 0)
+     State.Buffers[buffer] = null
+ }
+@@ -3246,7 +3245,7 @@ cmd void vkDestroyBuffer(
+ cmd VkResult vkCreateBufferView(
+         VkDevice                                    device,
+         const VkBufferViewCreateInfo*               pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkBufferView*                               pView) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3265,7 +3264,7 @@ cmd VkResult vkCreateBufferView(
+ cmd void vkDestroyBufferView(
+         VkDevice                                    device,
+         VkBufferView                                bufferView,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     bufferViewObject := GetBufferView(bufferView)
+     assert(bufferViewObject.device == device)
+@@ -3280,7 +3279,7 @@ cmd void vkDestroyBufferView(
+ cmd VkResult vkCreateImage(
+         VkDevice                                    device,
+         const VkImageCreateInfo*                    pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkImage*                                    pImage) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3296,12 +3295,12 @@ cmd VkResult vkCreateImage(
+ cmd void vkDestroyImage(
+         VkDevice                                    device,
+         VkImage                                     image,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     imageObject := GetImage(image)
+     assert(imageObject.device == device)
+-    assert(imageObject.mem == 0)
++    assert(imageObject.memory == 0)
+     State.Images[image] = null
+ }
+@@ -3322,7 +3321,7 @@ cmd void vkGetImageSubresourceLayout(
+ cmd VkResult vkCreateImageView(
+         VkDevice                                    device,
+         const VkImageViewCreateInfo*                pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkImageView*                                pView) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3341,7 +3340,7 @@ cmd VkResult vkCreateImageView(
+ cmd void vkDestroyImageView(
+         VkDevice                                    device,
+         VkImageView                                 imageView,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     imageViewObject := GetImageView(imageView)
+     assert(imageViewObject.device == device)
+@@ -3355,7 +3354,7 @@ cmd void vkDestroyImageView(
+ cmd VkResult vkCreateShaderModule(
+         VkDevice                                    device,
+         const VkShaderModuleCreateInfo*             pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkShaderModule*                             pShaderModule) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3370,7 +3369,7 @@ cmd VkResult vkCreateShaderModule(
+ cmd void vkDestroyShaderModule(
+         VkDevice                                    device,
+         VkShaderModule                              shaderModule,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     shaderModuleObject := GetShaderModule(shaderModule)
+     assert(shaderModuleObject.device == device)
+@@ -3382,7 +3381,7 @@ cmd void vkDestroyShaderModule(
+ cmd VkResult vkCreateShader(
+         VkDevice                                    device,
+         const VkShaderCreateInfo*                   pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkShader*                                   pShader) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3398,7 +3397,7 @@ cmd VkResult vkCreateShader(
+ cmd void vkDestroyShader(
+         VkDevice                                    device,
+         VkShader                                    shader,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     shaderObject := GetShader(shader)
+     assert(shaderObject.device == device)
+@@ -3412,7 +3411,7 @@ cmd void vkDestroyShader(
+ cmd VkResult vkCreatePipelineCache(
+         VkDevice                                    device,
+         const VkPipelineCacheCreateInfo*            pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkPipelineCache*                            pPipelineCache) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3427,7 +3426,7 @@ cmd VkResult vkCreatePipelineCache(
+ cmd void vkDestroyPipelineCache(
+         VkDevice                                    device,
+         VkPipelineCache                             pipelineCache,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     pipelineCacheObject := GetPipelineCache(pipelineCache)
+     assert(pipelineCacheObject.device == device)
+@@ -3449,12 +3448,12 @@ cmd VkResult vkGetPipelineCacheData(
+ cmd VkResult vkMergePipelineCaches(
+         VkDevice                                    device,
+-        VkPipelineCache                             destCache,
++        VkPipelineCache                             dstCache,
+         u32                                         srcCacheCount,
+         const VkPipelineCache*                      pSrcCaches) {
+     deviceObject := GetDevice(device)
+-    destCacheObject := GetPipelineCache(destCache)
+-    assert(destCacheObject.device == device)
++    dstCacheObject := GetPipelineCache(dstCache)
++    assert(dstCacheObject.device == device)
+     srcCaches := pSrcCaches[0:srcCacheCount]
+     for i in (0 .. srcCacheCount) {
+@@ -3471,7 +3470,7 @@ cmd VkResult vkCreateGraphicsPipelines(
+         VkPipelineCache                             pipelineCache,
+         u32                                         createInfoCount,
+         const VkGraphicsPipelineCreateInfo*         pCreateInfos,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkPipeline*                                 pPipelines) {
+     deviceObject := GetDevice(device)
+     if pipelineCache != NULL_HANDLE {
+@@ -3495,7 +3494,7 @@ cmd VkResult vkCreateComputePipelines(
+         VkPipelineCache                             pipelineCache,
+         u32                                         createInfoCount,
+         const VkComputePipelineCreateInfo*          pCreateInfos,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkPipeline*                                 pPipelines) {
+     deviceObject := GetDevice(device)
+     if pipelineCache != NULL_HANDLE {
+@@ -3518,7 +3517,7 @@ cmd VkResult vkCreateComputePipelines(
+ cmd void vkDestroyPipeline(
+         VkDevice                                    device,
+         VkPipeline                                  pipeline,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     pipelineObjects := GetPipeline(pipeline)
+     assert(pipelineObjects.device == device)
+@@ -3533,7 +3532,7 @@ cmd void vkDestroyPipeline(
+ cmd VkResult vkCreatePipelineLayout(
+         VkDevice                                    device,
+         const VkPipelineLayoutCreateInfo*           pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkPipelineLayout*                           pPipelineLayout) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3549,7 +3548,7 @@ cmd VkResult vkCreatePipelineLayout(
+ cmd void vkDestroyPipelineLayout(
+         VkDevice                                    device,
+         VkPipelineLayout                            pipelineLayout,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     pipelineLayoutObjects := GetPipelineLayout(pipelineLayout)
+     assert(pipelineLayoutObjects.device == device)
+@@ -3564,7 +3563,7 @@ cmd void vkDestroyPipelineLayout(
+ cmd VkResult vkCreateSampler(
+         VkDevice                                    device,
+         const VkSamplerCreateInfo*                  pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkSampler*                                  pSampler) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3580,7 +3579,7 @@ cmd VkResult vkCreateSampler(
+ cmd void vkDestroySampler(
+         VkDevice                                    device,
+         VkSampler                                   sampler,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     samplerObject := GetSampler(sampler)
+     assert(samplerObject.device == device)
+@@ -3595,7 +3594,7 @@ cmd void vkDestroySampler(
+ cmd VkResult vkCreateDescriptorSetLayout(
+         VkDevice                                    device,
+         const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkDescriptorSetLayout*                      pSetLayout) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3611,7 +3610,7 @@ cmd VkResult vkCreateDescriptorSetLayout(
+ cmd void vkDestroyDescriptorSetLayout(
+         VkDevice                                    device,
+         VkDescriptorSetLayout                       descriptorSetLayout,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     descriptorSetLayoutObject := GetDescriptorSetLayout(descriptorSetLayout)
+     assert(descriptorSetLayoutObject.device == device)
+@@ -3623,7 +3622,7 @@ cmd void vkDestroyDescriptorSetLayout(
+ cmd VkResult vkCreateDescriptorPool(
+         VkDevice                                    device,
+         const VkDescriptorPoolCreateInfo*           pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkDescriptorPool*                           pDescriptorPool) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3639,7 +3638,7 @@ cmd VkResult vkCreateDescriptorPool(
+ cmd void vkDestroyDescriptorPool(
+         VkDevice                                    device,
+         VkDescriptorPool                            descriptorPool,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     descriptorPoolObject := GetDescriptorPool(descriptorPool)
+     assert(descriptorPoolObject.device == device)
+@@ -3660,12 +3659,12 @@ cmd VkResult vkResetDescriptorPool(
+ }
+ @threadSafety("app")
+-cmd VkResult vkAllocDescriptorSets(
++cmd VkResult vkAllocateDescriptorSets(
+         VkDevice                                    device,
+-        const VkDescriptorSetAllocInfo*             pAllocInfo,
++        const VkDescriptorSetAllocateInfo*          pAllocateInfo,
+         VkDescriptorSet*                            pDescriptorSets) {
+     deviceObject := GetDevice(device)
+-    allocInfo := pAllocInfo[0]
++    allocInfo := pAllocateInfo[0]
+     descriptorPoolObject := GetDescriptorPool(allocInfo.descriptorPool)
+     setLayouts := allocInfo.pSetLayouts[0:allocInfo.setCount]
+@@ -3715,14 +3714,14 @@ cmd void vkUpdateDescriptorSets(
+     descriptorWrites := pDescriptorWrites[0:descriptorWriteCount]
+     for i in (0 .. descriptorWriteCount) {
+         descriptorWrite := descriptorWrites[i]
+-        descriptorWriteObject := GetDescriptorSet(descriptorWrite.destSet)
++        descriptorWriteObject := GetDescriptorSet(descriptorWrite.dstSet)
+         assert(descriptorWriteObject.device == device)
+     }
+     descriptorCopies := pDescriptorCopies[0:descriptorCopyCount]
+     for i in (0 .. descriptorCopyCount) {
+         descriptorCopy := descriptorCopies[i]
+-        descriptorCopyObject := GetDescriptorSet(descriptorCopy.destSet)
++        descriptorCopyObject := GetDescriptorSet(descriptorCopy.dstSet)
+         assert(descriptorCopyObject.device == device)
+     }
+ }
+@@ -3734,7 +3733,7 @@ cmd void vkUpdateDescriptorSets(
+ cmd VkResult vkCreateFramebuffer(
+         VkDevice                                    device,
+         const VkFramebufferCreateInfo*              pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkFramebuffer*                              pFramebuffer) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3750,7 +3749,7 @@ cmd VkResult vkCreateFramebuffer(
+ cmd void vkDestroyFramebuffer(
+         VkDevice                                    device,
+         VkFramebuffer                               framebuffer,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     framebufferObject := GetFramebuffer(framebuffer)
+     assert(framebufferObject.device == device)
+@@ -3765,7 +3764,7 @@ cmd void vkDestroyFramebuffer(
+ cmd VkResult vkCreateRenderPass(
+         VkDevice                                    device,
+         const VkRenderPassCreateInfo*               pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
++        const VkAllocationCallbacks*                pAllocator,
+         VkRenderPass*                               pRenderPass) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
+     deviceObject := GetDevice(device)
+@@ -3781,7 +3780,7 @@ cmd VkResult vkCreateRenderPass(
+ cmd void vkDestroyRenderPass(
+         VkDevice                                    device,
+         VkRenderPass                                renderPass,
+-        const VkAllocCallbacks*                     pAllocator) {
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+     renderPassObject := GetRenderPass(renderPass)
+     assert(renderPassObject.device == device)
+@@ -3804,72 +3803,72 @@ cmd void vkGetRenderAreaGranularity(
+ cmd VkResult vkCreateCommandPool(
+         VkDevice                                    device,
+-        const VkCmdPoolCreateInfo*                  pCreateInfo,
+-        const VkAllocCallbacks*                     pAllocator,
+-        VkCmdPool*                                  pCmdPool) {
+-    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
++        const VkCommandPoolCreateInfo*              pCreateInfo,
++        const VkAllocationCallbacks*                pAllocator,
++        VkCommandPool*                              pCommandPool) {
++    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
+     deviceObject := GetDevice(device)
+-    cmdPool := ?
+-    pCmdPool[0] = cmdPool
+-    State.CmdPools[cmdPool] = new!CmdPoolObject(device: device)
++    commandPool := ?
++    pCommandPool[0] = commandPool
++    State.CommandPools[commandPool] = new!CommandPoolObject(device: device)
+     return ?
+ }
+ cmd void vkDestroyCommandPool(
+         VkDevice                                    device,
+-        VkCmdPool                                   cmdPool,
+-        const VkAllocCallbacks*                     pAllocator) {
++        VkCommandPool                               commandPool,
++        const VkAllocationCallbacks*                pAllocator) {
+     deviceObject := GetDevice(device)
+-    cmdPoolObject := GetCmdPool(cmdPool)
+-    assert(cmdPoolObject.device == device)
++    commandPoolObject := GetCommandPool(commandPool)
++    assert(commandPoolObject.device == device)
+-    State.CmdPools[cmdPool] = null
++    State.CommandPools[commandPool] = null
+ }
+ cmd VkResult vkResetCommandPool(
+         VkDevice                                    device,
+-        VkCmdPool                                   cmdPool,
+-        VkCmdPoolResetFlags                         flags) {
++        VkCommandPool                               commandPool,
++        VkCommandPoolResetFlags                     flags) {
+     deviceObject := GetDevice(device)
+-    cmdPoolObject := GetCmdPool(cmdPool)
+-    assert(cmdPoolObject.device == device)
++    commandPoolObject := GetCommandPool(commandPool)
++    assert(commandPoolObject.device == device)
+     return ?
+ }
+ // Command buffer functions
+-macro void bindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
+-    memoryObject := GetDeviceMemory(mem)
+-    memoryObject.boundCommandBuffers[cmdBuffer] = cmdBuffer
++macro void bindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
++    memoryObject := GetDeviceMemory(memory)
++    memoryObject.boundCommandBuffers[commandBuffer] = commandBuffer
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.boundObjects[as!u64(obj)] = mem
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.boundObjects[as!u64(obj)] = memory
+ }
+-macro void unbindCmdBuffer(VkCmdBuffer cmdBuffer, any obj, VkDeviceMemory mem) {
+-    memoryObject := GetDeviceMemory(mem)
+-    memoryObject.boundCommandBuffers[cmdBuffer] = null
++macro void unbindCommandBuffer(VkCommandBuffer commandBuffer, any obj, VkDeviceMemory memory) {
++    memoryObject := GetDeviceMemory(memory)
++    memoryObject.boundCommandBuffers[commandBuffer] = null
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.boundObjects[as!u64(obj)] = null
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.boundObjects[as!u64(obj)] = null
+ }
+ @threadSafety("system")
+-cmd VkResult vkAllocCommandBuffers(
++cmd VkResult vkAllocateCommandBuffers(
+         VkDevice                                    device,
+-        const VkCmdBufferAllocInfo*                 pAllocInfo,
+-        VkCmdBuffer*                                pCmdBuffers) {
+-    assert(pAllocInfo[0].sType == VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
++        const VkCommandBufferAllocateInfo*          pAllocateInfo,
++        VkCommandBuffer*                            pCommandBuffers) {
++    assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
+-    count := pAllocInfo[0].bufferCount
+-    cmdBuffers := pCmdBuffers[0:count]
++    count := pAllocateInfo[0].bufferCount
++    commandBuffers := pCommandBuffers[0:count]
+     for i in (0 .. count) {
+-        cmdBuffer := ?
+-        cmdBuffers[i] = cmdBuffer
+-        State.CmdBuffers[cmdBuffer] = new!CmdBufferObject(device: device)
++        commandBuffer := ?
++        commandBuffers[i] = commandBuffer
++        State.CommandBuffers[commandBuffer] = new!CommandBufferObject(device: device)
+     }
+     return ?
+@@ -3878,26 +3877,26 @@ cmd VkResult vkAllocCommandBuffers(
+ @threadSafety("system")
+ cmd void vkFreeCommandBuffers(
+         VkDevice                                    device,
+-        VkCmdPool                                   cmdPool,
++        VkCommandPool                               commandPool,
+         u32                                         commandBufferCount,
+-        const VkCmdBuffer*                          pCommandBuffers) {
++        const VkCommandBuffer*                      pCommandBuffers) {
+     deviceObject := GetDevice(device)
+-    cmdBuffers := pCommandBuffers[0:commandBufferCount]
++    commandBuffers := pCommandBuffers[0:commandBufferCount]
+     for i in (0 .. commandBufferCount) {
+-        cmdBufferObject := GetCmdBuffer(cmdBuffers[i])
+-        assert(cmdBufferObject.device == device)
++        commandBufferObject := GetCommandBuffer(commandBuffers[i])
++        assert(commandBufferObject.device == device)
+         // TODO: iterate over boundObjects and clear memory bindings
+-        State.CmdBuffers[cmdBuffers[i]] = null
++        State.CommandBuffers[commandBuffers[i]] = null
+     }
+ }
+ @threadSafety("app")
+ cmd VkResult vkBeginCommandBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
+-        const VkCmdBufferBeginInfo*                 pBeginInfo) {
+-    assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++        VkCommandBuffer                             commandBuffer,
++        const VkCommandBufferBeginInfo*             pBeginInfo) {
++    assert(pBeginInfo.sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     // TODO: iterate over boundObjects and clear memory bindings
+@@ -3906,17 +3905,17 @@ cmd VkResult vkBeginCommandBuffer(
+ @threadSafety("app")
+ cmd VkResult vkEndCommandBuffer(
+-        VkCmdBuffer                                 cmdBuffer) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++        VkCommandBuffer                             commandBuffer) {
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     return ?
+ }
+ @threadSafety("app")
+ cmd VkResult vkResetCommandBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
+-        VkCmdBufferResetFlags                       flags) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++        VkCommandBuffer                             commandBuffer,
++        VkCommandBufferResetFlags                   flags) {
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     // TODO: iterate over boundObjects and clear memory bindings
+@@ -3928,106 +3927,106 @@ cmd VkResult vkResetCommandBuffer(
+ @threadSafety("app")
+ cmd void vkCmdBindPipeline(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkPipelineBindPoint                         pipelineBindPoint,
+         VkPipeline                                  pipeline) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     pipelineObject := GetPipeline(pipeline)
+-    assert(cmdBufferObject.device == pipelineObject.device)
++    assert(commandBufferObject.device == pipelineObject.device)
+     queue := switch (pipelineBindPoint) {
+         case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
+         case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
+     }
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, queue)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetViewport(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         viewportCount,
+         const VkViewport*                           pViewports) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetScissor(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         scissorCount,
+         const VkRect2D*                             pScissors) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetLineWidth(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         f32                                         lineWidth) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetDepthBias(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         f32                                         depthBiasConstantFactor,
+         f32                                         depthBiasClamp,
+         f32                                         depthBiasSlopeFactor) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetBlendConstants(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         // TODO(jessehall): apic only supports 'const' on pointer types. Using
+         // an annotation as a quick hack to pass this to the template without
+         // having to modify the AST and semantic model.
+         @readonly f32[4]                            blendConstants) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetDepthBounds(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         f32                                         minDepthBounds,
+         f32                                         maxDepthBounds) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetStencilCompareMask(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkStencilFaceFlags                          faceMask,
+         u32                                         stencilCompareMask) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetStencilWriteMask(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkStencilFaceFlags                          faceMask,
+         u32                                         stencilWriteMask) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetStencilReference(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkStencilFaceFlags                          faceMask,
+         u32                                         stencilReference) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdBindDescriptorSets(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkPipelineBindPoint                         pipelineBindPoint,
+         VkPipelineLayout                            layout,
+         u32                                         firstSet,
+@@ -4035,13 +4034,13 @@ cmd void vkCmdBindDescriptorSets(
+         const VkDescriptorSet*                      pDescriptorSets,
+         u32                                         dynamicOffsetCount,
+         const u32*                                  pDynamicOffsets) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     descriptorSets := pDescriptorSets[0:descriptorSetCount]
+     for i in (0 .. descriptorSetCount) {
+         descriptorSet := descriptorSets[i]
+         descriptorSetObject := GetDescriptorSet(descriptorSet)
+-        assert(cmdBufferObject.device == descriptorSetObject.device)
++        assert(commandBufferObject.device == descriptorSetObject.device)
+     }
+     dynamicOffsets := pDynamicOffsets[0:dynamicOffsetCount]
+@@ -4053,32 +4052,32 @@ cmd void vkCmdBindDescriptorSets(
+         case VK_PIPELINE_BIND_POINT_COMPUTE:  VK_QUEUE_COMPUTE_BIT
+         case VK_PIPELINE_BIND_POINT_GRAPHICS: VK_QUEUE_GRAPHICS_BIT
+     }
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, queue)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, queue)
+ }
+ @threadSafety("app")
+ cmd void vkCmdBindIndexBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkBuffer                                    buffer,
+         VkDeviceSize                                offset,
+         VkIndexType                                 indexType) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     bufferObject := GetBuffer(buffer)
+-    assert(cmdBufferObject.device == bufferObject.device)
++    assert(commandBufferObject.device == bufferObject.device)
+-    bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
++    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdBindVertexBuffers(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         startBinding,
+         u32                                         bindingCount,
+         const VkBuffer*                             pBuffers,
+         const VkDeviceSize*                         pOffsets) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     // TODO: check if not [startBinding:startBinding+bindingCount]
+     buffers := pBuffers[0:bindingCount]
+@@ -4087,395 +4086,395 @@ cmd void vkCmdBindVertexBuffers(
+         buffer := buffers[i]
+         offset := offsets[i]
+         bufferObject := GetBuffer(buffer)
+-        assert(cmdBufferObject.device == bufferObject.device)
++        assert(commandBufferObject.device == bufferObject.device)
+-        bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
++        bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
+     }
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdDraw(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         vertexCount,
+         u32                                         instanceCount,
+         u32                                         firstVertex,
+         u32                                         firstInstance) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdDrawIndexed(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         indexCount,
+         u32                                         instanceCount,
+         u32                                         firstIndex,
+         s32                                         vertexOffset,
+         u32                                         firstInstance) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdDrawIndirect(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkBuffer                                    buffer,
+         VkDeviceSize                                offset,
+         u32                                         drawCount,
+         u32                                         stride) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     bufferObject := GetBuffer(buffer)
+-    assert(cmdBufferObject.device == bufferObject.device)
++    assert(commandBufferObject.device == bufferObject.device)
+-    bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
++    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdDrawIndexedIndirect(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkBuffer                                    buffer,
+         VkDeviceSize                                offset,
+         u32                                         drawCount,
+         u32                                         stride) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     bufferObject := GetBuffer(buffer)
+-    assert(cmdBufferObject.device == bufferObject.device)
++    assert(commandBufferObject.device == bufferObject.device)
+-    bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
++    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdDispatch(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         x,
+         u32                                         y,
+         u32                                         z) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdDispatchIndirect(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkBuffer                                    buffer,
+         VkDeviceSize                                offset) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     bufferObject := GetBuffer(buffer)
+-    assert(cmdBufferObject.device == bufferObject.device)
++    assert(commandBufferObject.device == bufferObject.device)
+-    bindCmdBuffer(cmdBuffer, buffer, bufferObject.mem)
++    bindCommandBuffer(commandBuffer, buffer, bufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_COMPUTE_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdCopyBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkBuffer                                    srcBuffer,
+-        VkBuffer                                    destBuffer,
++        VkBuffer                                    dstBuffer,
+         u32                                         regionCount,
+         const VkBufferCopy*                         pRegions) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     srcBufferObject := GetBuffer(srcBuffer)
+-    destBufferObject := GetBuffer(destBuffer)
+-    assert(cmdBufferObject.device == srcBufferObject.device)
+-    assert(cmdBufferObject.device == destBufferObject.device)
++    dstBufferObject := GetBuffer(dstBuffer)
++    assert(commandBufferObject.device == srcBufferObject.device)
++    assert(commandBufferObject.device == dstBufferObject.device)
+     regions := pRegions[0:regionCount]
+     for i in (0 .. regionCount) {
+         region := regions[i]
+     }
+-    bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
+-    bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
++    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
++    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdCopyImage(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkImage                                     srcImage,
+         VkImageLayout                               srcImageLayout,
+-        VkImage                                     destImage,
+-        VkImageLayout                               destImageLayout,
++        VkImage                                     dstImage,
++        VkImageLayout                               dstImageLayout,
+         u32                                         regionCount,
+         const VkImageCopy*                          pRegions) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     srcImageObject := GetImage(srcImage)
+-    destImageObject := GetImage(destImage)
+-    assert(cmdBufferObject.device == srcImageObject.device)
+-    assert(cmdBufferObject.device == destImageObject.device)
++    dstImageObject := GetImage(dstImage)
++    assert(commandBufferObject.device == srcImageObject.device)
++    assert(commandBufferObject.device == dstImageObject.device)
+     regions := pRegions[0:regionCount]
+     for i in (0 .. regionCount) {
+         region := regions[i]
+     }
+-    bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+-    bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
++    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
++    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdBlitImage(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkImage                                     srcImage,
+         VkImageLayout                               srcImageLayout,
+-        VkImage                                     destImage,
+-        VkImageLayout                               destImageLayout,
++        VkImage                                     dstImage,
++        VkImageLayout                               dstImageLayout,
+         u32                                         regionCount,
+         const VkImageBlit*                          pRegions,
+         VkFilter                                    filter) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     srcImageObject := GetImage(srcImage)
+-    destImageObject := GetImage(destImage)
+-    assert(cmdBufferObject.device == srcImageObject.device)
+-    assert(cmdBufferObject.device == destImageObject.device)
++    dstImageObject := GetImage(dstImage)
++    assert(commandBufferObject.device == srcImageObject.device)
++    assert(commandBufferObject.device == dstImageObject.device)
+     regions := pRegions[0:regionCount]
+     for i in (0 .. regionCount) {
+         region := regions[i]
+     }
+-    bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+-    bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
++    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
++    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdCopyBufferToImage(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkBuffer                                    srcBuffer,
+-        VkImage                                     destImage,
+-        VkImageLayout                               destImageLayout,
++        VkImage                                     dstImage,
++        VkImageLayout                               dstImageLayout,
+         u32                                         regionCount,
+         const VkBufferImageCopy*                    pRegions) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     srcBufferObject := GetBuffer(srcBuffer)
+-    destImageObject := GetImage(destImage)
+-    assert(cmdBufferObject.device == srcBufferObject.device)
+-    assert(cmdBufferObject.device == destImageObject.device)
++    dstImageObject := GetImage(dstImage)
++    assert(commandBufferObject.device == srcBufferObject.device)
++    assert(commandBufferObject.device == dstImageObject.device)
+     regions := pRegions[0:regionCount]
+     for i in (0 .. regionCount) {
+         region := regions[i]
+     }
+-    bindCmdBuffer(cmdBuffer, srcBuffer, srcBufferObject.mem)
+-    bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
++    bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
++    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdCopyImageToBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkImage                                     srcImage,
+         VkImageLayout                               srcImageLayout,
+-        VkBuffer                                    destBuffer,
++        VkBuffer                                    dstBuffer,
+         u32                                         regionCount,
+         const VkBufferImageCopy*                    pRegions) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     srcImageObject := GetImage(srcImage)
+-    destBufferObject := GetBuffer(destBuffer)
+-    assert(cmdBufferObject.device == srcImageObject.device)
+-    assert(cmdBufferObject.device == destBufferObject.device)
++    dstBufferObject := GetBuffer(dstBuffer)
++    assert(commandBufferObject.device == srcImageObject.device)
++    assert(commandBufferObject.device == dstBufferObject.device)
+     regions := pRegions[0:regionCount]
+     for i in (0 .. regionCount) {
+         region := regions[i]
+     }
+-    bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+-    bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
++    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
++    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdUpdateBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
+-        VkBuffer                                    destBuffer,
+-        VkDeviceSize                                destOffset,
++        VkCommandBuffer                             commandBuffer,
++        VkBuffer                                    dstBuffer,
++        VkDeviceSize                                dstOffset,
+         VkDeviceSize                                dataSize,
+         const u32*                                  pData) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    destBufferObject := GetBuffer(destBuffer)
+-    assert(cmdBufferObject.device == destBufferObject.device)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    dstBufferObject := GetBuffer(dstBuffer)
++    assert(commandBufferObject.device == dstBufferObject.device)
+     data := pData[0:dataSize]
+-    bindCmdBuffer(cmdBuffer, destBuffer, destBufferObject.mem)
++    bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdFillBuffer(
+-        VkCmdBuffer                                 cmdBuffer,
+-        VkBuffer                                    destBuffer,
+-        VkDeviceSize                                destOffset,
++        VkCommandBuffer                             commandBuffer,
++        VkBuffer                                    dstBuffer,
++        VkDeviceSize                                dstOffset,
+         VkDeviceSize                                size,
+         u32                                         data) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-    destBufferObject := GetBuffer(destBuffer)
+-    assert(cmdBufferObject.device == destBufferObject.device)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++    dstBufferObject := GetBuffer(dstBuffer)
++    assert(commandBufferObject.device == dstBufferObject.device)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdClearColorImage(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkImage                                     image,
+         VkImageLayout                               imageLayout,
+         const VkClearColorValue*                    pColor,
+         u32                                         rangeCount,
+         const VkImageSubresourceRange*              pRanges) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     imageObject := GetImage(image)
+-    assert(cmdBufferObject.device == imageObject.device)
++    assert(commandBufferObject.device == imageObject.device)
+     ranges := pRanges[0:rangeCount]
+     for i in (0 .. rangeCount) {
+         range := ranges[i]
+     }
+-    bindCmdBuffer(cmdBuffer, image, imageObject.mem)
++    bindCommandBuffer(commandBuffer, image, imageObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdClearDepthStencilImage(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkImage                                     image,
+         VkImageLayout                               imageLayout,
+         const VkClearDepthStencilValue*             pDepthStencil,
+         u32                                         rangeCount,
+         const VkImageSubresourceRange*              pRanges) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     imageObject := GetImage(image)
+-    assert(cmdBufferObject.device == imageObject.device)
++    assert(commandBufferObject.device == imageObject.device)
+     ranges := pRanges[0:rangeCount]
+     for i in (0 .. rangeCount) {
+         range := ranges[i]
+     }
+-    bindCmdBuffer(cmdBuffer, image, imageObject.mem)
++    bindCommandBuffer(commandBuffer, image, imageObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdClearAttachments(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         attachmentCount,
+         const VkClearAttachment*                    pAttachments,
+         u32                                         rectCount,
+         const VkClearRect*                          pRects) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     rects := pRects[0:rectCount]
+     for i in (0 .. rectCount) {
+         rect := rects[i]
+     }
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdResolveImage(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkImage                                     srcImage,
+         VkImageLayout                               srcImageLayout,
+-        VkImage                                     destImage,
+-        VkImageLayout                               destImageLayout,
++        VkImage                                     dstImage,
++        VkImageLayout                               dstImageLayout,
+         u32                                         regionCount,
+         const VkImageResolve*                       pRegions) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     srcImageObject := GetImage(srcImage)
+-    destImageObject := GetImage(destImage)
+-    assert(cmdBufferObject.device == srcImageObject.device)
+-    assert(cmdBufferObject.device == destImageObject.device)
++    dstImageObject := GetImage(dstImage)
++    assert(commandBufferObject.device == srcImageObject.device)
++    assert(commandBufferObject.device == dstImageObject.device)
+     regions := pRegions[0:regionCount]
+     for i in (0 .. regionCount) {
+         region := regions[i]
+     }
+-    bindCmdBuffer(cmdBuffer, srcImage, srcImageObject.mem)
+-    bindCmdBuffer(cmdBuffer, destImage, destImageObject.mem)
++    bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
++    bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ @threadSafety("app")
+ cmd void vkCmdSetEvent(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkEvent                                     event,
+         VkPipelineStageFlags                        stageMask) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     eventObject := GetEvent(event)
+-    assert(cmdBufferObject.device == eventObject.device)
++    assert(commandBufferObject.device == eventObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdResetEvent(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkEvent                                     event,
+         VkPipelineStageFlags                        stageMask) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     eventObject := GetEvent(event)
+-    assert(cmdBufferObject.device == eventObject.device)
++    assert(commandBufferObject.device == eventObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdWaitEvents(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         u32                                         eventCount,
+         const VkEvent*                              pEvents,
+         VkPipelineStageFlags                        srcStageMask,
+-        VkPipelineStageFlags                        destStageMask,
+-        u32                                         memBarrierCount,
+-        const void* const*                          ppMemBarriers) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++        VkPipelineStageFlags                        dstStageMask,
++        u32                                         memoryBarrierCount,
++        const void* const*                          ppMemoryBarriers) {
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     events := pEvents[0:eventCount]
+     for i in (0 .. eventCount) {
+         event := events[i]
+         eventObject := GetEvent(event)
+-        assert(cmdBufferObject.device == eventObject.device)
++        assert(commandBufferObject.device == eventObject.device)
+     }
+-    pMemBarriers := ppMemBarriers[0:memBarrierCount]
+-    for i in (0 .. memBarrierCount) {
+-        switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
++    pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
++    for i in (0 .. memoryBarrierCount) {
++        switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
+             case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
+-                memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
++                memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
+             }
+             case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
+-                imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
+-                imageObject := GetImage(imageMemBarrier.image)
+-                assert(imageObject.device == cmdBufferObject.device)
++                imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
++                imageObject := GetImage(imageMemoryBarrier.image)
++                assert(imageObject.device == commandBufferObject.device)
+             }
+             case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
+-                bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
+-                bufferObject := GetBuffer(bufferMemBarrier.buffer)
+-                assert(bufferObject.device == cmdBufferObject.device)
++                bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
++                bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
++                assert(bufferObject.device == commandBufferObject.device)
+             }
+         }
+     }
+@@ -4483,29 +4482,29 @@ cmd void vkCmdWaitEvents(
+ @threadSafety("app")
+ cmd void vkCmdPipelineBarrier(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkPipelineStageFlags                        srcStageMask,
+-        VkPipelineStageFlags                        destStageMask,
++        VkPipelineStageFlags                        dstStageMask,
+         VkDependencyFlags                           dependencyFlags,
+-        u32                                         memBarrierCount,
+-        const void* const*                          ppMemBarriers) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++        u32                                         memoryBarrierCount,
++        const void* const*                          ppMemoryBarriers) {
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+-    pMemBarriers := ppMemBarriers[0:memBarrierCount]
+-    for i in (0 .. memBarrierCount) {
+-        switch as!VkMemoryBarrier const*(pMemBarriers[i])[0].sType {
++    pMemoryBarriers := ppMemoryBarriers[0:memoryBarrierCount]
++    for i in (0 .. memoryBarrierCount) {
++        switch as!VkMemoryBarrier const*(pMemoryBarriers[i])[0].sType {
+             case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
+-                memBarrier := as!VkMemoryBarrier const*(pMemBarriers[i])[0]
++                memoryBarrier := as!VkMemoryBarrier const*(pMemoryBarriers[i])[0]
+             }
+             case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
+-                imageMemBarrier := as!VkImageMemoryBarrier const*(pMemBarriers[i])[0]
+-                imageObject := GetImage(imageMemBarrier.image)
+-                assert(imageObject.device == cmdBufferObject.device)
++                imageMemoryBarrier := as!VkImageMemoryBarrier const*(pMemoryBarriers[i])[0]
++                imageObject := GetImage(imageMemoryBarrier.image)
++                assert(imageObject.device == commandBufferObject.device)
+             }
+             case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
+-                bufferMemBarrier := as!VkBufferMemoryBarrier const*(pMemBarriers[i])[0]
+-                bufferObject := GetBuffer(bufferMemBarrier.buffer)
+-                assert(bufferObject.device == cmdBufferObject.device)
++                bufferMemoryBarrier := as!VkBufferMemoryBarrier const*(pMemoryBarriers[i])[0]
++                bufferObject := GetBuffer(bufferMemoryBarrier.buffer)
++                assert(bufferObject.device == commandBufferObject.device)
+             }
+         }
+     }
+@@ -4513,115 +4512,115 @@ cmd void vkCmdPipelineBarrier(
+ @threadSafety("app")
+ cmd void vkCmdBeginQuery(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkQueryPool                                 queryPool,
+         u32                                         slot,
+         VkQueryControlFlags                         flags) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+-    assert(cmdBufferObject.device == queryPoolObject.device)
++    assert(commandBufferObject.device == queryPoolObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdEndQuery(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkQueryPool                                 queryPool,
+         u32                                         slot) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+-    assert(cmdBufferObject.device == queryPoolObject.device)
++    assert(commandBufferObject.device == queryPoolObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdResetQueryPool(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkQueryPool                                 queryPool,
+         u32                                         startQuery,
+         u32                                         queryCount) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+-    assert(cmdBufferObject.device == queryPoolObject.device)
++    assert(commandBufferObject.device == queryPoolObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdWriteTimestamp(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkPipelineStageFlagBits                     pipelineStage,
+         VkQueryPool                                 queryPool,
+         u32                                         slot) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+-    assert(cmdBufferObject.device == queryPoolObject.device)
++    assert(commandBufferObject.device == queryPoolObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdCopyQueryPoolResults(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkQueryPool                                 queryPool,
+         u32                                         startQuery,
+         u32                                         queryCount,
+-        VkBuffer                                    destBuffer,
+-        VkDeviceSize                                destOffset,
++        VkBuffer                                    dstBuffer,
++        VkDeviceSize                                dstOffset,
+         VkDeviceSize                                stride,
+         VkQueryResultFlags                          flags) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+-    destBufferObject := GetBuffer(destBuffer)
+-    assert(cmdBufferObject.device == queryPoolObject.device)
+-    assert(cmdBufferObject.device == destBufferObject.device)
++    dstBufferObject := GetBuffer(dstBuffer)
++    assert(commandBufferObject.device == queryPoolObject.device)
++    assert(commandBufferObject.device == dstBufferObject.device)
+ }
+ cmd void vkCmdPushConstants(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkPipelineLayout                            layout,
+         VkShaderStageFlags                          stageFlags,
+         u32                                         offset,
+         u32                                         size,
+         const void*                                 values) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     layoutObject := GetPipelineLayout(layout)
+-    assert(cmdBufferObject.device == layoutObject.device)
++    assert(commandBufferObject.device == layoutObject.device)
+ }
+ @threadSafety("app")
+ cmd void vkCmdBeginRenderPass(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         const VkRenderPassBeginInfo*                pRenderPassBegin,
+         VkRenderPassContents                        contents) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+     renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
+     framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
+-    assert(cmdBufferObject.device == renderPassObject.device)
+-    assert(cmdBufferObject.device == framebufferObject.device)
++    assert(commandBufferObject.device == renderPassObject.device)
++    assert(commandBufferObject.device == framebufferObject.device)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ cmd void vkCmdNextSubpass(
+-        VkCmdBuffer                                 cmdBuffer,
++        VkCommandBuffer                             commandBuffer,
+         VkRenderPassContents                        contents) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+ }
+ @threadSafety("app")
+ cmd void vkCmdEndRenderPass(
+-        VkCmdBuffer                                 cmdBuffer) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
++        VkCommandBuffer                             commandBuffer) {
++    commandBufferObject := GetCommandBuffer(commandBuffer)
+-    cmdBufferObject.queueFlags = AddQueueFlag(cmdBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+ cmd void vkCmdExecuteCommands(
+-        VkCmdBuffer                                 cmdBuffer,
+-        u32                                         cmdBuffersCount,
+-        const VkCmdBuffer*                          pCmdBuffers) {
+-    cmdBufferObject := GetCmdBuffer(cmdBuffer)
+-
+-    cmdBuffers := pCmdBuffers[0:cmdBuffersCount]
+-    for i in (0 .. cmdBuffersCount) {
+-        secondaryCmdBuffer := cmdBuffers[i]
+-        secondaryCmdBufferObject := GetCmdBuffer(secondaryCmdBuffer)
+-        assert(cmdBufferObject.device == secondaryCmdBufferObject.device)
++        VkCommandBuffer                             commandBuffer,
++        u32                                         commandBuffersCount,
++        const VkCommandBuffer*                      pCommandBuffers) {
++    commandBufferObject := GetCommandBuffer(commandBuffer)
++
++    commandBuffers := pCommandBuffers[0:commandBuffersCount]
++    for i in (0 .. commandBuffersCount) {
++        secondaryCommandBuffer := commandBuffers[i]
++        secondaryCommandBufferObject := GetCommandBuffer(secondaryCommandBuffer)
++        assert(commandBufferObject.device == secondaryCommandBufferObject.device)
+     }
+ }
+@@ -4966,7 +4965,7 @@ StateObject State
+     map!(VkPhysicalDevice, ref!PhysicalDeviceObject) PhysicalDevices
+     map!(VkDevice,         ref!DeviceObject)         Devices
+     map!(VkQueue,          ref!QueueObject)          Queues
+-    map!(VkCmdBuffer,      ref!CmdBufferObject)      CmdBuffers
++    map!(VkCommandBuffer,  ref!CommandBufferObject)  CommandBuffers
+     // Non-dispatchable objects.
+     map!(VkDeviceMemory,             ref!DeviceMemoryObject)             DeviceMemories
+@@ -4989,7 +4988,7 @@ StateObject State
+     map!(VkFramebuffer,              ref!FramebufferObject)              Framebuffers
+     map!(VkRenderPass,               ref!RenderPassObject)               RenderPasses
+     map!(VkPipelineCache,            ref!PipelineCacheObject)            PipelineCaches
+-    map!(VkCmdPool,                  ref!CmdPoolObject)                  CmdPools
++    map!(VkCommandPool,              ref!CommandPoolObject)              CommandPools
+     map!(VkSurfaceKHR,               ref!SurfaceObject)                  Surfaces
+     map!(VkSwapchainKHR,             ref!SwapchainObject)                Swapchains
+ }
+@@ -5010,23 +5009,23 @@ StateObject State
+     VkQueueFlags  flags
+ }
+-@internal class CmdBufferObject {
++@internal class CommandBufferObject {
+     VkDevice                  device
+     map!(u64, VkDeviceMemory) boundObjects
+     VkQueueFlags              queueFlags
+ }
+ @internal class DeviceMemoryObject {
+-    VkDevice                         device
+-    VkDeviceSize                     allocationSize
+-    map!(u64, VkDeviceSize         ) boundObjects
+-    map!(VkCmdBuffer, VkCmdBuffer)   boundCommandBuffers
++    VkDevice                                device
++    VkDeviceSize                            allocationSize
++    map!(u64, VkDeviceSize)                 boundObjects
++    map!(VkCommandBuffer, VkCommandBuffer)  boundCommandBuffers
+ }
+ @internal class BufferObject {
+     VkDevice              device
+-    VkDeviceMemory        mem
+-    VkDeviceSize          memOffset
++    VkDeviceMemory        memory
++    VkDeviceSize          memoryOffset
+ }
+ @internal class BufferViewObject {
+@@ -5036,8 +5035,8 @@ StateObject State
+ @internal class ImageObject {
+     VkDevice              device
+-    VkDeviceMemory        mem
+-    VkDeviceSize          memOffset
++    VkDeviceMemory        memory
++    VkDeviceSize          memoryOffset
+ }
+ @internal class ImageViewObject {
+@@ -5106,7 +5105,7 @@ StateObject State
+     VkDevice      device
+ }
+-@internal class CmdPoolObject {
++@internal class CommandPoolObject {
+     VkDevice      device
+ }
+@@ -5138,14 +5137,14 @@ macro ref!QueueObject GetQueue(VkQueue queue) {
+     return State.Queues[queue]
+ }
+-macro ref!CmdBufferObject GetCmdBuffer(VkCmdBuffer cmdBuffer) {
+-    assert(cmdBuffer in State.CmdBuffers)
+-    return State.CmdBuffers[cmdBuffer]
++macro ref!CommandBufferObject GetCommandBuffer(VkCommandBuffer commandBuffer) {
++    assert(commandBuffer in State.CommandBuffers)
++    return State.CommandBuffers[commandBuffer]
+ }
+-macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory mem) {
+-    assert(mem in State.DeviceMemories)
+-    return State.DeviceMemories[mem]
++macro ref!DeviceMemoryObject GetDeviceMemory(VkDeviceMemory memory) {
++    assert(memory in State.DeviceMemories)
++    return State.DeviceMemories[memory]
+ }
+ macro ref!BufferObject GetBuffer(VkBuffer buffer) {
+@@ -5243,9 +5242,9 @@ macro ref!PipelineCacheObject GetPipelineCache(VkPipelineCache pipelineCache) {
+     return State.PipelineCaches[pipelineCache]
+ }
+-macro ref!CmdPoolObject GetCmdPool(VkCmdPool cmdPool) {
+-    assert(cmdPool in State.CmdPools)
+-    return State.CmdPools[cmdPool]
++macro ref!CommandPoolObject GetCommandPool(VkCommandPool commandPool) {
++    assert(commandPool in State.CommandPools)
++    return State.CommandPools[commandPool]
+ }
+ macro ref!SurfaceObject GetSurface(VkSurfaceKHR surface) {
+diff --git a/vulkan/include/vulkan/vk_debug_report_lunarg.h b/vulkan/include/vulkan/vk_debug_report_lunarg.h
+index 23bb63c..286c354 100644
+--- a/vulkan/include/vulkan/vk_debug_report_lunarg.h
++++ b/vulkan/include/vulkan/vk_debug_report_lunarg.h
+@@ -83,7 +83,7 @@ typedef enum {
+ #define VK_DEBUG_REPORT_EXTENSION_NAME "DEBUG_REPORT"
+-VK_DEFINE_NONDISP_HANDLE(VkDbgMsgCallback)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDbgMsgCallback)
+ // ------------------------------------------------------------------------------------------------
+ // Enumerations
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index af0ccdf..0130399 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,20 +41,20 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 194, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 196, 0)
+ #define VK_NULL_HANDLE 0
+-#define VK_DEFINE_HANDLE(obj) typedef struct obj##_T* obj;
++#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+ #if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
+-        #define VK_DEFINE_NONDISP_HANDLE(obj) typedef struct obj##_T *obj;
++        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
+ #else
+-        #define VK_DEFINE_NONDISP_HANDLE(obj) typedef uint64_t obj;
++        #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+ #endif
+@@ -68,28 +68,28 @@ VK_DEFINE_HANDLE(VkInstance)
+ VK_DEFINE_HANDLE(VkPhysicalDevice)
+ VK_DEFINE_HANDLE(VkDevice)
+ VK_DEFINE_HANDLE(VkQueue)
+-VK_DEFINE_NONDISP_HANDLE(VkSemaphore)
+-VK_DEFINE_HANDLE(VkCmdBuffer)
+-VK_DEFINE_NONDISP_HANDLE(VkFence)
+-VK_DEFINE_NONDISP_HANDLE(VkDeviceMemory)
+-VK_DEFINE_NONDISP_HANDLE(VkBuffer)
+-VK_DEFINE_NONDISP_HANDLE(VkImage)
+-VK_DEFINE_NONDISP_HANDLE(VkEvent)
+-VK_DEFINE_NONDISP_HANDLE(VkQueryPool)
+-VK_DEFINE_NONDISP_HANDLE(VkBufferView)
+-VK_DEFINE_NONDISP_HANDLE(VkImageView)
+-VK_DEFINE_NONDISP_HANDLE(VkShaderModule)
+-VK_DEFINE_NONDISP_HANDLE(VkShader)
+-VK_DEFINE_NONDISP_HANDLE(VkPipelineCache)
+-VK_DEFINE_NONDISP_HANDLE(VkPipelineLayout)
+-VK_DEFINE_NONDISP_HANDLE(VkRenderPass)
+-VK_DEFINE_NONDISP_HANDLE(VkPipeline)
+-VK_DEFINE_NONDISP_HANDLE(VkDescriptorSetLayout)
+-VK_DEFINE_NONDISP_HANDLE(VkSampler)
+-VK_DEFINE_NONDISP_HANDLE(VkDescriptorPool)
+-VK_DEFINE_NONDISP_HANDLE(VkDescriptorSet)
+-VK_DEFINE_NONDISP_HANDLE(VkFramebuffer)
+-VK_DEFINE_NONDISP_HANDLE(VkCmdPool)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
++VK_DEFINE_HANDLE(VkCommandBuffer)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShader)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+ #define VK_LOD_CLAMP_NONE                 1000.0f
+ #define VK_REMAINING_MIP_LEVELS           (~0U)
+@@ -126,7 +126,7 @@ typedef enum {
+     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+     VK_RESULT_BEGIN_RANGE = VK_ERROR_INCOMPATIBLE_DRIVER,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+-    VK_RESULT_NUM = (VK_INCOMPLETE - VK_ERROR_INCOMPATIBLE_DRIVER + 1),
++    VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_INCOMPATIBLE_DRIVER + 1),
+     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+ } VkResult;
+@@ -171,9 +171,9 @@ typedef enum {
+     VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 37,
+     VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 38,
+     VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 39,
+-    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 40,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 41,
+-    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 42,
++    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 40,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO = 41,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
+     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+     VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
+     VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
+@@ -182,29 +182,29 @@ typedef enum {
+     VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 48,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
+-    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
++    VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+ typedef enum {
+-    VK_SYSTEM_ALLOC_SCOPE_FUNCTION = 0,
+-    VK_SYSTEM_ALLOC_SCOPE_OBJECT = 1,
+-    VK_SYSTEM_ALLOC_SCOPE_CACHE = 2,
+-    VK_SYSTEM_ALLOC_SCOPE_DEVICE = 3,
+-    VK_SYSTEM_ALLOC_SCOPE_INSTANCE = 4,
+-    VK_SYSTEM_ALLOC_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOC_SCOPE_FUNCTION,
+-    VK_SYSTEM_ALLOC_SCOPE_END_RANGE = VK_SYSTEM_ALLOC_SCOPE_INSTANCE,
+-    VK_SYSTEM_ALLOC_SCOPE_NUM = (VK_SYSTEM_ALLOC_SCOPE_INSTANCE - VK_SYSTEM_ALLOC_SCOPE_FUNCTION + 1),
+-    VK_SYSTEM_ALLOC_SCOPE_MAX_ENUM = 0x7FFFFFFF
+-} VkSystemAllocScope;
++    VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION = 0,
++    VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
++    VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
++    VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
++    VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
++    VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION,
++    VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
++    VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION + 1),
++    VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
++} VkSystemAllocationScope;
+ typedef enum {
+-    VK_INTERNAL_ALLOC_TYPE_EXECUTABLE = 0,
+-    VK_INTERNAL_ALLOC_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOC_TYPE_EXECUTABLE,
+-    VK_INTERNAL_ALLOC_TYPE_END_RANGE = VK_INTERNAL_ALLOC_TYPE_EXECUTABLE,
+-    VK_INTERNAL_ALLOC_TYPE_NUM = (VK_INTERNAL_ALLOC_TYPE_EXECUTABLE - VK_INTERNAL_ALLOC_TYPE_EXECUTABLE + 1),
+-    VK_INTERNAL_ALLOC_TYPE_MAX_ENUM = 0x7FFFFFFF
+-} VkInternalAllocType;
++    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
++    VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
++    VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
++    VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
++    VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
++} VkInternalAllocationType;
+ typedef enum {
+     VK_FORMAT_UNDEFINED = 0,
+@@ -383,7 +383,7 @@ typedef enum {
+     VK_FORMAT_B10G10R10A2_SINT = 173,
+     VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
+     VK_FORMAT_END_RANGE = VK_FORMAT_B10G10R10A2_SINT,
+-    VK_FORMAT_NUM = (VK_FORMAT_B10G10R10A2_SINT - VK_FORMAT_UNDEFINED + 1),
++    VK_FORMAT_RANGE_SIZE = (VK_FORMAT_B10G10R10A2_SINT - VK_FORMAT_UNDEFINED + 1),
+     VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+ } VkFormat;
+@@ -393,7 +393,7 @@ typedef enum {
+     VK_IMAGE_TYPE_3D = 2,
+     VK_IMAGE_TYPE_BEGIN_RANGE = VK_IMAGE_TYPE_1D,
+     VK_IMAGE_TYPE_END_RANGE = VK_IMAGE_TYPE_3D,
+-    VK_IMAGE_TYPE_NUM = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
++    VK_IMAGE_TYPE_RANGE_SIZE = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
+     VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkImageType;
+@@ -402,7 +402,7 @@ typedef enum {
+     VK_IMAGE_TILING_LINEAR = 1,
+     VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
+     VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
+-    VK_IMAGE_TILING_NUM = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
++    VK_IMAGE_TILING_RANGE_SIZE = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
+     VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+ } VkImageTiling;
+@@ -414,7 +414,7 @@ typedef enum {
+     VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
+     VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
+     VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
+-    VK_PHYSICAL_DEVICE_TYPE_NUM = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
++    VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
+     VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkPhysicalDeviceType;
+@@ -424,7 +424,7 @@ typedef enum {
+     VK_QUERY_TYPE_TIMESTAMP = 2,
+     VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
+     VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
+-    VK_QUERY_TYPE_NUM = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
++    VK_QUERY_TYPE_RANGE_SIZE = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
+     VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkQueryType;
+@@ -433,7 +433,7 @@ typedef enum {
+     VK_SHARING_MODE_CONCURRENT = 1,
+     VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
+     VK_SHARING_MODE_END_RANGE = VK_SHARING_MODE_CONCURRENT,
+-    VK_SHARING_MODE_NUM = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
++    VK_SHARING_MODE_RANGE_SIZE = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
+     VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSharingMode;
+@@ -444,12 +444,12 @@ typedef enum {
+     VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
+     VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
+     VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
+-    VK_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL = 6,
+-    VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL = 7,
++    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
++    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+     VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
+     VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
+     VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
+-    VK_IMAGE_LAYOUT_NUM = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
++    VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
+     VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
+ } VkImageLayout;
+@@ -463,7 +463,7 @@ typedef enum {
+     VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
+     VK_IMAGE_VIEW_TYPE_BEGIN_RANGE = VK_IMAGE_VIEW_TYPE_1D,
+     VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
+-    VK_IMAGE_VIEW_TYPE_NUM = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
++    VK_IMAGE_VIEW_TYPE_RANGE_SIZE = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
+     VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkImageViewType;
+@@ -477,7 +477,7 @@ typedef enum {
+     VK_CHANNEL_SWIZZLE_A = 6,
+     VK_CHANNEL_SWIZZLE_BEGIN_RANGE = VK_CHANNEL_SWIZZLE_IDENTITY,
+     VK_CHANNEL_SWIZZLE_END_RANGE = VK_CHANNEL_SWIZZLE_A,
+-    VK_CHANNEL_SWIZZLE_NUM = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_IDENTITY + 1),
++    VK_CHANNEL_SWIZZLE_RANGE_SIZE = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_IDENTITY + 1),
+     VK_CHANNEL_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+ } VkChannelSwizzle;
+@@ -486,7 +486,7 @@ typedef enum {
+     VK_VERTEX_INPUT_STEP_RATE_INSTANCE = 1,
+     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_INSTANCE,
+-    VK_VERTEX_INPUT_STEP_RATE_NUM = (VK_VERTEX_INPUT_STEP_RATE_INSTANCE - VK_VERTEX_INPUT_STEP_RATE_VERTEX + 1),
++    VK_VERTEX_INPUT_STEP_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_STEP_RATE_INSTANCE - VK_VERTEX_INPUT_STEP_RATE_VERTEX + 1),
+     VK_VERTEX_INPUT_STEP_RATE_MAX_ENUM = 0x7FFFFFFF
+ } VkVertexInputStepRate;
+@@ -497,14 +497,14 @@ typedef enum {
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
+-    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ = 6,
+-    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ = 7,
+-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ = 8,
+-    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ = 9,
++    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
++    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
++    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
++    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
+     VK_PRIMITIVE_TOPOLOGY_PATCH = 10,
+     VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+     VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH,
+-    VK_PRIMITIVE_TOPOLOGY_NUM = (VK_PRIMITIVE_TOPOLOGY_PATCH - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
++    VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
+     VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+ } VkPrimitiveTopology;
+@@ -514,16 +514,16 @@ typedef enum {
+     VK_FILL_MODE_POINTS = 2,
+     VK_FILL_MODE_BEGIN_RANGE = VK_FILL_MODE_SOLID,
+     VK_FILL_MODE_END_RANGE = VK_FILL_MODE_POINTS,
+-    VK_FILL_MODE_NUM = (VK_FILL_MODE_POINTS - VK_FILL_MODE_SOLID + 1),
++    VK_FILL_MODE_RANGE_SIZE = (VK_FILL_MODE_POINTS - VK_FILL_MODE_SOLID + 1),
+     VK_FILL_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkFillMode;
+ typedef enum {
+-    VK_FRONT_FACE_CCW = 0,
+-    VK_FRONT_FACE_CW = 1,
+-    VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_CCW,
+-    VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CW,
+-    VK_FRONT_FACE_NUM = (VK_FRONT_FACE_CW - VK_FRONT_FACE_CCW + 1),
++    VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
++    VK_FRONT_FACE_CLOCKWISE = 1,
++    VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
++    VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CLOCKWISE,
++    VK_FRONT_FACE_RANGE_SIZE = (VK_FRONT_FACE_CLOCKWISE - VK_FRONT_FACE_COUNTER_CLOCKWISE + 1),
+     VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
+ } VkFrontFace;
+@@ -531,14 +531,14 @@ typedef enum {
+     VK_COMPARE_OP_NEVER = 0,
+     VK_COMPARE_OP_LESS = 1,
+     VK_COMPARE_OP_EQUAL = 2,
+-    VK_COMPARE_OP_LESS_EQUAL = 3,
++    VK_COMPARE_OP_LESS_OR_EQUAL = 3,
+     VK_COMPARE_OP_GREATER = 4,
+     VK_COMPARE_OP_NOT_EQUAL = 5,
+-    VK_COMPARE_OP_GREATER_EQUAL = 6,
++    VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
+     VK_COMPARE_OP_ALWAYS = 7,
+     VK_COMPARE_OP_BEGIN_RANGE = VK_COMPARE_OP_NEVER,
+     VK_COMPARE_OP_END_RANGE = VK_COMPARE_OP_ALWAYS,
+-    VK_COMPARE_OP_NUM = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
++    VK_COMPARE_OP_RANGE_SIZE = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
+     VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkCompareOp;
+@@ -546,14 +546,14 @@ typedef enum {
+     VK_STENCIL_OP_KEEP = 0,
+     VK_STENCIL_OP_ZERO = 1,
+     VK_STENCIL_OP_REPLACE = 2,
+-    VK_STENCIL_OP_INC_CLAMP = 3,
+-    VK_STENCIL_OP_DEC_CLAMP = 4,
++    VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
++    VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
+     VK_STENCIL_OP_INVERT = 5,
+-    VK_STENCIL_OP_INC_WRAP = 6,
+-    VK_STENCIL_OP_DEC_WRAP = 7,
++    VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
++    VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
+     VK_STENCIL_OP_BEGIN_RANGE = VK_STENCIL_OP_KEEP,
+-    VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DEC_WRAP,
+-    VK_STENCIL_OP_NUM = (VK_STENCIL_OP_DEC_WRAP - VK_STENCIL_OP_KEEP + 1),
++    VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DECREMENT_AND_WRAP,
++    VK_STENCIL_OP_RANGE_SIZE = (VK_STENCIL_OP_DECREMENT_AND_WRAP - VK_STENCIL_OP_KEEP + 1),
+     VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkStencilOp;
+@@ -563,11 +563,11 @@ typedef enum {
+     VK_LOGIC_OP_AND_REVERSE = 2,
+     VK_LOGIC_OP_COPY = 3,
+     VK_LOGIC_OP_AND_INVERTED = 4,
+-    VK_LOGIC_OP_NOOP = 5,
++    VK_LOGIC_OP_NO_OP = 5,
+     VK_LOGIC_OP_XOR = 6,
+     VK_LOGIC_OP_OR = 7,
+     VK_LOGIC_OP_NOR = 8,
+-    VK_LOGIC_OP_EQUIV = 9,
++    VK_LOGIC_OP_EQUIVALENT = 9,
+     VK_LOGIC_OP_INVERT = 10,
+     VK_LOGIC_OP_OR_REVERSE = 11,
+     VK_LOGIC_OP_COPY_INVERTED = 12,
+@@ -576,7 +576,7 @@ typedef enum {
+     VK_LOGIC_OP_SET = 15,
+     VK_LOGIC_OP_BEGIN_RANGE = VK_LOGIC_OP_CLEAR,
+     VK_LOGIC_OP_END_RANGE = VK_LOGIC_OP_SET,
+-    VK_LOGIC_OP_NUM = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
++    VK_LOGIC_OP_RANGE_SIZE = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
+     VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkLogicOp;
+@@ -585,12 +585,12 @@ typedef enum {
+     VK_BLEND_ONE = 1,
+     VK_BLEND_SRC_COLOR = 2,
+     VK_BLEND_ONE_MINUS_SRC_COLOR = 3,
+-    VK_BLEND_DEST_COLOR = 4,
+-    VK_BLEND_ONE_MINUS_DEST_COLOR = 5,
++    VK_BLEND_DST_COLOR = 4,
++    VK_BLEND_ONE_MINUS_DST_COLOR = 5,
+     VK_BLEND_SRC_ALPHA = 6,
+     VK_BLEND_ONE_MINUS_SRC_ALPHA = 7,
+-    VK_BLEND_DEST_ALPHA = 8,
+-    VK_BLEND_ONE_MINUS_DEST_ALPHA = 9,
++    VK_BLEND_DST_ALPHA = 8,
++    VK_BLEND_ONE_MINUS_DST_ALPHA = 9,
+     VK_BLEND_CONSTANT_COLOR = 10,
+     VK_BLEND_ONE_MINUS_CONSTANT_COLOR = 11,
+     VK_BLEND_CONSTANT_ALPHA = 12,
+@@ -602,7 +602,7 @@ typedef enum {
+     VK_BLEND_ONE_MINUS_SRC1_ALPHA = 18,
+     VK_BLEND_BEGIN_RANGE = VK_BLEND_ZERO,
+     VK_BLEND_END_RANGE = VK_BLEND_ONE_MINUS_SRC1_ALPHA,
+-    VK_BLEND_NUM = (VK_BLEND_ONE_MINUS_SRC1_ALPHA - VK_BLEND_ZERO + 1),
++    VK_BLEND_RANGE_SIZE = (VK_BLEND_ONE_MINUS_SRC1_ALPHA - VK_BLEND_ZERO + 1),
+     VK_BLEND_MAX_ENUM = 0x7FFFFFFF
+ } VkBlend;
+@@ -614,7 +614,7 @@ typedef enum {
+     VK_BLEND_OP_MAX = 4,
+     VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD,
+     VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX,
+-    VK_BLEND_OP_NUM = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
++    VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
+     VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkBlendOp;
+@@ -630,7 +630,7 @@ typedef enum {
+     VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+     VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
+     VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
+-    VK_DYNAMIC_STATE_NUM = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
++    VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
+     VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
+ } VkDynamicState;
+@@ -639,7 +639,7 @@ typedef enum {
+     VK_FILTER_LINEAR = 1,
+     VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
+     VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
+-    VK_FILTER_NUM = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
++    VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
+     VK_FILTER_MAX_ENUM = 0x7FFFFFFF
+ } VkFilter;
+@@ -649,7 +649,7 @@ typedef enum {
+     VK_SAMPLER_MIPMAP_MODE_LINEAR = 2,
+     VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_BASE,
+     VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
+-    VK_SAMPLER_MIPMAP_MODE_NUM = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_BASE + 1),
++    VK_SAMPLER_MIPMAP_MODE_RANGE_SIZE = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_BASE + 1),
+     VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSamplerMipmapMode;
+@@ -661,7 +661,7 @@ typedef enum {
+     VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
+     VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
+     VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE,
+-    VK_SAMPLER_ADDRESS_MODE_NUM = (VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
++    VK_SAMPLER_ADDRESS_MODE_RANGE_SIZE = (VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
+     VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSamplerAddressMode;
+@@ -674,7 +674,7 @@ typedef enum {
+     VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
+     VK_BORDER_COLOR_BEGIN_RANGE = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
+     VK_BORDER_COLOR_END_RANGE = VK_BORDER_COLOR_INT_OPAQUE_WHITE,
+-    VK_BORDER_COLOR_NUM = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
++    VK_BORDER_COLOR_RANGE_SIZE = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
+     VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
+ } VkBorderColor;
+@@ -692,7 +692,7 @@ typedef enum {
+     VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
+     VK_DESCRIPTOR_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_TYPE_SAMPLER,
+     VK_DESCRIPTOR_TYPE_END_RANGE = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
+-    VK_DESCRIPTOR_TYPE_NUM = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
++    VK_DESCRIPTOR_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
+     VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkDescriptorType;
+@@ -702,7 +702,7 @@ typedef enum {
+     VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+     VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE = VK_ATTACHMENT_LOAD_OP_LOAD,
+     VK_ATTACHMENT_LOAD_OP_END_RANGE = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+-    VK_ATTACHMENT_LOAD_OP_NUM = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
++    VK_ATTACHMENT_LOAD_OP_RANGE_SIZE = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
+     VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkAttachmentLoadOp;
+@@ -711,7 +711,7 @@ typedef enum {
+     VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
+     VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
+     VK_ATTACHMENT_STORE_OP_END_RANGE = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+-    VK_ATTACHMENT_STORE_OP_NUM = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
++    VK_ATTACHMENT_STORE_OP_RANGE_SIZE = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
+     VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkAttachmentStoreOp;
+@@ -720,34 +720,34 @@ typedef enum {
+     VK_PIPELINE_BIND_POINT_COMPUTE = 1,
+     VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
+     VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
+-    VK_PIPELINE_BIND_POINT_NUM = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
++    VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
+     VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+ } VkPipelineBindPoint;
+ typedef enum {
+-    VK_CMD_BUFFER_LEVEL_PRIMARY = 0,
+-    VK_CMD_BUFFER_LEVEL_SECONDARY = 1,
+-    VK_CMD_BUFFER_LEVEL_BEGIN_RANGE = VK_CMD_BUFFER_LEVEL_PRIMARY,
+-    VK_CMD_BUFFER_LEVEL_END_RANGE = VK_CMD_BUFFER_LEVEL_SECONDARY,
+-    VK_CMD_BUFFER_LEVEL_NUM = (VK_CMD_BUFFER_LEVEL_SECONDARY - VK_CMD_BUFFER_LEVEL_PRIMARY + 1),
+-    VK_CMD_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
+-} VkCmdBufferLevel;
++    VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
++    VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
++    VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
++    VK_COMMAND_BUFFER_LEVEL_END_RANGE = VK_COMMAND_BUFFER_LEVEL_SECONDARY,
++    VK_COMMAND_BUFFER_LEVEL_RANGE_SIZE = (VK_COMMAND_BUFFER_LEVEL_SECONDARY - VK_COMMAND_BUFFER_LEVEL_PRIMARY + 1),
++    VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
++} VkCommandBufferLevel;
+ typedef enum {
+     VK_INDEX_TYPE_UINT16 = 0,
+     VK_INDEX_TYPE_UINT32 = 1,
+     VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
+     VK_INDEX_TYPE_END_RANGE = VK_INDEX_TYPE_UINT32,
+-    VK_INDEX_TYPE_NUM = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
++    VK_INDEX_TYPE_RANGE_SIZE = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
+     VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkIndexType;
+ typedef enum {
+     VK_RENDER_PASS_CONTENTS_INLINE = 0,
+-    VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS = 1,
++    VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+     VK_RENDER_PASS_CONTENTS_BEGIN_RANGE = VK_RENDER_PASS_CONTENTS_INLINE,
+-    VK_RENDER_PASS_CONTENTS_END_RANGE = VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS,
+-    VK_RENDER_PASS_CONTENTS_NUM = (VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS - VK_RENDER_PASS_CONTENTS_INLINE + 1),
++    VK_RENDER_PASS_CONTENTS_END_RANGE = VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
++    VK_RENDER_PASS_CONTENTS_RANGE_SIZE = (VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_RENDER_PASS_CONTENTS_INLINE + 1),
+     VK_RENDER_PASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+ } VkRenderPassContents;
+@@ -764,14 +764,14 @@ typedef enum {
+     VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
+     VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
+     VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
+-    VK_FORMAT_FEATURE_BLIT_SOURCE_BIT = 0x00000400,
+-    VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT = 0x00000800,
++    VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
++    VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
+ } VkFormatFeatureFlagBits;
+ typedef VkFlags VkFormatFeatureFlags;
+ typedef enum {
+-    VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT = 0x00000001,
+-    VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002,
++    VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
++    VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+     VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+     VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
+     VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
+@@ -885,8 +885,8 @@ typedef enum {
+ typedef VkFlags VkBufferCreateFlags;
+ typedef enum {
+-    VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001,
+-    VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002,
++    VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
++    VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
+     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+     VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
+     VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
+@@ -925,7 +925,7 @@ typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+ typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+ typedef VkFlags VkPipelineTesselationStateCreateFlags;
+ typedef VkFlags VkPipelineViewportStateCreateFlags;
+-typedef VkFlags VkPipelineRasterStateCreateFlags;
++typedef VkFlags VkPipelineRasterizationStateCreateFlags;
+ typedef enum {
+     VK_CULL_MODE_NONE = 0,
+@@ -1014,27 +1014,27 @@ typedef enum {
+ typedef VkFlags VkDependencyFlags;
+ typedef enum {
+-    VK_CMD_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+-    VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+-} VkCmdPoolCreateFlagBits;
+-typedef VkFlags VkCmdPoolCreateFlags;
++    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
++    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
++} VkCommandPoolCreateFlagBits;
++typedef VkFlags VkCommandPoolCreateFlags;
+ typedef enum {
+-    VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+-} VkCmdPoolResetFlagBits;
+-typedef VkFlags VkCmdPoolResetFlags;
++    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
++} VkCommandPoolResetFlagBits;
++typedef VkFlags VkCommandPoolResetFlags;
+ typedef enum {
+-    VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+-    VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
+-    VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
+-} VkCmdBufferUsageFlagBits;
+-typedef VkFlags VkCmdBufferUsageFlags;
++    VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
++    VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
++    VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
++} VkCommandBufferUsageFlagBits;
++typedef VkFlags VkCommandBufferUsageFlags;
+ typedef enum {
+-    VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+-} VkCmdBufferResetFlagBits;
+-typedef VkFlags VkCmdBufferResetFlags;
++    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
++} VkCommandBufferResetFlagBits;
++typedef VkFlags VkCommandBufferResetFlags;
+ typedef enum {
+     VK_STENCIL_FACE_NONE = 0,
+@@ -1049,42 +1049,42 @@ typedef enum {
+ } VkQueryControlFlagBits;
+ typedef VkFlags VkQueryControlFlags;
+-typedef void* (VKAPI *PFN_vkAllocFunction)(
++typedef void* (VKAPI *PFN_vkAllocationFunction)(
+     void*              pUserData,
+     size_t             size,
+     size_t             alignment,
+-    VkSystemAllocScope allocScope);
++    VkSystemAllocationScope allocationScope);
+-typedef void* (VKAPI *PFN_vkReallocFunction)(
++typedef void* (VKAPI *PFN_vkReallocationFunction)(
+     void*              pUserData,
+     void*              pOriginal,
+     size_t             size,
+     size_t             alignment,
+-    VkSystemAllocScope allocScope);
++    VkSystemAllocationScope allocationScope);
+ typedef void (VKAPI *PFN_vkFreeFunction)(
+     void*                           pUserData,
+-    void*                           pMem);
++    void*                           pMemory);
+-typedef void (VKAPI *PFN_vkInternalAllocNotification)(
++typedef void (VKAPI *PFN_vkInternalAllocationNotification)(
+     void*              pUserData,
+     size_t                           size,
+-    VkInternalAllocType              allocType,
+-    VkSystemAllocScope               allocScope);
++    VkInternalAllocationType              allocationType,
++    VkSystemAllocationScope               allocationScope);
+ typedef void (VKAPI *PFN_vkInternalFreeNotification)(
+     void*              pUserData,
+     size_t                           size,
+-    VkInternalAllocType              allocType,
+-    VkSystemAllocScope               allocScope);
++    VkInternalAllocationType              allocationType,
++    VkSystemAllocationScope               allocationScope);
+ typedef void (VKAPI *PFN_vkVoidFunction)(void);
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    const char*                                 pAppName;
+-    uint32_t                                    appVersion;
++    const char*                                 pApplicationName;
++    uint32_t                                    applicationVersion;
+     const char*                                 pEngineName;
+     uint32_t                                    engineVersion;
+     uint32_t                                    apiVersion;
+@@ -1094,7 +1094,7 @@ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkInstanceCreateFlags                       flags;
+-    const VkApplicationInfo*                    pAppInfo;
++    const VkApplicationInfo*                    pApplicationInfo;
+     uint32_t                                    enabledLayerNameCount;
+     const char*const*                           ppEnabledLayerNames;
+     uint32_t                                    enabledExtensionNameCount;
+@@ -1103,12 +1103,12 @@ typedef struct {
+ typedef struct {
+     void*                                       pUserData;
+-    PFN_vkAllocFunction                         pfnAlloc;
+-    PFN_vkReallocFunction                       pfnRealloc;
++    PFN_vkAllocationFunction                    pfnAllocation;
++    PFN_vkReallocationFunction                  pfnReallocation;
+     PFN_vkFreeFunction                          pfnFree;
+-    PFN_vkInternalAllocNotification             pfnInternalAlloc;
++    PFN_vkInternalAllocationNotification        pfnInternalAllocation;
+     PFN_vkInternalFreeNotification              pfnInternalFree;
+-} VkAllocCallbacks;
++} VkAllocationCallbacks;
+ typedef struct {
+     VkBool32                                    robustBufferAccess;
+@@ -1118,7 +1118,7 @@ typedef struct {
+     VkBool32                                    geometryShader;
+     VkBool32                                    tessellationShader;
+     VkBool32                                    sampleRateShading;
+-    VkBool32                                    dualSourceBlend;
++    VkBool32                                    dualSrcBlend;
+     VkBool32                                    logicOp;
+     VkBool32                                    multiDrawIndirect;
+     VkBool32                                    depthClamp;
+@@ -1215,7 +1215,7 @@ typedef struct {
+     uint32_t                                    maxVertexInputAttributeOffset;
+     uint32_t                                    maxVertexInputBindingStride;
+     uint32_t                                    maxVertexOutputComponents;
+-    uint32_t                                    maxTessellationGenLevel;
++    uint32_t                                    maxTessellationGenerationLevel;
+     uint32_t                                    maxTessellationPatchSize;
+     uint32_t                                    maxTessellationControlPerVertexInputComponents;
+     uint32_t                                    maxTessellationControlPerVertexOutputComponents;
+@@ -1230,7 +1230,7 @@ typedef struct {
+     uint32_t                                    maxGeometryTotalOutputComponents;
+     uint32_t                                    maxFragmentInputComponents;
+     uint32_t                                    maxFragmentOutputAttachments;
+-    uint32_t                                    maxFragmentDualSourceAttachments;
++    uint32_t                                    maxFragmentDualSrcAttachments;
+     uint32_t                                    maxFragmentCombinedOutputResources;
+     uint32_t                                    maxComputeSharedMemorySize;
+     uint32_t                                    maxComputeWorkGroupCount[3];
+@@ -1352,14 +1352,14 @@ typedef struct {
+ } VkDeviceCreateInfo;
+ typedef struct {
+-    char                                        extName[VK_MAX_EXTENSION_NAME];
++    char                                        extensionName[VK_MAX_EXTENSION_NAME];
+     uint32_t                                    specVersion;
+ } VkExtensionProperties;
+ typedef struct {
+     char                                        layerName[VK_MAX_EXTENSION_NAME];
+     uint32_t                                    specVersion;
+-    uint32_t                                    implVersion;
++    uint32_t                                    implementationVersion;
+     char                                        description[VK_MAX_DESCRIPTION];
+ } VkLayerProperties;
+@@ -1369,7 +1369,7 @@ typedef struct {
+     uint32_t                                    waitSemaphoreCount;
+     const VkSemaphore*                          pWaitSemaphores;
+     uint32_t                                    commandBufferCount;
+-    const VkCmdBuffer*                          pCommandBuffers;
++    const VkCommandBuffer*                      pCommandBuffers;
+     uint32_t                                    signalSemaphoreCount;
+     const VkSemaphore*                          pSignalSemaphores;
+ } VkSubmitInfo;
+@@ -1379,12 +1379,12 @@ typedef struct {
+     const void*                                 pNext;
+     VkDeviceSize                                allocationSize;
+     uint32_t                                    memoryTypeIndex;
+-} VkMemoryAllocInfo;
++} VkMemoryAllocateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkDeviceMemory                              mem;
++    VkDeviceMemory                              memory;
+     VkDeviceSize                                offset;
+     VkDeviceSize                                size;
+ } VkMappedMemoryRange;
+@@ -1412,8 +1412,8 @@ typedef struct {
+ typedef struct {
+     VkDeviceSize                                resourceOffset;
+     VkDeviceSize                                size;
+-    VkDeviceMemory                              mem;
+-    VkDeviceSize                                memOffset;
++    VkDeviceMemory                              memory;
++    VkDeviceSize                                memoryOffset;
+     VkSparseMemoryBindFlags                     flags;
+ } VkSparseMemoryBind;
+@@ -1445,8 +1445,8 @@ typedef struct {
+     VkImageSubresource                          subresource;
+     VkOffset3D                                  offset;
+     VkExtent3D                                  extent;
+-    VkDeviceMemory                              mem;
+-    VkDeviceSize                                memOffset;
++    VkDeviceMemory                              memory;
++    VkDeviceSize                                memoryOffset;
+     VkSparseMemoryBindFlags                     flags;
+ } VkSparseImageMemoryBind;
+@@ -1554,9 +1554,9 @@ typedef struct {
+ typedef struct {
+     VkImageAspectFlags                          aspectMask;
+     uint32_t                                    baseMipLevel;
+-    uint32_t                                    numLevels;
++    uint32_t                                    levelCount;
+     uint32_t                                    baseArrayLayer;
+-    uint32_t                                    numLayers;
++    uint32_t                                    layerCount;
+ } VkImageSubresourceRange;
+ typedef struct {
+@@ -1593,7 +1593,6 @@ typedef struct {
+     VkPipelineCacheCreateFlags                  flags;
+     size_t                                      initialDataSize;
+     const void*                                 pInitialData;
+-    size_t                                      maxSize;
+ } VkPipelineCacheCreateInfo;
+ typedef struct {
+@@ -1692,7 +1691,7 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkPipelineRasterStateCreateFlags            flags;
++    VkPipelineRasterizationStateCreateFlags     flags;
+     VkBool32                                    depthClampEnable;
+     VkBool32                                    rasterizerDiscardEnable;
+     VkFillMode                                  fillMode;
+@@ -1703,13 +1702,13 @@ typedef struct {
+     float                                       depthBiasClamp;
+     float                                       depthBiasSlopeFactor;
+     float                                       lineWidth;
+-} VkPipelineRasterStateCreateInfo;
++} VkPipelineRasterizationStateCreateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineMultisampleStateCreateFlags       flags;
+-    uint32_t                                    rasterSamples;
++    uint32_t                                    rasterizationSamples;
+     VkBool32                                    sampleShadingEnable;
+     float                                       minSampleShading;
+     const VkSampleMask*                         pSampleMask;
+@@ -1745,10 +1744,10 @@ typedef struct {
+ typedef struct {
+     VkBool32                                    blendEnable;
+     VkBlend                                     srcBlendColor;
+-    VkBlend                                     destBlendColor;
++    VkBlend                                     dstBlendColor;
+     VkBlendOp                                   blendOpColor;
+     VkBlend                                     srcBlendAlpha;
+-    VkBlend                                     destBlendAlpha;
++    VkBlend                                     dstBlendAlpha;
+     VkBlendOp                                   blendOpAlpha;
+     VkChannelFlags                              channelWriteMask;
+ } VkPipelineColorBlendAttachmentState;
+@@ -1782,7 +1781,7 @@ typedef struct {
+     const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
+     const VkPipelineTessellationStateCreateInfo* pTessellationState;
+     const VkPipelineViewportStateCreateInfo*    pViewportState;
+-    const VkPipelineRasterStateCreateInfo*      pRasterState;
++    const VkPipelineRasterizationStateCreateInfo* pRasterizationState;
+     const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
+     const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
+     const VkPipelineColorBlendStateCreateInfo*  pColorBlendState;
+@@ -1875,7 +1874,7 @@ typedef struct {
+     VkDescriptorPool                            descriptorPool;
+     uint32_t                                    setLayoutCount;
+     const VkDescriptorSetLayout*                pSetLayouts;
+-} VkDescriptorSetAllocInfo;
++} VkDescriptorSetAllocateInfo;
+ typedef struct {
+     VkSampler                                   sampler;
+@@ -1892,9 +1891,9 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkDescriptorSet                             destSet;
+-    uint32_t                                    destBinding;
+-    uint32_t                                    destArrayElement;
++    VkDescriptorSet                             dstSet;
++    uint32_t                                    dstBinding;
++    uint32_t                                    dstArrayElement;
+     uint32_t                                    descriptorCount;
+     VkDescriptorType                            descriptorType;
+     const VkDescriptorImageInfo*                pImageInfo;
+@@ -1908,9 +1907,9 @@ typedef struct {
+     VkDescriptorSet                             srcSet;
+     uint32_t                                    srcBinding;
+     uint32_t                                    srcArrayElement;
+-    VkDescriptorSet                             destSet;
+-    uint32_t                                    destBinding;
+-    uint32_t                                    destArrayElement;
++    VkDescriptorSet                             dstSet;
++    uint32_t                                    dstBinding;
++    uint32_t                                    dstArrayElement;
+     uint32_t                                    descriptorCount;
+ } VkCopyDescriptorSet;
+@@ -1958,9 +1957,9 @@ typedef struct {
+ typedef struct {
+     uint32_t                                    srcSubpass;
+-    uint32_t                                    destSubpass;
++    uint32_t                                    dstSubpass;
+     VkPipelineStageFlags                        srcStageMask;
+-    VkPipelineStageFlags                        destStageMask;
++    VkPipelineStageFlags                        dstStageMask;
+     VkMemoryOutputFlags                         outputMask;
+     VkMemoryInputFlags                          inputMask;
+     VkDependencyFlags                           dependencyFlags;
+@@ -1981,30 +1980,30 @@ typedef struct {
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkCmdPoolCreateFlags                        flags;
++    VkCommandPoolCreateFlags                    flags;
+     uint32_t                                    queueFamilyIndex;
+-} VkCmdPoolCreateInfo;
++} VkCommandPoolCreateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkCmdPool                                   cmdPool;
+-    VkCmdBufferLevel                            level;
++    VkCommandPool                               commandPool;
++    VkCommandBufferLevel                        level;
+     uint32_t                                    bufferCount;
+-} VkCmdBufferAllocInfo;
++} VkCommandBufferAllocateInfo;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkCmdBufferUsageFlags                       flags;
++    VkCommandBufferUsageFlags                   flags;
+     VkRenderPass                                renderPass;
+     uint32_t                                    subpass;
+     VkFramebuffer                               framebuffer;
+-} VkCmdBufferBeginInfo;
++} VkCommandBufferBeginInfo;
+ typedef struct {
+     VkDeviceSize                                srcOffset;
+-    VkDeviceSize                                destOffset;
++    VkDeviceSize                                dstOffset;
+     VkDeviceSize                                size;
+ } VkBufferCopy;
+@@ -2012,14 +2011,14 @@ typedef struct {
+     VkImageAspectFlags                          aspect;
+     uint32_t                                    mipLevel;
+     uint32_t                                    baseArrayLayer;
+-    uint32_t                                    numLayers;
++    uint32_t                                    layerCount;
+ } VkImageSubresourceCopy;
+ typedef struct {
+     VkImageSubresourceCopy                      srcSubresource;
+     VkOffset3D                                  srcOffset;
+-    VkImageSubresourceCopy                      destSubresource;
+-    VkOffset3D                                  destOffset;
++    VkImageSubresourceCopy                      dstSubresource;
++    VkOffset3D                                  dstOffset;
+     VkExtent3D                                  extent;
+ } VkImageCopy;
+@@ -2027,9 +2026,9 @@ typedef struct {
+     VkImageSubresourceCopy                      srcSubresource;
+     VkOffset3D                                  srcOffset;
+     VkExtent3D                                  srcExtent;
+-    VkImageSubresourceCopy                      destSubresource;
+-    VkOffset3D                                  destOffset;
+-    VkExtent3D                                  destExtent;
++    VkImageSubresourceCopy                      dstSubresource;
++    VkOffset3D                                  dstOffset;
++    VkExtent3D                                  dstExtent;
+ } VkImageBlit;
+ typedef struct {
+@@ -2066,14 +2065,14 @@ typedef struct {
+ typedef struct {
+     VkRect2D                                    rect;
+     uint32_t                                    baseArrayLayer;
+-    uint32_t                                    numLayers;
++    uint32_t                                    layerCount;
+ } VkClearRect;
+ typedef struct {
+     VkImageSubresourceCopy                      srcSubresource;
+     VkOffset3D                                  srcOffset;
+-    VkImageSubresourceCopy                      destSubresource;
+-    VkOffset3D                                  destOffset;
++    VkImageSubresourceCopy                      dstSubresource;
++    VkOffset3D                                  dstOffset;
+     VkExtent3D                                  extent;
+ } VkImageResolve;
+@@ -2093,7 +2092,7 @@ typedef struct {
+     VkMemoryOutputFlags                         outputMask;
+     VkMemoryInputFlags                          inputMask;
+     uint32_t                                    srcQueueFamilyIndex;
+-    uint32_t                                    destQueueFamilyIndex;
++    uint32_t                                    dstQueueFamilyIndex;
+     VkBuffer                                    buffer;
+     VkDeviceSize                                offset;
+     VkDeviceSize                                size;
+@@ -2103,7 +2102,7 @@ typedef struct {
+     uint32_t                                    x;
+     uint32_t                                    y;
+     uint32_t                                    z;
+-} VkDispatchIndirectCmd;
++} VkDispatchIndirectCommand;
+ typedef struct {
+     uint32_t                                    indexCount;
+@@ -2111,14 +2110,14 @@ typedef struct {
+     uint32_t                                    firstIndex;
+     int32_t                                     vertexOffset;
+     uint32_t                                    firstInstance;
+-} VkDrawIndexedIndirectCmd;
++} VkDrawIndexedIndirectCommand;
+ typedef struct {
+     uint32_t                                    vertexCount;
+     uint32_t                                    instanceCount;
+     uint32_t                                    firstVertex;
+     uint32_t                                    firstInstance;
+-} VkDrawIndirectCmd;
++} VkDrawIndirectCommand;
+ typedef struct {
+     VkStructureType                             sType;
+@@ -2128,7 +2127,7 @@ typedef struct {
+     VkImageLayout                               oldLayout;
+     VkImageLayout                               newLayout;
+     uint32_t                                    srcQueueFamilyIndex;
+-    uint32_t                                    destQueueFamilyIndex;
++    uint32_t                                    dstQueueFamilyIndex;
+     VkImage                                     image;
+     VkImageSubresourceRange                     subresourceRange;
+ } VkImageMemoryBarrier;
+@@ -2141,8 +2140,8 @@ typedef struct {
+ } VkMemoryBarrier;
+-typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkInstance* pInstance);
+-typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
++typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+@@ -2152,8 +2151,8 @@ typedef void (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDev
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+ typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+ typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+-typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDevice* pDevice);
+-typedef void (VKAPI *PFN_vkDestroyDevice)(VkDevice device, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
++typedef void (VKAPI *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+@@ -2162,134 +2161,134 @@ typedef void (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamily
+ typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
+ typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
+-typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* pAllocator, VkDeviceMemory* pMem);
+-typedef void (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory mem, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+-typedef void (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory mem);
+-typedef VkResult (VKAPI *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+-typedef VkResult (VKAPI *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
++typedef VkResult (VKAPI *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
++typedef void (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
++typedef void (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
++typedef VkResult (VKAPI *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
++typedef VkResult (VKAPI *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+ typedef void (VKAPI *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+-typedef VkResult (VKAPI *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset);
+-typedef VkResult (VKAPI *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset);
++typedef VkResult (VKAPI *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
++typedef VkResult (VKAPI *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+ typedef void (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+-typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFence* pFence);
+-typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
++typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+ typedef VkResult (VKAPI *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+-typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSemaphore* pSemaphore);
+-typedef void (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkEvent* pEvent);
+-typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
++typedef void (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
++typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+ typedef VkResult (VKAPI *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+-typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkQueryPool* pQueryPool);
+-typedef void (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
++typedef void (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBuffer* pBuffer);
+-typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBufferView* pView);
+-typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImage* pImage);
+-typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
++typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
++typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
++typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+ typedef void (VKAPI *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+-typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImageView* pView);
+-typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShaderModule* pShaderModule);
+-typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShader* pShader);
+-typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+-typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
++typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
++typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShader* pShader);
++typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
++typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+-typedef VkResult (VKAPI *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+-typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines);
+-typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines);
+-typedef void (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+-typedef void (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSampler* pSampler);
+-typedef void (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+-typedef void (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+-typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
++typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
++typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
++typedef void (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
++typedef void (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
++typedef void (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
++typedef void (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
++typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+-typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
++typedef VkResult (VKAPI *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+ typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+ typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+-typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+-typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkRenderPass* pRenderPass);
+-typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
++typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
++typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+ typedef void (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+-typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkCmdPool* pCmdPool);
+-typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool, const VkAllocCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+-typedef VkResult (VKAPI *PFN_vkAllocCommandBuffers)(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers);
+-typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCmdPool cmdPool, uint32_t commandBufferCount, const VkCmdBuffer* pCommandBuffers);
+-typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo);
+-typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer);
+-typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
+-typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+-typedef void (VKAPI *PFN_vkCmdSetViewport)(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+-typedef void (VKAPI *PFN_vkCmdSetScissor)(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+-typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCmdBuffer cmdBuffer, float lineWidth);
+-typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+-typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCmdBuffer cmdBuffer, const float blendConstants[4]);
+-typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
+-typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+-typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+-typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
+-typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+-typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+-typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+-typedef void (VKAPI *PFN_vkCmdDraw)(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+-typedef void (VKAPI *PFN_vkCmdDrawIndexed)(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+-typedef void (VKAPI *PFN_vkCmdDrawIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+-typedef void (VKAPI *PFN_vkCmdDrawIndexedIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+-typedef void (VKAPI *PFN_vkCmdDispatch)(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+-typedef void (VKAPI *PFN_vkCmdDispatchIndirect)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
+-typedef void (VKAPI *PFN_vkCmdCopyBuffer)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdCopyImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdBlitImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+-typedef void (VKAPI *PFN_vkCmdCopyBufferToImage)(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
+-typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize size, uint32_t data);
+-typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+-typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+-typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-typedef void (VKAPI *PFN_vkCmdWaitEvents)(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+-typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+-typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+-typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
+-typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+-typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCmdBuffer cmdBuffer, VkRenderPassContents contents);
+-typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCmdBuffer cmdBuffer);
+-typedef void (VKAPI *PFN_vkCmdExecuteCommands)(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers);
++typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
++typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool CommandPool, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool CommandPool, VkCommandPoolResetFlags flags);
++typedef VkResult (VKAPI *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
++typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool CommandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
++typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
++typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
++typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
++typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
++typedef void (VKAPI *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports);
++typedef void (VKAPI *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
++typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
++typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
++typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
++typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
++typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
++typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
++typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
++typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
++typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
++typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
++typedef void (VKAPI *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
++typedef void (VKAPI *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
++typedef void (VKAPI *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
++typedef void (VKAPI *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
++typedef void (VKAPI *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
++typedef void (VKAPI *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
++typedef void (VKAPI *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
++typedef void (VKAPI *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
++typedef void (VKAPI *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
++typedef void (VKAPI *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++typedef void (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData);
++typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
++typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
++typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
++typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++typedef void (VKAPI *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
++typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
++typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
++typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot);
++typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
++typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
++typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
++typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
++typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
++typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkRenderPassContents contents);
++typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
++typedef void (VKAPI *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateInstance(
+     const VkInstanceCreateInfo*                 pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkInstance*                                 pInstance);
+ void VKAPI vkDestroyInstance(
+     VkInstance                                  instance,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkEnumeratePhysicalDevices(
+     VkInstance                                  instance,
+@@ -2338,12 +2337,12 @@ PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(
+ VkResult VKAPI vkCreateDevice(
+     VkPhysicalDevice                            physicalDevice,
+     const VkDeviceCreateInfo*                   pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkDevice*                                   pDevice);
+ void VKAPI vkDestroyDevice(
+     VkDevice                                    device,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkEnumerateInstanceExtensionProperties(
+     const char*                                 pLayerName,
+@@ -2383,20 +2382,20 @@ VkResult VKAPI vkQueueWaitIdle(
+ VkResult VKAPI vkDeviceWaitIdle(
+     VkDevice                                    device);
+-VkResult VKAPI vkAllocMemory(
++VkResult VKAPI vkAllocateMemory(
+     VkDevice                                    device,
+-    const VkMemoryAllocInfo*                    pAllocInfo,
+-    const VkAllocCallbacks*                     pAllocator,
+-    VkDeviceMemory*                             pMem);
++    const VkMemoryAllocateInfo*                 pAllocateInfo,
++    const VkAllocationCallbacks*                pAllocator,
++    VkDeviceMemory*                             pMemory);
+ void VKAPI vkFreeMemory(
+     VkDevice                                    device,
+-    VkDeviceMemory                              mem,
+-    const VkAllocCallbacks*                     pAllocator);
++    VkDeviceMemory                              memory,
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkMapMemory(
+     VkDevice                                    device,
+-    VkDeviceMemory                              mem,
++    VkDeviceMemory                              memory,
+     VkDeviceSize                                offset,
+     VkDeviceSize                                size,
+     VkMemoryMapFlags                            flags,
+@@ -2404,17 +2403,17 @@ VkResult VKAPI vkMapMemory(
+ void VKAPI vkUnmapMemory(
+     VkDevice                                    device,
+-    VkDeviceMemory                              mem);
++    VkDeviceMemory                              memory);
+ VkResult VKAPI vkFlushMappedMemoryRanges(
+     VkDevice                                    device,
+-    uint32_t                                    memRangeCount,
+-    const VkMappedMemoryRange*                  pMemRanges);
++    uint32_t                                    memoryRangeCount,
++    const VkMappedMemoryRange*                  pMemoryRanges);
+ VkResult VKAPI vkInvalidateMappedMemoryRanges(
+     VkDevice                                    device,
+-    uint32_t                                    memRangeCount,
+-    const VkMappedMemoryRange*                  pMemRanges);
++    uint32_t                                    memoryRangeCount,
++    const VkMappedMemoryRange*                  pMemoryRanges);
+ void VKAPI vkGetDeviceMemoryCommitment(
+     VkDevice                                    device,
+@@ -2424,14 +2423,14 @@ void VKAPI vkGetDeviceMemoryCommitment(
+ VkResult VKAPI vkBindBufferMemory(
+     VkDevice                                    device,
+     VkBuffer                                    buffer,
+-    VkDeviceMemory                              mem,
+-    VkDeviceSize                                memOffset);
++    VkDeviceMemory                              memory,
++    VkDeviceSize                                memoryOffset);
+ VkResult VKAPI vkBindImageMemory(
+     VkDevice                                    device,
+     VkImage                                     image,
+-    VkDeviceMemory                              mem,
+-    VkDeviceSize                                memOffset);
++    VkDeviceMemory                              memory,
++    VkDeviceSize                                memoryOffset);
+ void VKAPI vkGetBufferMemoryRequirements(
+     VkDevice                                    device,
+@@ -2468,13 +2467,13 @@ VkResult VKAPI vkQueueBindSparse(
+ VkResult VKAPI vkCreateFence(
+     VkDevice                                    device,
+     const VkFenceCreateInfo*                    pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkFence*                                    pFence);
+ void VKAPI vkDestroyFence(
+     VkDevice                                    device,
+     VkFence                                     fence,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkResetFences(
+     VkDevice                                    device,
+@@ -2495,24 +2494,24 @@ VkResult VKAPI vkWaitForFences(
+ VkResult VKAPI vkCreateSemaphore(
+     VkDevice                                    device,
+     const VkSemaphoreCreateInfo*                pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSemaphore*                                pSemaphore);
+ void VKAPI vkDestroySemaphore(
+     VkDevice                                    device,
+     VkSemaphore                                 semaphore,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateEvent(
+     VkDevice                                    device,
+     const VkEventCreateInfo*                    pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkEvent*                                    pEvent);
+ void VKAPI vkDestroyEvent(
+     VkDevice                                    device,
+     VkEvent                                     event,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkGetEventStatus(
+     VkDevice                                    device,
+@@ -2529,13 +2528,13 @@ VkResult VKAPI vkResetEvent(
+ VkResult VKAPI vkCreateQueryPool(
+     VkDevice                                    device,
+     const VkQueryPoolCreateInfo*                pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkQueryPool*                                pQueryPool);
+ void VKAPI vkDestroyQueryPool(
+     VkDevice                                    device,
+     VkQueryPool                                 queryPool,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkGetQueryPoolResults(
+     VkDevice                                    device,
+@@ -2550,35 +2549,35 @@ VkResult VKAPI vkGetQueryPoolResults(
+ VkResult VKAPI vkCreateBuffer(
+     VkDevice                                    device,
+     const VkBufferCreateInfo*                   pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkBuffer*                                   pBuffer);
+ void VKAPI vkDestroyBuffer(
+     VkDevice                                    device,
+     VkBuffer                                    buffer,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateBufferView(
+     VkDevice                                    device,
+     const VkBufferViewCreateInfo*               pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkBufferView*                               pView);
+ void VKAPI vkDestroyBufferView(
+     VkDevice                                    device,
+     VkBufferView                                bufferView,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateImage(
+     VkDevice                                    device,
+     const VkImageCreateInfo*                    pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkImage*                                    pImage);
+ void VKAPI vkDestroyImage(
+     VkDevice                                    device,
+     VkImage                                     image,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ void VKAPI vkGetImageSubresourceLayout(
+     VkDevice                                    device,
+@@ -2589,46 +2588,46 @@ void VKAPI vkGetImageSubresourceLayout(
+ VkResult VKAPI vkCreateImageView(
+     VkDevice                                    device,
+     const VkImageViewCreateInfo*                pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkImageView*                                pView);
+ void VKAPI vkDestroyImageView(
+     VkDevice                                    device,
+     VkImageView                                 imageView,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateShaderModule(
+     VkDevice                                    device,
+     const VkShaderModuleCreateInfo*             pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkShaderModule*                             pShaderModule);
+ void VKAPI vkDestroyShaderModule(
+     VkDevice                                    device,
+     VkShaderModule                              shaderModule,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateShader(
+     VkDevice                                    device,
+     const VkShaderCreateInfo*                   pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkShader*                                   pShader);
+ void VKAPI vkDestroyShader(
+     VkDevice                                    device,
+     VkShader                                    shader,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreatePipelineCache(
+     VkDevice                                    device,
+     const VkPipelineCacheCreateInfo*            pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkPipelineCache*                            pPipelineCache);
+ void VKAPI vkDestroyPipelineCache(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkGetPipelineCacheData(
+     VkDevice                                    device,
+@@ -2638,7 +2637,7 @@ VkResult VKAPI vkGetPipelineCacheData(
+ VkResult VKAPI vkMergePipelineCaches(
+     VkDevice                                    device,
+-    VkPipelineCache                             destCache,
++    VkPipelineCache                             dstCache,
+     uint32_t                                    srcCacheCount,
+     const VkPipelineCache*                      pSrcCaches);
+@@ -2647,7 +2646,7 @@ VkResult VKAPI vkCreateGraphicsPipelines(
+     VkPipelineCache                             pipelineCache,
+     uint32_t                                    createInfoCount,
+     const VkGraphicsPipelineCreateInfo*         pCreateInfos,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkPipeline*                                 pPipelines);
+ VkResult VKAPI vkCreateComputePipelines(
+@@ -2655,66 +2654,66 @@ VkResult VKAPI vkCreateComputePipelines(
+     VkPipelineCache                             pipelineCache,
+     uint32_t                                    createInfoCount,
+     const VkComputePipelineCreateInfo*          pCreateInfos,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkPipeline*                                 pPipelines);
+ void VKAPI vkDestroyPipeline(
+     VkDevice                                    device,
+     VkPipeline                                  pipeline,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreatePipelineLayout(
+     VkDevice                                    device,
+     const VkPipelineLayoutCreateInfo*           pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkPipelineLayout*                           pPipelineLayout);
+ void VKAPI vkDestroyPipelineLayout(
+     VkDevice                                    device,
+     VkPipelineLayout                            pipelineLayout,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateSampler(
+     VkDevice                                    device,
+     const VkSamplerCreateInfo*                  pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSampler*                                  pSampler);
+ void VKAPI vkDestroySampler(
+     VkDevice                                    device,
+     VkSampler                                   sampler,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateDescriptorSetLayout(
+     VkDevice                                    device,
+     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkDescriptorSetLayout*                      pSetLayout);
+ void VKAPI vkDestroyDescriptorSetLayout(
+     VkDevice                                    device,
+     VkDescriptorSetLayout                       descriptorSetLayout,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateDescriptorPool(
+     VkDevice                                    device,
+     const VkDescriptorPoolCreateInfo*           pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkDescriptorPool*                           pDescriptorPool);
+ void VKAPI vkDestroyDescriptorPool(
+     VkDevice                                    device,
+     VkDescriptorPool                            descriptorPool,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkResetDescriptorPool(
+     VkDevice                                    device,
+     VkDescriptorPool                            descriptorPool,
+     VkDescriptorPoolResetFlags                  flags);
+-VkResult VKAPI vkAllocDescriptorSets(
++VkResult VKAPI vkAllocateDescriptorSets(
+     VkDevice                                    device,
+-    const VkDescriptorSetAllocInfo*             pAllocInfo,
++    const VkDescriptorSetAllocateInfo*          pAllocateInfo,
+     VkDescriptorSet*                            pDescriptorSets);
+ VkResult VKAPI vkFreeDescriptorSets(
+@@ -2733,24 +2732,24 @@ void VKAPI vkUpdateDescriptorSets(
+ VkResult VKAPI vkCreateFramebuffer(
+     VkDevice                                    device,
+     const VkFramebufferCreateInfo*              pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkFramebuffer*                              pFramebuffer);
+ void VKAPI vkDestroyFramebuffer(
+     VkDevice                                    device,
+     VkFramebuffer                               framebuffer,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkCreateRenderPass(
+     VkDevice                                    device,
+     const VkRenderPassCreateInfo*               pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
++    const VkAllocationCallbacks*                pAllocator,
+     VkRenderPass*                               pRenderPass);
+ void VKAPI vkDestroyRenderPass(
+     VkDevice                                    device,
+     VkRenderPass                                renderPass,
+-    const VkAllocCallbacks*                     pAllocator);
++    const VkAllocationCallbacks*                pAllocator);
+ void VKAPI vkGetRenderAreaGranularity(
+     VkDevice                                    device,
+@@ -2759,93 +2758,93 @@ void VKAPI vkGetRenderAreaGranularity(
+ VkResult VKAPI vkCreateCommandPool(
+     VkDevice                                    device,
+-    const VkCmdPoolCreateInfo*                  pCreateInfo,
+-    const VkAllocCallbacks*                     pAllocator,
+-    VkCmdPool*                                  pCmdPool);
++    const VkCommandPoolCreateInfo*              pCreateInfo,
++    const VkAllocationCallbacks*                pAllocator,
++    VkCommandPool*                              pCommandPool);
+ void VKAPI vkDestroyCommandPool(
+     VkDevice                                    device,
+-    VkCmdPool                                   cmdPool,
+-    const VkAllocCallbacks*                     pAllocator);
++    VkCommandPool                               CommandPool,
++    const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkResetCommandPool(
+     VkDevice                                    device,
+-    VkCmdPool                                   cmdPool,
+-    VkCmdPoolResetFlags                         flags);
++    VkCommandPool                               CommandPool,
++    VkCommandPoolResetFlags                     flags);
+-VkResult VKAPI vkAllocCommandBuffers(
++VkResult VKAPI vkAllocateCommandBuffers(
+     VkDevice                                    device,
+-    const VkCmdBufferAllocInfo*                 pAllocInfo,
+-    VkCmdBuffer*                                pCmdBuffers);
++    const VkCommandBufferAllocateInfo*          pAllocateInfo,
++    VkCommandBuffer*                            pCommandBuffers);
+ void VKAPI vkFreeCommandBuffers(
+     VkDevice                                    device,
+-    VkCmdPool                                   cmdPool,
++    VkCommandPool                               CommandPool,
+     uint32_t                                    commandBufferCount,
+-    const VkCmdBuffer*                          pCommandBuffers);
++    const VkCommandBuffer*                      pCommandBuffers);
+ VkResult VKAPI vkBeginCommandBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
+-    const VkCmdBufferBeginInfo*                 pBeginInfo);
++    VkCommandBuffer                             commandBuffer,
++    const VkCommandBufferBeginInfo*             pBeginInfo);
+ VkResult VKAPI vkEndCommandBuffer(
+-    VkCmdBuffer                                 cmdBuffer);
++    VkCommandBuffer                             commandBuffer);
+ VkResult VKAPI vkResetCommandBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
+-    VkCmdBufferResetFlags                       flags);
++    VkCommandBuffer                             commandBuffer,
++    VkCommandBufferResetFlags                   flags);
+ void VKAPI vkCmdBindPipeline(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkPipelineBindPoint                         pipelineBindPoint,
+     VkPipeline                                  pipeline);
+ void VKAPI vkCmdSetViewport(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    viewportCount,
+     const VkViewport*                           pViewports);
+ void VKAPI vkCmdSetScissor(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    scissorCount,
+     const VkRect2D*                             pScissors);
+ void VKAPI vkCmdSetLineWidth(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     float                                       lineWidth);
+ void VKAPI vkCmdSetDepthBias(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     float                                       depthBiasConstantFactor,
+     float                                       depthBiasClamp,
+     float                                       depthBiasSlopeFactor);
+ void VKAPI vkCmdSetBlendConstants(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     const float                                 blendConstants[4]);
+ void VKAPI vkCmdSetDepthBounds(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     float                                       minDepthBounds,
+     float                                       maxDepthBounds);
+ void VKAPI vkCmdSetStencilCompareMask(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+     uint32_t                                    stencilCompareMask);
+ void VKAPI vkCmdSetStencilWriteMask(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+     uint32_t                                    stencilWriteMask);
+ void VKAPI vkCmdSetStencilReference(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+     uint32_t                                    stencilReference);
+ void VKAPI vkCmdBindDescriptorSets(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkPipelineBindPoint                         pipelineBindPoint,
+     VkPipelineLayout                            layout,
+     uint32_t                                    firstSet,
+@@ -2855,27 +2854,27 @@ void VKAPI vkCmdBindDescriptorSets(
+     const uint32_t*                             pDynamicOffsets);
+ void VKAPI vkCmdBindIndexBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+     VkIndexType                                 indexType);
+ void VKAPI vkCmdBindVertexBuffers(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    startBinding,
+     uint32_t                                    bindingCount,
+     const VkBuffer*                             pBuffers,
+     const VkDeviceSize*                         pOffsets);
+ void VKAPI vkCmdDraw(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    vertexCount,
+     uint32_t                                    instanceCount,
+     uint32_t                                    firstVertex,
+     uint32_t                                    firstInstance);
+ void VKAPI vkCmdDrawIndexed(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    indexCount,
+     uint32_t                                    instanceCount,
+     uint32_t                                    firstIndex,
+@@ -2883,88 +2882,88 @@ void VKAPI vkCmdDrawIndexed(
+     uint32_t                                    firstInstance);
+ void VKAPI vkCmdDrawIndirect(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+     uint32_t                                    drawCount,
+     uint32_t                                    stride);
+ void VKAPI vkCmdDrawIndexedIndirect(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+     uint32_t                                    drawCount,
+     uint32_t                                    stride);
+ void VKAPI vkCmdDispatch(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    x,
+     uint32_t                                    y,
+     uint32_t                                    z);
+ void VKAPI vkCmdDispatchIndirect(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset);
+ void VKAPI vkCmdCopyBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    srcBuffer,
+-    VkBuffer                                    destBuffer,
++    VkBuffer                                    dstBuffer,
+     uint32_t                                    regionCount,
+     const VkBufferCopy*                         pRegions);
+ void VKAPI vkCmdCopyImage(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+-    VkImage                                     destImage,
+-    VkImageLayout                               destImageLayout,
++    VkImage                                     dstImage,
++    VkImageLayout                               dstImageLayout,
+     uint32_t                                    regionCount,
+     const VkImageCopy*                          pRegions);
+ void VKAPI vkCmdBlitImage(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+-    VkImage                                     destImage,
+-    VkImageLayout                               destImageLayout,
++    VkImage                                     dstImage,
++    VkImageLayout                               dstImageLayout,
+     uint32_t                                    regionCount,
+     const VkImageBlit*                          pRegions,
+     VkFilter                                    filter);
+ void VKAPI vkCmdCopyBufferToImage(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    srcBuffer,
+-    VkImage                                     destImage,
+-    VkImageLayout                               destImageLayout,
++    VkImage                                     dstImage,
++    VkImageLayout                               dstImageLayout,
+     uint32_t                                    regionCount,
+     const VkBufferImageCopy*                    pRegions);
+ void VKAPI vkCmdCopyImageToBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+-    VkBuffer                                    destBuffer,
++    VkBuffer                                    dstBuffer,
+     uint32_t                                    regionCount,
+     const VkBufferImageCopy*                    pRegions);
+ void VKAPI vkCmdUpdateBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
+-    VkBuffer                                    destBuffer,
+-    VkDeviceSize                                destOffset,
++    VkCommandBuffer                             commandBuffer,
++    VkBuffer                                    dstBuffer,
++    VkDeviceSize                                dstOffset,
+     VkDeviceSize                                dataSize,
+     const uint32_t*                             pData);
+ void VKAPI vkCmdFillBuffer(
+-    VkCmdBuffer                                 cmdBuffer,
+-    VkBuffer                                    destBuffer,
+-    VkDeviceSize                                destOffset,
++    VkCommandBuffer                             commandBuffer,
++    VkBuffer                                    dstBuffer,
++    VkDeviceSize                                dstOffset,
+     VkDeviceSize                                size,
+     uint32_t                                    data);
+ void VKAPI vkCmdClearColorImage(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkImage                                     image,
+     VkImageLayout                               imageLayout,
+     const VkClearColorValue*                    pColor,
+@@ -2972,7 +2971,7 @@ void VKAPI vkCmdClearColorImage(
+     const VkImageSubresourceRange*              pRanges);
+ void VKAPI vkCmdClearDepthStencilImage(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkImage                                     image,
+     VkImageLayout                               imageLayout,
+     const VkClearDepthStencilValue*             pDepthStencil,
+@@ -2980,83 +2979,83 @@ void VKAPI vkCmdClearDepthStencilImage(
+     const VkImageSubresourceRange*              pRanges);
+ void VKAPI vkCmdClearAttachments(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    attachmentCount,
+     const VkClearAttachment*                    pAttachments,
+     uint32_t                                    rectCount,
+     const VkClearRect*                          pRects);
+ void VKAPI vkCmdResolveImage(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+-    VkImage                                     destImage,
+-    VkImageLayout                               destImageLayout,
++    VkImage                                     dstImage,
++    VkImageLayout                               dstImageLayout,
+     uint32_t                                    regionCount,
+     const VkImageResolve*                       pRegions);
+ void VKAPI vkCmdSetEvent(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkEvent                                     event,
+     VkPipelineStageFlags                        stageMask);
+ void VKAPI vkCmdResetEvent(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkEvent                                     event,
+     VkPipelineStageFlags                        stageMask);
+ void VKAPI vkCmdWaitEvents(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     uint32_t                                    eventCount,
+     const VkEvent*                              pEvents,
+     VkPipelineStageFlags                        srcStageMask,
+-    VkPipelineStageFlags                        destStageMask,
+-    uint32_t                                    memBarrierCount,
+-    const void* const*                          ppMemBarriers);
++    VkPipelineStageFlags                        dstStageMask,
++    uint32_t                                    memoryBarrierCount,
++    const void* const*                          ppMemoryBarriers);
+ void VKAPI vkCmdPipelineBarrier(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkPipelineStageFlags                        srcStageMask,
+-    VkPipelineStageFlags                        destStageMask,
++    VkPipelineStageFlags                        dstStageMask,
+     VkDependencyFlags                           dependencyFlags,
+-    uint32_t                                    memBarrierCount,
+-    const void* const*                          ppMemBarriers);
++    uint32_t                                    memoryBarrierCount,
++    const void* const*                          ppMemoryBarriers);
+ void VKAPI vkCmdBeginQuery(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    slot,
+     VkQueryControlFlags                         flags);
+ void VKAPI vkCmdEndQuery(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    slot);
+ void VKAPI vkCmdResetQueryPool(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    startQuery,
+     uint32_t                                    queryCount);
+ void VKAPI vkCmdWriteTimestamp(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkPipelineStageFlagBits                     pipelineStage,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    slot);
+ void VKAPI vkCmdCopyQueryPoolResults(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    startQuery,
+     uint32_t                                    queryCount,
+-    VkBuffer                                    destBuffer,
+-    VkDeviceSize                                destOffset,
++    VkBuffer                                    dstBuffer,
++    VkDeviceSize                                dstOffset,
+     VkDeviceSize                                stride,
+     VkQueryResultFlags                          flags);
+ void VKAPI vkCmdPushConstants(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkPipelineLayout                            layout,
+     VkShaderStageFlags                          stageFlags,
+     uint32_t                                    offset,
+@@ -3064,25 +3063,25 @@ void VKAPI vkCmdPushConstants(
+     const void*                                 values);
+ void VKAPI vkCmdBeginRenderPass(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     const VkRenderPassBeginInfo*                pRenderPassBegin,
+     VkRenderPassContents                        contents);
+ void VKAPI vkCmdNextSubpass(
+-    VkCmdBuffer                                 cmdBuffer,
++    VkCommandBuffer                             commandBuffer,
+     VkRenderPassContents                        contents);
+ void VKAPI vkCmdEndRenderPass(
+-    VkCmdBuffer                                 cmdBuffer);
++    VkCommandBuffer                             commandBuffer);
+ void VKAPI vkCmdExecuteCommands(
+-    VkCmdBuffer                                 cmdBuffer,
+-    uint32_t                                    cmdBuffersCount,
+-    const VkCmdBuffer*                          pCmdBuffers);
++    VkCommandBuffer                             commandBuffer,
++    uint32_t                                    commandBuffersCount,
++    const VkCommandBuffer*                      pCommandBuffers);
+ #endif
+ #define vk_ext_khr_surface 1
+-VK_DEFINE_NONDISP_HANDLE(VkSurfaceKHR)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+ #define VK_EXT_KHR_SURFACE_REVISION       20
+ #define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER 1
+@@ -3102,7 +3101,7 @@ typedef enum {
+     VK_SURFACE_TRANSFORM_INHERIT_KHR = 8,
+     VK_SURFACE_TRANSFORM_BEGIN_RANGE = VK_SURFACE_TRANSFORM_NONE_KHR,
+     VK_SURFACE_TRANSFORM_END_RANGE = VK_SURFACE_TRANSFORM_INHERIT_KHR,
+-    VK_SURFACE_TRANSFORM_NUM = (VK_SURFACE_TRANSFORM_INHERIT_KHR - VK_SURFACE_TRANSFORM_NONE_KHR + 1),
++    VK_SURFACE_TRANSFORM_RANGE_SIZE = (VK_SURFACE_TRANSFORM_INHERIT_KHR - VK_SURFACE_TRANSFORM_NONE_KHR + 1),
+     VK_SURFACE_TRANSFORM_MAX_ENUM = 0x7FFFFFFF
+ } VkSurfaceTransformKHR;
+@@ -3110,7 +3109,7 @@ typedef enum {
+     VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0,
+     VK_COLORSPACE_BEGIN_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+     VK_COLORSPACE_END_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+-    VK_COLORSPACE_NUM = (VK_COLORSPACE_SRGB_NONLINEAR_KHR - VK_COLORSPACE_SRGB_NONLINEAR_KHR + 1),
++    VK_COLORSPACE_RANGE_SIZE = (VK_COLORSPACE_SRGB_NONLINEAR_KHR - VK_COLORSPACE_SRGB_NONLINEAR_KHR + 1),
+     VK_COLORSPACE_MAX_ENUM = 0x7FFFFFFF
+ } VkColorSpaceKHR;
+@@ -3121,7 +3120,7 @@ typedef enum {
+     VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
+     VK_PRESENT_MODE_BEGIN_RANGE = VK_PRESENT_MODE_IMMEDIATE_KHR,
+     VK_PRESENT_MODE_END_RANGE = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
+-    VK_PRESENT_MODE_NUM = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
++    VK_PRESENT_MODE_RANGE_SIZE = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
+     VK_PRESENT_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkPresentModeKHR;
+@@ -3202,14 +3201,14 @@ VkResult VKAPI vkGetPhysicalDeviceSurfacePresentModesKHR(
+ #endif
+ #define vk_ext_khr_swapchain 1
+-VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+ #define VK_EXT_KHR_SWAPCHAIN_REVISION     62
+ #define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+ #define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
+ #define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+ #define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0000801)
+-#define VK_IMAGE_LAYOUT_PRESENT_SOURCE_KHR ((VkImageLayout)(int)0xc0000802)
++#define VK_IMAGE_LAYOUT_PRESENT_SRC_KHR   ((VkImageLayout)(int)0xc0000802)
+ #define VK_SUBOPTIMAL_KHR                 ((VkResult)(int)0x40000403)
+ #define VK_ERROR_OUT_OF_DATE_KHR          ((VkResult)(int)0xc0000804)
+@@ -3280,8 +3279,8 @@ VkResult VKAPI vkQueuePresentKHR(
+ #endif
+ #define vk_ext_khr_display 1
+-VK_DEFINE_NONDISP_HANDLE(VkDisplayKHR)
+-VK_DEFINE_NONDISP_HANDLE(VkDisplayModeKHR)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
++VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+ #define VK_EXT_KHR_DISPLAY_REVISION       17
+ #define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 3
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 31f0231..a2b4c0f 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -36,18 +36,18 @@ namespace {
+     inline const DeviceVtbl& GetVtbl(VkQueue queue) {
+         return **reinterpret_cast<DeviceVtbl**>(queue);
+     }
+-    inline const DeviceVtbl& GetVtbl(VkCmdBuffer cmdBuffer) {
+-        return **reinterpret_cast<DeviceVtbl**>(cmdBuffer);
++    inline const DeviceVtbl& GetVtbl(VkCommandBuffer commandBuffer) {
++        return **reinterpret_cast<DeviceVtbl**>(commandBuffer);
+     }
+ } // namespace
+ __attribute__((visibility("default")))
+-VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkInstance* pInstance) {
++VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) {
+     return vulkan::CreateInstance(pCreateInfo, pAllocator, pInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyInstance(VkInstance instance, const VkAllocCallbacks* pAllocator) {
++void vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(instance).DestroyInstance(instance, pAllocator);
+ }
+@@ -97,12 +97,12 @@ void vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, V
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDevice* pDevice) {
++VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) {
+     return GetVtbl(physicalDevice).CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDevice(VkDevice device, const VkAllocCallbacks* pAllocator) {
++void vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) {
+     vulkan::DestroyDevice(device, pAllocator);
+ }
+@@ -147,33 +147,33 @@ VkResult vkDeviceWaitIdle(VkDevice device) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* pAllocator, VkDeviceMemory* pMem) {
+-    return GetVtbl(device).AllocMemory(device, pAllocInfo, pAllocator, pMem);
++VkResult vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) {
++    return GetVtbl(device).AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
+ }
+ __attribute__((visibility("default")))
+-void vkFreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocCallbacks* pAllocator) {
+-    GetVtbl(device).FreeMemory(device, mem, pAllocator);
++void vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) {
++    GetVtbl(device).FreeMemory(device, memory, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) {
+-    return GetVtbl(device).MapMemory(device, mem, offset, size, flags, ppData);
++VkResult vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) {
++    return GetVtbl(device).MapMemory(device, memory, offset, size, flags, ppData);
+ }
+ __attribute__((visibility("default")))
+-void vkUnmapMemory(VkDevice device, VkDeviceMemory mem) {
+-    GetVtbl(device).UnmapMemory(device, mem);
++void vkUnmapMemory(VkDevice device, VkDeviceMemory memory) {
++    GetVtbl(device).UnmapMemory(device, memory);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkFlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
+-    return GetVtbl(device).FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
++VkResult vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) {
++    return GetVtbl(device).FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
+-    return GetVtbl(device).InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
++VkResult vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) {
++    return GetVtbl(device).InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+ }
+ __attribute__((visibility("default")))
+@@ -187,8 +187,8 @@ void vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryReq
+ }
+ __attribute__((visibility("default")))
+-VkResult vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) {
+-    return GetVtbl(device).BindBufferMemory(device, buffer, mem, memOffset);
++VkResult vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) {
++    return GetVtbl(device).BindBufferMemory(device, buffer, memory, memoryOffset);
+ }
+ __attribute__((visibility("default")))
+@@ -197,8 +197,8 @@ void vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequir
+ }
+ __attribute__((visibility("default")))
+-VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) {
+-    return GetVtbl(device).BindImageMemory(device, image, mem, memOffset);
++VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) {
++    return GetVtbl(device).BindImageMemory(device, image, memory, memoryOffset);
+ }
+ __attribute__((visibility("default")))
+@@ -217,12 +217,12 @@ VkResult vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSp
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFence* pFence) {
++VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) {
+     return GetVtbl(device).CreateFence(device, pCreateInfo, pAllocator, pFence);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* pAllocator) {
++void vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyFence(device, fence, pAllocator);
+ }
+@@ -242,22 +242,22 @@ VkResult vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pF
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSemaphore* pSemaphore) {
++VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) {
+     return GetVtbl(device).CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* pAllocator) {
++void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroySemaphore(device, semaphore, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkEvent* pEvent) {
++VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) {
+     return GetVtbl(device).CreateEvent(device, pCreateInfo, pAllocator, pEvent);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocCallbacks* pAllocator) {
++void vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyEvent(device, event, pAllocator);
+ }
+@@ -277,12 +277,12 @@ VkResult vkResetEvent(VkDevice device, VkEvent event) {
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkQueryPool* pQueryPool) {
++VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) {
+     return GetVtbl(device).CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* pAllocator) {
++void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyQueryPool(device, queryPool, pAllocator);
+ }
+@@ -292,32 +292,32 @@ VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBuffer* pBuffer) {
++VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) {
+     return GetVtbl(device).CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocCallbacks* pAllocator) {
++void vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyBuffer(device, buffer, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkBufferView* pView) {
++VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) {
+     return GetVtbl(device).CreateBufferView(device, pCreateInfo, pAllocator, pView);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* pAllocator) {
++void vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyBufferView(device, bufferView, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImage* pImage) {
++VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) {
+     return GetVtbl(device).CreateImage(device, pCreateInfo, pAllocator, pImage);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyImage(VkDevice device, VkImage image, const VkAllocCallbacks* pAllocator) {
++void vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyImage(device, image, pAllocator);
+ }
+@@ -327,42 +327,42 @@ void vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSu
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkImageView* pView) {
++VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) {
+     return GetVtbl(device).CreateImageView(device, pCreateInfo, pAllocator, pView);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocCallbacks* pAllocator) {
++void vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyImageView(device, imageView, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShaderModule* pShaderModule) {
++VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) {
+     return GetVtbl(device).CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* pAllocator) {
++void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyShaderModule(device, shaderModule, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkShader* pShader) {
++VkResult vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShader* pShader) {
+     return GetVtbl(device).CreateShader(device, pCreateInfo, pAllocator, pShader);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyShader(VkDevice device, VkShader shader, const VkAllocCallbacks* pAllocator) {
++void vkDestroyShader(VkDevice device, VkShader shader, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyShader(device, shader, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineCache* pPipelineCache) {
++VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) {
+     return GetVtbl(device).CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* pAllocator) {
++void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyPipelineCache(device, pipelineCache, pAllocator);
+ }
+@@ -372,62 +372,62 @@ VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache,
+ }
+ __attribute__((visibility("default")))
+-VkResult vkMergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
+-    return GetVtbl(device).MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
++VkResult vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
++    return GetVtbl(device).MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines) {
++VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) {
+     return GetVtbl(device).CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* pAllocator, VkPipeline* pPipelines) {
++VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) {
+     return GetVtbl(device).CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* pAllocator) {
++void vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyPipeline(device, pipeline, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) {
++VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) {
+     return GetVtbl(device).CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* pAllocator) {
++void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyPipelineLayout(device, pipelineLayout, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkSampler* pSampler) {
++VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) {
+     return GetVtbl(device).CreateSampler(device, pCreateInfo, pAllocator, pSampler);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocCallbacks* pAllocator) {
++void vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroySampler(device, sampler, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) {
++VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) {
+     return GetVtbl(device).CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* pAllocator) {
++void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) {
++VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) {
+     return GetVtbl(device).CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* pAllocator) {
++void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyDescriptorPool(device, descriptorPool, pAllocator);
+ }
+@@ -437,8 +437,8 @@ VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets) {
+-    return GetVtbl(device).AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
++VkResult vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) {
++    return GetVtbl(device).AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
+ }
+ __attribute__((visibility("default")))
+@@ -452,22 +452,22 @@ void vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, cons
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFramebuffer* pFramebuffer) {
++VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) {
+     return GetVtbl(device).CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* pAllocator) {
++void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyFramebuffer(device, framebuffer, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkRenderPass* pRenderPass) {
++VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) {
+     return GetVtbl(device).CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* pAllocator) {
++void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyRenderPass(device, renderPass, pAllocator);
+ }
+@@ -477,263 +477,263 @@ void vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExte
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkCmdPool* pCmdPool) {
+-    return GetVtbl(device).CreateCommandPool(device, pCreateInfo, pAllocator, pCmdPool);
++VkResult vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) {
++    return GetVtbl(device).CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool, const VkAllocCallbacks* pAllocator) {
+-    GetVtbl(device).DestroyCommandPool(device, cmdPool, pAllocator);
++void vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) {
++    GetVtbl(device).DestroyCommandPool(device, commandPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) {
+-    return GetVtbl(device).ResetCommandPool(device, cmdPool, flags);
++VkResult vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) {
++    return GetVtbl(device).ResetCommandPool(device, commandPool, flags);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocCommandBuffers(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers) {
+-    return GetVtbl(device).AllocCommandBuffers(device, pAllocInfo, pCmdBuffers);
++VkResult vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) {
++    return GetVtbl(device).AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+-void vkFreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t commandBufferCount, const VkCmdBuffer* pCommandBuffers) {
+-    GetVtbl(device).FreeCommandBuffers(device, cmdPool, commandBufferCount, pCommandBuffers);
++void vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) {
++    GetVtbl(device).FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) {
+-    return GetVtbl(cmdBuffer).BeginCommandBuffer(cmdBuffer, pBeginInfo);
++VkResult vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) {
++    return GetVtbl(commandBuffer).BeginCommandBuffer(commandBuffer, pBeginInfo);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEndCommandBuffer(VkCmdBuffer cmdBuffer) {
+-    return GetVtbl(cmdBuffer).EndCommandBuffer(cmdBuffer);
++VkResult vkEndCommandBuffer(VkCommandBuffer commandBuffer) {
++    return GetVtbl(commandBuffer).EndCommandBuffer(commandBuffer);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) {
+-    return GetVtbl(cmdBuffer).ResetCommandBuffer(cmdBuffer, flags);
++VkResult vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) {
++    return GetVtbl(commandBuffer).ResetCommandBuffer(commandBuffer, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
+-    GetVtbl(cmdBuffer).CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
++void vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
++    GetVtbl(commandBuffer).CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
+-    GetVtbl(cmdBuffer).CmdSetViewport(cmdBuffer, viewportCount, pViewports);
++void vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
++    GetVtbl(commandBuffer).CmdSetViewport(commandBuffer, viewportCount, pViewports);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
+-    GetVtbl(cmdBuffer).CmdSetScissor(cmdBuffer, scissorCount, pScissors);
++void vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
++    GetVtbl(commandBuffer).CmdSetScissor(commandBuffer, scissorCount, pScissors);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth) {
+-    GetVtbl(cmdBuffer).CmdSetLineWidth(cmdBuffer, lineWidth);
++void vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) {
++    GetVtbl(commandBuffer).CmdSetLineWidth(commandBuffer, lineWidth);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) {
+-    GetVtbl(cmdBuffer).CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
++void vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) {
++    GetVtbl(commandBuffer).CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConstants[4]) {
+-    GetVtbl(cmdBuffer).CmdSetBlendConstants(cmdBuffer, blendConstants);
++void vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) {
++    GetVtbl(commandBuffer).CmdSetBlendConstants(commandBuffer, blendConstants);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds) {
+-    GetVtbl(cmdBuffer).CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
++void vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) {
++    GetVtbl(commandBuffer).CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
+-    GetVtbl(cmdBuffer).CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
++void vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
++    GetVtbl(commandBuffer).CmdSetStencilCompareMask(commandBuffer, faceMask, stencilCompareMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
+-    GetVtbl(cmdBuffer).CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
++void vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
++    GetVtbl(commandBuffer).CmdSetStencilWriteMask(commandBuffer, faceMask, stencilWriteMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
+-    GetVtbl(cmdBuffer).CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
++void vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
++    GetVtbl(commandBuffer).CmdSetStencilReference(commandBuffer, faceMask, stencilReference);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
+-    GetVtbl(cmdBuffer).CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
++void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
++    GetVtbl(commandBuffer).CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
+-    GetVtbl(cmdBuffer).CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
++void vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
++    GetVtbl(commandBuffer).CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
+-    GetVtbl(cmdBuffer).CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
++void vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
++    GetVtbl(commandBuffer).CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
+-    GetVtbl(cmdBuffer).CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
++void vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
++    GetVtbl(commandBuffer).CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
+-    GetVtbl(cmdBuffer).CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
++void vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
++    GetVtbl(commandBuffer).CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
+-    GetVtbl(cmdBuffer).CmdDrawIndirect(cmdBuffer, buffer, offset, drawCount, stride);
++void vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
++    GetVtbl(commandBuffer).CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
+-    GetVtbl(cmdBuffer).CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, drawCount, stride);
++void vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
++    GetVtbl(commandBuffer).CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) {
+-    GetVtbl(cmdBuffer).CmdDispatch(cmdBuffer, x, y, z);
++void vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) {
++    GetVtbl(commandBuffer).CmdDispatch(commandBuffer, x, y, z);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) {
+-    GetVtbl(cmdBuffer).CmdDispatchIndirect(cmdBuffer, buffer, offset);
++void vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) {
++    GetVtbl(commandBuffer).CmdDispatchIndirect(commandBuffer, buffer, offset);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
+-    GetVtbl(cmdBuffer).CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
++void vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
++    GetVtbl(commandBuffer).CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
+-    GetVtbl(cmdBuffer).CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
++void vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
++    GetVtbl(commandBuffer).CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
+-    GetVtbl(cmdBuffer).CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
++void vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
++    GetVtbl(commandBuffer).CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+-    GetVtbl(cmdBuffer).CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
++void vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
++    GetVtbl(commandBuffer).CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+-    GetVtbl(cmdBuffer).CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
++void vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
++    GetVtbl(commandBuffer).CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) {
+-    GetVtbl(cmdBuffer).CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
++void vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData) {
++    GetVtbl(commandBuffer).CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize size, uint32_t data) {
+-    GetVtbl(cmdBuffer).CmdFillBuffer(cmdBuffer, destBuffer, destOffset, size, data);
++void vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data) {
++    GetVtbl(commandBuffer).CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+-    GetVtbl(cmdBuffer).CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
++void vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
++    GetVtbl(commandBuffer).CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+-    GetVtbl(cmdBuffer).CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
++void vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
++    GetVtbl(commandBuffer).CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
+-    GetVtbl(cmdBuffer).CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
++void vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
++    GetVtbl(commandBuffer).CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
+-    GetVtbl(cmdBuffer).CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
++void vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
++    GetVtbl(commandBuffer).CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
+-    GetVtbl(cmdBuffer).CmdSetEvent(cmdBuffer, event, stageMask);
++void vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
++    GetVtbl(commandBuffer).CmdSetEvent(commandBuffer, event, stageMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
+-    GetVtbl(cmdBuffer).CmdResetEvent(cmdBuffer, event, stageMask);
++void vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
++    GetVtbl(commandBuffer).CmdResetEvent(commandBuffer, event, stageMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+-    GetVtbl(cmdBuffer).CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
++void vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers) {
++    GetVtbl(commandBuffer).CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+-    GetVtbl(cmdBuffer).CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, dependencyFlags, memBarrierCount, ppMemBarriers);
++void vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers) {
++    GetVtbl(commandBuffer).CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
+-    GetVtbl(cmdBuffer).CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
++void vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
++    GetVtbl(commandBuffer).CmdBeginQuery(commandBuffer, queryPool, slot, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
+-    GetVtbl(cmdBuffer).CmdEndQuery(cmdBuffer, queryPool, slot);
++void vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot) {
++    GetVtbl(commandBuffer).CmdEndQuery(commandBuffer, queryPool, slot);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
+-    GetVtbl(cmdBuffer).CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
++void vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
++    GetVtbl(commandBuffer).CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
+-    GetVtbl(cmdBuffer).CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
++void vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
++    GetVtbl(commandBuffer).CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags) {
+-    GetVtbl(cmdBuffer).CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
++void vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) {
++    GetVtbl(commandBuffer).CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values) {
+-    GetVtbl(cmdBuffer).CmdPushConstants(cmdBuffer, layout, stageFlags, offset, size, values);
++void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values) {
++    GetVtbl(commandBuffer).CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
+-    GetVtbl(cmdBuffer).CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
++void vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
++    GetVtbl(commandBuffer).CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents) {
+-    GetVtbl(cmdBuffer).CmdNextSubpass(cmdBuffer, contents);
++void vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkRenderPassContents contents) {
++    GetVtbl(commandBuffer).CmdNextSubpass(commandBuffer, contents);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdEndRenderPass(VkCmdBuffer cmdBuffer) {
+-    GetVtbl(cmdBuffer).CmdEndRenderPass(cmdBuffer);
++void vkCmdEndRenderPass(VkCommandBuffer commandBuffer) {
++    GetVtbl(commandBuffer).CmdEndRenderPass(commandBuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) {
+-    GetVtbl(cmdBuffer).CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
++void vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers) {
++    GetVtbl(commandBuffer).CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/entry.cpp.tmpl b/vulkan/libvulkan/entry.cpp.tmpl
+index d0e665f..5aed3df 100644
+--- a/vulkan/libvulkan/entry.cpp.tmpl
++++ b/vulkan/libvulkan/entry.cpp.tmpl
+@@ -63,8 +63,8 @@ namespace {
+     inline const DeviceVtbl& GetVtbl(VkQueue queue) {
+         return **reinterpret_cast<DeviceVtbl**>(queue);
+     }
+-    inline const DeviceVtbl& GetVtbl(VkCmdBuffer cmdBuffer) {
+-        return **reinterpret_cast<DeviceVtbl**>(cmdBuffer);
++    inline const DeviceVtbl& GetVtbl(VkCommandBuffer commandBuffer) {
++        return **reinterpret_cast<DeviceVtbl**>(commandBuffer);
+     }
+ } // namespace
+ ¶
+@@ -159,7 +159,7 @@ namespace {
+ {{define "Dispatch#VkPhysicalDevice"}}GetVtbl({{$.Node.Name}}).{{end}}
+ {{define "Dispatch#VkDevice"        }}GetVtbl({{$.Node.Name}}).{{end}}
+ {{define "Dispatch#VkQueue"         }}GetVtbl({{$.Node.Name}}).{{end}}
+-{{define "Dispatch#VkCmdBuffer"     }}GetVtbl({{$.Node.Name}}).{{end}}
++{{define "Dispatch#VkCommandBuffer" }}GetVtbl({{$.Node.Name}}).{{end}}
+ {{define "Dispatch_Default"         }}vulkan::{{end}}
+ {{define "Dispatch"}}
+   {{AssertType $ "Function"}}
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index 4e08015..f6a6510 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -74,9 +74,9 @@ const NameProcEntry kInstanceProcTbl[] = {
+ const NameProcEntry kDeviceProcTbl[] = {
+     // clang-format off
+     {"vkAcquireNextImageKHR", reinterpret_cast<PFN_vkVoidFunction>(vkAcquireNextImageKHR)},
+-    {"vkAllocCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkAllocCommandBuffers)},
+-    {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocDescriptorSets)},
+-    {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocMemory)},
++    {"vkAllocateCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkAllocateCommandBuffers)},
++    {"vkAllocateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocateDescriptorSets)},
++    {"vkAllocateMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocateMemory)},
+     {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkBeginCommandBuffer)},
+     {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindBufferMemory)},
+     {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindImageMemory)},
+@@ -231,9 +231,9 @@ const NameOffsetEntry kInstanceOffsetTbl[] = {
+ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     // clang-format off
+     {"vkAcquireNextImageKHR", offsetof(DeviceVtbl, AcquireNextImageKHR)},
+-    {"vkAllocCommandBuffers", offsetof(DeviceVtbl, AllocCommandBuffers)},
+-    {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
+-    {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
++    {"vkAllocateCommandBuffers", offsetof(DeviceVtbl, AllocateCommandBuffers)},
++    {"vkAllocateDescriptorSets", offsetof(DeviceVtbl, AllocateDescriptorSets)},
++    {"vkAllocateMemory", offsetof(DeviceVtbl, AllocateMemory)},
+     {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
+     {"vkBindBufferMemory", offsetof(DeviceVtbl, BindBufferMemory)},
+     {"vkBindImageMemory", offsetof(DeviceVtbl, BindImageMemory)},
+@@ -530,9 +530,9 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkDeviceWaitIdle");
+         success = false;
+     }
+-    vtbl.AllocMemory = reinterpret_cast<PFN_vkAllocMemory>(get_proc_addr(device, "vkAllocMemory"));
+-    if (UNLIKELY(!vtbl.AllocMemory)) {
+-        ALOGE("missing device proc: %s", "vkAllocMemory");
++    vtbl.AllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(get_proc_addr(device, "vkAllocateMemory"));
++    if (UNLIKELY(!vtbl.AllocateMemory)) {
++        ALOGE("missing device proc: %s", "vkAllocateMemory");
+         success = false;
+     }
+     vtbl.FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(get_proc_addr(device, "vkFreeMemory"));
+@@ -815,9 +815,9 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkResetDescriptorPool");
+         success = false;
+     }
+-    vtbl.AllocDescriptorSets = reinterpret_cast<PFN_vkAllocDescriptorSets>(get_proc_addr(device, "vkAllocDescriptorSets"));
+-    if (UNLIKELY(!vtbl.AllocDescriptorSets)) {
+-        ALOGE("missing device proc: %s", "vkAllocDescriptorSets");
++    vtbl.AllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(get_proc_addr(device, "vkAllocateDescriptorSets"));
++    if (UNLIKELY(!vtbl.AllocateDescriptorSets)) {
++        ALOGE("missing device proc: %s", "vkAllocateDescriptorSets");
+         success = false;
+     }
+     vtbl.FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(get_proc_addr(device, "vkFreeDescriptorSets"));
+@@ -870,9 +870,9 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkResetCommandPool");
+         success = false;
+     }
+-    vtbl.AllocCommandBuffers = reinterpret_cast<PFN_vkAllocCommandBuffers>(get_proc_addr(device, "vkAllocCommandBuffers"));
+-    if (UNLIKELY(!vtbl.AllocCommandBuffers)) {
+-        ALOGE("missing device proc: %s", "vkAllocCommandBuffers");
++    vtbl.AllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>(get_proc_addr(device, "vkAllocateCommandBuffers"));
++    if (UNLIKELY(!vtbl.AllocateCommandBuffers)) {
++        ALOGE("missing device proc: %s", "vkAllocateCommandBuffers");
+         success = false;
+     }
+     vtbl.FreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(get_proc_addr(device, "vkFreeCommandBuffers"));
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index 4e68f88..246c37d 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -58,10 +58,10 @@ typedef struct VkLayerLinkedListElem_ {
+ // Define Handle typedef to be void* as returned from dlopen.
+ typedef void* SharedLibraryHandle;
+-// Standard-library allocator that delegates to VkAllocCallbacks.
++// Standard-library allocator that delegates to VkAllocationCallbacks.
+ //
+ // TODO(jessehall): This class currently always uses
+-// VK_SYSTEM_ALLOC_SCOPE_INSTANCE. The scope to use could be a template
++// VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE. The scope to use could be a template
+ // parameter or a constructor parameter. The former would help catch bugs
+ // where we use the wrong scope, e.g. adding a command-scope string to an
+ // instance-scope vector. But that might also be pretty annoying to deal with.
+@@ -70,7 +70,7 @@ class CallbackAllocator {
+    public:
+     typedef T value_type;
+-    CallbackAllocator(const VkAllocCallbacks* alloc_input)
++    CallbackAllocator(const VkAllocationCallbacks* alloc_input)
+         : alloc(alloc_input) {}
+     template <class T2>
+@@ -78,8 +78,9 @@ class CallbackAllocator {
+         : alloc(other.alloc) {}
+     T* allocate(std::size_t n) {
+-        void* mem = alloc->pfnAlloc(alloc->pUserData, n * sizeof(T), alignof(T),
+-                                    VK_SYSTEM_ALLOC_SCOPE_INSTANCE);
++        void* mem =
++            alloc->pfnAllocation(alloc->pUserData, n * sizeof(T), alignof(T),
++                                 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
+         return static_cast<T*>(mem);
+     }
+@@ -87,7 +88,7 @@ class CallbackAllocator {
+         alloc->pfnFree(alloc->pUserData, array);
+     }
+-    const VkAllocCallbacks* alloc;
++    const VkAllocationCallbacks* alloc;
+ };
+ // These are needed in order to move Strings
+ template <class T>
+@@ -136,7 +137,7 @@ typedef UnorderedMap<String, LayerData>::iterator LayerMapIterator;
+ }  // namespace
+ struct VkInstance_T {
+-    VkInstance_T(const VkAllocCallbacks* alloc_callbacks)
++    VkInstance_T(const VkAllocationCallbacks* alloc_callbacks)
+         : vtbl(&vtbl_storage),
+           alloc(alloc_callbacks),
+           num_physical_devices(0),
+@@ -155,7 +156,7 @@ struct VkInstance_T {
+     InstanceVtbl* vtbl;
+     InstanceVtbl vtbl_storage;
+-    const VkAllocCallbacks* alloc;
++    const VkAllocationCallbacks* alloc;
+     uint32_t num_physical_devices;
+     VkPhysicalDevice physical_devices[kMaxPhysicalDevices];
+@@ -214,16 +215,19 @@ inline const DeviceVtbl* GetVtbl(VkQueue queue) {
+     return *reinterpret_cast<DeviceVtbl**>(queue);
+ }
+-void* DefaultAlloc(void*, size_t size, size_t alignment, VkSystemAllocScope) {
++void* DefaultAllocate(void*,
++                      size_t size,
++                      size_t alignment,
++                      VkSystemAllocationScope) {
+     void* ptr = nullptr;
+     return posix_memalign(&ptr, alignment, size) == 0 ? ptr : nullptr;
+ }
+-void* DefaultRealloc(void*,
+-                     void* ptr,
+-                     size_t size,
+-                     size_t alignment,
+-                     VkSystemAllocScope) {
++void* DefaultReallocate(void*,
++                        void* ptr,
++                        size_t size,
++                        size_t alignment,
++                        VkSystemAllocationScope) {
+     if (size == 0) {
+         free(ptr);
+         return nullptr;
+@@ -253,10 +257,10 @@ void DefaultFree(void*, void* pMem) {
+     free(pMem);
+ }
+-const VkAllocCallbacks kDefaultAllocCallbacks = {
++const VkAllocationCallbacks kDefaultAllocCallbacks = {
+     .pUserData = nullptr,
+-    .pfnAlloc = DefaultAlloc,
+-    .pfnRealloc = DefaultRealloc,
++    .pfnAllocation = DefaultAllocate,
++    .pfnReallocation = DefaultReallocate,
+     .pfnFree = DefaultFree,
+ };
+@@ -289,7 +293,7 @@ bool EnsureInitialized() {
+ }
+ void DestroyDevice(Device* device) {
+-    const VkAllocCallbacks* alloc = device->instance->alloc;
++    const VkAllocationCallbacks* alloc = device->instance->alloc;
+     device->~Device();
+     alloc->pfnFree(alloc->pUserData, device);
+ }
+@@ -476,7 +480,7 @@ VkResult ActivateAllLayers(TInfo create_info, Instance* instance, TObject* objec
+ template <class TCreateInfo>
+ bool AddExtensionToCreateInfo(TCreateInfo& local_create_info,
+                               const char* extension_name,
+-                              const VkAllocCallbacks* alloc) {
++                              const VkAllocationCallbacks* alloc) {
+     for (uint32_t i = 0; i < local_create_info.enabledExtensionNameCount; ++i) {
+         if (!strcmp(extension_name,
+                     local_create_info.ppEnabledExtensionNames[i])) {
+@@ -485,10 +489,10 @@ bool AddExtensionToCreateInfo(TCreateInfo& local_create_info,
+     }
+     uint32_t extension_count = local_create_info.enabledExtensionNameCount;
+     local_create_info.enabledExtensionNameCount++;
+-    void* mem = alloc->pfnAlloc(
++    void* mem = alloc->pfnAllocation(
+         alloc->pUserData,
+         local_create_info.enabledExtensionNameCount * sizeof(char*),
+-        alignof(char*), VK_SYSTEM_ALLOC_SCOPE_INSTANCE);
++        alignof(char*), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
+     if (mem) {
+         const char** enabled_extensions = static_cast<const char**>(mem);
+         for (uint32_t i = 0; i < extension_count; ++i) {
+@@ -508,7 +512,7 @@ bool AddExtensionToCreateInfo(TCreateInfo& local_create_info,
+ template <class T>
+ void FreeAllocatedCreateInfo(T& local_create_info,
+-                             const VkAllocCallbacks* alloc) {
++                             const VkAllocationCallbacks* alloc) {
+     alloc->pfnFree(
+         alloc->pUserData,
+         const_cast<char**>(local_create_info.ppEnabledExtensionNames));
+@@ -568,7 +572,7 @@ PFN_vkVoidFunction GetLayerDeviceProcAddr(VkDevice device, const char* name) {
+ // chain.
+ void DestroyInstanceBottom(VkInstance instance,
+-                           const VkAllocCallbacks* allocator) {
++                           const VkAllocationCallbacks* allocator) {
+     // These checks allow us to call DestroyInstanceBottom from any error path
+     // in CreateInstanceBottom, before the driver instance is fully initialized.
+     if (instance->drv.vtbl.instance != VK_NULL_HANDLE &&
+@@ -587,13 +591,13 @@ void DestroyInstanceBottom(VkInstance instance,
+          it != instance->active_layers.end(); ++it) {
+         DeactivateLayer(instance, it);
+     }
+-    const VkAllocCallbacks* alloc = instance->alloc;
++    const VkAllocationCallbacks* alloc = instance->alloc;
+     instance->~VkInstance_T();
+     alloc->pfnFree(alloc->pUserData, instance);
+ }
+ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+-                              const VkAllocCallbacks* allocator,
++                              const VkAllocationCallbacks* allocator,
+                               VkInstance* instance_ptr) {
+     Instance* instance = *instance_ptr;
+     VkResult result;
+@@ -729,7 +733,7 @@ void GetPhysicalDeviceMemoryPropertiesBottom(
+ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+                             const VkDeviceCreateInfo* create_info,
+-                            const VkAllocCallbacks* allocator,
++                            const VkAllocationCallbacks* allocator,
+                             VkDevice* out_device) {
+     Instance& instance = *static_cast<Instance*>(GetVtbl(pdev)->instance);
+     VkResult result;
+@@ -741,9 +745,9 @@ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+             allocator = &kDefaultAllocCallbacks;
+     }
+-    void* mem =
+-        allocator->pfnAlloc(allocator->pUserData, sizeof(Device),
+-                            alignof(Device), VK_SYSTEM_ALLOC_SCOPE_DEVICE);
++    void* mem = allocator->pfnAllocation(allocator->pUserData, sizeof(Device),
++                                         alignof(Device),
++                                         VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Device* device = new (mem) Device(&instance);
+@@ -941,7 +945,7 @@ VkResult EnumerateInstanceLayerProperties(uint32_t* count,
+ }
+ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+-                        const VkAllocCallbacks* allocator,
++                        const VkAllocationCallbacks* allocator,
+                         VkInstance* out_instance) {
+     VkResult result;
+@@ -954,9 +958,9 @@ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+     VkInstanceCreateInfo local_create_info = *create_info;
+     create_info = &local_create_info;
+-    void* instance_mem =
+-        allocator->pfnAlloc(allocator->pUserData, sizeof(Instance),
+-                            alignof(Instance), VK_SYSTEM_ALLOC_SCOPE_INSTANCE);
++    void* instance_mem = allocator->pfnAllocation(
++        allocator->pUserData, sizeof(Instance), alignof(Instance),
++        VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
+     if (!instance_mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Instance* instance = new (instance_mem) Instance(allocator);
+@@ -1121,17 +1125,17 @@ void GetDeviceQueue(VkDevice drv_device,
+ }
+ VkResult AllocCommandBuffers(VkDevice device,
+-                             const VkCmdBufferAllocInfo* alloc_info,
+-                             VkCmdBuffer* cmdbuffers) {
++                             const VkCommandBufferAllocateInfo* alloc_info,
++                             VkCommandBuffer* cmdbufs) {
+     const DeviceVtbl* vtbl = GetVtbl(device);
+-    VkResult result = vtbl->AllocCommandBuffers(device, alloc_info, cmdbuffers);
++    VkResult result = vtbl->AllocateCommandBuffers(device, alloc_info, cmdbufs);
+     if (result != VK_SUCCESS)
+         return result;
+     for (uint32_t i = 0; i < alloc_info->bufferCount; i++) {
+         hwvulkan_dispatch_t* dispatch =
+-            reinterpret_cast<hwvulkan_dispatch_t*>(cmdbuffers[i]);
++            reinterpret_cast<hwvulkan_dispatch_t*>(cmdbufs[i]);
+         ALOGE_IF(dispatch->magic != HWVULKAN_DISPATCH_MAGIC,
+-                 "invalid VkCmdBuffer dispatch magic: 0x%" PRIxPTR,
++                 "invalid VkCommandBuffer dispatch magic: 0x%" PRIxPTR,
+                  dispatch->magic);
+         dispatch->vtbl = vtbl;
+     }
+@@ -1139,7 +1143,7 @@ VkResult AllocCommandBuffers(VkDevice device,
+ }
+ VkResult DestroyDevice(VkDevice drv_device,
+-                       const VkAllocCallbacks* /*allocator*/) {
++                       const VkAllocationCallbacks* /*allocator*/) {
+     const DeviceVtbl* vtbl = GetVtbl(drv_device);
+     Device* device = static_cast<Device*>(vtbl->device);
+     for (auto it = device->active_layers.begin();
+@@ -1154,27 +1158,27 @@ VkResult DestroyDevice(VkDevice drv_device,
+ void* AllocMem(VkInstance instance,
+                size_t size,
+                size_t align,
+-               VkSystemAllocScope scope) {
+-    const VkAllocCallbacks* alloc_cb = instance->alloc;
+-    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, scope);
++               VkSystemAllocationScope scope) {
++    const VkAllocationCallbacks* alloc_cb = instance->alloc;
++    return alloc_cb->pfnAllocation(alloc_cb->pUserData, size, align, scope);
+ }
+ void FreeMem(VkInstance instance, void* ptr) {
+-    const VkAllocCallbacks* alloc_cb = instance->alloc;
++    const VkAllocationCallbacks* alloc_cb = instance->alloc;
+     alloc_cb->pfnFree(alloc_cb->pUserData, ptr);
+ }
+ void* AllocMem(VkDevice device,
+                size_t size,
+                size_t align,
+-               VkSystemAllocScope scope) {
+-    const VkAllocCallbacks* alloc_cb =
++               VkSystemAllocationScope scope) {
++    const VkAllocationCallbacks* alloc_cb =
+         static_cast<Device*>(GetVtbl(device)->device)->instance->alloc;
+-    return alloc_cb->pfnAlloc(alloc_cb->pUserData, size, align, scope);
++    return alloc_cb->pfnAllocation(alloc_cb->pUserData, size, align, scope);
+ }
+ void FreeMem(VkDevice device, void* ptr) {
+-    const VkAllocCallbacks* alloc_cb =
++    const VkAllocationCallbacks* alloc_cb =
+         static_cast<Device*>(GetVtbl(device)->device)->instance->alloc;
+     alloc_cb->pfnFree(alloc_cb->pUserData, ptr);
+ }
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index b6c8552..bf71c8f 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -67,7 +67,7 @@ struct DeviceVtbl {
+     PFN_vkDestroyDevice DestroyDevice;
+     PFN_vkGetDeviceQueue GetDeviceQueue;
+     PFN_vkDeviceWaitIdle DeviceWaitIdle;
+-    PFN_vkAllocMemory AllocMemory;
++    PFN_vkAllocateMemory AllocateMemory;
+     PFN_vkFreeMemory FreeMemory;
+     PFN_vkMapMemory MapMemory;
+     PFN_vkUnmapMemory UnmapMemory;
+@@ -123,7 +123,7 @@ struct DeviceVtbl {
+     PFN_vkCreateDescriptorPool CreateDescriptorPool;
+     PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
+     PFN_vkResetDescriptorPool ResetDescriptorPool;
+-    PFN_vkAllocDescriptorSets AllocDescriptorSets;
++    PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
+     PFN_vkFreeDescriptorSets FreeDescriptorSets;
+     PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
+     PFN_vkCreateFramebuffer CreateFramebuffer;
+@@ -134,7 +134,7 @@ struct DeviceVtbl {
+     PFN_vkCreateCommandPool CreateCommandPool;
+     PFN_vkDestroyCommandPool DestroyCommandPool;
+     PFN_vkResetCommandPool ResetCommandPool;
+-    PFN_vkAllocCommandBuffers AllocCommandBuffers;
++    PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
+     PFN_vkFreeCommandBuffers FreeCommandBuffers;
+     PFN_vkQueueSubmit QueueSubmit;
+@@ -214,7 +214,7 @@ VkResult EnumerateInstanceExtensionProperties(
+ VkResult EnumerateInstanceLayerProperties(uint32_t* count,
+                                           VkLayerProperties* properties);
+ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+-                        const VkAllocCallbacks* pAllocator,
++                        const VkAllocationCallbacks* pAllocator,
+                         VkInstance* instance);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice drv_device, const char* name);
+@@ -223,19 +223,20 @@ void GetDeviceQueue(VkDevice drv_device,
+                     uint32_t index,
+                     VkQueue* out_queue);
+ VkResult AllocCommandBuffers(VkDevice device,
+-                             const VkCmdBufferAllocInfo* alloc_info,
+-                             VkCmdBuffer* cmdbuffers);
+-VkResult DestroyDevice(VkDevice drv_device, const VkAllocCallbacks* pAllocator);
++                             const VkCommandBufferAllocateInfo* alloc_info,
++                             VkCommandBuffer* cmdbufs);
++VkResult DestroyDevice(VkDevice drv_device,
++                       const VkAllocationCallbacks* pAllocator);
+ void* AllocMem(VkInstance instance,
+                size_t size,
+                size_t align,
+-               VkSystemAllocScope scope);
++               VkSystemAllocationScope scope);
+ void FreeMem(VkInstance instance, void* ptr);
+ void* AllocMem(VkDevice device,
+                size_t size,
+                size_t align,
+-               VkSystemAllocScope scope);
++               VkSystemAllocationScope scope);
+ void FreeMem(VkDevice device, void* ptr);
+ const DeviceVtbl& GetDriverVtbl(VkDevice device);
+ const DeviceVtbl& GetDriverVtbl(VkQueue queue);
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index f1fe236..5b35506 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -37,7 +37,8 @@ namespace {
+ // ----------------------------------------------------------------------------
+ // These functions/classes form an adaptor that allows objects to be refcounted
+ // by both android::sp<> and std::shared_ptr<> simultaneously, and delegates
+-// allocation of the shared_ptr<> control structure to VkAllocCallbacks. The
++// allocation of the shared_ptr<> control structure to VkAllocationCallbacks.
++// The
+ // platform holds a reference to the ANativeWindow using its embedded reference
+ // count, and the ANativeWindow implementation holds references to the
+ // ANativeWindowBuffers using their embedded reference counts, so the
+@@ -54,12 +55,14 @@ struct AllocScope {};
+ template <>
+ struct AllocScope<VkInstance> {
+-    static const VkSystemAllocScope kScope = VK_SYSTEM_ALLOC_SCOPE_INSTANCE;
++    static const VkSystemAllocationScope kScope =
++        VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE;
+ };
+ template <>
+ struct AllocScope<VkDevice> {
+-    static const VkSystemAllocScope kScope = VK_SYSTEM_ALLOC_SCOPE_DEVICE;
++    static const VkSystemAllocationScope kScope =
++        VK_SYSTEM_ALLOCATION_SCOPE_DEVICE;
+ };
+ template <typename T, typename Host>
+@@ -142,7 +145,7 @@ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+                                  ANativeWindow* window,
+                                  VkSurfaceKHR* out_surface) {
+     void* mem = AllocMem(instance, sizeof(Surface), alignof(Surface),
+-                         VK_SYSTEM_ALLOC_SCOPE_OBJECT);
++                         VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Surface* surface = new (mem) Surface;
+@@ -231,9 +234,9 @@ VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
+     // - VK_IMAGE_USAGE_DEPTH_STENCIL_BIT: definitely not
+     // - VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT: definitely not
+     capabilities->supportedUsageFlags =
+-        VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT |
+-        VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT | VK_IMAGE_USAGE_SAMPLED_BIT |
+-        VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
++        VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
++        VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT |
++        VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
+         VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
+     return VK_SUCCESS;
+@@ -378,7 +381,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     // After this point, we must deallocate the swapchain on error.
+     void* mem = AllocMem(device, sizeof(Swapchain), alignof(Swapchain),
+-                         VK_SYSTEM_ALLOC_SCOPE_OBJECT);
++                         VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     Swapchain* swapchain = new (mem) Swapchain(surface, num_images);
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 698dbd0..d134c0e 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -35,7 +35,7 @@ struct VkPhysicalDevice_T {
+ struct VkInstance_T {
+     hwvulkan_dispatch_t dispatch;
+-    VkAllocCallbacks allocator;
++    VkAllocationCallbacks allocator;
+     VkPhysicalDevice_T physical_device;
+ };
+@@ -43,7 +43,7 @@ struct VkQueue_T {
+     hwvulkan_dispatch_t dispatch;
+ };
+-struct VkCmdBuffer_T {
++struct VkCommandBuffer_T {
+     hwvulkan_dispatch_t dispatch;
+ };
+@@ -95,7 +95,7 @@ const VkDeviceSize kMaxDeviceMemory = VkDeviceSize(INTPTR_MAX) + 1;
+ struct VkDevice_T {
+     hwvulkan_dispatch_t dispatch;
+-    VkAllocCallbacks allocator;
++    VkAllocationCallbacks allocator;
+     VkInstance_T* instance;
+     VkQueue_T queue;
+     std::array<uint64_t, HandleType::kNumTypes> next_handle;
+@@ -131,16 +131,17 @@ __attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = {
+ namespace {
+ VkResult CreateInstance(const VkInstanceCreateInfo* /*create_info*/,
+-                        const VkAllocCallbacks* allocator,
++                        const VkAllocationCallbacks* allocator,
+                         VkInstance* out_instance) {
+     // Assume the loader provided alloc callbacks even if the app didn't.
+     ALOG_ASSERT(
+         allocator,
+         "Missing alloc callbacks, loader or app should have provided them");
+-    VkInstance_T* instance = static_cast<VkInstance_T*>(allocator->pfnAlloc(
+-        allocator->pUserData, sizeof(VkInstance_T), alignof(VkInstance_T),
+-        VK_SYSTEM_ALLOC_SCOPE_INSTANCE));
++    VkInstance_T* instance =
++        static_cast<VkInstance_T*>(allocator->pfnAllocation(
++            allocator->pUserData, sizeof(VkInstance_T), alignof(VkInstance_T),
++            VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE));
+     if (!instance)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+@@ -245,7 +246,7 @@ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) {
+ // Instance
+ void DestroyInstance(VkInstance instance,
+-                     const VkAllocCallbacks* /*allocator*/) {
++                     const VkAllocationCallbacks* /*allocator*/) {
+     instance->allocator.pfnFree(instance->allocator.pUserData, instance);
+ }
+@@ -303,14 +304,14 @@ void GetPhysicalDeviceMemoryProperties(
+ VkResult CreateDevice(VkPhysicalDevice physical_device,
+                       const VkDeviceCreateInfo*,
+-                      const VkAllocCallbacks* allocator,
++                      const VkAllocationCallbacks* allocator,
+                       VkDevice* out_device) {
+     VkInstance_T* instance = GetInstanceFromPhysicalDevice(physical_device);
+     if (!allocator)
+         allocator = &instance->allocator;
+-    VkDevice_T* device = static_cast<VkDevice_T*>(
+-        allocator->pfnAlloc(allocator->pUserData, sizeof(VkDevice_T),
+-                            alignof(VkDevice_T), VK_SYSTEM_ALLOC_SCOPE_DEVICE));
++    VkDevice_T* device = static_cast<VkDevice_T*>(allocator->pfnAllocation(
++        allocator->pUserData, sizeof(VkDevice_T), alignof(VkDevice_T),
++        VK_SYSTEM_ALLOCATION_SCOPE_DEVICE));
+     if (!device)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+@@ -325,7 +326,8 @@ VkResult CreateDevice(VkPhysicalDevice physical_device,
+     return VK_SUCCESS;
+ }
+-void DestroyDevice(VkDevice device, const VkAllocCallbacks* /*allocator*/) {
++void DestroyDevice(VkDevice device,
++                   const VkAllocationCallbacks* /*allocator*/) {
+     if (!device)
+         return;
+     device->allocator.pfnFree(device->allocator.pUserData, device);
+@@ -336,50 +338,51 @@ void GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
+ }
+ // -----------------------------------------------------------------------------
+-// CmdPool
++// CommandPool
+-struct CmdPool {
+-    typedef VkCmdPool HandleType;
+-    VkAllocCallbacks allocator;
++struct CommandPool {
++    typedef VkCommandPool HandleType;
++    VkAllocationCallbacks allocator;
+ };
+-DEFINE_OBJECT_HANDLE_CONVERSION(CmdPool)
++DEFINE_OBJECT_HANDLE_CONVERSION(CommandPool)
+ VkResult CreateCommandPool(VkDevice device,
+-                           const VkCmdPoolCreateInfo* /*create_info*/,
+-                           const VkAllocCallbacks* allocator,
+-                           VkCmdPool* cmd_pool) {
++                           const VkCommandPoolCreateInfo* /*create_info*/,
++                           const VkAllocationCallbacks* allocator,
++                           VkCommandPool* cmd_pool) {
+     if (!allocator)
+         allocator = &device->allocator;
+-    CmdPool* pool = static_cast<CmdPool*>(
+-        allocator->pfnAlloc(allocator->pUserData, sizeof(CmdPool),
+-                            alignof(CmdPool), VK_SYSTEM_ALLOC_SCOPE_OBJECT));
++    CommandPool* pool = static_cast<CommandPool*>(allocator->pfnAllocation(
++        allocator->pUserData, sizeof(CommandPool), alignof(CommandPool),
++        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
+     if (!pool)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     pool->allocator = *allocator;
+-    *cmd_pool = GetHandleToCmdPool(pool);
++    *cmd_pool = GetHandleToCommandPool(pool);
+     return VK_SUCCESS;
+ }
+ void DestroyCommandPool(VkDevice /*device*/,
+-                        VkCmdPool cmd_pool,
+-                        const VkAllocCallbacks* /*allocator*/) {
+-    CmdPool* pool = GetCmdPoolFromHandle(cmd_pool);
++                        VkCommandPool cmd_pool,
++                        const VkAllocationCallbacks* /*allocator*/) {
++    CommandPool* pool = GetCommandPoolFromHandle(cmd_pool);
+     pool->allocator.pfnFree(pool->allocator.pUserData, pool);
+ }
+ // -----------------------------------------------------------------------------
+ // CmdBuffer
+-VkResult AllocCommandBuffers(VkDevice /*device*/,
+-                             const VkCmdBufferAllocInfo* alloc_info,
+-                             VkCmdBuffer* cmdbufs) {
++VkResult AllocateCommandBuffers(VkDevice /*device*/,
++                                const VkCommandBufferAllocateInfo* alloc_info,
++                                VkCommandBuffer* cmdbufs) {
+     VkResult result = VK_SUCCESS;
+-    CmdPool& pool = *GetCmdPoolFromHandle(alloc_info->cmdPool);
++    CommandPool& pool = *GetCommandPoolFromHandle(alloc_info->commandPool);
+     std::fill(cmdbufs, cmdbufs + alloc_info->bufferCount, nullptr);
+     for (uint32_t i = 0; i < alloc_info->bufferCount; i++) {
+-        cmdbufs[i] = static_cast<VkCmdBuffer_T*>(pool.allocator.pfnAlloc(
+-            pool.allocator.pUserData, sizeof(VkCmdBuffer_T),
+-            alignof(VkCmdBuffer_T), VK_SYSTEM_ALLOC_SCOPE_OBJECT));
++        cmdbufs[i] =
++            static_cast<VkCommandBuffer_T*>(pool.allocator.pfnAllocation(
++                pool.allocator.pUserData, sizeof(VkCommandBuffer_T),
++                alignof(VkCommandBuffer_T), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
+         if (!cmdbufs[i]) {
+             result = VK_ERROR_OUT_OF_HOST_MEMORY;
+             break;
+@@ -397,10 +400,10 @@ VkResult AllocCommandBuffers(VkDevice /*device*/,
+ }
+ void FreeCommandBuffers(VkDevice /*device*/,
+-                        VkCmdPool cmd_pool,
++                        VkCommandPool cmd_pool,
+                         uint32_t count,
+-                        const VkCmdBuffer* cmdbufs) {
+-    CmdPool& pool = *GetCmdPoolFromHandle(cmd_pool);
++                        const VkCommandBuffer* cmdbufs) {
++    CommandPool& pool = *GetCommandPoolFromHandle(cmd_pool);
+     for (uint32_t i = 0; i < count; i++)
+         pool.allocator.pfnFree(pool.allocator.pUserData, cmdbufs[i]);
+ }
+@@ -415,19 +418,19 @@ struct DeviceMemory {
+ };
+ DEFINE_OBJECT_HANDLE_CONVERSION(DeviceMemory)
+-VkResult AllocMemory(VkDevice device,
+-                     const VkMemoryAllocInfo* alloc_info,
+-                     const VkAllocCallbacks* allocator,
+-                     VkDeviceMemory* mem_handle) {
++VkResult AllocateMemory(VkDevice device,
++                        const VkMemoryAllocateInfo* alloc_info,
++                        const VkAllocationCallbacks* allocator,
++                        VkDeviceMemory* mem_handle) {
+     if (SIZE_MAX - sizeof(DeviceMemory) <= alloc_info->allocationSize)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     if (!allocator)
+         allocator = &device->allocator;
+     size_t size = sizeof(DeviceMemory) + size_t(alloc_info->allocationSize);
+-    DeviceMemory* mem = static_cast<DeviceMemory*>(
+-        allocator->pfnAlloc(allocator->pUserData, size, alignof(DeviceMemory),
+-                            VK_SYSTEM_ALLOC_SCOPE_OBJECT));
++    DeviceMemory* mem = static_cast<DeviceMemory*>(allocator->pfnAllocation(
++        allocator->pUserData, size, alignof(DeviceMemory),
++        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
+     if (!mem)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     mem->size = size;
+@@ -437,7 +440,7 @@ VkResult AllocMemory(VkDevice device,
+ void FreeMemory(VkDevice device,
+                 VkDeviceMemory mem_handle,
+-                const VkAllocCallbacks* allocator) {
++                const VkAllocationCallbacks* allocator) {
+     if (!allocator)
+         allocator = &device->allocator;
+     DeviceMemory* mem = GetDeviceMemoryFromHandle(mem_handle);
+@@ -466,7 +469,7 @@ DEFINE_OBJECT_HANDLE_CONVERSION(Buffer)
+ VkResult CreateBuffer(VkDevice device,
+                       const VkBufferCreateInfo* create_info,
+-                      const VkAllocCallbacks* allocator,
++                      const VkAllocationCallbacks* allocator,
+                       VkBuffer* buffer_handle) {
+     ALOGW_IF(create_info->size > kMaxDeviceMemory,
+              "CreateBuffer: requested size 0x%" PRIx64
+@@ -474,9 +477,9 @@ VkResult CreateBuffer(VkDevice device,
+              create_info->size, kMaxDeviceMemory);
+     if (!allocator)
+         allocator = &device->allocator;
+-    Buffer* buffer = static_cast<Buffer*>(
+-        allocator->pfnAlloc(allocator->pUserData, sizeof(Buffer),
+-                            alignof(Buffer), VK_SYSTEM_ALLOC_SCOPE_OBJECT));
++    Buffer* buffer = static_cast<Buffer*>(allocator->pfnAllocation(
++        allocator->pUserData, sizeof(Buffer), alignof(Buffer),
++        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
+     if (!buffer)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     buffer->size = create_info->size;
+@@ -495,7 +498,7 @@ void GetBufferMemoryRequirements(VkDevice,
+ void DestroyBuffer(VkDevice device,
+                    VkBuffer buffer_handle,
+-                   const VkAllocCallbacks* allocator) {
++                   const VkAllocationCallbacks* allocator) {
+     if (!allocator)
+         allocator = &device->allocator;
+     Buffer* buffer = GetBufferFromHandle(buffer_handle);
+@@ -513,7 +516,7 @@ DEFINE_OBJECT_HANDLE_CONVERSION(Image)
+ VkResult CreateImage(VkDevice device,
+                      const VkImageCreateInfo* create_info,
+-                     const VkAllocCallbacks* allocator,
++                     const VkAllocationCallbacks* allocator,
+                      VkImage* image_handle) {
+     if (create_info->imageType != VK_IMAGE_TYPE_2D ||
+         create_info->format != VK_FORMAT_R8G8B8A8_UNORM ||
+@@ -534,9 +537,9 @@ VkResult CreateImage(VkDevice device,
+     if (!allocator)
+         allocator = &device->allocator;
+-    Image* image = static_cast<Image*>(
+-        allocator->pfnAlloc(allocator->pUserData, sizeof(Image), alignof(Image),
+-                            VK_SYSTEM_ALLOC_SCOPE_OBJECT));
++    Image* image = static_cast<Image*>(allocator->pfnAllocation(
++        allocator->pUserData, sizeof(Image), alignof(Image),
++        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
+     if (!image)
+         return VK_ERROR_OUT_OF_HOST_MEMORY;
+     image->size = size;
+@@ -555,7 +558,7 @@ void GetImageMemoryRequirements(VkDevice,
+ void DestroyImage(VkDevice device,
+                   VkImage image_handle,
+-                  const VkAllocCallbacks* allocator) {
++                  const VkAllocationCallbacks* allocator) {
+     if (!allocator)
+         allocator = &device->allocator;
+     Image* image = GetImageFromHandle(image_handle);
+@@ -567,7 +570,7 @@ void DestroyImage(VkDevice device,
+ VkResult CreateBufferView(VkDevice device,
+                           const VkBufferViewCreateInfo*,
+-                          const VkAllocCallbacks* /*allocator*/,
++                          const VkAllocationCallbacks* /*allocator*/,
+                           VkBufferView* view) {
+     *view = AllocHandle(device, HandleType::kBufferView);
+     return VK_SUCCESS;
+@@ -575,15 +578,15 @@ VkResult CreateBufferView(VkDevice device,
+ VkResult CreateDescriptorPool(VkDevice device,
+                               const VkDescriptorPoolCreateInfo*,
+-                              const VkAllocCallbacks* /*allocator*/,
++                              const VkAllocationCallbacks* /*allocator*/,
+                               VkDescriptorPool* pool) {
+     *pool = AllocHandle(device, HandleType::kDescriptorPool);
+     return VK_SUCCESS;
+ }
+-VkResult AllocDescriptorSets(VkDevice device,
+-                             const VkDescriptorSetAllocInfo* alloc_info,
+-                             VkDescriptorSet* descriptor_sets) {
++VkResult AllocateDescriptorSets(VkDevice device,
++                                const VkDescriptorSetAllocateInfo* alloc_info,
++                                VkDescriptorSet* descriptor_sets) {
+     for (uint32_t i = 0; i < alloc_info->setLayoutCount; i++)
+         descriptor_sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
+     return VK_SUCCESS;
+@@ -591,7 +594,7 @@ VkResult AllocDescriptorSets(VkDevice device,
+ VkResult CreateDescriptorSetLayout(VkDevice device,
+                                    const VkDescriptorSetLayoutCreateInfo*,
+-                                   const VkAllocCallbacks* /*allocator*/,
++                                   const VkAllocationCallbacks* /*allocator*/,
+                                    VkDescriptorSetLayout* layout) {
+     *layout = AllocHandle(device, HandleType::kDescriptorSetLayout);
+     return VK_SUCCESS;
+@@ -599,7 +602,7 @@ VkResult CreateDescriptorSetLayout(VkDevice device,
+ VkResult CreateEvent(VkDevice device,
+                      const VkEventCreateInfo*,
+-                     const VkAllocCallbacks* /*allocator*/,
++                     const VkAllocationCallbacks* /*allocator*/,
+                      VkEvent* event) {
+     *event = AllocHandle(device, HandleType::kEvent);
+     return VK_SUCCESS;
+@@ -607,7 +610,7 @@ VkResult CreateEvent(VkDevice device,
+ VkResult CreateFence(VkDevice device,
+                      const VkFenceCreateInfo*,
+-                     const VkAllocCallbacks* /*allocator*/,
++                     const VkAllocationCallbacks* /*allocator*/,
+                      VkFence* fence) {
+     *fence = AllocHandle(device, HandleType::kFence);
+     return VK_SUCCESS;
+@@ -615,7 +618,7 @@ VkResult CreateFence(VkDevice device,
+ VkResult CreateFramebuffer(VkDevice device,
+                            const VkFramebufferCreateInfo*,
+-                           const VkAllocCallbacks* /*allocator*/,
++                           const VkAllocationCallbacks* /*allocator*/,
+                            VkFramebuffer* framebuffer) {
+     *framebuffer = AllocHandle(device, HandleType::kFramebuffer);
+     return VK_SUCCESS;
+@@ -623,7 +626,7 @@ VkResult CreateFramebuffer(VkDevice device,
+ VkResult CreateImageView(VkDevice device,
+                          const VkImageViewCreateInfo*,
+-                         const VkAllocCallbacks* /*allocator*/,
++                         const VkAllocationCallbacks* /*allocator*/,
+                          VkImageView* view) {
+     *view = AllocHandle(device, HandleType::kImageView);
+     return VK_SUCCESS;
+@@ -633,7 +636,7 @@ VkResult CreateGraphicsPipelines(VkDevice device,
+                                  VkPipelineCache,
+                                  uint32_t count,
+                                  const VkGraphicsPipelineCreateInfo*,
+-                                 const VkAllocCallbacks* /*allocator*/,
++                                 const VkAllocationCallbacks* /*allocator*/,
+                                  VkPipeline* pipelines) {
+     for (uint32_t i = 0; i < count; i++)
+         pipelines[i] = AllocHandle(device, HandleType::kPipeline);
+@@ -644,7 +647,7 @@ VkResult CreateComputePipelines(VkDevice device,
+                                 VkPipelineCache,
+                                 uint32_t count,
+                                 const VkComputePipelineCreateInfo*,
+-                                const VkAllocCallbacks* /*allocator*/,
++                                const VkAllocationCallbacks* /*allocator*/,
+                                 VkPipeline* pipelines) {
+     for (uint32_t i = 0; i < count; i++)
+         pipelines[i] = AllocHandle(device, HandleType::kPipeline);
+@@ -653,7 +656,7 @@ VkResult CreateComputePipelines(VkDevice device,
+ VkResult CreatePipelineCache(VkDevice device,
+                              const VkPipelineCacheCreateInfo*,
+-                             const VkAllocCallbacks* /*allocator*/,
++                             const VkAllocationCallbacks* /*allocator*/,
+                              VkPipelineCache* cache) {
+     *cache = AllocHandle(device, HandleType::kPipelineCache);
+     return VK_SUCCESS;
+@@ -661,7 +664,7 @@ VkResult CreatePipelineCache(VkDevice device,
+ VkResult CreatePipelineLayout(VkDevice device,
+                               const VkPipelineLayoutCreateInfo*,
+-                              const VkAllocCallbacks* /*allocator*/,
++                              const VkAllocationCallbacks* /*allocator*/,
+                               VkPipelineLayout* layout) {
+     *layout = AllocHandle(device, HandleType::kPipelineLayout);
+     return VK_SUCCESS;
+@@ -669,7 +672,7 @@ VkResult CreatePipelineLayout(VkDevice device,
+ VkResult CreateQueryPool(VkDevice device,
+                          const VkQueryPoolCreateInfo*,
+-                         const VkAllocCallbacks* /*allocator*/,
++                         const VkAllocationCallbacks* /*allocator*/,
+                          VkQueryPool* pool) {
+     *pool = AllocHandle(device, HandleType::kQueryPool);
+     return VK_SUCCESS;
+@@ -677,7 +680,7 @@ VkResult CreateQueryPool(VkDevice device,
+ VkResult CreateRenderPass(VkDevice device,
+                           const VkRenderPassCreateInfo*,
+-                          const VkAllocCallbacks* /*allocator*/,
++                          const VkAllocationCallbacks* /*allocator*/,
+                           VkRenderPass* renderpass) {
+     *renderpass = AllocHandle(device, HandleType::kRenderPass);
+     return VK_SUCCESS;
+@@ -685,7 +688,7 @@ VkResult CreateRenderPass(VkDevice device,
+ VkResult CreateSampler(VkDevice device,
+                        const VkSamplerCreateInfo*,
+-                       const VkAllocCallbacks* /*allocator*/,
++                       const VkAllocationCallbacks* /*allocator*/,
+                        VkSampler* sampler) {
+     *sampler = AllocHandle(device, HandleType::kSampler);
+     return VK_SUCCESS;
+@@ -693,7 +696,7 @@ VkResult CreateSampler(VkDevice device,
+ VkResult CreateSemaphore(VkDevice device,
+                          const VkSemaphoreCreateInfo*,
+-                         const VkAllocCallbacks* /*allocator*/,
++                         const VkAllocationCallbacks* /*allocator*/,
+                          VkSemaphore* semaphore) {
+     *semaphore = AllocHandle(device, HandleType::kSemaphore);
+     return VK_SUCCESS;
+@@ -701,7 +704,7 @@ VkResult CreateSemaphore(VkDevice device,
+ VkResult CreateShader(VkDevice device,
+                       const VkShaderCreateInfo*,
+-                      const VkAllocCallbacks* /*allocator*/,
++                      const VkAllocationCallbacks* /*allocator*/,
+                       VkShader* shader) {
+     *shader = AllocHandle(device, HandleType::kShader);
+     return VK_SUCCESS;
+@@ -709,7 +712,7 @@ VkResult CreateShader(VkDevice device,
+ VkResult CreateShaderModule(VkDevice device,
+                             const VkShaderModuleCreateInfo*,
+-                            const VkAllocCallbacks* /*allocator*/,
++                            const VkAllocationCallbacks* /*allocator*/,
+                             VkShaderModule* module) {
+     *module = AllocHandle(device, HandleType::kShaderModule);
+     return VK_SUCCESS;
+@@ -820,7 +823,7 @@ VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSpar
+     return VK_SUCCESS;
+ }
+-void DestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* allocator) {
++void DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* allocator) {
+ }
+ VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
+@@ -836,10 +839,10 @@ VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFen
+     return VK_SUCCESS;
+ }
+-void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* allocator) {
++void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyEvent(VkDevice device, VkEvent event, const VkAllocCallbacks* allocator) {
++void DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* allocator) {
+ }
+ VkResult GetEventStatus(VkDevice device, VkEvent event) {
+@@ -857,7 +860,7 @@ VkResult ResetEvent(VkDevice device, VkEvent event) {
+     return VK_SUCCESS;
+ }
+-void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* allocator) {
++void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* allocator) {
+ }
+ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) {
+@@ -865,23 +868,23 @@ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t st
+     return VK_SUCCESS;
+ }
+-void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* allocator) {
++void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* allocator) {
+ }
+ void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocCallbacks* allocator) {
++void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* allocator) {
++void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyShader(VkDevice device, VkShader shader, const VkAllocCallbacks* allocator) {
++void DestroyShader(VkDevice device, VkShader shader, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* allocator) {
++void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator) {
+ }
+ VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) {
+@@ -894,19 +897,19 @@ VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_
+     return VK_SUCCESS;
+ }
+-void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* allocator) {
++void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* allocator) {
++void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocCallbacks* allocator) {
++void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* allocator) {
++void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* allocator) {
++void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* allocator) {
+ }
+ VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
+@@ -923,164 +926,164 @@ VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, ui
+     return VK_SUCCESS;
+ }
+-void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* allocator) {
++void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* allocator) {
++void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* allocator) {
+ }
+ void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) {
++VkResult ResetCommandPool(VkDevice device, VkCommandPool cmdPool, VkCommandPoolResetFlags flags) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+-VkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) {
++VkResult BeginCommandBuffer(VkCommandBuffer cmdBuffer, const VkCommandBufferBeginInfo* pBeginInfo) {
+     return VK_SUCCESS;
+ }
+-VkResult EndCommandBuffer(VkCmdBuffer cmdBuffer) {
++VkResult EndCommandBuffer(VkCommandBuffer cmdBuffer) {
+     return VK_SUCCESS;
+ }
+-VkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) {
++VkResult ResetCommandBuffer(VkCommandBuffer cmdBuffer, VkCommandBufferResetFlags flags) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+     return VK_SUCCESS;
+ }
+-void CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
++void CmdBindPipeline(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
+ }
+-void CmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
++void CmdSetViewport(VkCommandBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
+ }
+-void CmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
++void CmdSetScissor(VkCommandBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
+ }
+-void CmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth) {
++void CmdSetLineWidth(VkCommandBuffer cmdBuffer, float lineWidth) {
+ }
+-void CmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias) {
++void CmdSetDepthBias(VkCommandBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias) {
+ }
+-void CmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4]) {
++void CmdSetBlendConstants(VkCommandBuffer cmdBuffer, const float blendConst[4]) {
+ }
+-void CmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds) {
++void CmdSetDepthBounds(VkCommandBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds) {
+ }
+-void CmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
++void CmdSetStencilCompareMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
+ }
+-void CmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
++void CmdSetStencilWriteMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
+ }
+-void CmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
++void CmdSetStencilReference(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
+ }
+-void CmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
++void CmdBindDescriptorSets(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
+ }
+-void CmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
++void CmdBindIndexBuffer(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
+ }
+-void CmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
++void CmdBindVertexBuffers(VkCommandBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
+ }
+-void CmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
++void CmdDraw(VkCommandBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
+ }
+-void CmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
++void CmdDrawIndexed(VkCommandBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
+ }
+-void CmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
++void CmdDrawIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
+ }
+-void CmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
++void CmdDrawIndexedIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
+ }
+-void CmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) {
++void CmdDispatch(VkCommandBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) {
+ }
+-void CmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) {
++void CmdDispatchIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) {
+ }
+-void CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
++void CmdCopyBuffer(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
+ }
+-void CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
++void CmdCopyImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
+ }
+-void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
++void CmdBlitImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
+ }
+-void CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
++void CmdCopyBufferToImage(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+ }
+-void CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
++void CmdCopyImageToBuffer(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+ }
+-void CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) {
++void CmdUpdateBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) {
+ }
+-void CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) {
++void CmdFillBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) {
+ }
+-void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
++void CmdClearColorImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+ }
+-void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
++void CmdClearDepthStencilImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+ }
+-void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
++void CmdClearAttachments(VkCommandBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
+ }
+-void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
++void CmdResolveImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
+ }
+-void CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
++void CmdSetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
+ }
+-void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
++void CmdResetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
+ }
+-void CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
++void CmdWaitEvents(VkCommandBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+ }
+-void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
++void CmdPipelineBarrier(VkCommandBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
+ }
+-void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
++void CmdBeginQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
+ }
+-void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
++void CmdEndQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
+ }
+-void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
++void CmdResetQueryPool(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
+ }
+-void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
++void CmdWriteTimestamp(VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
+ }
+-void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
++void CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
+ }
+-void CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
++void CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
+ }
+-void CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
++void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
+ }
+-void CmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents) {
++void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkRenderPassContents contents) {
+ }
+-void CmdEndRenderPass(VkCmdBuffer cmdBuffer) {
++void CmdEndRenderPass(VkCommandBuffer cmdBuffer) {
+ }
+-void CmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) {
++void CmdExecuteCommands(VkCommandBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCommandBuffer* pCmdBuffers) {
+ }
+ #pragma clang diagnostic pop
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 5f3e53e..939a559 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -27,7 +27,7 @@ PFN_vkVoidFunction LookupInstanceProcAddr(const char* name);
+ PFN_vkVoidFunction LookupDeviceProcAddr(const char* name);
+ // clang-format off
+-void DestroyInstance(VkInstance instance, const VkAllocCallbacks* allocator);
++void DestroyInstance(VkInstance instance, const VkAllocationCallbacks* allocator);
+ VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+ void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+ void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+@@ -37,8 +37,8 @@ void GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uin
+ void GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
+-VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkDevice* pDevice);
+-void DestroyDevice(VkDevice device, const VkAllocCallbacks* allocator);
++VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDevice* pDevice);
++void DestroyDevice(VkDevice device, const VkAllocationCallbacks* allocator);
+ VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+ VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
+@@ -47,8 +47,8 @@ void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIn
+ VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
+ VkResult QueueWaitIdle(VkQueue queue);
+ VkResult DeviceWaitIdle(VkDevice device);
+-VkResult AllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, const VkAllocCallbacks* allocator, VkDeviceMemory* pMem);
+-void FreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocCallbacks* allocator);
++VkResult AllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocInfo, const VkAllocationCallbacks* allocator, VkDeviceMemory* pMem);
++void FreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocationCallbacks* allocator);
+ VkResult MapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+ void UnmapMemory(VkDevice device, VkDeviceMemory mem);
+ VkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+@@ -61,110 +61,110 @@ void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirem
+ void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+ void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+ VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+-VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkFence* pFence);
+-void DestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* allocator);
++VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFence* pFence);
++void DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* allocator);
+ VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+ VkResult GetFenceStatus(VkDevice device, VkFence fence);
+ VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+-VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkSemaphore* pSemaphore);
+-void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocCallbacks* allocator);
+-VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkEvent* pEvent);
+-void DestroyEvent(VkDevice device, VkEvent event, const VkAllocCallbacks* allocator);
++VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkSemaphore* pSemaphore);
++void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* allocator);
++VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkEvent* pEvent);
++void DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* allocator);
+ VkResult GetEventStatus(VkDevice device, VkEvent event);
+ VkResult SetEvent(VkDevice device, VkEvent event);
+ VkResult ResetEvent(VkDevice device, VkEvent event);
+-VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkQueryPool* pQueryPool);
+-void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocCallbacks* allocator);
++VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkQueryPool* pQueryPool);
++void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* allocator);
+ VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+-VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkBuffer* pBuffer);
+-void DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocCallbacks* allocator);
+-VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkBufferView* pView);
+-void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocCallbacks* allocator);
+-VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkImage* pImage);
+-void DestroyImage(VkDevice device, VkImage image, const VkAllocCallbacks* allocator);
++VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkBuffer* pBuffer);
++void DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* allocator);
++VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkBufferView* pView);
++void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* allocator);
++VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkImage* pImage);
++void DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* allocator);
+ void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+-VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkImageView* pView);
+-void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocCallbacks* allocator);
+-VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkShaderModule* pShaderModule);
+-void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocCallbacks* allocator);
+-VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkShader* pShader);
+-void DestroyShader(VkDevice device, VkShader shader, const VkAllocCallbacks* allocator);
+-VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkPipelineCache* pPipelineCache);
+-void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocCallbacks* allocator);
++VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkImageView* pView);
++void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* allocator);
++VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkShaderModule* pShaderModule);
++void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator);
++VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkShader* pShader);
++void DestroyShader(VkDevice device, VkShader shader, const VkAllocationCallbacks* allocator);
++VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineCache* pPipelineCache);
++void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator);
+ VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+ VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+-VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* allocator, VkPipeline* pPipelines);
+-VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocCallbacks* allocator, VkPipeline* pPipelines);
+-void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocCallbacks* allocator);
+-VkResult CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkPipelineLayout* pPipelineLayout);
+-void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocCallbacks* allocator);
+-VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkSampler* pSampler);
+-void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocCallbacks* allocator);
+-VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkDescriptorSetLayout* pSetLayout);
+-void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocCallbacks* allocator);
+-VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkDescriptorPool* pDescriptorPool);
+-void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocCallbacks* allocator);
++VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* allocator, VkPipeline* pPipelines);
++VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* allocator, VkPipeline* pPipelines);
++void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* allocator);
++VkResult CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineLayout* pPipelineLayout);
++void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* allocator);
++VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkSampler* pSampler);
++void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* allocator);
++VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDescriptorSetLayout* pSetLayout);
++void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* allocator);
++VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDescriptorPool* pDescriptorPool);
++void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* allocator);
+ VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+-VkResult AllocDescriptorSets(VkDevice device, const VkDescriptorSetAllocInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
++VkResult AllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+ VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
+ void UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+-VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkFramebuffer* pFramebuffer);
+-void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocCallbacks* allocator);
+-VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkRenderPass* pRenderPass);
+-void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocCallbacks* allocator);
++VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFramebuffer* pFramebuffer);
++void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* allocator);
++VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkRenderPass* pRenderPass);
++void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* allocator);
+ void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+-VkResult CreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkCmdPool* pCmdPool);
+-void DestroyCommandPool(VkDevice device, VkCmdPool cmdPool, const VkAllocCallbacks* allocator);
+-VkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags);
+-VkResult AllocCommandBuffers(VkDevice device, const VkCmdBufferAllocInfo* pAllocInfo, VkCmdBuffer* pCmdBuffers);
+-void FreeCommandBuffers(VkDevice device, VkCmdPool cmdPool, uint32_t count, const VkCmdBuffer* pCommandBuffers);
+-VkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo);
+-VkResult EndCommandBuffer(VkCmdBuffer cmdBuffer);
+-VkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
+-void CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+-void CmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+-void CmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+-void CmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth);
+-void CmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias);
+-void CmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4]);
+-void CmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
+-void CmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+-void CmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+-void CmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
+-void CmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+-void CmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+-void CmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+-void CmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+-void CmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+-void CmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
+-void CmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
+-void CmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+-void CmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
+-void CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+-void CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+-void CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+-void CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-void CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-void CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
+-void CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
+-void CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-void CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-void CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+-void CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+-void CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-void CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-void CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-void CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-void CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+-void CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+-void CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-void CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+-void CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
+-void CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+-void CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+-void CmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents);
+-void CmdEndRenderPass(VkCmdBuffer cmdBuffer);
+-void CmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers);
++VkResult CreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkCommandPool* pCmdPool);
++void DestroyCommandPool(VkDevice device, VkCommandPool cmdPool, const VkAllocationCallbacks* allocator);
++VkResult ResetCommandPool(VkDevice device, VkCommandPool cmdPool, VkCommandPoolResetFlags flags);
++VkResult AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocInfo, VkCommandBuffer* pCmdBuffers);
++void FreeCommandBuffers(VkDevice device, VkCommandPool cmdPool, uint32_t count, const VkCommandBuffer* pCommandBuffers);
++VkResult BeginCommandBuffer(VkCommandBuffer cmdBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
++VkResult EndCommandBuffer(VkCommandBuffer cmdBuffer);
++VkResult ResetCommandBuffer(VkCommandBuffer cmdBuffer, VkCommandBufferResetFlags flags);
++void CmdBindPipeline(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
++void CmdSetViewport(VkCommandBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports);
++void CmdSetScissor(VkCommandBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
++void CmdSetLineWidth(VkCommandBuffer cmdBuffer, float lineWidth);
++void CmdSetDepthBias(VkCommandBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias);
++void CmdSetBlendConstants(VkCommandBuffer cmdBuffer, const float blendConst[4]);
++void CmdSetDepthBounds(VkCommandBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
++void CmdSetStencilCompareMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
++void CmdSetStencilWriteMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
++void CmdSetStencilReference(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
++void CmdBindDescriptorSets(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
++void CmdBindIndexBuffer(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
++void CmdBindVertexBuffers(VkCommandBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
++void CmdDraw(VkCommandBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
++void CmdDrawIndexed(VkCommandBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
++void CmdDrawIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
++void CmdDrawIndexedIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
++void CmdDispatch(VkCommandBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
++void CmdDispatchIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
++void CmdCopyBuffer(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
++void CmdCopyImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
++void CmdBlitImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
++void CmdCopyBufferToImage(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++void CmdCopyImageToBuffer(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++void CmdUpdateBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
++void CmdFillBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
++void CmdClearColorImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++void CmdClearDepthStencilImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++void CmdClearAttachments(VkCommandBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
++void CmdResolveImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
++void CmdSetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++void CmdResetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++void CmdWaitEvents(VkCommandBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
++void CmdPipelineBarrier(VkCommandBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
++void CmdBeginQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
++void CmdEndQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
++void CmdResetQueryPool(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
++void CmdWriteTimestamp(VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
++void CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
++void CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
++void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
++void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkRenderPassContents contents);
++void CmdEndRenderPass(VkCommandBuffer cmdBuffer);
++void CmdExecuteCommands(VkCommandBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCommandBuffer* pCmdBuffers);
+ VkResult GetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
+ VkResult AcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index f836a70..9b1b042 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -67,9 +67,9 @@ const NameProcEntry kInstanceProcTbl[] = {
+ const NameProcEntry kDeviceProcTbl[] = {
+     // clang-format off
+-    {"vkAllocCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocCommandBuffers>(AllocCommandBuffers))},
+-    {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocDescriptorSets>(AllocDescriptorSets))},
+-    {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocMemory>(AllocMemory))},
++    {"vkAllocateCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocateCommandBuffers>(AllocateCommandBuffers))},
++    {"vkAllocateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocateDescriptorSets>(AllocateDescriptorSets))},
++    {"vkAllocateMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkAllocateMemory>(AllocateMemory))},
+     {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkBeginCommandBuffer>(BeginCommandBuffer))},
+     {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkBindBufferMemory>(BindBufferMemory))},
+     {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkBindImageMemory>(BindImageMemory))},
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index eaec272..838d0e2 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -157,7 +157,7 @@ int main(int /*argc*/, char const* /*argv*/ []) {
+     const VkInstanceCreateInfo create_info = {
+         .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+         .pNext = nullptr,
+-        .pAppInfo = nullptr,
++        .pApplicationInfo = nullptr,
+         .enabledLayerNameCount = 0,
+         .ppEnabledLayerNames = nullptr,
+         .enabledExtensionNameCount = 0,
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0019-vulkan-Update-from-version-0.196.0-to-0.197.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0019-vulkan-Update-from-version-0.196.0-to-0.197.0.patch
new file mode 100644 (file)
index 0000000..5269766
--- /dev/null
@@ -0,0 +1,220 @@
+From 28e4f6d9fdb6ac3fec47d7cb12a7b90caa737394 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Sun, 29 Nov 2015 23:50:38 -0800
+Subject: [PATCH 19/30] vulkan: Update from version 0.196.0 to 0.197.0
+
+Change-Id: I1c7aecd276cb8d831b8d7bf7eef58b5c6ad8b82c
+---
+ vulkan/api/vulkan.api          | 24 ++++++++++++------------
+ vulkan/include/vulkan/vulkan.h | 22 ++++++++++------------
+ vulkan/nulldrv/null_driver.cpp |  7 +++++--
+ vulkan/tools/vkinfo.cpp        | 16 ++++++++--------
+ 4 files changed, 35 insertions(+), 34 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 7313904..9575407 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 196
++define VERSION_MINOR 197
+ define VERSION_PATCH 0
+ // API limits
+@@ -723,18 +723,17 @@ bitfield VkQueueFlagBits {
+ /// Memory properties passed into vkAllocMemory().
+ type VkFlags VkMemoryPropertyFlags
+ bitfield VkMemoryPropertyFlagBits {
+-    VK_MEMORY_PROPERTY_DEVICE_ONLY                          = 0x00000000,    /// If otherwise stated, then allocate memory on device
+-    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT                     = 0x00000001,    /// Memory should be mappable by host
+-    VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT                = 0x00000002,    /// Memory may not have i/o coherency so vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
+-                                                                             /// vkInvalidateMappedMemoryRanges must be used flush/invalidate host cache
+-    VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT                    = 0x00000004,    /// Memory should not be cached by the host
+-    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000008,    /// Memory may be allocated by the driver when it is required
++    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT                     = 0x00000001,
++    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT                     = 0x00000002,
++    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT                    = 0x00000004,
++    VK_MEMORY_PROPERTY_HOST_CACHED_BIT                      = 0x00000008,
++    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000010,
+ }
+ /// Memory heap flags
+ type VkFlags VkMemoryHeapFlags
+ bitfield VkMemoryHeapFlagBits {
+-    VK_MEMORY_HEAP_HOST_LOCAL_BIT                           = 0x00000001,    /// If set, heap represents host memory
++    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT                         = 0x00000001,
+ }
+ /// Memory output flags passed to resource transition commands
+@@ -953,9 +952,8 @@ bitfield VkImageAspectFlagBits {
+ /// Sparse memory bind flags
+ type VkFlags VkSparseMemoryBindFlags
+-bitfield VkSparseMemoryBindFlagBits {
+-    VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT               = 0x00000001,
+-}
++//bitfield VkSparseMemoryBindFlagBits {
++//}
+ /// Sparse image memory requirements flags
+ type VkFlags VkSparseImageFormatFlags
+@@ -2076,6 +2074,8 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    shaderImageGatherExtended                 /// texture gather with run-time values and independent offsets
+     VkBool32                                    shaderStorageImageExtendedFormats         /// the extended set of formats can be used for storage images
+     VkBool32                                    shaderStorageImageMultisample             /// multisample images can be used for storage images
++    VkBool32                                    shaderStorageImageReadWithoutFormat
++    VkBool32                                    shaderStorageImageWriteWithoutFormat
+     VkBool32                                    shaderUniformBufferArrayDynamicIndexing   /// arrays of uniform buffers can be accessed with dynamically uniform indices
+     VkBool32                                    shaderSampledImageArrayDynamicIndexing    /// arrays of sampled images can be accessed with dynamically uniform indices
+     VkBool32                                    shaderStorageBufferArrayDynamicIndexing   /// arrays of storage buffers can be accessed with dynamically uniform indices
+@@ -2096,6 +2096,7 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    sparseResidency8Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
+     VkBool32                                    sparseResidency16Samples                  /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
+     VkBool32                                    sparseResidencyAliased                    /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
++    VkBool32                                    variableMultisampleRate
+ }
+ class VkPhysicalDeviceLimits {
+@@ -2226,7 +2227,6 @@ class VkPhysicalDeviceSparseProperties {
+     VkBool32                                    residencyStandard2DMultisampleBlockShape  /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
+     VkBool32                                    residencyStandard3DBlockShape             /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
+     VkBool32                                    residencyAlignedMipSize                   /// Sparse resources support: Images with mip-level dimensions that are NOT a multiple of the block size will be placed in the mip tail
+-    VkBool32                                    residencyNonResident                      /// Sparse resources support: GPU can safely access non-resident regions of a resource, read values from read-write resources are undefined
+     VkBool32                                    residencyNonResidentStrict                /// Sparse resources support: GPU can safely access non-resident regions of a resource, all reads return as if data is 0, writes are discarded
+ }
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 0130399..cbd15e6 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 196, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 197, 0)
+ #define VK_NULL_HANDLE 0
+@@ -810,16 +810,16 @@ typedef enum {
+ typedef VkFlags VkQueueFlags;
+ typedef enum {
+-    VK_MEMORY_PROPERTY_DEVICE_ONLY = 0,
+-    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000001,
+-    VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT = 0x00000002,
+-    VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT = 0x00000004,
+-    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000008,
++    VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
++    VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
++    VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
++    VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
++    VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
+ } VkMemoryPropertyFlagBits;
+ typedef VkFlags VkMemoryPropertyFlags;
+ typedef enum {
+-    VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001,
++    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+ } VkMemoryHeapFlagBits;
+ typedef VkFlags VkMemoryHeapFlags;
+ typedef VkFlags VkDeviceCreateFlags;
+@@ -839,10 +839,6 @@ typedef enum {
+     VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+ } VkSparseImageFormatFlagBits;
+ typedef VkFlags VkSparseImageFormatFlags;
+-
+-typedef enum {
+-    VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT = 0x00000001,
+-} VkSparseMemoryBindFlagBits;
+ typedef VkFlags VkSparseMemoryBindFlags;
+ typedef enum {
+@@ -1141,6 +1137,8 @@ typedef struct {
+     VkBool32                                    shaderImageGatherExtended;
+     VkBool32                                    shaderStorageImageExtendedFormats;
+     VkBool32                                    shaderStorageImageMultisample;
++    VkBool32                                    shaderStorageImageReadWithoutFormat;
++    VkBool32                                    shaderStorageImageWriteWithoutFormat;
+     VkBool32                                    shaderUniformBufferArrayDynamicIndexing;
+     VkBool32                                    shaderSampledImageArrayDynamicIndexing;
+     VkBool32                                    shaderStorageBufferArrayDynamicIndexing;
+@@ -1161,6 +1159,7 @@ typedef struct {
+     VkBool32                                    sparseResidency8Samples;
+     VkBool32                                    sparseResidency16Samples;
+     VkBool32                                    sparseResidencyAliased;
++    VkBool32                                    variableMultisampleRate;
+ } VkPhysicalDeviceFeatures;
+ typedef struct {
+@@ -1290,7 +1289,6 @@ typedef struct {
+     VkBool32                                    residencyStandard2DMultisampleBlockShape;
+     VkBool32                                    residencyStandard3DBlockShape;
+     VkBool32                                    residencyAlignedMipSize;
+-    VkBool32                                    residencyNonResident;
+     VkBool32                                    residencyNonResidentStrict;
+ } VkPhysicalDeviceSparseProperties;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index d134c0e..b2b905f 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -292,11 +292,14 @@ void GetPhysicalDeviceMemoryProperties(
+     VkPhysicalDeviceMemoryProperties* properties) {
+     properties->memoryTypeCount = 1;
+     properties->memoryTypes[0].propertyFlags =
+-        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
++        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
++        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
++        VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
++        VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+     properties->memoryTypes[0].heapIndex = 0;
+     properties->memoryHeapCount = 1;
+     properties->memoryHeaps[0].size = kMaxDeviceMemory;
+-    properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL_BIT;
++    properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
+ }
+ // -----------------------------------------------------------------------------
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 838d0e2..1920d6b 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -98,8 +98,8 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+     vkGetPhysicalDeviceMemoryProperties(pdev, &mem_props);
+     for (uint32_t heap = 0; heap < mem_props.memoryHeapCount; heap++) {
+         if ((mem_props.memoryHeaps[heap].flags &
+-             VK_MEMORY_HEAP_HOST_LOCAL_BIT) != 0)
+-            strbuf << "HOST_LOCAL";
++             VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) != 0)
++            strbuf << "DEVICE_LOCAL";
+         printf("     Heap %u: 0x%" PRIx64 " %s\n", heap,
+                mem_props.memoryHeaps[heap].size, strbuf.str().c_str());
+         strbuf.str(std::string());
+@@ -109,14 +109,14 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+                 continue;
+             VkMemoryPropertyFlags flags =
+                 mem_props.memoryTypes[type].propertyFlags;
+-            if (flags == VK_MEMORY_PROPERTY_DEVICE_ONLY)
+-                strbuf << "DEVICE_ONLY";
++            if ((flags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0)
++                strbuf << "DEVICE_LOCAL";
+             if ((flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)
+                 strbuf << "HOST_VISIBLE";
+-            if ((flags & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT) != 0)
+-                strbuf << " NON_COHERENT";
+-            if ((flags & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT) != 0)
+-                strbuf << " UNCACHED";
++            if ((flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0)
++                strbuf << " COHERENT";
++            if ((flags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) != 0)
++                strbuf << " CACHED";
+             if ((flags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0)
+                 strbuf << " LAZILY_ALLOCATED";
+             printf("       Type %u: %s\n", type, strbuf.str().c_str());
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0020-vulkan-Update-from-version-0.197.0-to-0.198.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0020-vulkan-Update-from-version-0.197.0-to-0.198.0.patch
new file mode 100644 (file)
index 0000000..09e7224
--- /dev/null
@@ -0,0 +1,1422 @@
+From 16dcb975a508d8c23006200f42e00c23d0376511 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 00:07:16 -0800
+Subject: [PATCH 20/30] vulkan: Update from version 0.197.0 to 0.198.0
+
+Change-Id: I182b21c68374e8eae962b2ae391bb283f07d5517
+---
+ vulkan/api/vulkan.api               | 243 +++++++++++++++---------------
+ vulkan/include/vulkan/vk_platform.h |   7 +-
+ vulkan/include/vulkan/vulkan.h      | 293 ++++++++++++++++++------------------
+ vulkan/libvulkan/entry.cpp          |  28 ++--
+ vulkan/nulldrv/null_driver.cpp      |  12 +-
+ vulkan/nulldrv/null_driver.h        |   4 +-
+ vulkan/tools/vkinfo.cpp             |   8 +-
+ 7 files changed, 297 insertions(+), 298 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 9575407..ab887fa 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,16 +27,16 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 197
++define VERSION_MINOR 198
+ define VERSION_PATCH 0
+ // API limits
+-define VK_MAX_PHYSICAL_DEVICE_NAME 256
+-define VK_UUID_LENGTH              16
+-define VK_MAX_EXTENSION_NAME       256
+-define VK_MAX_DESCRIPTION          256
+-define VK_MAX_MEMORY_TYPES         32
+-define VK_MAX_MEMORY_HEAPS         16    /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
++define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
++define VK_UUID_SIZE                     16
++define VK_MAX_EXTENSION_NAME_SIZE       256
++define VK_MAX_DESCRIPTION_SIZE          256
++define VK_MAX_MEMORY_TYPES              32
++define VK_MAX_MEMORY_HEAPS              16    /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
+ // API keywords
+ define VK_TRUE        1
+@@ -189,14 +189,14 @@ enum VkCommandBufferLevel {
+     VK_COMMAND_BUFFER_LEVEL_SECONDARY                       = 0x00000001,
+ }
+-enum VkChannelSwizzle {
+-    VK_CHANNEL_SWIZZLE_IDENTITY                             = 0x00000000,
+-    VK_CHANNEL_SWIZZLE_ZERO                                 = 0x00000001,
+-    VK_CHANNEL_SWIZZLE_ONE                                  = 0x00000002,
+-    VK_CHANNEL_SWIZZLE_R                                    = 0x00000003,
+-    VK_CHANNEL_SWIZZLE_G                                    = 0x00000004,
+-    VK_CHANNEL_SWIZZLE_B                                    = 0x00000005,
+-    VK_CHANNEL_SWIZZLE_A                                    = 0x00000006,
++enum VkComponentSwizzle {
++    VK_COMPONENT_SWIZZLE_IDENTITY                           = 0x00000000,
++    VK_COMPONENT_SWIZZLE_ZERO                               = 0x00000001,
++    VK_COMPONENT_SWIZZLE_ONE                                = 0x00000002,
++    VK_COMPONENT_SWIZZLE_R                                  = 0x00000003,
++    VK_COMPONENT_SWIZZLE_G                                  = 0x00000004,
++    VK_COMPONENT_SWIZZLE_B                                  = 0x00000005,
++    VK_COMPONENT_SWIZZLE_A                                  = 0x00000006,
+ }
+ enum VkDescriptorType {
+@@ -287,10 +287,10 @@ enum VkCompareOp {
+     VK_COMPARE_OP_ALWAYS                                    = 0x00000007,
+ }
+-enum VkFillMode {
+-    VK_FILL_MODE_SOLID                                      = 0x00000000,
+-    VK_FILL_MODE_WIREFRAME                                  = 0x00000001,
+-    VK_FILL_MODE_POINTS                                     = 0x00000002,
++enum VkPolygonMode {
++    VK_POLYGON_MODE_FILL                                    = 0x00000000,
++    VK_POLYGON_MODE_LINE                                    = 0x00000001,
++    VK_POLYGON_MODE_POINT                                   = 0x00000002,
+ }
+ enum VkFrontFace {
+@@ -298,26 +298,26 @@ enum VkFrontFace {
+     VK_FRONT_FACE_CLOCKWISE                                 = 0x00000001,
+ }
+-enum VkBlend {
+-    VK_BLEND_ZERO                                           = 0x00000000,
+-    VK_BLEND_ONE                                            = 0x00000001,
+-    VK_BLEND_SRC_COLOR                                      = 0x00000002,
+-    VK_BLEND_ONE_MINUS_SRC_COLOR                            = 0x00000003,
+-    VK_BLEND_DST_COLOR                                      = 0x00000004,
+-    VK_BLEND_ONE_MINUS_DST_COLOR                            = 0x00000005,
+-    VK_BLEND_SRC_ALPHA                                      = 0x00000006,
+-    VK_BLEND_ONE_MINUS_SRC_ALPHA                            = 0x00000007,
+-    VK_BLEND_DST_ALPHA                                      = 0x00000008,
+-    VK_BLEND_ONE_MINUS_DST_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,
++enum VkBlendFactor {
++    VK_BLEND_FACTOR_ZERO                                    = 0x00000000,
++    VK_BLEND_FACTOR_ONE                                     = 0x00000001,
++    VK_BLEND_FACTOR_SRC_COLOR                               = 0x00000002,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR                     = 0x00000003,
++    VK_BLEND_FACTOR_DST_COLOR                               = 0x00000004,
++    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR                     = 0x00000005,
++    VK_BLEND_FACTOR_SRC_ALPHA                               = 0x00000006,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA                     = 0x00000007,
++    VK_BLEND_FACTOR_DST_ALPHA                               = 0x00000008,
++    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA                     = 0x00000009,
++    VK_BLEND_FACTOR_CONSTANT_COLOR                          = 0x0000000a,
++    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR                = 0x0000000b,
++    VK_BLEND_FACTOR_CONSTANT_ALPHA                          = 0x0000000c,
++    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA                = 0x0000000d,
++    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE                      = 0x0000000e,
++    VK_BLEND_FACTOR_SRC1_COLOR                              = 0x0000000f,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR                    = 0x00000010,
++    VK_BLEND_FACTOR_SRC1_ALPHA                              = 0x00000011,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA                    = 0x00000012,
+ }
+ enum VkBlendOp {
+@@ -378,9 +378,9 @@ enum VkPhysicalDeviceType {
+     VK_PHYSICAL_DEVICE_TYPE_CPU                             = 0x00000004,
+ }
+-enum VkVertexInputStepRate {
+-    VK_VERTEX_INPUT_STEP_RATE_VERTEX                        = 0x00000000,
+-    VK_VERTEX_INPUT_STEP_RATE_INSTANCE                      = 0x00000001,
++enum VkVertexInputRate {
++    VK_VERTEX_INPUT_RATE_VERTEX                             = 0x00000000,
++    VK_VERTEX_INPUT_RATE_INSTANCE                           = 0x00000001,
+ }
+ /// Vulkan format definitions
+@@ -587,7 +587,7 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21,
+     VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 22,
+     VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 23,
+-    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO         = 24,
++    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO  = 24,
+     VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 25,
+     VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 26,
+     VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 27,
+@@ -625,9 +625,9 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001001,
+ }
+-enum VkRenderPassContents {
+-    VK_RENDER_PASS_CONTENTS_INLINE                          = 0x00000000,
+-    VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS       = 0x00000001,
++enum VkSubpassContents {
++    VK_SUBPASS_CONTENTS_INLINE                              = 0x00000000,
++    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS           = 0x00000001,
+ }
+ @lastUnused(-8)
+@@ -716,7 +716,7 @@ type VkFlags VkQueueFlags
+ bitfield VkQueueFlagBits {
+     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_TRANSFER_BIT                                   = 0x00000004,    /// Queue supports transfer operations
+     VK_QUEUE_SPARSE_BINDING_BIT                             = 0x00000008,    /// Queue supports sparse resource memory management operations
+ }
+@@ -844,13 +844,13 @@ bitfield VkPipelineCreateFlagBits {
+     VK_PIPELINE_CREATE_DERIVATIVE_BIT                       = 0x00000004,
+ }
+-/// Channel flags
+-type VkFlags VkChannelFlags
+-bitfield VkChannelFlagBits {
+-    VK_CHANNEL_R_BIT                                        = 0x00000001,
+-    VK_CHANNEL_G_BIT                                        = 0x00000002,
+-    VK_CHANNEL_B_BIT                                        = 0x00000004,
+-    VK_CHANNEL_A_BIT                                        = 0x00000008,
++/// Color component flags
++type VkFlags VkColorComponentFlags
++bitfield VkColorComponentFlagBits {
++    VK_COLOR_COMPONENT_R_BIT                                = 0x00000001,
++    VK_COLOR_COMPONENT_G_BIT                                = 0x00000002,
++    VK_COLOR_COMPONENT_B_BIT                                = 0x00000004,
++    VK_COLOR_COMPONENT_A_BIT                                = 0x00000008,
+ }
+ /// Fence creation flags
+@@ -884,7 +884,7 @@ bitfield VkFormatFeatureFlagBits {
+ /// Query control flags
+ type VkFlags VkQueryControlFlags
+ bitfield VkQueryControlFlagBits {
+-    VK_QUERY_CONTROL_CONSERVATIVE_BIT                       = 0x00000001,    /// Allow conservative results to be collected by the query
++    VK_QUERY_CONTROL_PRECISE_BIT                            = 0x00000001,
+ }
+ /// Query result flags
+@@ -1215,8 +1215,8 @@ class VkExtent3D {
+ }
+ class VkViewport {
+-    f32                                         originX
+-    f32                                         originY
++    f32                                         x
++    f32                                         y
+     f32                                         width
+     f32                                         height
+     f32                                         minDepth
+@@ -1234,35 +1234,35 @@ class VkClearRect {
+     u32                                         layerCount
+ }
+-class VkChannelMapping {
+-    VkChannelSwizzle                            r
+-    VkChannelSwizzle                            g
+-    VkChannelSwizzle                            b
+-    VkChannelSwizzle                            a
++class VkComponentMapping {
++    VkComponentSwizzle                          r
++    VkComponentSwizzle                          g
++    VkComponentSwizzle                          b
++    VkComponentSwizzle                          a
+ }
+ class VkPhysicalDeviceProperties {
+     u32                                         apiVersion
+     u32                                         driverVersion
+-    u32                                         vendorId
+-    u32                                         deviceId
++    u32                                         vendorID
++    u32                                         deviceID
+     VkPhysicalDeviceType                        deviceType
+-    char[VK_MAX_PHYSICAL_DEVICE_NAME]           deviceName
+-    u8[VK_UUID_LENGTH]                          pipelineCacheUUID
++    char[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]      deviceName
++    u8[VK_UUID_SIZE]                            pipelineCacheUUID
+     VkPhysicalDeviceLimits                      limits
+     VkPhysicalDeviceSparseProperties            sparseProperties
+ }
+ class VkExtensionProperties {
+-    char[VK_MAX_EXTENSION_NAME]                 extensionName      /// extension name
++    char[VK_MAX_EXTENSION_NAME_SIZE]            extensionName      /// extension name
+     u32                                         specVersion        /// version of the extension specification implemented
+ }
+ class VkLayerProperties {
+-    char[VK_MAX_EXTENSION_NAME]                 layerName               /// layer name
++    char[VK_MAX_EXTENSION_NAME_SIZE]            layerName               /// layer name
+     u32                                         specVersion             /// version of the layer specification implemented
+     u32                                         implementationVersion   /// build or release version of the layer's library
+-    char[VK_MAX_DESCRIPTION]                    description             /// Free-form description of the layer
++    char[VK_MAX_DESCRIPTION_SIZE]               description             /// Free-form description of the layer
+ }
+ class VkSubmitInfo {
+@@ -1332,6 +1332,7 @@ class VkQueueFamilyProperties {
+     VkQueueFlags                                queueFlags                 /// Queue flags
+     u32                                         queueCount
+     u32                                         timestampValidBits
++    VkExtent3D                                  minImageTransferGranularity
+ }
+ class VkPhysicalDeviceMemoryProperties {
+@@ -1362,7 +1363,7 @@ class VkSparseImageFormatProperties {
+ class VkSparseImageMemoryRequirements {
+     VkSparseImageFormatProperties               formatProperties
+-    u32                                         imageMipTailStartLOD
++    u32                                         imageMipTailStartLod
+     VkDeviceSize                                imageMipTailSize           /// Specified in bytes, must be a multiple of image block size / alignment
+     VkDeviceSize                                imageMipTailOffset         /// Specified in bytes, must be a multiple of image block size / alignment
+     VkDeviceSize                                imageMipTailStride         /// Specified in bytes, must be a multiple of image block size / alignment
+@@ -1536,7 +1537,7 @@ class VkImageViewCreateInfo {
+     VkImage                                     image
+     VkImageViewType                             viewType
+     VkFormat                                    format
+-    VkChannelMapping                            channels
++    VkComponentMapping                          components
+     VkImageSubresourceRange                     subresourceRange
+ }
+@@ -1596,26 +1597,26 @@ class VkBindSparseInfo {
+     const VkSemaphore*                          pSignalSemaphores
+ }
+-class VkImageSubresourceCopy {
+-    VkImageAspectFlags                          aspect
++class VkImageSubresourceLayers {
++    VkImageAspectFlags                          aspectMask
+     u32                                         mipLevel
+     u32                                         baseArrayLayer
+     u32                                         layerCount
+ }
+ class VkImageCopy {
+-    VkImageSubresourceCopy                      srcSubresource
++    VkImageSubresourceLayers                    srcSubresource
+     VkOffset3D                                  srcOffset             /// Specified in pixels for both compressed and uncompressed images
+-    VkImageSubresourceCopy                      dstSubresource
++    VkImageSubresourceLayers                    dstSubresource
+     VkOffset3D                                  dstOffset             /// Specified in pixels for both compressed and uncompressed images
+     VkExtent3D                                  extent                /// Specified in pixels for both compressed and uncompressed images
+ }
+ class VkImageBlit {
+-    VkImageSubresourceCopy                      srcSubresource
++    VkImageSubresourceLayers                    srcSubresource
+     VkOffset3D                                  srcOffset              /// Specified in pixels for both compressed and uncompressed images
+     VkExtent3D                                  srcExtent              /// Specified in pixels for both compressed and uncompressed images
+-    VkImageSubresourceCopy                      dstSubresource
++    VkImageSubresourceLayers                    dstSubresource
+     VkOffset3D                                  dstOffset              /// Specified in pixels for both compressed and uncompressed images
+     VkExtent3D                                  dstExtent              /// Specified in pixels for both compressed and uncompressed images
+ }
+@@ -1624,15 +1625,15 @@ class VkBufferImageCopy {
+     VkDeviceSize                                bufferOffset           /// Specified in bytes
+     u32                                         bufferRowLength        /// Specified in texels
+     u32                                         bufferImageHeight
+-    VkImageSubresourceCopy                      imageSubresource
++    VkImageSubresourceLayers                    imageSubresource
+     VkOffset3D                                  imageOffset            /// Specified in pixels for both compressed and uncompressed images
+     VkExtent3D                                  imageExtent            /// Specified in pixels for both compressed and uncompressed images
+ }
+ class VkImageResolve {
+-    VkImageSubresourceCopy                      srcSubresource
++    VkImageSubresourceLayers                    srcSubresource
+     VkOffset3D                                  srcOffset
+-    VkImageSubresourceCopy                      dstSubresource
++    VkImageSubresourceLayers                    dstSubresource
+     VkOffset3D                                  dstOffset
+     VkExtent3D                                  extent
+ }
+@@ -1669,7 +1670,7 @@ class VkDescriptorSetLayoutCreateInfo {
+     const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
+ }
+-class VkDescriptorTypeCount {
++class VkDescriptorPoolSize {
+     VkDescriptorType                            type
+     u32                                         descriptorCount
+ }
+@@ -1679,8 +1680,8 @@ class VkDescriptorPoolCreateInfo {
+     const void*                                 pNext              /// Pointer to next structure
+     VkDescriptorPoolCreateFlags                 flags
+     u32                                         maxSets
+-    u32                                         typeCount
+-    const VkDescriptorTypeCount*                pTypeCounts
++    u32                                         poolSizeCount
++    const VkDescriptorPoolSize*                 pPoolSizes
+ }
+ class VkDescriptorSetAllocateInfo {
+@@ -1692,7 +1693,7 @@ class VkDescriptorSetAllocateInfo {
+ }
+ class VkSpecializationMapEntry {
+-    u32                                         constantId         /// The SpecConstant ID specified in the BIL
++    u32                                         constantID         /// The SpecConstant ID specified in the BIL
+     u32                                         offset             /// Offset of the value in the data block
+     platform.size_t                             size               /// Size in bytes of the SpecConstant
+ }
+@@ -1725,7 +1726,7 @@ class VkComputePipelineCreateInfo {
+ class VkVertexInputBindingDescription {
+     u32                                         binding               /// Vertex buffer binding id
+     u32                                         stride                /// Distance between vertices in bytes (0 = no advancement)
+-    VkVertexInputStepRate                       stepRate              /// Rate at which binding is incremented
++    VkVertexInputRate                           inputRate             /// Rate at which binding is incremented
+ }
+ class VkVertexInputAttributeDescription {
+@@ -1771,12 +1772,12 @@ class VkPipelineViewportStateCreateInfo {
+ }
+ class VkPipelineRasterizationStateCreateInfo {
+-    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
++    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+     VkPipelineRasterizationStateCreateFlags     flags
+     VkBool32                                    depthClampEnable
+     VkBool32                                    rasterizerDiscardEnable
+-    VkFillMode                                  fillMode                   /// optional (GL45)
++    VkPolygonMode                               polygonMode                   /// optional (GL45)
+     VkCullModeFlags                             cullMode
+     VkFrontFace                                 frontFace
+     VkBool32                                    depthBiasEnable
+@@ -1800,13 +1801,13 @@ class VkPipelineMultisampleStateCreateInfo {
+ class VkPipelineColorBlendAttachmentState {
+     VkBool32                                    blendEnable
+-    VkBlend                                     srcBlendColor
+-    VkBlend                                     dstBlendColor
+-    VkBlendOp                                   blendOpColor
+-    VkBlend                                     srcBlendAlpha
+-    VkBlend                                     dstBlendAlpha
+-    VkBlendOp                                   blendOpAlpha
+-    VkChannelFlags                              channelWriteMask
++    VkBlendFactor                               srcColorBlendFactor
++    VkBlendFactor                               dstColorBlendFactor
++    VkBlendOp                                   colorBlendOp
++    VkBlendFactor                               srcAlphaBlendFactor
++    VkBlendFactor                               dstAlphaBlendFactor
++    VkBlendOp                                   alphaBlendOp
++    VkColorComponentFlags                       colorWriteMask
+ }
+ class VkPipelineColorBlendStateCreateInfo {
+@@ -1821,13 +1822,13 @@ class VkPipelineColorBlendStateCreateInfo {
+ }
+ class VkStencilOpState {
+-    VkStencilOp                                 stencilFailOp
+-    VkStencilOp                                 stencilPassOp
+-    VkStencilOp                                 stencilDepthFailOp
+-    VkCompareOp                                 stencilCompareOp
+-    u32                                         stencilCompareMask
+-    u32                                         stencilWriteMask
+-    u32                                         stencilReference
++    VkStencilOp                                 failOp
++    VkStencilOp                                 passOp
++    VkStencilOp                                 depthFailOp
++    VkCompareOp                                 compareOp
++    u32                                         compareMask
++    u32                                         writeMask
++    u32                                         reference
+ }
+ class VkPipelineDepthStencilStateCreateInfo {
+@@ -2066,7 +2067,7 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    textureCompressionETC2                    /// ETC texture compression formats
+     VkBool32                                    textureCompressionASTC_LDR                /// ASTC LDR texture compression formats
+     VkBool32                                    textureCompressionBC                      /// BC1-7 texture compressed formats
+-    VkBool32                                    occlusionQueryNonConservative             /// non-conservative (exact) occlusion queries
++    VkBool32                                    occlusionQueryPrecise
+     VkBool32                                    pipelineStatisticsQuery                   /// pipeline statistics query
+     VkBool32                                    vertexPipelineStoresAndAtomics
+     VkBool32                                    fragmentStoresAndAtomics
+@@ -2086,7 +2087,7 @@ class VkPhysicalDeviceFeatures {
+     VkBool32                                    shaderInt64                               /// 64-bit integers in shaders
+     VkBool32                                    shaderInt16                               /// 16-bit integers in shaders
+     VkBool32                                    shaderResourceResidency                   /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
+-    VkBool32                                    shaderResourceMinLOD                      /// shader can use texture operations that specify minimum resource LOD
++    VkBool32                                    shaderResourceMinLod                      /// shader can use texture operations that specify minimum resource LOD
+     VkBool32                                    sparseBinding                             /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
+     VkBool32                                    sparseResidencyBuffer                     /// Sparse resources support: GPU can access partially resident buffers
+     VkBool32                                    sparseResidencyImage2D                    /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
+@@ -2218,8 +2219,8 @@ class VkPhysicalDeviceLimits {
+     f32                                         lineWidthGranularity                      /// granularity of supported line widths
+     VkBool32                                    strictLines
+-    VkDeviceSize                                recommendedBufferCopyOffsetAlignment
+-    VkDeviceSize                                recommendedBufferCopyRowPitchAlignment
++    VkDeviceSize                                optimalBufferCopyOffsetAlignment
++    VkDeviceSize                                optimalBufferCopyRowPitchAlignment
+ }
+ class VkPhysicalDeviceSparseProperties {
+@@ -2241,7 +2242,7 @@ class VkQueryPoolCreateInfo {
+     const void*                                 pNext              /// Pointer to next structure
+     VkQueryPoolCreateFlags                      flags
+     VkQueryType                                 queryType
+-    u32                                         slots
++    u32                                         entryCount
+     VkQueryPipelineStatisticFlags               pipelineStatistics /// Optional
+ }
+@@ -4001,7 +4002,7 @@ cmd void vkCmdSetDepthBounds(
+ cmd void vkCmdSetStencilCompareMask(
+         VkCommandBuffer                             commandBuffer,
+         VkStencilFaceFlags                          faceMask,
+-        u32                                         stencilCompareMask) {
++        u32                                         compareMask) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+@@ -4010,7 +4011,7 @@ cmd void vkCmdSetStencilCompareMask(
+ cmd void vkCmdSetStencilWriteMask(
+         VkCommandBuffer                             commandBuffer,
+         VkStencilFaceFlags                          faceMask,
+-        u32                                         stencilWriteMask) {
++        u32                                         writeMask) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+@@ -4019,7 +4020,7 @@ cmd void vkCmdSetStencilWriteMask(
+ cmd void vkCmdSetStencilReference(
+         VkCommandBuffer                             commandBuffer,
+         VkStencilFaceFlags                          faceMask,
+-        u32                                         stencilReference) {
++        u32                                         reference) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_GRAPHICS_BIT)
+ }
+@@ -4197,7 +4198,7 @@ cmd void vkCmdCopyBuffer(
+     bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
+     bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
+-    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
+ }
+ @threadSafety("app")
+@@ -4223,7 +4224,7 @@ cmd void vkCmdCopyImage(
+     bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
+     bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
+-    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
+ }
+ @threadSafety("app")
+@@ -4275,7 +4276,7 @@ cmd void vkCmdCopyBufferToImage(
+     bindCommandBuffer(commandBuffer, srcBuffer, srcBufferObject.memory)
+     bindCommandBuffer(commandBuffer, dstImage, dstImageObject.memory)
+-    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
+ }
+ @threadSafety("app")
+@@ -4300,7 +4301,7 @@ cmd void vkCmdCopyImageToBuffer(
+     bindCommandBuffer(commandBuffer, srcImage, srcImageObject.memory)
+     bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
+-    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
+ }
+ @threadSafety("app")
+@@ -4318,7 +4319,7 @@ cmd void vkCmdUpdateBuffer(
+     bindCommandBuffer(commandBuffer, dstBuffer, dstBufferObject.memory)
+-    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
+ }
+ @threadSafety("app")
+@@ -4332,7 +4333,7 @@ cmd void vkCmdFillBuffer(
+     dstBufferObject := GetBuffer(dstBuffer)
+     assert(commandBufferObject.device == dstBufferObject.device)
+-    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_DMA_BIT)
++    commandBufferObject.queueFlags = AddQueueFlag(commandBufferObject.queueFlags, VK_QUEUE_TRANSFER_BIT)
+ }
+ @threadSafety("app")
+@@ -4514,7 +4515,7 @@ cmd void vkCmdPipelineBarrier(
+ cmd void vkCmdBeginQuery(
+         VkCommandBuffer                             commandBuffer,
+         VkQueryPool                                 queryPool,
+-        u32                                         slot,
++        u32                                         entry,
+         VkQueryControlFlags                         flags) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+@@ -4525,7 +4526,7 @@ cmd void vkCmdBeginQuery(
+ cmd void vkCmdEndQuery(
+         VkCommandBuffer                             commandBuffer,
+         VkQueryPool                                 queryPool,
+-        u32                                         slot) {
++        u32                                         entry) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+     assert(commandBufferObject.device == queryPoolObject.device)
+@@ -4547,7 +4548,7 @@ cmd void vkCmdWriteTimestamp(
+         VkCommandBuffer                             commandBuffer,
+         VkPipelineStageFlagBits                     pipelineStage,
+         VkQueryPool                                 queryPool,
+-        u32                                         slot) {
++        u32                                         entry) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     queryPoolObject := GetQueryPool(queryPool)
+     assert(commandBufferObject.device == queryPoolObject.device)
+@@ -4586,7 +4587,7 @@ cmd void vkCmdPushConstants(
+ cmd void vkCmdBeginRenderPass(
+         VkCommandBuffer                             commandBuffer,
+         const VkRenderPassBeginInfo*                pRenderPassBegin,
+-        VkRenderPassContents                        contents) {
++        VkSubpassContents                           contents) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     renderPassObject := GetRenderPass(pRenderPassBegin.renderPass)
+     framebufferObject := GetFramebuffer(pRenderPassBegin.framebuffer)
+@@ -4598,7 +4599,7 @@ cmd void vkCmdBeginRenderPass(
+ cmd void vkCmdNextSubpass(
+         VkCommandBuffer                             commandBuffer,
+-        VkRenderPassContents                        contents) {
++        VkSubpassContents                           contents) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+ }
+@@ -4855,7 +4856,7 @@ cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32                                     queueFamilyIndex,
+         platform.Display*                       dpy,
+-        platform.VisualID                       visualId) {
++        platform.VisualID                       visualID) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     return ?
+ }
+diff --git a/vulkan/include/vulkan/vk_platform.h b/vulkan/include/vulkan/vk_platform.h
+index 8d51524..4bc6a86 100644
+--- a/vulkan/include/vulkan/vk_platform.h
++++ b/vulkan/include/vulkan/vk_platform.h
+@@ -42,12 +42,9 @@ extern "C"
+ #if defined(_WIN32)
+     // On Windows, VKAPI should equate to the __stdcall convention
+     #define VKAPI   __stdcall
+-#elif defined(__GNUC__)
+-    // On other platforms using GCC, VKAPI stays undefined
+-    #define VKAPI
+ #else
+-    // Unsupported Platform!
+-    #error "Unsupported OS Platform detected!"
++    // On other platforms, use the default calling convention
++    #define VKAPI
+ #endif
+ #include <stddef.h>
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index cbd15e6..60583c2 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 197, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 198, 0)
+ #define VK_NULL_HANDLE 0
+@@ -100,12 +100,12 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+ #define VK_FALSE                          0
+ #define VK_QUEUE_FAMILY_IGNORED           (~0U)
+ #define VK_SUBPASS_EXTERNAL               (~0U)
+-#define VK_MAX_PHYSICAL_DEVICE_NAME       256
+-#define VK_UUID_LENGTH                    16
++#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE  256
++#define VK_UUID_SIZE                      16
+ #define VK_MAX_MEMORY_TYPES               32
+ #define VK_MAX_MEMORY_HEAPS               16
+-#define VK_MAX_EXTENSION_NAME             256
+-#define VK_MAX_DESCRIPTION                256
++#define VK_MAX_EXTENSION_NAME_SIZE        256
++#define VK_MAX_DESCRIPTION_SIZE           256
+ typedef enum {
+@@ -155,7 +155,7 @@ typedef enum {
+     VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21,
+     VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 22,
+     VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 23,
+-    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 24,
++    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 24,
+     VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 25,
+     VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 26,
+     VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 27,
+@@ -468,27 +468,27 @@ typedef enum {
+ } VkImageViewType;
+ typedef enum {
+-    VK_CHANNEL_SWIZZLE_IDENTITY = 0,
+-    VK_CHANNEL_SWIZZLE_ZERO = 1,
+-    VK_CHANNEL_SWIZZLE_ONE = 2,
+-    VK_CHANNEL_SWIZZLE_R = 3,
+-    VK_CHANNEL_SWIZZLE_G = 4,
+-    VK_CHANNEL_SWIZZLE_B = 5,
+-    VK_CHANNEL_SWIZZLE_A = 6,
+-    VK_CHANNEL_SWIZZLE_BEGIN_RANGE = VK_CHANNEL_SWIZZLE_IDENTITY,
+-    VK_CHANNEL_SWIZZLE_END_RANGE = VK_CHANNEL_SWIZZLE_A,
+-    VK_CHANNEL_SWIZZLE_RANGE_SIZE = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_IDENTITY + 1),
+-    VK_CHANNEL_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+-} VkChannelSwizzle;
++    VK_COMPONENT_SWIZZLE_IDENTITY = 0,
++    VK_COMPONENT_SWIZZLE_ZERO = 1,
++    VK_COMPONENT_SWIZZLE_ONE = 2,
++    VK_COMPONENT_SWIZZLE_R = 3,
++    VK_COMPONENT_SWIZZLE_G = 4,
++    VK_COMPONENT_SWIZZLE_B = 5,
++    VK_COMPONENT_SWIZZLE_A = 6,
++    VK_COMPONENT_SWIZZLE_BEGIN_RANGE = VK_COMPONENT_SWIZZLE_IDENTITY,
++    VK_COMPONENT_SWIZZLE_END_RANGE = VK_COMPONENT_SWIZZLE_A,
++    VK_COMPONENT_SWIZZLE_RANGE_SIZE = (VK_COMPONENT_SWIZZLE_A - VK_COMPONENT_SWIZZLE_IDENTITY + 1),
++    VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
++} VkComponentSwizzle;
+ typedef enum {
+-    VK_VERTEX_INPUT_STEP_RATE_VERTEX = 0,
+-    VK_VERTEX_INPUT_STEP_RATE_INSTANCE = 1,
+-    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_INSTANCE,
+-    VK_VERTEX_INPUT_STEP_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_STEP_RATE_INSTANCE - VK_VERTEX_INPUT_STEP_RATE_VERTEX + 1),
+-    VK_VERTEX_INPUT_STEP_RATE_MAX_ENUM = 0x7FFFFFFF
+-} VkVertexInputStepRate;
++    VK_VERTEX_INPUT_RATE_VERTEX = 0,
++    VK_VERTEX_INPUT_RATE_INSTANCE = 1,
++    VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
++    VK_VERTEX_INPUT_RATE_END_RANGE = VK_VERTEX_INPUT_RATE_INSTANCE,
++    VK_VERTEX_INPUT_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_RATE_INSTANCE - VK_VERTEX_INPUT_RATE_VERTEX + 1),
++    VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
++} VkVertexInputRate;
+ typedef enum {
+     VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
+@@ -509,14 +509,14 @@ typedef enum {
+ } VkPrimitiveTopology;
+ typedef enum {
+-    VK_FILL_MODE_SOLID = 0,
+-    VK_FILL_MODE_WIREFRAME = 1,
+-    VK_FILL_MODE_POINTS = 2,
+-    VK_FILL_MODE_BEGIN_RANGE = VK_FILL_MODE_SOLID,
+-    VK_FILL_MODE_END_RANGE = VK_FILL_MODE_POINTS,
+-    VK_FILL_MODE_RANGE_SIZE = (VK_FILL_MODE_POINTS - VK_FILL_MODE_SOLID + 1),
+-    VK_FILL_MODE_MAX_ENUM = 0x7FFFFFFF
+-} VkFillMode;
++    VK_POLYGON_MODE_FILL = 0,
++    VK_POLYGON_MODE_LINE = 1,
++    VK_POLYGON_MODE_POINT = 2,
++    VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL,
++    VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT,
++    VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1),
++    VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
++} VkPolygonMode;
+ typedef enum {
+     VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+@@ -581,30 +581,30 @@ typedef enum {
+ } VkLogicOp;
+ typedef enum {
+-    VK_BLEND_ZERO = 0,
+-    VK_BLEND_ONE = 1,
+-    VK_BLEND_SRC_COLOR = 2,
+-    VK_BLEND_ONE_MINUS_SRC_COLOR = 3,
+-    VK_BLEND_DST_COLOR = 4,
+-    VK_BLEND_ONE_MINUS_DST_COLOR = 5,
+-    VK_BLEND_SRC_ALPHA = 6,
+-    VK_BLEND_ONE_MINUS_SRC_ALPHA = 7,
+-    VK_BLEND_DST_ALPHA = 8,
+-    VK_BLEND_ONE_MINUS_DST_ALPHA = 9,
+-    VK_BLEND_CONSTANT_COLOR = 10,
+-    VK_BLEND_ONE_MINUS_CONSTANT_COLOR = 11,
+-    VK_BLEND_CONSTANT_ALPHA = 12,
+-    VK_BLEND_ONE_MINUS_CONSTANT_ALPHA = 13,
+-    VK_BLEND_SRC_ALPHA_SATURATE = 14,
+-    VK_BLEND_SRC1_COLOR = 15,
+-    VK_BLEND_ONE_MINUS_SRC1_COLOR = 16,
+-    VK_BLEND_SRC1_ALPHA = 17,
+-    VK_BLEND_ONE_MINUS_SRC1_ALPHA = 18,
+-    VK_BLEND_BEGIN_RANGE = VK_BLEND_ZERO,
+-    VK_BLEND_END_RANGE = VK_BLEND_ONE_MINUS_SRC1_ALPHA,
+-    VK_BLEND_RANGE_SIZE = (VK_BLEND_ONE_MINUS_SRC1_ALPHA - VK_BLEND_ZERO + 1),
+-    VK_BLEND_MAX_ENUM = 0x7FFFFFFF
+-} VkBlend;
++    VK_BLEND_FACTOR_ZERO = 0,
++    VK_BLEND_FACTOR_ONE = 1,
++    VK_BLEND_FACTOR_SRC_COLOR = 2,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
++    VK_BLEND_FACTOR_DST_COLOR = 4,
++    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
++    VK_BLEND_FACTOR_SRC_ALPHA = 6,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
++    VK_BLEND_FACTOR_DST_ALPHA = 8,
++    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
++    VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
++    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
++    VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
++    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
++    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
++    VK_BLEND_FACTOR_SRC1_COLOR = 15,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
++    VK_BLEND_FACTOR_SRC1_ALPHA = 17,
++    VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
++    VK_BLEND_FACTOR_BEGIN_RANGE = VK_BLEND_FACTOR_ZERO,
++    VK_BLEND_FACTOR_END_RANGE = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA,
++    VK_BLEND_FACTOR_RANGE_SIZE = (VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - VK_BLEND_FACTOR_ZERO + 1),
++    VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
++} VkBlendFactor;
+ typedef enum {
+     VK_BLEND_OP_ADD = 0,
+@@ -743,13 +743,13 @@ typedef enum {
+ } VkIndexType;
+ typedef enum {
+-    VK_RENDER_PASS_CONTENTS_INLINE = 0,
+-    VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+-    VK_RENDER_PASS_CONTENTS_BEGIN_RANGE = VK_RENDER_PASS_CONTENTS_INLINE,
+-    VK_RENDER_PASS_CONTENTS_END_RANGE = VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
+-    VK_RENDER_PASS_CONTENTS_RANGE_SIZE = (VK_RENDER_PASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_RENDER_PASS_CONTENTS_INLINE + 1),
+-    VK_RENDER_PASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
+-} VkRenderPassContents;
++    VK_SUBPASS_CONTENTS_INLINE = 0,
++    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
++    VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
++    VK_SUBPASS_CONTENTS_END_RANGE = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
++    VK_SUBPASS_CONTENTS_RANGE_SIZE = (VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_SUBPASS_CONTENTS_INLINE + 1),
++    VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
++} VkSubpassContents;
+ typedef VkFlags VkInstanceCreateFlags;
+@@ -804,7 +804,7 @@ typedef VkFlags VkSampleCountFlags;
+ typedef enum {
+     VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+     VK_QUEUE_COMPUTE_BIT = 0x00000002,
+-    VK_QUEUE_DMA_BIT = 0x00000004,
++    VK_QUEUE_TRANSFER_BIT = 0x00000004,
+     VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
+ } VkQueueFlagBits;
+ typedef VkFlags VkQueueFlags;
+@@ -935,12 +935,12 @@ typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+ typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+ typedef enum {
+-    VK_CHANNEL_R_BIT = 0x00000001,
+-    VK_CHANNEL_G_BIT = 0x00000002,
+-    VK_CHANNEL_B_BIT = 0x00000004,
+-    VK_CHANNEL_A_BIT = 0x00000008,
+-} VkChannelFlagBits;
+-typedef VkFlags VkChannelFlags;
++    VK_COLOR_COMPONENT_R_BIT = 0x00000001,
++    VK_COLOR_COMPONENT_G_BIT = 0x00000002,
++    VK_COLOR_COMPONENT_B_BIT = 0x00000004,
++    VK_COLOR_COMPONENT_A_BIT = 0x00000008,
++} VkColorComponentFlagBits;
++typedef VkFlags VkColorComponentFlags;
+ typedef VkFlags VkPipelineDynamicStateCreateFlags;
+ typedef VkFlags VkPipelineLayoutCreateFlags;
+ typedef VkFlags VkShaderStageFlags;
+@@ -1041,7 +1041,7 @@ typedef enum {
+ typedef VkFlags VkStencilFaceFlags;
+ typedef enum {
+-    VK_QUERY_CONTROL_CONSERVATIVE_BIT = 0x00000001,
++    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+ } VkQueryControlFlagBits;
+ typedef VkFlags VkQueryControlFlags;
+@@ -1129,7 +1129,7 @@ typedef struct {
+     VkBool32                                    textureCompressionETC2;
+     VkBool32                                    textureCompressionASTC_LDR;
+     VkBool32                                    textureCompressionBC;
+-    VkBool32                                    occlusionQueryNonConservative;
++    VkBool32                                    occlusionQueryPrecise;
+     VkBool32                                    pipelineStatisticsQuery;
+     VkBool32                                    vertexPipelineStoresAndAtomics;
+     VkBool32                                    fragmentStoresAndAtomics;
+@@ -1149,7 +1149,7 @@ typedef struct {
+     VkBool32                                    shaderInt64;
+     VkBool32                                    shaderInt16;
+     VkBool32                                    shaderResourceResidency;
+-    VkBool32                                    shaderResourceMinLOD;
++    VkBool32                                    shaderResourceMinLod;
+     VkBool32                                    sparseBinding;
+     VkBool32                                    sparseResidencyBuffer;
+     VkBool32                                    sparseResidencyImage2D;
+@@ -1280,8 +1280,8 @@ typedef struct {
+     float                                       pointSizeGranularity;
+     float                                       lineWidthGranularity;
+     VkBool32                                    strictLines;
+-    VkDeviceSize                                recommendedBufferCopyOffsetAlignment;
+-    VkDeviceSize                                recommendedBufferCopyRowPitchAlignment;
++    VkDeviceSize                                optimalBufferCopyOffsetAlignment;
++    VkDeviceSize                                optimalBufferCopyRowPitchAlignment;
+ } VkPhysicalDeviceLimits;
+ typedef struct {
+@@ -1295,11 +1295,11 @@ typedef struct {
+ typedef struct {
+     uint32_t                                    apiVersion;
+     uint32_t                                    driverVersion;
+-    uint32_t                                    vendorId;
+-    uint32_t                                    deviceId;
++    uint32_t                                    vendorID;
++    uint32_t                                    deviceID;
+     VkPhysicalDeviceType                        deviceType;
+-    char                                        deviceName[VK_MAX_PHYSICAL_DEVICE_NAME];
+-    uint8_t                                     pipelineCacheUUID[VK_UUID_LENGTH];
++    char                                        deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
++    uint8_t                                     pipelineCacheUUID[VK_UUID_SIZE];
+     VkPhysicalDeviceLimits                      limits;
+     VkPhysicalDeviceSparseProperties            sparseProperties;
+ } VkPhysicalDeviceProperties;
+@@ -1308,6 +1308,7 @@ typedef struct {
+     VkQueueFlags                                queueFlags;
+     uint32_t                                    queueCount;
+     uint32_t                                    timestampValidBits;
++    VkExtent3D                                  minImageTransferGranularity;
+ } VkQueueFamilyProperties;
+ typedef struct {
+@@ -1350,15 +1351,15 @@ typedef struct {
+ } VkDeviceCreateInfo;
+ typedef struct {
+-    char                                        extensionName[VK_MAX_EXTENSION_NAME];
++    char                                        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+     uint32_t                                    specVersion;
+ } VkExtensionProperties;
+ typedef struct {
+-    char                                        layerName[VK_MAX_EXTENSION_NAME];
++    char                                        layerName[VK_MAX_EXTENSION_NAME_SIZE];
+     uint32_t                                    specVersion;
+     uint32_t                                    implementationVersion;
+-    char                                        description[VK_MAX_DESCRIPTION];
++    char                                        description[VK_MAX_DESCRIPTION_SIZE];
+ } VkLayerProperties;
+ typedef struct {
+@@ -1401,7 +1402,7 @@ typedef struct {
+ typedef struct {
+     VkSparseImageFormatProperties               formatProperties;
+-    uint32_t                                    imageMipTailStartLOD;
++    uint32_t                                    imageMipTailStartLod;
+     VkDeviceSize                                imageMipTailSize;
+     VkDeviceSize                                imageMipTailOffset;
+     VkDeviceSize                                imageMipTailStride;
+@@ -1492,7 +1493,7 @@ typedef struct {
+     const void*                                 pNext;
+     VkQueryPoolCreateFlags                      flags;
+     VkQueryType                                 queryType;
+-    uint32_t                                    slots;
++    uint32_t                                    entryCount;
+     VkQueryPipelineStatisticFlags               pipelineStatistics;
+ } VkQueryPoolCreateInfo;
+@@ -1543,11 +1544,11 @@ typedef struct {
+ } VkSubresourceLayout;
+ typedef struct {
+-    VkChannelSwizzle                            r;
+-    VkChannelSwizzle                            g;
+-    VkChannelSwizzle                            b;
+-    VkChannelSwizzle                            a;
+-} VkChannelMapping;
++    VkComponentSwizzle                          r;
++    VkComponentSwizzle                          g;
++    VkComponentSwizzle                          b;
++    VkComponentSwizzle                          a;
++} VkComponentMapping;
+ typedef struct {
+     VkImageAspectFlags                          aspectMask;
+@@ -1564,7 +1565,7 @@ typedef struct {
+     VkImage                                     image;
+     VkImageViewType                             viewType;
+     VkFormat                                    format;
+-    VkChannelMapping                            channels;
++    VkComponentMapping                          components;
+     VkImageSubresourceRange                     subresourceRange;
+ } VkImageViewCreateInfo;
+@@ -1594,7 +1595,7 @@ typedef struct {
+ } VkPipelineCacheCreateInfo;
+ typedef struct {
+-    uint32_t                                    constantId;
++    uint32_t                                    constantID;
+     uint32_t                                    offset;
+     size_t                                      size;
+ } VkSpecializationMapEntry;
+@@ -1617,7 +1618,7 @@ typedef struct {
+ typedef struct {
+     uint32_t                                    binding;
+     uint32_t                                    stride;
+-    VkVertexInputStepRate                       stepRate;
++    VkVertexInputRate                           inputRate;
+ } VkVertexInputBindingDescription;
+ typedef struct {
+@@ -1653,8 +1654,8 @@ typedef struct {
+ } VkPipelineTessellationStateCreateInfo;
+ typedef struct {
+-    float                                       originX;
+-    float                                       originY;
++    float                                       x;
++    float                                       y;
+     float                                       width;
+     float                                       height;
+     float                                       minDepth;
+@@ -1692,7 +1693,7 @@ typedef struct {
+     VkPipelineRasterizationStateCreateFlags     flags;
+     VkBool32                                    depthClampEnable;
+     VkBool32                                    rasterizerDiscardEnable;
+-    VkFillMode                                  fillMode;
++    VkPolygonMode                               polygonMode;
+     VkCullModeFlags                             cullMode;
+     VkFrontFace                                 frontFace;
+     VkBool32                                    depthBiasEnable;
+@@ -1715,13 +1716,13 @@ typedef struct {
+ } VkPipelineMultisampleStateCreateInfo;
+ typedef struct {
+-    VkStencilOp                                 stencilFailOp;
+-    VkStencilOp                                 stencilPassOp;
+-    VkStencilOp                                 stencilDepthFailOp;
+-    VkCompareOp                                 stencilCompareOp;
+-    uint32_t                                    stencilCompareMask;
+-    uint32_t                                    stencilWriteMask;
+-    uint32_t                                    stencilReference;
++    VkStencilOp                                 failOp;
++    VkStencilOp                                 passOp;
++    VkStencilOp                                 depthFailOp;
++    VkCompareOp                                 compareOp;
++    uint32_t                                    compareMask;
++    uint32_t                                    writeMask;
++    uint32_t                                    reference;
+ } VkStencilOpState;
+ typedef struct {
+@@ -1741,13 +1742,13 @@ typedef struct {
+ typedef struct {
+     VkBool32                                    blendEnable;
+-    VkBlend                                     srcBlendColor;
+-    VkBlend                                     dstBlendColor;
+-    VkBlendOp                                   blendOpColor;
+-    VkBlend                                     srcBlendAlpha;
+-    VkBlend                                     dstBlendAlpha;
+-    VkBlendOp                                   blendOpAlpha;
+-    VkChannelFlags                              channelWriteMask;
++    VkBlendFactor                               srcColorBlendFactor;
++    VkBlendFactor                               dstColorBlendFactor;
++    VkBlendOp                                   colorBlendOp;
++    VkBlendFactor                               srcAlphaBlendFactor;
++    VkBlendFactor                               dstAlphaBlendFactor;
++    VkBlendOp                                   alphaBlendOp;
++    VkColorComponentFlags                       colorWriteMask;
+ } VkPipelineColorBlendAttachmentState;
+ typedef struct {
+@@ -1855,15 +1856,15 @@ typedef struct {
+ typedef struct {
+     VkDescriptorType                            type;
+     uint32_t                                    descriptorCount;
+-} VkDescriptorTypeCount;
++} VkDescriptorPoolSize;
+ typedef struct {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorPoolCreateFlags                 flags;
+     uint32_t                                    maxSets;
+-    uint32_t                                    typeCount;
+-    const VkDescriptorTypeCount*                pTypeCounts;
++    uint32_t                                    poolSizeCount;
++    const VkDescriptorPoolSize*                 pPoolSizes;
+ } VkDescriptorPoolCreateInfo;
+ typedef struct {
+@@ -2006,25 +2007,25 @@ typedef struct {
+ } VkBufferCopy;
+ typedef struct {
+-    VkImageAspectFlags                          aspect;
++    VkImageAspectFlags                          aspectMask;
+     uint32_t                                    mipLevel;
+     uint32_t                                    baseArrayLayer;
+     uint32_t                                    layerCount;
+-} VkImageSubresourceCopy;
++} VkImageSubresourceLayers;
+ typedef struct {
+-    VkImageSubresourceCopy                      srcSubresource;
++    VkImageSubresourceLayers                    srcSubresource;
+     VkOffset3D                                  srcOffset;
+-    VkImageSubresourceCopy                      dstSubresource;
++    VkImageSubresourceLayers                    dstSubresource;
+     VkOffset3D                                  dstOffset;
+     VkExtent3D                                  extent;
+ } VkImageCopy;
+ typedef struct {
+-    VkImageSubresourceCopy                      srcSubresource;
++    VkImageSubresourceLayers                    srcSubresource;
+     VkOffset3D                                  srcOffset;
+     VkExtent3D                                  srcExtent;
+-    VkImageSubresourceCopy                      dstSubresource;
++    VkImageSubresourceLayers                    dstSubresource;
+     VkOffset3D                                  dstOffset;
+     VkExtent3D                                  dstExtent;
+ } VkImageBlit;
+@@ -2033,7 +2034,7 @@ typedef struct {
+     VkDeviceSize                                bufferOffset;
+     uint32_t                                    bufferRowLength;
+     uint32_t                                    bufferImageHeight;
+-    VkImageSubresourceCopy                      imageSubresource;
++    VkImageSubresourceLayers                    imageSubresource;
+     VkOffset3D                                  imageOffset;
+     VkExtent3D                                  imageExtent;
+ } VkBufferImageCopy;
+@@ -2067,9 +2068,9 @@ typedef struct {
+ } VkClearRect;
+ typedef struct {
+-    VkImageSubresourceCopy                      srcSubresource;
++    VkImageSubresourceLayers                    srcSubresource;
+     VkOffset3D                                  srcOffset;
+-    VkImageSubresourceCopy                      dstSubresource;
++    VkImageSubresourceLayers                    dstSubresource;
+     VkOffset3D                                  dstOffset;
+     VkExtent3D                                  extent;
+ } VkImageResolve;
+@@ -2226,10 +2227,10 @@ typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRender
+ typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+ typedef void (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+ typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+-typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool CommandPool, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool CommandPool, VkCommandPoolResetFlags flags);
++typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+ typedef VkResult (VKAPI *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+-typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool CommandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
++typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+ typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+ typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
+ typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+@@ -2240,9 +2241,9 @@ typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float
+ typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+ typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
+ typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+-typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+-typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+-typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
++typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
++typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
++typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
+ typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+ typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+ typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+@@ -2267,14 +2268,14 @@ typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent e
+ typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+ typedef void (VKAPI *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
+ typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
+-typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+-typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot);
++typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry, VkQueryControlFlags flags);
++typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry);
+ typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
++typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry);
+ typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+ typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
+-typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+-typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkRenderPassContents contents);
++typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
++typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+ typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+ typedef void (VKAPI *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers);
+@@ -2762,12 +2763,12 @@ VkResult VKAPI vkCreateCommandPool(
+ void VKAPI vkDestroyCommandPool(
+     VkDevice                                    device,
+-    VkCommandPool                               CommandPool,
++    VkCommandPool                               commandPool,
+     const VkAllocationCallbacks*                pAllocator);
+ VkResult VKAPI vkResetCommandPool(
+     VkDevice                                    device,
+-    VkCommandPool                               CommandPool,
++    VkCommandPool                               commandPool,
+     VkCommandPoolResetFlags                     flags);
+ VkResult VKAPI vkAllocateCommandBuffers(
+@@ -2777,7 +2778,7 @@ VkResult VKAPI vkAllocateCommandBuffers(
+ void VKAPI vkFreeCommandBuffers(
+     VkDevice                                    device,
+-    VkCommandPool                               CommandPool,
++    VkCommandPool                               commandPool,
+     uint32_t                                    commandBufferCount,
+     const VkCommandBuffer*                      pCommandBuffers);
+@@ -2829,17 +2830,17 @@ void VKAPI vkCmdSetDepthBounds(
+ void VKAPI vkCmdSetStencilCompareMask(
+     VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+-    uint32_t                                    stencilCompareMask);
++    uint32_t                                    compareMask);
+ void VKAPI vkCmdSetStencilWriteMask(
+     VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+-    uint32_t                                    stencilWriteMask);
++    uint32_t                                    writeMask);
+ void VKAPI vkCmdSetStencilReference(
+     VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+-    uint32_t                                    stencilReference);
++    uint32_t                                    reference);
+ void VKAPI vkCmdBindDescriptorSets(
+     VkCommandBuffer                             commandBuffer,
+@@ -3022,13 +3023,13 @@ void VKAPI vkCmdPipelineBarrier(
+ void VKAPI vkCmdBeginQuery(
+     VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+-    uint32_t                                    slot,
++    uint32_t                                    entry,
+     VkQueryControlFlags                         flags);
+ void VKAPI vkCmdEndQuery(
+     VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+-    uint32_t                                    slot);
++    uint32_t                                    entry);
+ void VKAPI vkCmdResetQueryPool(
+     VkCommandBuffer                             commandBuffer,
+@@ -3040,7 +3041,7 @@ void VKAPI vkCmdWriteTimestamp(
+     VkCommandBuffer                             commandBuffer,
+     VkPipelineStageFlagBits                     pipelineStage,
+     VkQueryPool                                 queryPool,
+-    uint32_t                                    slot);
++    uint32_t                                    entry);
+ void VKAPI vkCmdCopyQueryPoolResults(
+     VkCommandBuffer                             commandBuffer,
+@@ -3063,11 +3064,11 @@ void VKAPI vkCmdPushConstants(
+ void VKAPI vkCmdBeginRenderPass(
+     VkCommandBuffer                             commandBuffer,
+     const VkRenderPassBeginInfo*                pRenderPassBegin,
+-    VkRenderPassContents                        contents);
++    VkSubpassContents                           contents);
+ void VKAPI vkCmdNextSubpass(
+     VkCommandBuffer                             commandBuffer,
+-    VkRenderPassContents                        contents);
++    VkSubpassContents                           contents);
+ void VKAPI vkCmdEndRenderPass(
+     VkCommandBuffer                             commandBuffer);
+@@ -3431,7 +3432,7 @@ typedef struct {
+ #define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NAME "vk_ext_khr_xlib_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualId);
++typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+ #ifdef VK_PROTOTYPES
+ VkResult VKAPI vkCreateXlibSurfaceKHR(
+@@ -3444,7 +3445,7 @@ VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     Display*                                    dpy,
+-    VisualID                                    visualId);
++    VisualID                                    visualID);
+ #endif
+ #endif /* VK_USE_PLATFORM_XLIB_KHR */
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index a2b4c0f..2b7faa9 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -552,18 +552,18 @@ void vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, fl
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
+-    GetVtbl(commandBuffer).CmdSetStencilCompareMask(commandBuffer, faceMask, stencilCompareMask);
++void vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask) {
++    GetVtbl(commandBuffer).CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
+-    GetVtbl(commandBuffer).CmdSetStencilWriteMask(commandBuffer, faceMask, stencilWriteMask);
++void vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) {
++    GetVtbl(commandBuffer).CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
+-    GetVtbl(commandBuffer).CmdSetStencilReference(commandBuffer, faceMask, stencilReference);
++void vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) {
++    GetVtbl(commandBuffer).CmdSetStencilReference(commandBuffer, faceMask, reference);
+ }
+ __attribute__((visibility("default")))
+@@ -687,13 +687,13 @@ void vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags sr
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
+-    GetVtbl(commandBuffer).CmdBeginQuery(commandBuffer, queryPool, slot, flags);
++void vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry, VkQueryControlFlags flags) {
++    GetVtbl(commandBuffer).CmdBeginQuery(commandBuffer, queryPool, entry, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot) {
+-    GetVtbl(commandBuffer).CmdEndQuery(commandBuffer, queryPool, slot);
++void vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry) {
++    GetVtbl(commandBuffer).CmdEndQuery(commandBuffer, queryPool, entry);
+ }
+ __attribute__((visibility("default")))
+@@ -702,8 +702,8 @@ void vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, u
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) {
+-    GetVtbl(commandBuffer).CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
++void vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry) {
++    GetVtbl(commandBuffer).CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, entry);
+ }
+ __attribute__((visibility("default")))
+@@ -717,12 +717,12 @@ void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout,
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
++void vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) {
+     GetVtbl(commandBuffer).CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkRenderPassContents contents) {
++void vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) {
+     GetVtbl(commandBuffer).CmdNextSubpass(commandBuffer, contents);
+ }
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index b2b905f..85d018b 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -266,8 +266,8 @@ void GetPhysicalDeviceProperties(VkPhysicalDevice,
+                                  VkPhysicalDeviceProperties* properties) {
+     properties->apiVersion = VK_API_VERSION;
+     properties->driverVersion = VK_MAKE_VERSION(0, 0, 1);
+-    properties->vendorId = 0;
+-    properties->deviceId = 0;
++    properties->vendorID = 0;
++    properties->deviceID = 0;
+     properties->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER;
+     strcpy(properties->deviceName, "Android Vulkan Null Driver");
+     memset(properties->pipelineCacheUUID, 0,
+@@ -279,8 +279,8 @@ void GetPhysicalDeviceQueueFamilyProperties(
+     uint32_t* count,
+     VkQueueFamilyProperties* properties) {
+     if (properties) {
+-        properties->queueFlags =
+-            VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_DMA_BIT;
++        properties->queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT |
++                                 VK_QUEUE_TRANSFER_BIT;
+         properties->queueCount = 1;
+         properties->timestampValidBits = 64;
+     }
+@@ -1077,10 +1077,10 @@ void CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, u
+ void CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
+ }
+-void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
++void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) {
+ }
+-void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkRenderPassContents contents) {
++void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkSubpassContents contents) {
+ }
+ void CmdEndRenderPass(VkCommandBuffer cmdBuffer) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 939a559..91b8d34 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -161,8 +161,8 @@ void CmdResetQueryPool(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_
+ void CmdWriteTimestamp(VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+ void CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
+ void CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+-void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents);
+-void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkRenderPassContents contents);
++void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
++void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkSubpassContents contents);
+ void CmdEndRenderPass(VkCommandBuffer cmdBuffer);
+ void CmdExecuteCommands(VkCommandBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCommandBuffer* pCmdBuffers);
+diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
+index 1920d6b..c63dca4 100644
+--- a/vulkan/tools/vkinfo.cpp
++++ b/vulkan/tools/vkinfo.cpp
+@@ -75,8 +75,8 @@ const char* VkQueueFlagBitStr(VkQueueFlagBits bit) {
+             return "GRAPHICS";
+         case VK_QUEUE_COMPUTE_BIT:
+             return "COMPUTE";
+-        case VK_QUEUE_DMA_BIT:
+-            return "DMA";
++        case VK_QUEUE_TRANSFER_BIT:
++            return "TRANSFER";
+         case VK_QUEUE_SPARSE_BINDING_BIT:
+             return "SPARSE";
+     }
+@@ -91,8 +91,8 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
+     printf("  %u: \"%s\" (%s) %u.%u.%u/%#x [%04x:%04x]\n", idx,
+            props.deviceName, VkPhysicalDeviceTypeStr(props.deviceType),
+            (props.apiVersion >> 22) & 0x3FF, (props.apiVersion >> 12) & 0x3FF,
+-           (props.apiVersion >> 0) & 0xFFF, props.driverVersion, props.vendorId,
+-           props.deviceId);
++           (props.apiVersion >> 0) & 0xFFF, props.driverVersion, props.vendorID,
++           props.deviceID);
+     VkPhysicalDeviceMemoryProperties mem_props;
+     vkGetPhysicalDeviceMemoryProperties(pdev, &mem_props);
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0021-vulkan-Update-from-version-0.198.0-to-0.200.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0021-vulkan-Update-from-version-0.198.0-to-0.200.0.patch
new file mode 100644 (file)
index 0000000..e416675
--- /dev/null
@@ -0,0 +1,3349 @@
+From 2afbe83fe000204ab6f44e11b55bbad700dac27a Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 00:42:57 -0800
+Subject: [PATCH 21/30] vulkan: Update from version 0.198.0 to 0.200.0
+
+Change-Id: I071a9143332dd8b8c2ef899105073ed8791fc5db
+---
+ vulkan/api/vulkan.api                              | 373 +++++------
+ vulkan/include/vulkan/vk_android_native_buffer.h   |  93 +++
+ .../include/vulkan/vk_ext_android_native_buffer.h  |  93 ---
+ vulkan/include/vulkan/vulkan.h                     | 679 ++++++++++-----------
+ vulkan/libvulkan/entry.cpp                         |  10 -
+ vulkan/libvulkan/entry.cpp.tmpl                    |   6 +-
+ vulkan/libvulkan/get_proc_addr.cpp                 |  16 +-
+ vulkan/libvulkan/get_proc_addr.cpp.tmpl            |  16 +-
+ vulkan/libvulkan/loader.h                          |   4 +-
+ vulkan/nulldrv/null_driver.cpp                     |  12 -
+ vulkan/nulldrv/null_driver.h                       |   4 +-
+ vulkan/nulldrv/null_driver_gen.cpp                 |   2 -
+ 12 files changed, 595 insertions(+), 713 deletions(-)
+ create mode 100644 vulkan/include/vulkan/vk_android_native_buffer.h
+ delete mode 100644 vulkan/include/vulkan/vk_ext_android_native_buffer.h
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index ab887fa..0296b0f 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 198
++define VERSION_MINOR 200
+ define VERSION_PATCH 0
+ // API limits
+@@ -45,45 +45,45 @@ define VK_FALSE       0
+ // API keyword, but needs special handling by some templates
+ define NULL_HANDLE 0
+-@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION                     20
+-@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER             1
+-@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NAME               "VK_EXT_KHR_surface"
++@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION                     22
++@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER             1
++@extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
+-@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION                 62
+-@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
+-@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_EXT_KHR_swapchain"
++@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 64
++@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
++@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
+-@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION                     17
+-@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER             3
+-@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME               "VK_EXT_KHR_display"
++@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION                     18
++@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER             3
++@extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
+-@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION           6
+-@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER   4
+-@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME     "VK_EXT_KHR_display_swapchain"
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_REVISION           7
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NUMBER   4
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display_swapchain"
+-@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_REVISION           3
+-@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_NUMBER             5
+-@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_NAME               "VK_EXT_KHR_xlib_surface"
++@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION           4
++@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NUMBER             5
++@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME               "VK_KHR_xlib_surface"
+-@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION             3
+-@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NUMBER               6
+-@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NAME                 "VK_EXT_KHR_xcb_surface"
++@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION             4
++@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NUMBER               6
++@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME                 "VK_KHR_xcb_surface"
+-@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION     2
+-@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NUMBER       7
+-@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NAME         "VK_EXT_KHR_wayland_surface"
++@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION     3
++@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NUMBER       7
++@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME         "VK_KHR_wayland_surface"
+-@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION             2
+-@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NUMBER               8
+-@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NAME                 "VK_EXT_KHR_mir_surface"
++@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION             3
++@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NUMBER               8
++@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME                 "VK_KHR_mir_surface"
+-@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_REVISION     1
+-@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NUMBER       8
+-@extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NAME         "VK_EXT_KHR_android_surface"
++@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION     2
++@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NUMBER       8
++@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME         "VK_KHR_android_surface"
+-@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION         2
+-@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NUMBER           9
+-@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NAME             "VK_EXT_KHR_win32_surface"
++@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION         3
++@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NUMBER           9
++@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME             "VK_KHR_win32_surface"
+ /////////////
+@@ -110,7 +110,6 @@ type u32 VkSampleMask
+ @nonDispatchHandle type u64 VkImage
+ @nonDispatchHandle type u64 VkImageView
+ @nonDispatchHandle type u64 VkShaderModule
+-@nonDispatchHandle type u64 VkShader
+ @nonDispatchHandle type u64 VkPipeline
+ @nonDispatchHandle type u64 VkPipelineLayout
+ @nonDispatchHandle type u64 VkSampler
+@@ -125,12 +124,12 @@ type u32 VkSampleMask
+ @nonDispatchHandle type u64 VkRenderPass
+ @nonDispatchHandle type u64 VkPipelineCache
+-@extension("VK_EXT_KHR_surface")    @nonDispatchHandle type u64 VkSurfaceKHR
++@extension("VK_KHR_surface")    @nonDispatchHandle type u64 VkSurfaceKHR
+-@extension("VK_EXT_KHR_swapchain")  @nonDispatchHandle type u64 VkSwapchainKHR
++@extension("VK_KHR_swapchain")  @nonDispatchHandle type u64 VkSwapchainKHR
+-@extension("VK_EXT_KHR_display")    @nonDispatchHandle type u64 VkDisplayKHR
+-@extension("VK_EXT_KHR_display")    @nonDispatchHandle type u64 VkDisplayModeKHR
++@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayKHR
++@extension("VK_KHR_display")    @nonDispatchHandle type u64 VkDisplayModeKHR
+ /////////////
+@@ -148,7 +147,7 @@ enum VkImageLayout {
+     VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                    = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
+     VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
+-    //@extension("VK_EXT_KHR_swapchain")
++    //@extension("VK_KHR_swapchain")
+     VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 0xc0000802,
+ }
+@@ -359,7 +358,7 @@ enum VkLogicOp {
+ }
+ enum VkSystemAllocationScope {
+-    VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION                     = 0x00000000,
++    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND                      = 0x00000000,
+     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT                       = 0x00000001,
+     VK_SYSTEM_ALLOCATION_SCOPE_CACHE                        = 0x00000002,
+     VK_SYSTEM_ALLOCATION_SCOPE_DEVICE                       = 0x00000003,
+@@ -580,47 +579,46 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 14,
+     VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO                    = 15,
+     VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 16,
+-    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO                        = 17,
+-    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 18,
+-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 19,
+-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 20,
+-    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21,
+-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 22,
+-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 23,
+-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO  = 24,
+-    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 25,
+-    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 26,
+-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 27,
+-    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 28,
+-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 29,
+-    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 30,
+-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 31,
+-    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 32,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 33,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 34,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 35,
+-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 36,
+-    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 37,
+-    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 38,
+-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 39,
+-    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 40,
+-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO                 = 41,
+-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 42,
+-    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 43,
+-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 44,
+-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 45,
+-    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 46,
+-    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 47,
+-    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 48,
+-
+-    //@extension("VK_EXT_KHR_swapchain")
++    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 17,
++    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 18,
++    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 19,
++    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
++    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 21,
++    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 22,
++    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO  = 23,
++    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 24,
++    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 25,
++    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 26,
++    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO        = 27,
++    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 28,
++    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 29,
++    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 30,
++    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 31,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 32,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 33,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 34,
++    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 35,
++    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 36,
++    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 37,
++    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 38,
++    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 39,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO                 = 40,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 41,
++    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 42,
++    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 43,
++    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 44,
++    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 45,
++    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 46,
++    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 47,
++
++    //@extension("VK_KHR_swapchain")
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
+-    //@extension("VK_EXT_KHR_display")
++    //@extension("VK_KHR_display")
+     VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 0xc0000c00,
+     VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 0xc0000c01,
+-    //@extension("VK_EXT_KHR_display_swapchain")
++    //@extension("VK_KHR_display_swapchain")
+     VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR         = 0xc0001000,
+     VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001001,
+ }
+@@ -641,7 +639,7 @@ enum VkResult {
+     VK_EVENT_RESET                                          = 0x00000004,
+     VK_INCOMPLETE                                           = 0x00000005,
+-    //@extension("VK_EXT_KHR_swapchain")
++    //@extension("VK_KHR_swapchain")
+     VK_SUBOPTIMAL_KHR                                       = 0x40000403,
+     // Error codes (negative values)
+@@ -655,16 +653,16 @@ enum VkResult {
+     VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+     VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
+-    //@extension("VK_EXT_KHR_surface")
++    //@extension("VK_KHR_surface")
+     VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
+-    //@extension("VK_EXT_KHR_swapchain")
++    //@extension("VK_KHR_swapchain")
+     VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
+-    //@extension("VK_EXT_KHR_display_swapchain")
++    //@extension("VK_KHR_display_swapchain")
+     VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001002,
+-    //@extension("VK_EXT_KHR_android_surface")
++    //@extension("VK_KHR_android_surface")
+     VK_ERROR_INVALID_ANDROID_WINDOW_KHR                     = 0xC002400,
+     VK_ERROR_ANDROID_WINDOW_IN_USE_KHR                      = 0xC002401,
+ }
+@@ -681,7 +679,7 @@ enum VkDynamicState {
+     VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ enum VkSurfaceTransformKHR {
+     VK_SURFACE_TRANSFORM_NONE_KHR                           = 0x00000000,
+     VK_SURFACE_TRANSFORM_ROT90_KHR                          = 0x00000001,
+@@ -694,7 +692,7 @@ enum VkSurfaceTransformKHR {
+     VK_SURFACE_TRANSFORM_INHERIT_KHR                        = 0x00000008,
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
+     VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
+@@ -702,7 +700,7 @@ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ enum VkColorSpaceKHR {
+     VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = 0x00000000,
+ }
+@@ -736,29 +734,26 @@ bitfield VkMemoryHeapFlagBits {
+     VK_MEMORY_HEAP_DEVICE_LOCAL_BIT                         = 0x00000001,
+ }
+-/// Memory output flags passed to resource transition commands
+-type VkFlags VkMemoryOutputFlags
+-bitfield VkMemoryOutputFlagBits {
+-    VK_MEMORY_OUTPUT_HOST_WRITE_BIT                         = 0x00000001,    /// Controls output coherency of host 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_TRANSFER_BIT                           = 0x00000010,    /// Controls output coherency of transfer operations
+-}
+-
+-/// Memory input flags passed to resource transition commands
+-type VkFlags VkMemoryInputFlags
+-bitfield VkMemoryInputFlagBits {
+-    VK_MEMORY_INPUT_HOST_READ_BIT                           = 0x00000001,    /// Controls input coherency of host 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_INPUT_ATTACHMENT_BIT                    = 0x00000100,    /// Controls input coherency of input attachment reads
+-    VK_MEMORY_INPUT_TRANSFER_BIT                            = 0x00000200,    /// Controls input coherency of transfer operations
++/// Access flags
++type VkFlags VkAccessFlags
++bitfield VkAccessFlagBits {
++    VK_ACCESS_INDIRECT_COMMAND_READ_BIT                     = 0x00000001,
++    VK_ACCESS_INDEX_READ_BIT                                = 0x00000002,
++    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT                     = 0x00000004,
++    VK_ACCESS_UNIFORM_READ_BIT                              = 0x00000008,
++    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT                     = 0x00000010,
++    VK_ACCESS_SHADER_READ_BIT                               = 0x00000020,
++    VK_ACCESS_SHADER_WRITE_BIT                              = 0x00000040,
++    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT                     = 0x00000080,
++    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT                    = 0x00000100,
++    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT             = 0x00000200,
++    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT            = 0x00000400,
++    VK_ACCESS_TRANSFER_READ_BIT                             = 0x00000800,
++    VK_ACCESS_TRANSFER_WRITE_BIT                            = 0x00001000,
++    VK_ACCESS_HOST_READ_BIT                                 = 0x00002000,
++    VK_ACCESS_HOST_WRITE_BIT                                = 0x00004000,
++    VK_ACCESS_MEMORY_READ_BIT                               = 0x00008000,
++    VK_ACCESS_MEMORY_WRITE_BIT                              = 0x00010000,
+ }
+ /// Buffer usage flags
+@@ -902,11 +897,6 @@ type VkFlags VkShaderModuleCreateFlags
+ //bitfield VkShaderModuleCreateFlagBits {
+ //}
+-/// Shader creation flags
+-type VkFlags VkShaderCreateFlags
+-//bitfield VkShaderCreateFlagBits {
+-//}
+-
+ /// Event creation flags
+ type VkFlags VkEventCreateFlags
+ //bitfield VkEventCreateFlagBits {
+@@ -1153,9 +1143,9 @@ bitfield VkCullModeFlagBits {
+     VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ type VkFlags VkSurfaceTransformFlagsKHR
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ bitfield VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_NONE_BIT_KHR                       = 0x00000001,
+     VK_SURFACE_TRANSFORM_ROT90_BIT_KHR                      = 0x00000002,
+@@ -1168,9 +1158,9 @@ bitfield VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                    = 0x00000100,
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ type VkFlags VkCompositeAlphaFlagsKHR
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ bitfield VkCompositeAlphaFlagBitsKHR {
+     VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
+     VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
+@@ -1178,9 +1168,9 @@ bitfield VkCompositeAlphaFlagBitsKHR {
+     VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ type VkFlags VkDisplayPlaneAlphaFlagsKHR
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ bitfield VkDisplayPlaneAlphaFlagBitsKHR {
+     VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000001,
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000002,
+@@ -1356,7 +1346,7 @@ class VkMemoryRequirements {
+ }
+ class VkSparseImageFormatProperties {
+-    VkImageAspectFlagBits                       aspect
++    VkImageAspectFlagBits                       aspectMask
+     VkExtent3D                                  imageGranularity
+     VkSparseImageFormatFlags                    flags
+ }
+@@ -1460,7 +1450,7 @@ class VkBufferViewCreateInfo {
+ }
+ class VkImageSubresource {
+-    VkImageAspectFlagBits                       aspect
++    VkImageAspectFlagBits                       aspectMask
+     u32                                         mipLevel
+     u32                                         arrayLayer
+ }
+@@ -1476,15 +1466,15 @@ class VkImageSubresourceRange {
+ class VkMemoryBarrier {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_BARRIER
+     const void*                                 pNext                      /// Pointer to next structure.
+-    VkMemoryOutputFlags                         outputMask                 /// Outputs the barrier should sync
+-    VkMemoryInputFlags                          inputMask                  /// Inputs the barrier should sync to
++    VkAccessFlags                               srcAccessMask
++    VkAccessFlags                               dstAccessMask
+ }
+ class VkBufferMemoryBarrier {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
+     const void*                                 pNext                      /// Pointer to next structure.
+-    VkMemoryOutputFlags                         outputMask                 /// Outputs the barrier should sync
+-    VkMemoryInputFlags                          inputMask                  /// Inputs the barrier should sync to
++    VkAccessFlags                               srcAccessMask
++    VkAccessFlags                               dstAccessMask
+     u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
+     u32                                         dstQueueFamilyIndex        /// Queue family to transition ownership to
+     VkBuffer                                    buffer                     /// Buffer to sync
+@@ -1495,8 +1485,8 @@ class VkBufferMemoryBarrier {
+ class VkImageMemoryBarrier {
+     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
+     const void*                                 pNext                      /// Pointer to next structure.
+-    VkMemoryOutputFlags                         outputMask                 /// Outputs the barrier should sync
+-    VkMemoryInputFlags                          inputMask                  /// Inputs the barrier should sync to
++    VkAccessFlags                               srcAccessMask
++    VkAccessFlags                               dstAccessMask
+     VkImageLayout                               oldLayout                  /// Current layout of the image
+     VkImageLayout                               newLayout                  /// New layout to transition the image to
+     u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
+@@ -1646,15 +1636,6 @@ class VkShaderModuleCreateInfo {
+     const u32*                                  pCode                  /// Binary code of size codeSize
+ }
+-class VkShaderCreateInfo {
+-    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
+-    const void*                                 pNext              /// Pointer to next structure
+-    VkShaderCreateFlags                         flags              /// Reserved
+-    VkShaderModule                              module             /// Module containing entry point
+-    const char*                                 pName              /// Null-terminated entry point name
+-    VkShaderStageFlagBits                       stage
+-}
+-
+ class VkDescriptorSetLayoutBinding {
+     VkDescriptorType                            descriptorType     /// Type of the descriptors in this binding
+     u32                                         arraySize          /// Number of descriptors in this binding
+@@ -1667,7 +1648,7 @@ class VkDescriptorSetLayoutCreateInfo {
+     const void*                                 pNext              /// Pointer to next structure
+     VkDescriptorSetLayoutCreateFlags            flags
+     u32                                         bindingCount       /// Number of bindings in the descriptor set layout
+-    const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
++    const VkDescriptorSetLayoutBinding*         pBinding           /// Array of descriptor set layout bindings
+ }
+ class VkDescriptorPoolSize {
+@@ -1709,7 +1690,9 @@ class VkPipelineShaderStageCreateInfo {
+     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+     VkPipelineShaderStageCreateFlags            flags
+-    VkShader                                    shader
++    VkShaderStageFlagBits                       stage
++    VkShaderModule                              module
++    const char*                                 pName
+     const VkSpecializationInfo*                 pSpecializationInfo
+ }
+@@ -2015,8 +1998,8 @@ class VkSubpassDependency {
+     u32                                         dstSubpass
+     VkPipelineStageFlags                        srcStageMask
+     VkPipelineStageFlags                        dstStageMask
+-    VkMemoryOutputFlags                         outputMask
+-    VkMemoryInputFlags                          inputMask
++    VkAccessFlags                               srcAccessMask
++    VkAccessFlags                               dstAccessMask
+     VkDependencyFlags                           dependencyFlags
+ }
+@@ -2279,7 +2262,7 @@ class VkDispatchIndirectCommand {
+     u32                                         z
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ class VkSurfaceCapabilitiesKHR {
+     u32                                         minImageCount
+     u32                                         maxImageCount
+@@ -2293,13 +2276,13 @@ class VkSurfaceCapabilitiesKHR {
+     VkImageUsageFlags                           supportedUsageFlags
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ class VkSurfaceFormatKHR {
+     VkFormat                                    format
+     VkColorSpaceKHR                             colorSpace
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ class VkSwapchainCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+@@ -2320,7 +2303,7 @@ class VkSwapchainCreateInfoKHR {
+     VkBool32                                    clipped
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ class VkPresentInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+@@ -2331,7 +2314,7 @@ class VkPresentInfoKHR {
+     const u32*                                  imageIndices
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplayPropertiesKHR {
+     VkDisplayKHR                                display
+     const char*                                 displayName
+@@ -2342,32 +2325,32 @@ class VkDisplayPropertiesKHR {
+     VkBool32                                    persistentContent
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplayModeParametersKHR {
+     VkExtent2D                                  visibleRegion
+     u32                                         refreshRate
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplayModePropertiesKHR {
+     VkDisplayModeKHR                            displayMode
+     VkDisplayModeParametersKHR                  parameters
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplayModeCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+     VkDisplayModeParametersKHR                  parameters
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplayPlanePropertiesKHR {
+     VkDisplayKHR                                currentDisplay
+     u32                                         currentStackIndex
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplayPlaneCapabilitiesKHR {
+     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
+     VkOffset2D                                  minSrcPosition
+@@ -2380,7 +2363,7 @@ class VkDisplayPlaneCapabilitiesKHR {
+     VkExtent2D                                  maxDstExtent
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ class VkDisplaySurfaceCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+@@ -2393,14 +2376,14 @@ class VkDisplaySurfaceCreateInfoKHR {
+     VkExtent2D                                  imageSize
+ }
+-@extension("VK_EXT_KHR_display_swapchain")
++@extension("VK_KHR_display_swapchain")
+ class VkDisplaySwapchainCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+     const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo
+ }
+-@extension("VK_EXT_KHR_display_swapchain")
++@extension("VK_KHR_display_swapchain")
+ class VkDisplayPresentInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+@@ -3378,34 +3361,6 @@ cmd void vkDestroyShaderModule(
+     State.ShaderModules[shaderModule] = null
+ }
+-@threadSafety("system")
+-cmd VkResult vkCreateShader(
+-        VkDevice                                    device,
+-        const VkShaderCreateInfo*                   pCreateInfo,
+-        const VkAllocationCallbacks*                pAllocator,
+-        VkShader*                                   pShader) {
+-    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
+-    deviceObject := GetDevice(device)
+-
+-    shader := ?
+-    pShader[0] = shader
+-    State.Shaders[shader] = new!ShaderObject(device: device)
+-
+-    return ?
+-}
+-
+-@threadSafety("system")
+-cmd void vkDestroyShader(
+-        VkDevice                                    device,
+-        VkShader                                    shader,
+-        const VkAllocationCallbacks*                pAllocator) {
+-    deviceObject := GetDevice(device)
+-    shaderObject := GetShader(shader)
+-    assert(shaderObject.device == device)
+-
+-    State.Shaders[shader] = null
+-}
+-
+ // Pipeline functions
+@@ -4625,7 +4580,7 @@ cmd void vkCmdExecuteCommands(
+     }
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ cmd void vkDestroySurfaceKHR(
+         VkInstance                                  instance,
+         VkSurfaceKHR                                surface) {
+@@ -4636,7 +4591,7 @@ cmd void vkDestroySurfaceKHR(
+     State.Surfaces[surface] = null
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
+         VkPhysicalDevice                            physicalDevice,
+         u32                                         queueFamilyIndex,
+@@ -4647,7 +4602,7 @@ cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+         VkPhysicalDevice                            physicalDevice,
+         VkSurfaceKHR                                surface,
+@@ -4660,7 +4615,7 @@ cmd VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
+         VkPhysicalDevice                            physicalDevice,
+         VkSurfaceKHR                                surface,
+@@ -4680,7 +4635,7 @@ cmd VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_surface")
++@extension("VK_KHR_surface")
+ cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
+         VkPhysicalDevice                            physicalDevice,
+         VkSurfaceKHR                                surface,
+@@ -4700,7 +4655,7 @@ cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ cmd VkResult vkCreateSwapchainKHR(
+         VkDevice                                 device,
+         const VkSwapchainCreateInfoKHR*          pCreateInfo,
+@@ -4715,7 +4670,7 @@ cmd VkResult vkCreateSwapchainKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ cmd void vkDestroySwapchainKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain) {
+@@ -4726,7 +4681,7 @@ cmd void vkDestroySwapchainKHR(
+     State.Swapchains[swapchain] = null
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ cmd VkResult vkGetSwapchainImagesKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain,
+@@ -4747,7 +4702,7 @@ cmd VkResult vkGetSwapchainImagesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ cmd VkResult vkAcquireNextImageKHR(
+         VkDevice                                 device,
+         VkSwapchainKHR                           swapchain,
+@@ -4764,7 +4719,7 @@ cmd VkResult vkAcquireNextImageKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_swapchain")
++@extension("VK_KHR_swapchain")
+ cmd VkResult vkQueuePresentKHR(
+         VkQueue                                  queue,
+         VkPresentInfoKHR*                        pPresentInfo) {
+@@ -4776,7 +4731,7 @@ cmd VkResult vkQueuePresentKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32*                                    pPropertyCount,
+@@ -4785,7 +4740,7 @@ cmd VkResult vkGetPhysicalDeviceDisplayPropertiesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32*                                    pPropertyCount,
+@@ -4794,7 +4749,7 @@ cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32*                                    pPropertyCount,
+@@ -4803,7 +4758,7 @@ cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkGetDisplayModePropertiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+         VkDisplayKHR                            display,
+@@ -4813,7 +4768,7 @@ cmd VkResult vkGetDisplayModePropertiesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkCreateDisplayModeKHR(
+         VkPhysicalDevice                        physicalDevice,
+         VkDisplayKHR                            display,
+@@ -4823,7 +4778,7 @@ cmd VkResult vkCreateDisplayModeKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+         VkDisplayModeCreateInfoKHR              mode,
+@@ -4833,7 +4788,7 @@ cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_display")
++@extension("VK_KHR_display")
+ cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
+         VkInstance                              instance,
+         const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
+@@ -4841,7 +4796,7 @@ cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_xlib_surface")
++@extension("VK_KHR_xlib_surface")
+ cmd VkResult vkCreateXlibSurfaceKHR(
+         VkInstance                              instance,
+         platform.Display*                       dpy,
+@@ -4851,7 +4806,7 @@ cmd VkResult vkCreateXlibSurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_xlib_surface")
++@extension("VK_KHR_xlib_surface")
+ cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32                                     queueFamilyIndex,
+@@ -4861,7 +4816,7 @@ cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_xcb_surface")
++@extension("VK_KHR_xcb_surface")
+ cmd VkResult vkCreateXCBSurfaceKHR(
+         VkInstance                              instance,
+         platform.xcb_connection_t*              connection,
+@@ -4871,7 +4826,7 @@ cmd VkResult vkCreateXCBSurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_xlib_surface")
++@extension("VK_KHR_xlib_surface")
+ cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32                                     queueFamilyIndex,
+@@ -4881,7 +4836,7 @@ cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_wayland_surface")
++@extension("VK_KHR_wayland_surface")
+ cmd VkResult vkCreateWaylandSurfaceKHR(
+         VkInstance                              instance,
+         platform.wl_display*                    display,
+@@ -4891,7 +4846,7 @@ cmd VkResult vkCreateWaylandSurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_wayland_surface")
++@extension("VK_KHR_wayland_surface")
+ cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32                                     queueFamilyIndex,
+@@ -4900,7 +4855,7 @@ cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_mir_surface")
++@extension("VK_KHR_mir_surface")
+ cmd VkResult vkCreateMirSurfaceKHR(
+         VkInstance                              instance,
+         platform.MirConnection*                 connection,
+@@ -4910,7 +4865,7 @@ cmd VkResult vkCreateMirSurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_mir_surface")
++@extension("VK_KHR_mir_surface")
+ cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32                                     queueFamilyIndex,
+@@ -4919,7 +4874,7 @@ cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_android_surface")
++@extension("VK_KHR_android_surface")
+ cmd VkResult vkCreateAndroidSurfaceKHR(
+         VkInstance                              instance,
+         platform.ANativeWindow*                 window
+@@ -4928,7 +4883,7 @@ cmd VkResult vkCreateAndroidSurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_win32_surface")
++@extension("VK_KHR_win32_surface")
+ cmd VkResult vkCreateWin32SurfaceKHR(
+         VkInstance                              instance,
+         platform.HINSTANCE                      hinstance,
+@@ -4938,7 +4893,7 @@ cmd VkResult vkCreateWin32SurfaceKHR(
+     return ?
+ }
+-@extension("VK_EXT_KHR_win32_surface")
++@extension("VK_KHR_win32_surface")
+ cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
+         VkPhysicalDevice                        physicalDevice,
+         u32                                     queueFamilyIndex) {
+@@ -4975,7 +4930,6 @@ StateObject State
+     map!(VkImage,                    ref!ImageObject)                    Images
+     map!(VkImageView,                ref!ImageViewObject)                ImageViews
+     map!(VkShaderModule,             ref!ShaderModuleObject)             ShaderModules
+-    map!(VkShader,                   ref!ShaderObject)                   Shaders
+     map!(VkPipeline,                 ref!PipelineObject)                 Pipelines
+     map!(VkPipelineLayout,           ref!PipelineLayoutObject)           PipelineLayouts
+     map!(VkSampler,                  ref!SamplerObject)                  Samplers
+@@ -5168,11 +5122,6 @@ macro ref!ImageViewObject GetImageView(VkImageView imageView) {
+     return State.ImageViews[imageView]
+ }
+-macro ref!ShaderObject GetShader(VkShader shader) {
+-    assert(shader in State.Shaders)
+-    return State.Shaders[shader]
+-}
+-
+ macro ref!ShaderModuleObject GetShaderModule(VkShaderModule shaderModule) {
+     assert(shaderModule in State.ShaderModules)
+     return State.ShaderModules[shaderModule]
+diff --git a/vulkan/include/vulkan/vk_android_native_buffer.h b/vulkan/include/vulkan/vk_android_native_buffer.h
+new file mode 100644
+index 0000000..f1f2676
+--- /dev/null
++++ b/vulkan/include/vulkan/vk_android_native_buffer.h
+@@ -0,0 +1,93 @@
++/*
++ * Copyright 2015 The Android Open Source Project
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *      http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++#ifndef __VK_ANDROID_NATIVE_BUFFER_H__
++#define __VK_ANDROID_NATIVE_BUFFER_H__
++
++#include <vulkan/vulkan.h>
++#include <system/window.h>
++
++// TODO(jessehall): Get a real extension number officially assigned.
++#define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER 1024
++#define VK_ANDROID_NATIVE_BUFFER_REVISION         1
++#define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME   "VK_ANDROID_native_buffer"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++// See https://gitlab.khronos.org/vulkan/vulkan/blob/master/doc/proposals/proposed/NVIDIA/VulkanRegistryProposal.txt
++// and Khronos bug 14154 for explanation of these magic numbers.
++#define VK_ANDROID_NATIVE_BUFFER_ENUM(type,id)    ((type)((int)0xc0000000 - VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER * -1024 + (id)))
++#define VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID   VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 0)
++
++typedef struct {
++    VkStructureType             sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
++    const void*                 pNext;
++
++    // Buffer handle and stride returned from gralloc alloc()
++    buffer_handle_t             handle;
++    int                         stride;
++
++    // Gralloc format and usage requested when the buffer was allocated.
++    int                         format;
++    int                         usage;
++} VkNativeBufferANDROID;
++
++typedef VkResult (VKAPI *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
++typedef VkResult (VKAPI *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
++typedef VkResult (VKAPI *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, VkImage image, int* pNativeFenceFd);
++// -- DEPRECATED --
++typedef VkResult (VKAPI *PFN_vkImportNativeFenceANDROID)(VkDevice device, VkSemaphore semaphore, int nativeFenceFd);
++typedef VkResult (VKAPI *PFN_vkQueueSignalNativeFenceANDROID)(VkQueue queue, int* pNativeFenceFd);
++// ----------------
++
++#ifdef VK_PROTOTYPES
++VkResult VKAPI vkGetSwapchainGrallocUsageANDROID(
++    VkDevice            device,
++    VkFormat            format,
++    VkImageUsageFlags   imageUsage,
++    int*                grallocUsage
++);
++VkResult VKAPI vkAcquireImageANDROID(
++    VkDevice            device,
++    VkImage             image,
++    int                 nativeFenceFd,
++    VkSemaphore         semaphore
++);
++VkResult VKAPI vkQueueSignalReleaseImageANDROID(
++    VkQueue             queue,
++    VkImage             image,
++    int*                pNativeFenceFd
++);
++// -- DEPRECATED --
++VkResult VKAPI vkImportNativeFenceANDROID(
++    VkDevice            device,
++    VkSemaphore         semaphore,
++    int                 nativeFenceFd
++);
++VkResult VKAPI vkQueueSignalNativeFenceANDROID(
++    VkQueue             queue,
++    int*                pNativeFenceFd
++);
++// ----------------
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif // __VK_ANDROID_NATIVE_BUFFER_H__
+diff --git a/vulkan/include/vulkan/vk_ext_android_native_buffer.h b/vulkan/include/vulkan/vk_ext_android_native_buffer.h
+deleted file mode 100644
+index f665164..0000000
+--- a/vulkan/include/vulkan/vk_ext_android_native_buffer.h
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/*
+- * Copyright 2015 The Android Open Source Project
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- *      http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-#ifndef __VK_EXT_ANDROID_NATIVE_BUFFER_H__
+-#define __VK_EXT_ANDROID_NATIVE_BUFFER_H__
+-
+-#include <vulkan/vulkan.h>
+-#include <system/window.h>
+-
+-// TODO(jessehall): Get a real extension number officially assigned.
+-#define VK_EXT_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER 1024
+-#define VK_EXT_ANDROID_NATIVE_BUFFER_REVISION         1
+-#define VK_EXT_ANDROID_NATIVE_BUFFER_EXTENSION_NAME   "VK_EXT_ANDROID_gralloc"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-// See https://gitlab.khronos.org/vulkan/vulkan/blob/master/doc/proposals/proposed/NVIDIA/VulkanRegistryProposal.txt
+-// and Khronos bug 14154 for explanation of these magic numbers.
+-#define VK_EXT_ANDROID_NATIVE_BUFFER_ENUM(type,id)    ((type)((int)0xc0000000 - VK_EXT_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER * -1024 + (id)))
+-#define VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID       VK_EXT_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 0)
+-
+-typedef struct {
+-    VkStructureType             sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
+-    const void*                 pNext;
+-
+-    // Buffer handle and stride returned from gralloc alloc()
+-    buffer_handle_t             handle;
+-    int                         stride;
+-
+-    // Gralloc format and usage requested when the buffer was allocated.
+-    int                         format;
+-    int                         usage;
+-} VkNativeBufferANDROID;
+-
+-typedef VkResult (VKAPI *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
+-typedef VkResult (VKAPI *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
+-typedef VkResult (VKAPI *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, VkImage image, int* pNativeFenceFd);
+-// -- DEPRECATED --
+-typedef VkResult (VKAPI *PFN_vkImportNativeFenceANDROID)(VkDevice device, VkSemaphore semaphore, int nativeFenceFd);
+-typedef VkResult (VKAPI *PFN_vkQueueSignalNativeFenceANDROID)(VkQueue queue, int* pNativeFenceFd);
+-// ----------------
+-
+-#ifdef VK_PROTOTYPES
+-VkResult VKAPI vkGetSwapchainGrallocUsageANDROID(
+-    VkDevice            device,
+-    VkFormat            format,
+-    VkImageUsageFlags   imageUsage,
+-    int*                grallocUsage
+-);
+-VkResult VKAPI vkAcquireImageANDROID(
+-    VkDevice            device,
+-    VkImage             image,
+-    int                 nativeFenceFd,
+-    VkSemaphore         semaphore
+-);
+-VkResult VKAPI vkQueueSignalReleaseImageANDROID(
+-    VkQueue             queue,
+-    VkImage             image,
+-    int*                pNativeFenceFd
+-);
+-// -- DEPRECATED --
+-VkResult VKAPI vkImportNativeFenceANDROID(
+-    VkDevice            device,
+-    VkSemaphore         semaphore,
+-    int                 nativeFenceFd
+-);
+-VkResult VKAPI vkQueueSignalNativeFenceANDROID(
+-    VkQueue             queue,
+-    int*                pNativeFenceFd
+-);
+-// ----------------
+-#endif
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif // __VK_EXT_ANDROID_NATIVE_BUFFER_H__
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 60583c2..2e66e27 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,11 +41,11 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 198, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 200, 0)
+ #define VK_NULL_HANDLE 0
+-
++        
+ #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+@@ -56,7 +56,7 @@ extern "C" {
+ #else
+         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+ #endif
+-
++        
+ typedef uint32_t VkFlags;
+@@ -79,7 +79,6 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
+-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShader)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
+@@ -108,7 +107,7 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
+ #define VK_MAX_DESCRIPTION_SIZE           256
+-typedef enum {
++typedef enum VkResult {
+     VK_SUCCESS = 0,
+     VK_NOT_READY = 1,
+     VK_TIMEOUT = 2,
+@@ -130,7 +129,7 @@ typedef enum {
+     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+ } VkResult;
+-typedef enum {
++typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
+     VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
+@@ -148,57 +147,56 @@ typedef enum {
+     VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
+     VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
+     VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
+-    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 17,
+-    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 18,
+-    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 19,
+-    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 20,
+-    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21,
+-    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 22,
+-    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 23,
+-    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 24,
+-    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 25,
+-    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 26,
+-    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 27,
+-    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 28,
+-    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 29,
+-    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 30,
+-    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 31,
+-    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 32,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 33,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 34,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 35,
+-    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 36,
+-    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 37,
+-    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 38,
+-    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 39,
+-    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 40,
+-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO = 41,
+-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
+-    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
+-    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
+-    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
+-    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
+-    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 47,
+-    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 48,
++    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
++    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
++    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
++    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
++    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
++    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
++    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
++    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
++    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
++    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
++    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
++    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
++    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
++    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
++    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 34,
++    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
++    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
++    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
++    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
++    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO = 40,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 41,
++    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 42,
++    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 43,
++    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 44,
++    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
++    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 46,
++    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 47,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
+     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+-typedef enum {
+-    VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION = 0,
++typedef enum VkSystemAllocationScope {
++    VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
+     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
+     VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
+     VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
+     VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
+-    VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION,
++    VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
+     VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
+-    VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_FUNCTION + 1),
++    VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
+     VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
+ } VkSystemAllocationScope;
+-typedef enum {
++typedef enum VkInternalAllocationType {
+     VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
+     VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
+     VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
+@@ -206,7 +204,7 @@ typedef enum {
+     VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkInternalAllocationType;
+-typedef enum {
++typedef enum VkFormat {
+     VK_FORMAT_UNDEFINED = 0,
+     VK_FORMAT_R4G4_UNORM = 1,
+     VK_FORMAT_R4G4_USCALED = 2,
+@@ -387,7 +385,7 @@ typedef enum {
+     VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+ } VkFormat;
+-typedef enum {
++typedef enum VkImageType {
+     VK_IMAGE_TYPE_1D = 0,
+     VK_IMAGE_TYPE_2D = 1,
+     VK_IMAGE_TYPE_3D = 2,
+@@ -397,7 +395,7 @@ typedef enum {
+     VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkImageType;
+-typedef enum {
++typedef enum VkImageTiling {
+     VK_IMAGE_TILING_OPTIMAL = 0,
+     VK_IMAGE_TILING_LINEAR = 1,
+     VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
+@@ -406,7 +404,7 @@ typedef enum {
+     VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
+ } VkImageTiling;
+-typedef enum {
++typedef enum VkPhysicalDeviceType {
+     VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
+     VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
+     VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
+@@ -418,7 +416,7 @@ typedef enum {
+     VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkPhysicalDeviceType;
+-typedef enum {
++typedef enum VkQueryType {
+     VK_QUERY_TYPE_OCCLUSION = 0,
+     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
+     VK_QUERY_TYPE_TIMESTAMP = 2,
+@@ -428,7 +426,7 @@ typedef enum {
+     VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkQueryType;
+-typedef enum {
++typedef enum VkSharingMode {
+     VK_SHARING_MODE_EXCLUSIVE = 0,
+     VK_SHARING_MODE_CONCURRENT = 1,
+     VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
+@@ -437,7 +435,7 @@ typedef enum {
+     VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSharingMode;
+-typedef enum {
++typedef enum VkImageLayout {
+     VK_IMAGE_LAYOUT_UNDEFINED = 0,
+     VK_IMAGE_LAYOUT_GENERAL = 1,
+     VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
+@@ -453,7 +451,7 @@ typedef enum {
+     VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
+ } VkImageLayout;
+-typedef enum {
++typedef enum VkImageViewType {
+     VK_IMAGE_VIEW_TYPE_1D = 0,
+     VK_IMAGE_VIEW_TYPE_2D = 1,
+     VK_IMAGE_VIEW_TYPE_3D = 2,
+@@ -467,7 +465,7 @@ typedef enum {
+     VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkImageViewType;
+-typedef enum {
++typedef enum VkComponentSwizzle {
+     VK_COMPONENT_SWIZZLE_IDENTITY = 0,
+     VK_COMPONENT_SWIZZLE_ZERO = 1,
+     VK_COMPONENT_SWIZZLE_ONE = 2,
+@@ -481,7 +479,7 @@ typedef enum {
+     VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
+ } VkComponentSwizzle;
+-typedef enum {
++typedef enum VkVertexInputRate {
+     VK_VERTEX_INPUT_RATE_VERTEX = 0,
+     VK_VERTEX_INPUT_RATE_INSTANCE = 1,
+     VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
+@@ -490,7 +488,7 @@ typedef enum {
+     VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
+ } VkVertexInputRate;
+-typedef enum {
++typedef enum VkPrimitiveTopology {
+     VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
+     VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
+     VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
+@@ -508,7 +506,7 @@ typedef enum {
+     VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+ } VkPrimitiveTopology;
+-typedef enum {
++typedef enum VkPolygonMode {
+     VK_POLYGON_MODE_FILL = 0,
+     VK_POLYGON_MODE_LINE = 1,
+     VK_POLYGON_MODE_POINT = 2,
+@@ -518,7 +516,7 @@ typedef enum {
+     VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkPolygonMode;
+-typedef enum {
++typedef enum VkFrontFace {
+     VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
+     VK_FRONT_FACE_CLOCKWISE = 1,
+     VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
+@@ -527,7 +525,7 @@ typedef enum {
+     VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
+ } VkFrontFace;
+-typedef enum {
++typedef enum VkCompareOp {
+     VK_COMPARE_OP_NEVER = 0,
+     VK_COMPARE_OP_LESS = 1,
+     VK_COMPARE_OP_EQUAL = 2,
+@@ -542,7 +540,7 @@ typedef enum {
+     VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkCompareOp;
+-typedef enum {
++typedef enum VkStencilOp {
+     VK_STENCIL_OP_KEEP = 0,
+     VK_STENCIL_OP_ZERO = 1,
+     VK_STENCIL_OP_REPLACE = 2,
+@@ -557,7 +555,7 @@ typedef enum {
+     VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkStencilOp;
+-typedef enum {
++typedef enum VkLogicOp {
+     VK_LOGIC_OP_CLEAR = 0,
+     VK_LOGIC_OP_AND = 1,
+     VK_LOGIC_OP_AND_REVERSE = 2,
+@@ -580,7 +578,7 @@ typedef enum {
+     VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkLogicOp;
+-typedef enum {
++typedef enum VkBlendFactor {
+     VK_BLEND_FACTOR_ZERO = 0,
+     VK_BLEND_FACTOR_ONE = 1,
+     VK_BLEND_FACTOR_SRC_COLOR = 2,
+@@ -606,7 +604,7 @@ typedef enum {
+     VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
+ } VkBlendFactor;
+-typedef enum {
++typedef enum VkBlendOp {
+     VK_BLEND_OP_ADD = 0,
+     VK_BLEND_OP_SUBTRACT = 1,
+     VK_BLEND_OP_REVERSE_SUBTRACT = 2,
+@@ -618,7 +616,7 @@ typedef enum {
+     VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkBlendOp;
+-typedef enum {
++typedef enum VkDynamicState {
+     VK_DYNAMIC_STATE_VIEWPORT = 0,
+     VK_DYNAMIC_STATE_SCISSOR = 1,
+     VK_DYNAMIC_STATE_LINE_WIDTH = 2,
+@@ -634,7 +632,7 @@ typedef enum {
+     VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
+ } VkDynamicState;
+-typedef enum {
++typedef enum VkFilter {
+     VK_FILTER_NEAREST = 0,
+     VK_FILTER_LINEAR = 1,
+     VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
+@@ -643,7 +641,7 @@ typedef enum {
+     VK_FILTER_MAX_ENUM = 0x7FFFFFFF
+ } VkFilter;
+-typedef enum {
++typedef enum VkSamplerMipmapMode {
+     VK_SAMPLER_MIPMAP_MODE_BASE = 0,
+     VK_SAMPLER_MIPMAP_MODE_NEAREST = 1,
+     VK_SAMPLER_MIPMAP_MODE_LINEAR = 2,
+@@ -653,7 +651,7 @@ typedef enum {
+     VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSamplerMipmapMode;
+-typedef enum {
++typedef enum VkSamplerAddressMode {
+     VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
+     VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
+     VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
+@@ -665,7 +663,7 @@ typedef enum {
+     VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
+ } VkSamplerAddressMode;
+-typedef enum {
++typedef enum VkBorderColor {
+     VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
+     VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
+     VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
+@@ -678,7 +676,7 @@ typedef enum {
+     VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
+ } VkBorderColor;
+-typedef enum {
++typedef enum VkDescriptorType {
+     VK_DESCRIPTOR_TYPE_SAMPLER = 0,
+     VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
+     VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
+@@ -696,7 +694,7 @@ typedef enum {
+     VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkDescriptorType;
+-typedef enum {
++typedef enum VkAttachmentLoadOp {
+     VK_ATTACHMENT_LOAD_OP_LOAD = 0,
+     VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
+     VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
+@@ -706,7 +704,7 @@ typedef enum {
+     VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkAttachmentLoadOp;
+-typedef enum {
++typedef enum VkAttachmentStoreOp {
+     VK_ATTACHMENT_STORE_OP_STORE = 0,
+     VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
+     VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
+@@ -715,7 +713,7 @@ typedef enum {
+     VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
+ } VkAttachmentStoreOp;
+-typedef enum {
++typedef enum VkPipelineBindPoint {
+     VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
+     VK_PIPELINE_BIND_POINT_COMPUTE = 1,
+     VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
+@@ -724,7 +722,7 @@ typedef enum {
+     VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
+ } VkPipelineBindPoint;
+-typedef enum {
++typedef enum VkCommandBufferLevel {
+     VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
+     VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
+     VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
+@@ -733,7 +731,7 @@ typedef enum {
+     VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
+ } VkCommandBufferLevel;
+-typedef enum {
++typedef enum VkIndexType {
+     VK_INDEX_TYPE_UINT16 = 0,
+     VK_INDEX_TYPE_UINT32 = 1,
+     VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
+@@ -742,7 +740,7 @@ typedef enum {
+     VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkIndexType;
+-typedef enum {
++typedef enum VkSubpassContents {
+     VK_SUBPASS_CONTENTS_INLINE = 0,
+     VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
+     VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
+@@ -753,7 +751,7 @@ typedef enum {
+ typedef VkFlags VkInstanceCreateFlags;
+-typedef enum {
++typedef enum VkFormatFeatureFlagBits {
+     VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
+     VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
+     VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
+@@ -769,7 +767,7 @@ typedef enum {
+ } VkFormatFeatureFlagBits;
+ typedef VkFlags VkFormatFeatureFlags;
+-typedef enum {
++typedef enum VkImageUsageFlagBits {
+     VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+     VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
+     VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
+@@ -781,7 +779,7 @@ typedef enum {
+ } VkImageUsageFlagBits;
+ typedef VkFlags VkImageUsageFlags;
+-typedef enum {
++typedef enum VkImageCreateFlagBits {
+     VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+     VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+     VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+@@ -790,7 +788,7 @@ typedef enum {
+ } VkImageCreateFlagBits;
+ typedef VkFlags VkImageCreateFlags;
+-typedef enum {
++typedef enum VkSampleCountFlagBits {
+     VK_SAMPLE_COUNT_1_BIT = 0x00000001,
+     VK_SAMPLE_COUNT_2_BIT = 0x00000002,
+     VK_SAMPLE_COUNT_4_BIT = 0x00000004,
+@@ -801,7 +799,7 @@ typedef enum {
+ } VkSampleCountFlagBits;
+ typedef VkFlags VkSampleCountFlags;
+-typedef enum {
++typedef enum VkQueueFlagBits {
+     VK_QUEUE_GRAPHICS_BIT = 0x00000001,
+     VK_QUEUE_COMPUTE_BIT = 0x00000002,
+     VK_QUEUE_TRANSFER_BIT = 0x00000004,
+@@ -809,7 +807,7 @@ typedef enum {
+ } VkQueueFlagBits;
+ typedef VkFlags VkQueueFlags;
+-typedef enum {
++typedef enum VkMemoryPropertyFlagBits {
+     VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
+     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
+     VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
+@@ -818,7 +816,7 @@ typedef enum {
+ } VkMemoryPropertyFlagBits;
+ typedef VkFlags VkMemoryPropertyFlags;
+-typedef enum {
++typedef enum VkMemoryHeapFlagBits {
+     VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
+ } VkMemoryHeapFlagBits;
+ typedef VkFlags VkMemoryHeapFlags;
+@@ -826,14 +824,15 @@ typedef VkFlags VkDeviceCreateFlags;
+ typedef VkFlags VkDeviceQueueCreateFlags;
+ typedef VkFlags VkMemoryMapFlags;
+-typedef enum {
++typedef enum VkImageAspectFlagBits {
+     VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
+     VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
+     VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
+     VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
+ } VkImageAspectFlagBits;
++typedef VkFlags VkImageAspectFlags;
+-typedef enum {
++typedef enum VkSparseImageFormatFlagBits {
+     VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
+     VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
+     VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+@@ -841,7 +840,7 @@ typedef enum {
+ typedef VkFlags VkSparseImageFormatFlags;
+ typedef VkFlags VkSparseMemoryBindFlags;
+-typedef enum {
++typedef enum VkFenceCreateFlagBits {
+     VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
+ } VkFenceCreateFlagBits;
+ typedef VkFlags VkFenceCreateFlags;
+@@ -849,7 +848,7 @@ typedef VkFlags VkSemaphoreCreateFlags;
+ typedef VkFlags VkEventCreateFlags;
+ typedef VkFlags VkQueryPoolCreateFlags;
+-typedef enum {
++typedef enum VkQueryPipelineStatisticFlagBits {
+     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
+     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
+     VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
+@@ -864,7 +863,7 @@ typedef enum {
+ } VkQueryPipelineStatisticFlagBits;
+ typedef VkFlags VkQueryPipelineStatisticFlags;
+-typedef enum {
++typedef enum VkQueryResultFlagBits {
+     VK_QUERY_RESULT_DEFAULT = 0,
+     VK_QUERY_RESULT_64_BIT = 0x00000001,
+     VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
+@@ -873,14 +872,14 @@ typedef enum {
+ } VkQueryResultFlagBits;
+ typedef VkFlags VkQueryResultFlags;
+-typedef enum {
++typedef enum VkBufferCreateFlagBits {
+     VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+     VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+     VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+ } VkBufferCreateFlagBits;
+ typedef VkFlags VkBufferCreateFlags;
+-typedef enum {
++typedef enum VkBufferUsageFlagBits {
+     VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
+     VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
+     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
+@@ -894,11 +893,18 @@ typedef enum {
+ typedef VkFlags VkBufferUsageFlags;
+ typedef VkFlags VkBufferViewCreateFlags;
+ typedef VkFlags VkImageViewCreateFlags;
+-typedef VkFlags VkImageAspectFlags;
+ typedef VkFlags VkShaderModuleCreateFlags;
+-typedef VkFlags VkShaderCreateFlags;
++typedef VkFlags VkPipelineCacheCreateFlags;
+-typedef enum {
++typedef enum VkPipelineCreateFlagBits {
++    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
++    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
++    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
++} VkPipelineCreateFlagBits;
++typedef VkFlags VkPipelineCreateFlags;
++typedef VkFlags VkPipelineShaderStageCreateFlags;
++
++typedef enum VkShaderStageFlagBits {
+     VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
+     VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
+     VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
+@@ -908,22 +914,13 @@ typedef enum {
+     VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F,
+     VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
+ } VkShaderStageFlagBits;
+-typedef VkFlags VkPipelineCacheCreateFlags;
+-
+-typedef enum {
+-    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+-    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+-    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+-} VkPipelineCreateFlagBits;
+-typedef VkFlags VkPipelineCreateFlags;
+-typedef VkFlags VkPipelineShaderStageCreateFlags;
+ typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+ typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+ typedef VkFlags VkPipelineTesselationStateCreateFlags;
+ typedef VkFlags VkPipelineViewportStateCreateFlags;
+ typedef VkFlags VkPipelineRasterizationStateCreateFlags;
+-typedef enum {
++typedef enum VkCullModeFlagBits {
+     VK_CULL_MODE_NONE = 0,
+     VK_CULL_MODE_FRONT_BIT = 0x00000001,
+     VK_CULL_MODE_BACK_BIT = 0x00000002,
+@@ -934,7 +931,7 @@ typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+ typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+ typedef VkFlags VkPipelineColorBlendStateCreateFlags;
+-typedef enum {
++typedef enum VkColorComponentFlagBits {
+     VK_COLOR_COMPONENT_R_BIT = 0x00000001,
+     VK_COLOR_COMPONENT_G_BIT = 0x00000002,
+     VK_COLOR_COMPONENT_B_BIT = 0x00000004,
+@@ -947,7 +944,7 @@ typedef VkFlags VkShaderStageFlags;
+ typedef VkFlags VkSamplerCreateFlags;
+ typedef VkFlags VkDescriptorSetLayoutCreateFlags;
+-typedef enum {
++typedef enum VkDescriptorPoolCreateFlagBits {
+     VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
+ } VkDescriptorPoolCreateFlagBits;
+ typedef VkFlags VkDescriptorPoolCreateFlags;
+@@ -955,13 +952,13 @@ typedef VkFlags VkDescriptorPoolResetFlags;
+ typedef VkFlags VkFramebufferCreateFlags;
+ typedef VkFlags VkRenderPassCreateFlags;
+-typedef enum {
++typedef enum VkAttachmentDescriptionFlagBits {
+     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
+ } VkAttachmentDescriptionFlagBits;
+ typedef VkFlags VkAttachmentDescriptionFlags;
+ typedef VkFlags VkSubpassDescriptionFlags;
+-typedef enum {
++typedef enum VkPipelineStageFlagBits {
+     VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
+     VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
+     VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
+@@ -981,58 +978,56 @@ typedef enum {
+ } VkPipelineStageFlagBits;
+ typedef VkFlags VkPipelineStageFlags;
+-typedef enum {
+-    VK_MEMORY_OUTPUT_HOST_WRITE_BIT = 0x00000001,
+-    VK_MEMORY_OUTPUT_SHADER_WRITE_BIT = 0x00000002,
+-    VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT = 0x00000004,
+-    VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000008,
+-    VK_MEMORY_OUTPUT_TRANSFER_BIT = 0x00000010,
+-} VkMemoryOutputFlagBits;
+-typedef VkFlags VkMemoryOutputFlags;
+-
+-typedef enum {
+-    VK_MEMORY_INPUT_HOST_READ_BIT = 0x00000001,
+-    VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT = 0x00000002,
+-    VK_MEMORY_INPUT_INDEX_FETCH_BIT = 0x00000004,
+-    VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT = 0x00000008,
+-    VK_MEMORY_INPUT_UNIFORM_READ_BIT = 0x00000010,
+-    VK_MEMORY_INPUT_SHADER_READ_BIT = 0x00000020,
+-    VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT = 0x00000040,
+-    VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000080,
+-    VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT = 0x00000100,
+-    VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200,
+-} VkMemoryInputFlagBits;
+-typedef VkFlags VkMemoryInputFlags;
+-
+-typedef enum {
++typedef enum VkAccessFlagBits {
++    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
++    VK_ACCESS_INDEX_READ_BIT = 0x00000002,
++    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
++    VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
++    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
++    VK_ACCESS_SHADER_READ_BIT = 0x00000020,
++    VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
++    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
++    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
++    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
++    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
++    VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
++    VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
++    VK_ACCESS_HOST_READ_BIT = 0x00002000,
++    VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
++    VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
++    VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
++} VkAccessFlagBits;
++typedef VkFlags VkAccessFlags;
++
++typedef enum VkDependencyFlagBits {
+     VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
+ } VkDependencyFlagBits;
+ typedef VkFlags VkDependencyFlags;
+-typedef enum {
++typedef enum VkCommandPoolCreateFlagBits {
+     VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
+     VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
+ } VkCommandPoolCreateFlagBits;
+ typedef VkFlags VkCommandPoolCreateFlags;
+-typedef enum {
++typedef enum VkCommandPoolResetFlagBits {
+     VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+ } VkCommandPoolResetFlagBits;
+ typedef VkFlags VkCommandPoolResetFlags;
+-typedef enum {
++typedef enum VkCommandBufferUsageFlagBits {
+     VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
+     VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
+     VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
+ } VkCommandBufferUsageFlagBits;
+ typedef VkFlags VkCommandBufferUsageFlags;
+-typedef enum {
++typedef enum VkCommandBufferResetFlagBits {
+     VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+ } VkCommandBufferResetFlagBits;
+ typedef VkFlags VkCommandBufferResetFlags;
+-typedef enum {
++typedef enum VkStencilFaceFlagBits {
+     VK_STENCIL_FACE_NONE = 0,
+     VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
+     VK_STENCIL_FACE_BACK_BIT = 0x00000002,
+@@ -1040,43 +1035,43 @@ typedef enum {
+ } VkStencilFaceFlagBits;
+ typedef VkFlags VkStencilFaceFlags;
+-typedef enum {
++typedef enum VkQueryControlFlagBits {
+     VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+ } VkQueryControlFlagBits;
+ typedef VkFlags VkQueryControlFlags;
+ typedef void* (VKAPI *PFN_vkAllocationFunction)(
+-    void*              pUserData,
+-    size_t             size,
+-    size_t             alignment,
+-    VkSystemAllocationScope allocationScope);
++    void*                                       pUserData,
++    size_t                                      size,
++    size_t                                      alignment,
++    VkSystemAllocationScope                     allocationScope);
+ typedef void* (VKAPI *PFN_vkReallocationFunction)(
+-    void*              pUserData,
+-    void*              pOriginal,
+-    size_t             size,
+-    size_t             alignment,
+-    VkSystemAllocationScope allocationScope);
++    void*                                       pUserData,
++    void*                                       pOriginal,
++    size_t                                      size,
++    size_t                                      alignment,
++    VkSystemAllocationScope                     allocationScope);
+ typedef void (VKAPI *PFN_vkFreeFunction)(
+-    void*                           pUserData,
+-    void*                           pMemory);
++    void*                                       pUserData,
++    void*                                       pMemory);
+ typedef void (VKAPI *PFN_vkInternalAllocationNotification)(
+-    void*              pUserData,
+-    size_t                           size,
+-    VkInternalAllocationType              allocationType,
+-    VkSystemAllocationScope               allocationScope);
++    void*                                       pUserData,
++    size_t                                      size,
++    VkInternalAllocationType                    allocationType,
++    VkSystemAllocationScope                     allocationScope);
+ typedef void (VKAPI *PFN_vkInternalFreeNotification)(
+-    void*              pUserData,
+-    size_t                           size,
+-    VkInternalAllocationType              allocationType,
+-    VkSystemAllocationScope               allocationScope);
++    void*                                       pUserData,
++    size_t                                      size,
++    VkInternalAllocationType                    allocationType,
++    VkSystemAllocationScope                     allocationScope);
+ typedef void (VKAPI *PFN_vkVoidFunction)(void);
+-typedef struct {
++typedef struct VkApplicationInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     const char*                                 pApplicationName;
+@@ -1086,7 +1081,7 @@ typedef struct {
+     uint32_t                                    apiVersion;
+ } VkApplicationInfo;
+-typedef struct {
++typedef struct VkInstanceCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkInstanceCreateFlags                       flags;
+@@ -1097,7 +1092,7 @@ typedef struct {
+     const char*const*                           ppEnabledExtensionNames;
+ } VkInstanceCreateInfo;
+-typedef struct {
++typedef struct VkAllocationCallbacks {
+     void*                                       pUserData;
+     PFN_vkAllocationFunction                    pfnAllocation;
+     PFN_vkReallocationFunction                  pfnReallocation;
+@@ -1106,7 +1101,7 @@ typedef struct {
+     PFN_vkInternalFreeNotification              pfnInternalFree;
+ } VkAllocationCallbacks;
+-typedef struct {
++typedef struct VkPhysicalDeviceFeatures {
+     VkBool32                                    robustBufferAccess;
+     VkBool32                                    fullDrawIndexUint32;
+     VkBool32                                    imageCubeArray;
+@@ -1162,19 +1157,19 @@ typedef struct {
+     VkBool32                                    variableMultisampleRate;
+ } VkPhysicalDeviceFeatures;
+-typedef struct {
++typedef struct VkFormatProperties {
+     VkFormatFeatureFlags                        linearTilingFeatures;
+     VkFormatFeatureFlags                        optimalTilingFeatures;
+     VkFormatFeatureFlags                        bufferFeatures;
+ } VkFormatProperties;
+-typedef struct {
++typedef struct VkExtent3D {
+     int32_t                                     width;
+     int32_t                                     height;
+     int32_t                                     depth;
+ } VkExtent3D;
+-typedef struct {
++typedef struct VkImageFormatProperties {
+     VkExtent3D                                  maxExtent;
+     uint32_t                                    maxMipLevels;
+     uint32_t                                    maxArrayLayers;
+@@ -1182,7 +1177,7 @@ typedef struct {
+     VkDeviceSize                                maxResourceSize;
+ } VkImageFormatProperties;
+-typedef struct {
++typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    maxImageDimension1D;
+     uint32_t                                    maxImageDimension2D;
+     uint32_t                                    maxImageDimension3D;
+@@ -1284,7 +1279,7 @@ typedef struct {
+     VkDeviceSize                                optimalBufferCopyRowPitchAlignment;
+ } VkPhysicalDeviceLimits;
+-typedef struct {
++typedef struct VkPhysicalDeviceSparseProperties {
+     VkBool32                                    residencyStandard2DBlockShape;
+     VkBool32                                    residencyStandard2DMultisampleBlockShape;
+     VkBool32                                    residencyStandard3DBlockShape;
+@@ -1292,7 +1287,7 @@ typedef struct {
+     VkBool32                                    residencyNonResidentStrict;
+ } VkPhysicalDeviceSparseProperties;
+-typedef struct {
++typedef struct VkPhysicalDeviceProperties {
+     uint32_t                                    apiVersion;
+     uint32_t                                    driverVersion;
+     uint32_t                                    vendorID;
+@@ -1304,31 +1299,31 @@ typedef struct {
+     VkPhysicalDeviceSparseProperties            sparseProperties;
+ } VkPhysicalDeviceProperties;
+-typedef struct {
++typedef struct VkQueueFamilyProperties {
+     VkQueueFlags                                queueFlags;
+     uint32_t                                    queueCount;
+     uint32_t                                    timestampValidBits;
+     VkExtent3D                                  minImageTransferGranularity;
+ } VkQueueFamilyProperties;
+-typedef struct {
++typedef struct VkMemoryType {
+     VkMemoryPropertyFlags                       propertyFlags;
+     uint32_t                                    heapIndex;
+ } VkMemoryType;
+-typedef struct {
++typedef struct VkMemoryHeap {
+     VkDeviceSize                                size;
+     VkMemoryHeapFlags                           flags;
+ } VkMemoryHeap;
+-typedef struct {
++typedef struct VkPhysicalDeviceMemoryProperties {
+     uint32_t                                    memoryTypeCount;
+     VkMemoryType                                memoryTypes[VK_MAX_MEMORY_TYPES];
+     uint32_t                                    memoryHeapCount;
+     VkMemoryHeap                                memoryHeaps[VK_MAX_MEMORY_HEAPS];
+ } VkPhysicalDeviceMemoryProperties;
+-typedef struct {
++typedef struct VkDeviceQueueCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDeviceQueueCreateFlags                    flags;
+@@ -1337,7 +1332,7 @@ typedef struct {
+     const float*                                pQueuePriorities;
+ } VkDeviceQueueCreateInfo;
+-typedef struct {
++typedef struct VkDeviceCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDeviceCreateFlags                         flags;
+@@ -1350,19 +1345,19 @@ typedef struct {
+     const VkPhysicalDeviceFeatures*             pEnabledFeatures;
+ } VkDeviceCreateInfo;
+-typedef struct {
++typedef struct VkExtensionProperties {
+     char                                        extensionName[VK_MAX_EXTENSION_NAME_SIZE];
+     uint32_t                                    specVersion;
+ } VkExtensionProperties;
+-typedef struct {
++typedef struct VkLayerProperties {
+     char                                        layerName[VK_MAX_EXTENSION_NAME_SIZE];
+     uint32_t                                    specVersion;
+     uint32_t                                    implementationVersion;
+     char                                        description[VK_MAX_DESCRIPTION_SIZE];
+ } VkLayerProperties;
+-typedef struct {
++typedef struct VkSubmitInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     uint32_t                                    waitSemaphoreCount;
+@@ -1373,14 +1368,14 @@ typedef struct {
+     const VkSemaphore*                          pSignalSemaphores;
+ } VkSubmitInfo;
+-typedef struct {
++typedef struct VkMemoryAllocateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDeviceSize                                allocationSize;
+     uint32_t                                    memoryTypeIndex;
+ } VkMemoryAllocateInfo;
+-typedef struct {
++typedef struct VkMappedMemoryRange {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDeviceMemory                              memory;
+@@ -1388,19 +1383,19 @@ typedef struct {
+     VkDeviceSize                                size;
+ } VkMappedMemoryRange;
+-typedef struct {
++typedef struct VkMemoryRequirements {
+     VkDeviceSize                                size;
+     VkDeviceSize                                alignment;
+     uint32_t                                    memoryTypeBits;
+ } VkMemoryRequirements;
+-typedef struct {
+-    VkImageAspectFlagBits                       aspect;
++typedef struct VkSparseImageFormatProperties {
++    VkImageAspectFlags                          aspectMask;
+     VkExtent3D                                  imageGranularity;
+     VkSparseImageFormatFlags                    flags;
+ } VkSparseImageFormatProperties;
+-typedef struct {
++typedef struct VkSparseImageMemoryRequirements {
+     VkSparseImageFormatProperties               formatProperties;
+     uint32_t                                    imageMipTailStartLod;
+     VkDeviceSize                                imageMipTailSize;
+@@ -1408,7 +1403,7 @@ typedef struct {
+     VkDeviceSize                                imageMipTailStride;
+ } VkSparseImageMemoryRequirements;
+-typedef struct {
++typedef struct VkSparseMemoryBind {
+     VkDeviceSize                                resourceOffset;
+     VkDeviceSize                                size;
+     VkDeviceMemory                              memory;
+@@ -1416,31 +1411,31 @@ typedef struct {
+     VkSparseMemoryBindFlags                     flags;
+ } VkSparseMemoryBind;
+-typedef struct {
++typedef struct VkSparseBufferMemoryBindInfo {
+     VkBuffer                                    buffer;
+     uint32_t                                    bindCount;
+     const VkSparseMemoryBind*                   pBinds;
+ } VkSparseBufferMemoryBindInfo;
+-typedef struct {
++typedef struct VkSparseImageOpaqueMemoryBindInfo {
+     VkImage                                     image;
+     uint32_t                                    bindCount;
+     const VkSparseMemoryBind*                   pBinds;
+ } VkSparseImageOpaqueMemoryBindInfo;
+-typedef struct {
+-    VkImageAspectFlagBits                       aspect;
++typedef struct VkImageSubresource {
++    VkImageAspectFlags                          aspectMask;
+     uint32_t                                    mipLevel;
+     uint32_t                                    arrayLayer;
+ } VkImageSubresource;
+-typedef struct {
++typedef struct VkOffset3D {
+     int32_t                                     x;
+     int32_t                                     y;
+     int32_t                                     z;
+ } VkOffset3D;
+-typedef struct {
++typedef struct VkSparseImageMemoryBind {
+     VkImageSubresource                          subresource;
+     VkOffset3D                                  offset;
+     VkExtent3D                                  extent;
+@@ -1449,13 +1444,13 @@ typedef struct {
+     VkSparseMemoryBindFlags                     flags;
+ } VkSparseImageMemoryBind;
+-typedef struct {
++typedef struct VkSparseImageMemoryBindInfo {
+     VkImage                                     image;
+     uint32_t                                    bindCount;
+     const VkSparseImageMemoryBind*              pBinds;
+ } VkSparseImageMemoryBindInfo;
+-typedef struct {
++typedef struct VkBindSparseInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     uint32_t                                    waitSemaphoreCount;
+@@ -1470,25 +1465,25 @@ typedef struct {
+     const VkSemaphore*                          pSignalSemaphores;
+ } VkBindSparseInfo;
+-typedef struct {
++typedef struct VkFenceCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkFenceCreateFlags                          flags;
+ } VkFenceCreateInfo;
+-typedef struct {
++typedef struct VkSemaphoreCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkSemaphoreCreateFlags                      flags;
+ } VkSemaphoreCreateInfo;
+-typedef struct {
++typedef struct VkEventCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkEventCreateFlags                          flags;
+ } VkEventCreateInfo;
+-typedef struct {
++typedef struct VkQueryPoolCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkQueryPoolCreateFlags                      flags;
+@@ -1497,7 +1492,7 @@ typedef struct {
+     VkQueryPipelineStatisticFlags               pipelineStatistics;
+ } VkQueryPoolCreateInfo;
+-typedef struct {
++typedef struct VkBufferCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkBufferCreateFlags                         flags;
+@@ -1508,7 +1503,7 @@ typedef struct {
+     const uint32_t*                             pQueueFamilyIndices;
+ } VkBufferCreateInfo;
+-typedef struct {
++typedef struct VkBufferViewCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkBufferViewCreateFlags                     flags;
+@@ -1518,7 +1513,7 @@ typedef struct {
+     VkDeviceSize                                range;
+ } VkBufferViewCreateInfo;
+-typedef struct {
++typedef struct VkImageCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkImageCreateFlags                          flags;
+@@ -1536,21 +1531,21 @@ typedef struct {
+     VkImageLayout                               initialLayout;
+ } VkImageCreateInfo;
+-typedef struct {
++typedef struct VkSubresourceLayout {
+     VkDeviceSize                                offset;
+     VkDeviceSize                                size;
+     VkDeviceSize                                rowPitch;
+     VkDeviceSize                                depthPitch;
+ } VkSubresourceLayout;
+-typedef struct {
++typedef struct VkComponentMapping {
+     VkComponentSwizzle                          r;
+     VkComponentSwizzle                          g;
+     VkComponentSwizzle                          b;
+     VkComponentSwizzle                          a;
+ } VkComponentMapping;
+-typedef struct {
++typedef struct VkImageSubresourceRange {
+     VkImageAspectFlags                          aspectMask;
+     uint32_t                                    baseMipLevel;
+     uint32_t                                    levelCount;
+@@ -1558,7 +1553,7 @@ typedef struct {
+     uint32_t                                    layerCount;
+ } VkImageSubresourceRange;
+-typedef struct {
++typedef struct VkImageViewCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkImageViewCreateFlags                      flags;
+@@ -1569,7 +1564,7 @@ typedef struct {
+     VkImageSubresourceRange                     subresourceRange;
+ } VkImageViewCreateInfo;
+-typedef struct {
++typedef struct VkShaderModuleCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkShaderModuleCreateFlags                   flags;
+@@ -1577,16 +1572,7 @@ typedef struct {
+     const uint32_t*                             pCode;
+ } VkShaderModuleCreateInfo;
+-typedef struct {
+-    VkStructureType                             sType;
+-    const void*                                 pNext;
+-    VkShaderCreateFlags                         flags;
+-    VkShaderModule                              module;
+-    const char*                                 pName;
+-    VkShaderStageFlagBits                       stage;
+-} VkShaderCreateInfo;
+-
+-typedef struct {
++typedef struct VkPipelineCacheCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineCacheCreateFlags                  flags;
+@@ -1594,41 +1580,43 @@ typedef struct {
+     const void*                                 pInitialData;
+ } VkPipelineCacheCreateInfo;
+-typedef struct {
++typedef struct VkSpecializationMapEntry {
+     uint32_t                                    constantID;
+     uint32_t                                    offset;
+     size_t                                      size;
+ } VkSpecializationMapEntry;
+-typedef struct {
++typedef struct VkSpecializationInfo {
+     uint32_t                                    mapEntryCount;
+     const VkSpecializationMapEntry*             pMapEntries;
+     size_t                                      dataSize;
+     const void*                                 pData;
+ } VkSpecializationInfo;
+-typedef struct {
++typedef struct VkPipelineShaderStageCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineShaderStageCreateFlags            flags;
+-    VkShader                                    shader;
++    VkShaderStageFlagBits                       stage;
++    VkShaderModule                              module;
++    const char*                                 pName;
+     const VkSpecializationInfo*                 pSpecializationInfo;
+ } VkPipelineShaderStageCreateInfo;
+-typedef struct {
++typedef struct VkVertexInputBindingDescription {
+     uint32_t                                    binding;
+     uint32_t                                    stride;
+     VkVertexInputRate                           inputRate;
+ } VkVertexInputBindingDescription;
+-typedef struct {
++typedef struct VkVertexInputAttributeDescription {
+     uint32_t                                    location;
+     uint32_t                                    binding;
+     VkFormat                                    format;
+     uint32_t                                    offset;
+ } VkVertexInputAttributeDescription;
+-typedef struct {
++typedef struct VkPipelineVertexInputStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineVertexInputStateCreateFlags       flags;
+@@ -1638,7 +1626,7 @@ typedef struct {
+     const VkVertexInputAttributeDescription*    pVertexAttributeDescriptions;
+ } VkPipelineVertexInputStateCreateInfo;
+-typedef struct {
++typedef struct VkPipelineInputAssemblyStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineInputAssemblyStateCreateFlags     flags;
+@@ -1646,14 +1634,14 @@ typedef struct {
+     VkBool32                                    primitiveRestartEnable;
+ } VkPipelineInputAssemblyStateCreateInfo;
+-typedef struct {
++typedef struct VkPipelineTessellationStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineTesselationStateCreateFlags       flags;
+     uint32_t                                    patchControlPoints;
+ } VkPipelineTessellationStateCreateInfo;
+-typedef struct {
++typedef struct VkViewport {
+     float                                       x;
+     float                                       y;
+     float                                       width;
+@@ -1662,22 +1650,22 @@ typedef struct {
+     float                                       maxDepth;
+ } VkViewport;
+-typedef struct {
++typedef struct VkOffset2D {
+     int32_t                                     x;
+     int32_t                                     y;
+ } VkOffset2D;
+-typedef struct {
++typedef struct VkExtent2D {
+     int32_t                                     width;
+     int32_t                                     height;
+ } VkExtent2D;
+-typedef struct {
++typedef struct VkRect2D {
+     VkOffset2D                                  offset;
+     VkExtent2D                                  extent;
+ } VkRect2D;
+-typedef struct {
++typedef struct VkPipelineViewportStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineViewportStateCreateFlags          flags;
+@@ -1687,7 +1675,7 @@ typedef struct {
+     const VkRect2D*                             pScissors;
+ } VkPipelineViewportStateCreateInfo;
+-typedef struct {
++typedef struct VkPipelineRasterizationStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineRasterizationStateCreateFlags     flags;
+@@ -1703,7 +1691,7 @@ typedef struct {
+     float                                       lineWidth;
+ } VkPipelineRasterizationStateCreateInfo;
+-typedef struct {
++typedef struct VkPipelineMultisampleStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineMultisampleStateCreateFlags       flags;
+@@ -1715,7 +1703,7 @@ typedef struct {
+     VkBool32                                    alphaToOneEnable;
+ } VkPipelineMultisampleStateCreateInfo;
+-typedef struct {
++typedef struct VkStencilOpState {
+     VkStencilOp                                 failOp;
+     VkStencilOp                                 passOp;
+     VkStencilOp                                 depthFailOp;
+@@ -1725,7 +1713,7 @@ typedef struct {
+     uint32_t                                    reference;
+ } VkStencilOpState;
+-typedef struct {
++typedef struct VkPipelineDepthStencilStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineDepthStencilStateCreateFlags      flags;
+@@ -1740,7 +1728,7 @@ typedef struct {
+     float                                       maxDepthBounds;
+ } VkPipelineDepthStencilStateCreateInfo;
+-typedef struct {
++typedef struct VkPipelineColorBlendAttachmentState {
+     VkBool32                                    blendEnable;
+     VkBlendFactor                               srcColorBlendFactor;
+     VkBlendFactor                               dstColorBlendFactor;
+@@ -1751,7 +1739,7 @@ typedef struct {
+     VkColorComponentFlags                       colorWriteMask;
+ } VkPipelineColorBlendAttachmentState;
+-typedef struct {
++typedef struct VkPipelineColorBlendStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineColorBlendStateCreateFlags        flags;
+@@ -1762,7 +1750,7 @@ typedef struct {
+     float                                       blendConstants[4];
+ } VkPipelineColorBlendStateCreateInfo;
+-typedef struct {
++typedef struct VkPipelineDynamicStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineDynamicStateCreateFlags           flags;
+@@ -1770,7 +1758,7 @@ typedef struct {
+     const VkDynamicState*                       pDynamicStates;
+ } VkPipelineDynamicStateCreateInfo;
+-typedef struct {
++typedef struct VkGraphicsPipelineCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineCreateFlags                       flags;
+@@ -1792,7 +1780,7 @@ typedef struct {
+     int32_t                                     basePipelineIndex;
+ } VkGraphicsPipelineCreateInfo;
+-typedef struct {
++typedef struct VkComputePipelineCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineCreateFlags                       flags;
+@@ -1802,13 +1790,13 @@ typedef struct {
+     int32_t                                     basePipelineIndex;
+ } VkComputePipelineCreateInfo;
+-typedef struct {
++typedef struct VkPushConstantRange {
+     VkShaderStageFlags                          stageFlags;
+     uint32_t                                    offset;
+     uint32_t                                    size;
+ } VkPushConstantRange;
+-typedef struct {
++typedef struct VkPipelineLayoutCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineLayoutCreateFlags                 flags;
+@@ -1818,7 +1806,7 @@ typedef struct {
+     const VkPushConstantRange*                  pPushConstantRanges;
+ } VkPipelineLayoutCreateInfo;
+-typedef struct {
++typedef struct VkSamplerCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkSamplerCreateFlags                        flags;
+@@ -1838,27 +1826,27 @@ typedef struct {
+     VkBool32                                    unnormalizedCoordinates;
+ } VkSamplerCreateInfo;
+-typedef struct {
++typedef struct VkDescriptorSetLayoutBinding {
+     VkDescriptorType                            descriptorType;
+     uint32_t                                    arraySize;
+     VkShaderStageFlags                          stageFlags;
+     const VkSampler*                            pImmutableSamplers;
+ } VkDescriptorSetLayoutBinding;
+-typedef struct {
++typedef struct VkDescriptorSetLayoutCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorSetLayoutCreateFlags            flags;
+     uint32_t                                    bindingCount;
+-    const VkDescriptorSetLayoutBinding*         pBindings;
++    const VkDescriptorSetLayoutBinding*         pBinding;
+ } VkDescriptorSetLayoutCreateInfo;
+-typedef struct {
++typedef struct VkDescriptorPoolSize {
+     VkDescriptorType                            type;
+     uint32_t                                    descriptorCount;
+ } VkDescriptorPoolSize;
+-typedef struct {
++typedef struct VkDescriptorPoolCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorPoolCreateFlags                 flags;
+@@ -1867,7 +1855,7 @@ typedef struct {
+     const VkDescriptorPoolSize*                 pPoolSizes;
+ } VkDescriptorPoolCreateInfo;
+-typedef struct {
++typedef struct VkDescriptorSetAllocateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorPool                            descriptorPool;
+@@ -1875,19 +1863,19 @@ typedef struct {
+     const VkDescriptorSetLayout*                pSetLayouts;
+ } VkDescriptorSetAllocateInfo;
+-typedef struct {
++typedef struct VkDescriptorImageInfo {
+     VkSampler                                   sampler;
+     VkImageView                                 imageView;
+     VkImageLayout                               imageLayout;
+ } VkDescriptorImageInfo;
+-typedef struct {
++typedef struct VkDescriptorBufferInfo {
+     VkBuffer                                    buffer;
+     VkDeviceSize                                offset;
+     VkDeviceSize                                range;
+ } VkDescriptorBufferInfo;
+-typedef struct {
++typedef struct VkWriteDescriptorSet {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorSet                             dstSet;
+@@ -1900,7 +1888,7 @@ typedef struct {
+     const VkBufferView*                         pTexelBufferView;
+ } VkWriteDescriptorSet;
+-typedef struct {
++typedef struct VkCopyDescriptorSet {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDescriptorSet                             srcSet;
+@@ -1912,7 +1900,7 @@ typedef struct {
+     uint32_t                                    descriptorCount;
+ } VkCopyDescriptorSet;
+-typedef struct {
++typedef struct VkFramebufferCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkFramebufferCreateFlags                    flags;
+@@ -1924,7 +1912,7 @@ typedef struct {
+     uint32_t                                    layers;
+ } VkFramebufferCreateInfo;
+-typedef struct {
++typedef struct VkAttachmentDescription {
+     VkAttachmentDescriptionFlags                flags;
+     VkFormat                                    format;
+     uint32_t                                    samples;
+@@ -1936,12 +1924,12 @@ typedef struct {
+     VkImageLayout                               finalLayout;
+ } VkAttachmentDescription;
+-typedef struct {
++typedef struct VkAttachmentReference {
+     uint32_t                                    attachment;
+     VkImageLayout                               layout;
+ } VkAttachmentReference;
+-typedef struct {
++typedef struct VkSubpassDescription {
+     VkSubpassDescriptionFlags                   flags;
+     VkPipelineBindPoint                         pipelineBindPoint;
+     uint32_t                                    inputAttachmentCount;
+@@ -1954,17 +1942,17 @@ typedef struct {
+     const VkAttachmentReference*                pPreserveAttachments;
+ } VkSubpassDescription;
+-typedef struct {
++typedef struct VkSubpassDependency {
+     uint32_t                                    srcSubpass;
+     uint32_t                                    dstSubpass;
+     VkPipelineStageFlags                        srcStageMask;
+     VkPipelineStageFlags                        dstStageMask;
+-    VkMemoryOutputFlags                         outputMask;
+-    VkMemoryInputFlags                          inputMask;
++    VkAccessFlags                               srcAccessMask;
++    VkAccessFlags                               dstAccessMask;
+     VkDependencyFlags                           dependencyFlags;
+ } VkSubpassDependency;
+-typedef struct {
++typedef struct VkRenderPassCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkRenderPassCreateFlags                     flags;
+@@ -1976,14 +1964,14 @@ typedef struct {
+     const VkSubpassDependency*                  pDependencies;
+ } VkRenderPassCreateInfo;
+-typedef struct {
++typedef struct VkCommandPoolCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkCommandPoolCreateFlags                    flags;
+     uint32_t                                    queueFamilyIndex;
+ } VkCommandPoolCreateInfo;
+-typedef struct {
++typedef struct VkCommandBufferAllocateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkCommandPool                               commandPool;
+@@ -1991,7 +1979,7 @@ typedef struct {
+     uint32_t                                    bufferCount;
+ } VkCommandBufferAllocateInfo;
+-typedef struct {
++typedef struct VkCommandBufferBeginInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkCommandBufferUsageFlags                   flags;
+@@ -2000,20 +1988,20 @@ typedef struct {
+     VkFramebuffer                               framebuffer;
+ } VkCommandBufferBeginInfo;
+-typedef struct {
++typedef struct VkBufferCopy {
+     VkDeviceSize                                srcOffset;
+     VkDeviceSize                                dstOffset;
+     VkDeviceSize                                size;
+ } VkBufferCopy;
+-typedef struct {
++typedef struct VkImageSubresourceLayers {
+     VkImageAspectFlags                          aspectMask;
+     uint32_t                                    mipLevel;
+     uint32_t                                    baseArrayLayer;
+     uint32_t                                    layerCount;
+ } VkImageSubresourceLayers;
+-typedef struct {
++typedef struct VkImageCopy {
+     VkImageSubresourceLayers                    srcSubresource;
+     VkOffset3D                                  srcOffset;
+     VkImageSubresourceLayers                    dstSubresource;
+@@ -2021,7 +2009,7 @@ typedef struct {
+     VkExtent3D                                  extent;
+ } VkImageCopy;
+-typedef struct {
++typedef struct VkImageBlit {
+     VkImageSubresourceLayers                    srcSubresource;
+     VkOffset3D                                  srcOffset;
+     VkExtent3D                                  srcExtent;
+@@ -2030,7 +2018,7 @@ typedef struct {
+     VkExtent3D                                  dstExtent;
+ } VkImageBlit;
+-typedef struct {
++typedef struct VkBufferImageCopy {
+     VkDeviceSize                                bufferOffset;
+     uint32_t                                    bufferRowLength;
+     uint32_t                                    bufferImageHeight;
+@@ -2039,35 +2027,35 @@ typedef struct {
+     VkExtent3D                                  imageExtent;
+ } VkBufferImageCopy;
+-typedef union {
++typedef union VkClearColorValue {
+     float                                       float32[4];
+     int32_t                                     int32[4];
+     uint32_t                                    uint32[4];
+ } VkClearColorValue;
+-typedef struct {
++typedef struct VkClearDepthStencilValue {
+     float                                       depth;
+     uint32_t                                    stencil;
+ } VkClearDepthStencilValue;
+-typedef union {
++typedef union VkClearValue {
+     VkClearColorValue                           color;
+     VkClearDepthStencilValue                    depthStencil;
+ } VkClearValue;
+-typedef struct {
++typedef struct VkClearAttachment {
+     VkImageAspectFlags                          aspectMask;
+     uint32_t                                    colorAttachment;
+     VkClearValue                                clearValue;
+ } VkClearAttachment;
+-typedef struct {
++typedef struct VkClearRect {
+     VkRect2D                                    rect;
+     uint32_t                                    baseArrayLayer;
+     uint32_t                                    layerCount;
+ } VkClearRect;
+-typedef struct {
++typedef struct VkImageResolve {
+     VkImageSubresourceLayers                    srcSubresource;
+     VkOffset3D                                  srcOffset;
+     VkImageSubresourceLayers                    dstSubresource;
+@@ -2075,7 +2063,7 @@ typedef struct {
+     VkExtent3D                                  extent;
+ } VkImageResolve;
+-typedef struct {
++typedef struct VkRenderPassBeginInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkRenderPass                                renderPass;
+@@ -2085,11 +2073,11 @@ typedef struct {
+     const VkClearValue*                         pClearValues;
+ } VkRenderPassBeginInfo;
+-typedef struct {
++typedef struct VkBufferMemoryBarrier {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkMemoryOutputFlags                         outputMask;
+-    VkMemoryInputFlags                          inputMask;
++    VkAccessFlags                               srcAccessMask;
++    VkAccessFlags                               dstAccessMask;
+     uint32_t                                    srcQueueFamilyIndex;
+     uint32_t                                    dstQueueFamilyIndex;
+     VkBuffer                                    buffer;
+@@ -2097,13 +2085,13 @@ typedef struct {
+     VkDeviceSize                                size;
+ } VkBufferMemoryBarrier;
+-typedef struct {
++typedef struct VkDispatchIndirectCommand {
+     uint32_t                                    x;
+     uint32_t                                    y;
+     uint32_t                                    z;
+ } VkDispatchIndirectCommand;
+-typedef struct {
++typedef struct VkDrawIndexedIndirectCommand {
+     uint32_t                                    indexCount;
+     uint32_t                                    instanceCount;
+     uint32_t                                    firstIndex;
+@@ -2111,18 +2099,18 @@ typedef struct {
+     uint32_t                                    firstInstance;
+ } VkDrawIndexedIndirectCommand;
+-typedef struct {
++typedef struct VkDrawIndirectCommand {
+     uint32_t                                    vertexCount;
+     uint32_t                                    instanceCount;
+     uint32_t                                    firstVertex;
+     uint32_t                                    firstInstance;
+ } VkDrawIndirectCommand;
+-typedef struct {
++typedef struct VkImageMemoryBarrier {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkMemoryOutputFlags                         outputMask;
+-    VkMemoryInputFlags                          inputMask;
++    VkAccessFlags                               srcAccessMask;
++    VkAccessFlags                               dstAccessMask;
+     VkImageLayout                               oldLayout;
+     VkImageLayout                               newLayout;
+     uint32_t                                    srcQueueFamilyIndex;
+@@ -2131,11 +2119,11 @@ typedef struct {
+     VkImageSubresourceRange                     subresourceRange;
+ } VkImageMemoryBarrier;
+-typedef struct {
++typedef struct VkMemoryBarrier {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+-    VkMemoryOutputFlags                         outputMask;
+-    VkMemoryInputFlags                          inputMask;
++    VkAccessFlags                               srcAccessMask;
++    VkAccessFlags                               dstAccessMask;
+ } VkMemoryBarrier;
+@@ -2200,8 +2188,6 @@ typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageVi
+ typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
+ typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShader* pShader);
+-typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+ typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+@@ -2606,17 +2592,6 @@ void VKAPI vkDestroyShaderModule(
+     VkShaderModule                              shaderModule,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateShader(
+-    VkDevice                                    device,
+-    const VkShaderCreateInfo*                   pCreateInfo,
+-    const VkAllocationCallbacks*                pAllocator,
+-    VkShader*                                   pShader);
+-
+-void VKAPI vkDestroyShader(
+-    VkDevice                                    device,
+-    VkShader                                    shader,
+-    const VkAllocationCallbacks*                pAllocator);
+-
+ VkResult VKAPI vkCreatePipelineCache(
+     VkDevice                                    device,
+     const VkPipelineCacheCreateInfo*            pCreateInfo,
+@@ -3079,16 +3054,16 @@ void VKAPI vkCmdExecuteCommands(
+     const VkCommandBuffer*                      pCommandBuffers);
+ #endif
+-#define vk_ext_khr_surface 1
++#define vk_khr_surface 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+-#define VK_EXT_KHR_SURFACE_REVISION       20
+-#define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER 1
+-#define VK_EXT_KHR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_surface"
++#define VK_KHR_SURFACE_REVISION           22
++#define VK_KHR_SURFACE_EXTENSION_NUMBER   1
++#define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
+ #define VK_ERROR_SURFACE_LOST_KHR         ((VkResult)(int)0xc0000400)
+-typedef enum {
++typedef enum VkSurfaceTransformKHR {
+     VK_SURFACE_TRANSFORM_NONE_KHR = 0,
+     VK_SURFACE_TRANSFORM_ROT90_KHR = 1,
+     VK_SURFACE_TRANSFORM_ROT180_KHR = 2,
+@@ -3104,7 +3079,7 @@ typedef enum {
+     VK_SURFACE_TRANSFORM_MAX_ENUM = 0x7FFFFFFF
+ } VkSurfaceTransformKHR;
+-typedef enum {
++typedef enum VkColorSpaceKHR {
+     VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0,
+     VK_COLORSPACE_BEGIN_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+     VK_COLORSPACE_END_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+@@ -3112,7 +3087,7 @@ typedef enum {
+     VK_COLORSPACE_MAX_ENUM = 0x7FFFFFFF
+ } VkColorSpaceKHR;
+-typedef enum {
++typedef enum VkPresentModeKHR {
+     VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
+     VK_PRESENT_MODE_MAILBOX_KHR = 1,
+     VK_PRESENT_MODE_FIFO_KHR = 2,
+@@ -3124,7 +3099,7 @@ typedef enum {
+ } VkPresentModeKHR;
+-typedef enum {
++typedef enum VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
+     VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
+     VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
+@@ -3137,7 +3112,7 @@ typedef enum {
+ } VkSurfaceTransformFlagBitsKHR;
+ typedef VkFlags VkSurfaceTransformFlagsKHR;
+-typedef enum {
++typedef enum VkCompositeAlphaFlagBitsKHR {
+     VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+     VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
+     VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
+@@ -3145,7 +3120,7 @@ typedef enum {
+ } VkCompositeAlphaFlagBitsKHR;
+ typedef VkFlags VkCompositeAlphaFlagsKHR;
+-typedef struct {
++typedef struct VkSurfaceCapabilitiesKHR {
+     uint32_t                                    minImageCount;
+     uint32_t                                    maxImageCount;
+     VkExtent2D                                  currentExtent;
+@@ -3158,7 +3133,7 @@ typedef struct {
+     VkImageUsageFlags                           supportedUsageFlags;
+ } VkSurfaceCapabilitiesKHR;
+-typedef struct {
++typedef struct VkSurfaceFormatKHR {
+     VkFormat                                    format;
+     VkColorSpaceKHR                             colorSpace;
+ } VkSurfaceFormatKHR;
+@@ -3199,19 +3174,19 @@ VkResult VKAPI vkGetPhysicalDeviceSurfacePresentModesKHR(
+     VkPresentModeKHR*                           pPresentModes);
+ #endif
+-#define vk_ext_khr_swapchain 1
++#define vk_khr_swapchain 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+-#define VK_EXT_KHR_SWAPCHAIN_REVISION     62
+-#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+-#define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
++#define VK_KHR_SWAPCHAIN_REVISION         64
++#define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
++#define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
+ #define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+ #define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0000801)
+ #define VK_IMAGE_LAYOUT_PRESENT_SRC_KHR   ((VkImageLayout)(int)0xc0000802)
+ #define VK_SUBOPTIMAL_KHR                 ((VkResult)(int)0x40000403)
+ #define VK_ERROR_OUT_OF_DATE_KHR          ((VkResult)(int)0xc0000804)
+-typedef struct {
++typedef struct VkSwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     VkSurfaceKHR                                surface;
+@@ -3231,7 +3206,7 @@ typedef struct {
+     VkBool32                                    clipped;
+ } VkSwapchainCreateInfoKHR;
+-typedef struct {
++typedef struct VkPresentInfoKHR {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     uint32_t                                    waitSemaphoreCount;
+@@ -3277,25 +3252,25 @@ VkResult VKAPI vkQueuePresentKHR(
+     VkPresentInfoKHR*                            pPresentInfo);
+ #endif
+-#define vk_ext_khr_display 1
++#define vk_khr_display 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+-#define VK_EXT_KHR_DISPLAY_REVISION       17
+-#define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 3
+-#define VK_EXT_KHR_DISPLAY_EXTENSION_NAME "VK_EXT_KHR_display"
++#define VK_KHR_DISPLAY_REVISION           18
++#define VK_KHR_DISPLAY_EXTENSION_NUMBER   3
++#define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
+ #define VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c00)
+ #define VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c01)
+-typedef enum {
++typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+     VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000001,
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000002,
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000004,
+ } VkDisplayPlaneAlphaFlagBitsKHR;
+ typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+-typedef struct {
++typedef struct VkDisplayPropertiesKHR {
+     VkDisplayKHR                                display;
+     const char*                                 displayName;
+     VkExtent2D                                  physicalDimensions;
+@@ -3305,23 +3280,23 @@ typedef struct {
+     VkBool32                                    persistentContent;
+ } VkDisplayPropertiesKHR;
+-typedef struct {
++typedef struct VkDisplayModeParametersKHR {
+     VkExtent2D                                  visibleRegion;
+     uint32_t                                    refreshRate;
+ } VkDisplayModeParametersKHR;
+-typedef struct {
++typedef struct VkDisplayModePropertiesKHR {
+     VkDisplayModeKHR                            displayMode;
+     VkDisplayModeParametersKHR                  parameters;
+ } VkDisplayModePropertiesKHR;
+-typedef struct {
++typedef struct VkDisplayModeCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     VkDisplayModeParametersKHR                  parameters;
+ } VkDisplayModeCreateInfoKHR;
+-typedef struct {
++typedef struct VkDisplayPlaneCapabilitiesKHR {
+     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha;
+     VkOffset2D                                  minSrcPosition;
+     VkOffset2D                                  maxSrcPosition;
+@@ -3333,12 +3308,12 @@ typedef struct {
+     VkExtent2D                                  maxDstExtent;
+ } VkDisplayPlaneCapabilitiesKHR;
+-typedef struct {
++typedef struct VkDisplayPlanePropertiesKHR {
+     VkDisplayKHR                                currentDisplay;
+     uint32_t                                    currentStackIndex;
+ } VkDisplayPlanePropertiesKHR;
+-typedef struct {
++typedef struct VkDisplaySurfaceCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     VkDisplayModeKHR                            displayMode;
+@@ -3399,21 +3374,21 @@ VkResult VKAPI vkCreateDisplayPlaneSurfaceKHR(
+     VkSurfaceKHR*                               pSurface);
+ #endif
+-#define vk_ext_khr_display_swapchain 1
+-#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_REVISION 6
+-#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+-#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_display_swapchain"
++#define vk_khr_display_swapchain 1
++#define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 7
++#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
++#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+ #define VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0001000)
+ #define VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0001001)
+ #define VK_ERROR_INCOMPATIBLE_DISPLAY_KHR ((VkResult)(int)0xc0001002)
+-typedef struct {
++typedef struct VkDisplaySwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo;
+ } VkDisplaySwapchainCreateInfoKHR;
+-typedef struct {
++typedef struct VkDisplayPresentInfoKHR {
+     VkStructureType                             sType;
+     const void*                                   pNext;
+     VkRect2D                                    srcRect;
+@@ -3424,12 +3399,12 @@ typedef struct {
+ #ifdef VK_USE_PLATFORM_XLIB_KHR
+-#define vk_ext_khr_xlib_surface 1
++#define vk_khr_xlib_surface 1
+ #include <X11/Xlib.h>
+-#define VK_EXT_KHR_XLIB_SURFACE_REVISION  3
+-#define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
+-#define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NAME "vk_ext_khr_xlib_surface"
++#define VK_KHR_XLIB_SURFACE_REVISION      4
++#define VK_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
++#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "vk_khr_xlib_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+@@ -3450,12 +3425,12 @@ VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_XLIB_KHR */
+ #ifdef VK_USE_PLATFORM_XCB_KHR
+-#define vk_ext_khr_xcb_surface 1
++#define vk_khr_xcb_surface 1
+ #include <xcb/xcb.h>
+-#define VK_EXT_KHR_XCB_SURFACE_REVISION   3
+-#define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
+-#define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NAME "VK_EXT_KHR_xcb_surface"
++#define VK_KHR_XCB_SURFACE_REVISION       4
++#define VK_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
++#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
+@@ -3476,12 +3451,12 @@ VkBool32 VKAPI vkGetPhysicalDeviceXcbPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_XCB_KHR */
+ #ifdef VK_USE_PLATFORM_WAYLAND_KHR
+-#define vk_ext_khr_wayland_surface 1
++#define vk_khr_wayland_surface 1
+ #include <wayland-client.h>
+-#define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 2
+-#define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
+-#define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_EXT_KHR_wayland_surface"
++#define VK_KHR_WAYLAND_SURFACE_REVISION   3
++#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
++#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
+@@ -3501,12 +3476,12 @@ VkBool32 VKAPI vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
+ #ifdef VK_USE_PLATFORM_MIR_KHR
+-#define vk_ext_khr_mir_surface 1
++#define vk_khr_mir_surface 1
+ #include <mir_toolkit/client_types.h>
+-#define VK_EXT_KHR_MIR_SURFACE_REVISION   2
+-#define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
+-#define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_mir_surface"
++#define VK_KHR_MIR_SURFACE_REVISION       3
++#define VK_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
++#define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
+@@ -3526,12 +3501,12 @@ VkBool32 VKAPI vkGetPhysicalDeviceMirPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_MIR_KHR */
+ #ifdef VK_USE_PLATFORM_ANDROID_KHR
+-#define vk_ext_khr_android_surface 1
++#define vk_khr_android_surface 1
+ #include <android/native_window.h>
+-#define VK_EXT_KHR_ANDROID_SURFACE_REVISION 1
+-#define VK_EXT_KHR_ANDROID_SURFACE_EXTENSION_NUMBER 9
+-#define VK_EXT_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_EXT_KHR_android_surface"
++#define VK_KHR_ANDROID_SURFACE_REVISION   2
++#define VK_KHR_ANDROID_SURFACE_EXTENSION_NUMBER 9
++#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
+ #define VK_ERROR_INVALID_ANDROID_WINDOW_KHR ((VkResult)(int)0xc0002400)
+ #define VK_ERROR_ANDROID_WINDOW_IN_USE_KHR ((VkResult)(int)0xc0002401)
+@@ -3546,12 +3521,12 @@ VkResult VKAPI vkCreateAndroidSurfaceKHR(
+ #endif /* VK_USE_PLATFORM_ANDROID_KHR */
+ #ifdef VK_USE_PLATFORM_WIN32_KHR
+-#define vk_ext_khr_win32_surface 1
++#define vk_khr_win32_surface 1
+ #include <windows.h>
+-#define VK_EXT_KHR_WIN32_SURFACE_REVISION 2
+-#define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
+-#define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_EXT_KHR_win32_surface"
++#define VK_KHR_WIN32_SURFACE_REVISION     3
++#define VK_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
++#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 2b7faa9..9037e17 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -347,16 +347,6 @@ void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const V
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShader* pShader) {
+-    return GetVtbl(device).CreateShader(device, pCreateInfo, pAllocator, pShader);
+-}
+-
+-__attribute__((visibility("default")))
+-void vkDestroyShader(VkDevice device, VkShader shader, const VkAllocationCallbacks* pAllocator) {
+-    GetVtbl(device).DestroyShader(device, shader, pAllocator);
+-}
+-
+-__attribute__((visibility("default")))
+ VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) {
+     return GetVtbl(device).CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
+ }
+diff --git a/vulkan/libvulkan/entry.cpp.tmpl b/vulkan/libvulkan/entry.cpp.tmpl
+index 5aed3df..712558b 100644
+--- a/vulkan/libvulkan/entry.cpp.tmpl
++++ b/vulkan/libvulkan/entry.cpp.tmpl
+@@ -94,9 +94,9 @@ namespace {
+   {{$ext := GetAnnotation $ "extension"}}
+   {{if $ext}}
+     {{$extval := index $ext.Arguments 0}}
+-    {{if      eq $extval "VK_EXT_KHR_surface"}}true
+-    {{else if eq $extval "VK_EXT_KHR_swapchain"}}true
+-    {{else if eq $extval "VK_EXT_KHR_android_surface"}}true{{end}}
++    {{if      eq $extval "VK_KHR_surface"}}true
++    {{else if eq $extval "VK_KHR_swapchain"}}true
++    {{else if eq $extval "VK_KHR_android_surface"}}true{{end}}
+   {{else}}true{{end}}
+ {{end}}
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
+index f6a6510..7f1f54e 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp
++++ b/vulkan/libvulkan/get_proc_addr.cpp
+@@ -142,7 +142,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCreateRenderPass)},
+     {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSampler)},
+     {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
+-    {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
+     {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
+     {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR)},
+     {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
+@@ -163,7 +162,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyRenderPass)},
+     {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySampler)},
+     {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySemaphore)},
+-    {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShader)},
+     {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShaderModule)},
+     {"vkDestroySwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySwapchainKHR)},
+     {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
+@@ -299,7 +297,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkCreateRenderPass", offsetof(DeviceVtbl, CreateRenderPass)},
+     {"vkCreateSampler", offsetof(DeviceVtbl, CreateSampler)},
+     {"vkCreateSemaphore", offsetof(DeviceVtbl, CreateSemaphore)},
+-    {"vkCreateShader", offsetof(DeviceVtbl, CreateShader)},
+     {"vkCreateShaderModule", offsetof(DeviceVtbl, CreateShaderModule)},
+     {"vkCreateSwapchainKHR", offsetof(DeviceVtbl, CreateSwapchainKHR)},
+     {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
+@@ -320,7 +317,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
+     {"vkDestroyRenderPass", offsetof(DeviceVtbl, DestroyRenderPass)},
+     {"vkDestroySampler", offsetof(DeviceVtbl, DestroySampler)},
+     {"vkDestroySemaphore", offsetof(DeviceVtbl, DestroySemaphore)},
+-    {"vkDestroyShader", offsetof(DeviceVtbl, DestroyShader)},
+     {"vkDestroyShaderModule", offsetof(DeviceVtbl, DestroyShaderModule)},
+     {"vkDestroySwapchainKHR", offsetof(DeviceVtbl, DestroySwapchainKHR)},
+     {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
+@@ -725,16 +721,6 @@ bool LoadDeviceVtbl(VkDevice device,
+         ALOGE("missing device proc: %s", "vkDestroyShaderModule");
+         success = false;
+     }
+-    vtbl.CreateShader = reinterpret_cast<PFN_vkCreateShader>(get_proc_addr(device, "vkCreateShader"));
+-    if (UNLIKELY(!vtbl.CreateShader)) {
+-        ALOGE("missing device proc: %s", "vkCreateShader");
+-        success = false;
+-    }
+-    vtbl.DestroyShader = reinterpret_cast<PFN_vkDestroyShader>(get_proc_addr(device, "vkDestroyShader"));
+-    if (UNLIKELY(!vtbl.DestroyShader)) {
+-        ALOGE("missing device proc: %s", "vkDestroyShader");
+-        success = false;
+-    }
+     vtbl.CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(get_proc_addr(device, "vkCreatePipelineCache"));
+     if (UNLIKELY(!vtbl.CreatePipelineCache)) {
+         ALOGE("missing device proc: %s", "vkCreatePipelineCache");
+@@ -1166,7 +1152,7 @@ bool LoadDeviceVtbl(VkDevice device,
+     vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
+     if (!((!vtbl.AcquireImageANDROID && !vtbl.QueueSignalReleaseImageANDROID && vtbl.ImportNativeFenceANDROID && vtbl.QueueSignalNativeFenceANDROID) ||
+     (vtbl.AcquireImageANDROID && vtbl.QueueSignalReleaseImageANDROID && !vtbl.ImportNativeFenceANDROID && !vtbl.QueueSignalNativeFenceANDROID))) {
+-        ALOGE("driver doesn't support exactly one of old- or new-style VK_EXT_ANDROID_native_buffer commands");
++        ALOGE("driver doesn't support exactly one of old- or new-style VK_ANDROID_native_buffer commands");
+         success = false;
+     }
+     // clang-format on
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp.tmpl b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+index 217647f..aad177d 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp.tmpl
++++ b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+@@ -255,7 +255,7 @@ bool LoadDeviceVtbl(VkDevice device,
+     vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
+     if (!((!vtbl.AcquireImageANDROID && !vtbl.QueueSignalReleaseImageANDROID && vtbl.ImportNativeFenceANDROID && vtbl.QueueSignalNativeFenceANDROID) ||
+           (vtbl.AcquireImageANDROID && vtbl.QueueSignalReleaseImageANDROID && !vtbl.ImportNativeFenceANDROID && !vtbl.QueueSignalNativeFenceANDROID))) {
+-        ALOGE("driver doesn't support exactly one of old- or new-style VK_EXT_ANDROID_native_buffer commands");
++        ALOGE("driver doesn't support exactly one of old- or new-style VK_ANDROID_native_buffer commands");
+         success = false;
+     }
+     // clang-format on
+@@ -277,13 +277,13 @@ bool LoadDeviceVtbl(VkDevice device,
+ */}}
+ {{define "IsUnsupportedExtension"}}
+   {{$ext := index $.Arguments 0}}
+-  {{     if eq $ext "VK_EXT_KHR_display"}}true
+-  {{else if eq $ext "VK_EXT_KHR_display_swapchain"}}true
+-  {{else if eq $ext "VK_EXT_KHR_xlib_surface"}}true
+-  {{else if eq $ext "VK_EXT_KHR_xcb_surface"}}true
+-  {{else if eq $ext "VK_EXT_KHR_wayland_surface"}}true
+-  {{else if eq $ext "VK_EXT_KHR_mir_surface"}}true
+-  {{else if eq $ext "VK_EXT_KHR_win32_surface"}}true
++  {{     if eq $ext "VK_KHR_display"}}true
++  {{else if eq $ext "VK_KHR_display_swapchain"}}true
++  {{else if eq $ext "VK_KHR_xlib_surface"}}true
++  {{else if eq $ext "VK_KHR_xcb_surface"}}true
++  {{else if eq $ext "VK_KHR_wayland_surface"}}true
++  {{else if eq $ext "VK_KHR_mir_surface"}}true
++  {{else if eq $ext "VK_KHR_win32_surface"}}true
+   {{end}}
+ {{end}}
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index bf71c8f..5765d65 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -20,7 +20,7 @@
+ #define VK_PROTOTYPES
+ #define VK_USE_PLATFORM_ANDROID_KHR
+ #include <vulkan/vulkan.h>
+-#include <vulkan/vk_ext_android_native_buffer.h>
++#include <vulkan/vk_android_native_buffer.h>
+ namespace vulkan {
+@@ -105,8 +105,6 @@ struct DeviceVtbl {
+     PFN_vkDestroyImageView DestroyImageView;
+     PFN_vkCreateShaderModule CreateShaderModule;
+     PFN_vkDestroyShaderModule DestroyShaderModule;
+-    PFN_vkCreateShader CreateShader;
+-    PFN_vkDestroyShader DestroyShader;
+     PFN_vkCreatePipelineCache CreatePipelineCache;
+     PFN_vkDestroyPipelineCache DestroyPipelineCache;
+     PFN_vkGetPipelineCacheData GetPipelineCacheData;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 85d018b..e75eb3a 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -81,7 +81,6 @@ enum Enum {
+     kRenderPass,
+     kSampler,
+     kSemaphore,
+-    kShader,
+     kShaderModule,
+     kNumTypes
+@@ -705,14 +704,6 @@ VkResult CreateSemaphore(VkDevice device,
+     return VK_SUCCESS;
+ }
+-VkResult CreateShader(VkDevice device,
+-                      const VkShaderCreateInfo*,
+-                      const VkAllocationCallbacks* /*allocator*/,
+-                      VkShader* shader) {
+-    *shader = AllocHandle(device, HandleType::kShader);
+-    return VK_SUCCESS;
+-}
+-
+ VkResult CreateShaderModule(VkDevice device,
+                             const VkShaderModuleCreateInfo*,
+                             const VkAllocationCallbacks* /*allocator*/,
+@@ -884,9 +875,6 @@ void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocation
+ void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator) {
+ }
+-void DestroyShader(VkDevice device, VkShader shader, const VkAllocationCallbacks* allocator) {
+-}
+-
+ void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator) {
+ }
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 91b8d34..6d14e57 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -19,7 +19,7 @@
+ #define VK_PROTOTYPES
+ #include <vulkan/vulkan.h>
+-#include <vulkan/vk_ext_android_native_buffer.h>
++#include <vulkan/vk_android_native_buffer.h>
+ namespace null_driver {
+@@ -87,8 +87,6 @@ VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateIn
+ void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* allocator);
+ VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkShaderModule* pShaderModule);
+ void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator);
+-VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkShader* pShader);
+-void DestroyShader(VkDevice device, VkShader shader, const VkAllocationCallbacks* allocator);
+ VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineCache* pPipelineCache);
+ void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator);
+ VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
+index 9b1b042..c732131 100644
+--- a/vulkan/nulldrv/null_driver_gen.cpp
++++ b/vulkan/nulldrv/null_driver_gen.cpp
+@@ -135,7 +135,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateRenderPass>(CreateRenderPass))},
+     {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateSampler>(CreateSampler))},
+     {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateSemaphore>(CreateSemaphore))},
+-    {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateShader>(CreateShader))},
+     {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkCreateShaderModule>(CreateShaderModule))},
+     {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyBuffer>(DestroyBuffer))},
+     {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyBufferView>(DestroyBufferView))},
+@@ -155,7 +154,6 @@ const NameProcEntry kDeviceProcTbl[] = {
+     {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyRenderPass>(DestroyRenderPass))},
+     {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroySampler>(DestroySampler))},
+     {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroySemaphore>(DestroySemaphore))},
+-    {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyShader>(DestroyShader))},
+     {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDestroyShaderModule>(DestroyShaderModule))},
+     {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkDeviceWaitIdle>(DeviceWaitIdle))},
+     {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkEndCommandBuffer>(EndCommandBuffer))},
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0022-vulkan-Update-from-version-0.200.0-to-0.202.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0022-vulkan-Update-from-version-0.200.0-to-0.202.0.patch
new file mode 100644 (file)
index 0000000..e73e345
--- /dev/null
@@ -0,0 +1,497 @@
+From 579a86538c32f14824b80de1d27382e85a4f24f2 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 00:55:29 -0800
+Subject: [PATCH 22/30] vulkan: Update from version 0.200.0 to 0.202.0
+
+Change-Id: If8eb49cd7e5516931f9900b691d6d32af2aa98b0
+---
+ vulkan/api/vulkan.api          | 45 +++++++++++++------------
+ vulkan/include/vulkan/vulkan.h | 74 +++++++++++++++++++++++-------------------
+ vulkan/libvulkan/entry.cpp     |  2 +-
+ vulkan/libvulkan/loader.cpp    |  2 +-
+ vulkan/libvulkan/swapchain.cpp |  2 +-
+ vulkan/nulldrv/null_driver.cpp |  2 +-
+ vulkan/nulldrv/null_driver.h   |  2 +-
+ 7 files changed, 71 insertions(+), 58 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 0296b0f..89ed617 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 200
++define VERSION_MINOR 202
+ define VERSION_PATCH 0
+ // API limits
+@@ -243,7 +243,7 @@ enum VkPrimitiveTopology {
+     VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY         = 0x00000007,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY      = 0x00000008,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY     = 0x00000009,
+-    VK_PRIMITIVE_TOPOLOGY_PATCH                             = 0x0000000a,
++    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST                        = 0x0000000a,
+ }
+ enum VkSharingMode {
+@@ -628,7 +628,7 @@ enum VkSubpassContents {
+     VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS           = 0x00000001,
+ }
+-@lastUnused(-8)
++@lastUnused(-10)
+ /// Error and return codes
+ enum VkResult {
+     // Return codes for successful operation execution (positive values)
+@@ -652,6 +652,7 @@ enum VkResult {
+     VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9,
+     VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+     VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
++    VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6,
+     //@extension("VK_KHR_surface")
+     VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
+@@ -942,8 +943,9 @@ bitfield VkImageAspectFlagBits {
+ /// Sparse memory bind flags
+ type VkFlags VkSparseMemoryBindFlags
+-//bitfield VkSparseMemoryBindFlagBits {
+-//}
++bitfield VkSparseMemoryBindFlagBits {
++    VK_SPARSE_MEMORY_BIND_METADATA_BIT                      = 0x00000001,
++}
+ /// Sparse image memory requirements flags
+ type VkFlags VkSparseImageFormatFlags
+@@ -971,8 +973,8 @@ bitfield VkPipelineStageFlagBits {
+     VK_PIPELINE_STAGE_TRANSFER_BIT                          = 0x00001000,  /// Transfer/copy operations
+     VK_PIPELINE_STAGE_HOST_BIT                              = 0x00002000,  /// Indicates host (CPU) is a source/sink of the dependency
+-    VK_PIPELINE_STAGE_ALL_GRAPHICS                          = 0x000007FF,  /// All stages of the graphics pipeline
+-    VK_PIPELINE_STAGE_ALL_GPU_COMMANDS                      = 0x00001FFF,  /// All graphics, compute, copy, and transition commands
++    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT                      = 0x00004000,  /// All stages of the graphics pipeline
++    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT                      = 0x00008000,  /// All graphics, compute, copy, and transition commands
+ }
+ /// Render pass attachment description flags
+@@ -1504,7 +1506,7 @@ class VkImageCreateInfo {
+     VkExtent3D                                  extent
+     u32                                         mipLevels
+     u32                                         arrayLayers
+-    u32                                         samples
++    VkSampleCountFlagBits                       samples
+     VkImageTiling                               tiling
+     VkImageUsageFlags                           usage                      /// Image usage flags
+     VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
+@@ -1637,6 +1639,7 @@ class VkShaderModuleCreateInfo {
+ }
+ class VkDescriptorSetLayoutBinding {
++    u32                                         binding
+     VkDescriptorType                            descriptorType     /// Type of the descriptors in this binding
+     u32                                         arraySize          /// Number of descriptors in this binding
+     VkShaderStageFlags                          stageFlags         /// Shader stages this binding is visible to
+@@ -1774,7 +1777,7 @@ class VkPipelineMultisampleStateCreateInfo {
+     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+     VkPipelineMultisampleStateCreateFlags       flags
+-    u32                                         rasterizationSamples       /// Number of samples used for rasterization
++    VkSampleCountFlagBits                       rasterizationSamples       /// Number of samples used for rasterization
+     VkBool32                                    sampleShadingEnable        /// optional (GL45)
+     f32                                         minSampleShading           /// optional (GL45)
+     const VkSampleMask*                         pSampleMask
+@@ -1966,7 +1969,7 @@ class VkClearAttachment {
+ class VkAttachmentDescription {
+     VkAttachmentDescriptionFlags                flags
+     VkFormat                                    format
+-    u32                                         samples
++    VkSampleCountFlagBits                       samples
+     VkAttachmentLoadOp                          loadOp          /// Load op for color or depth data
+     VkAttachmentStoreOp                         storeOp         /// Store op for color or depth data
+     VkAttachmentLoadOp                          stencilLoadOp   /// Load op for stencil data
+@@ -2090,13 +2093,13 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxImageDimension3D                       /// max 3D image dimension
+     u32                                         maxImageDimensionCube                     /// max cubemap image dimension
+     u32                                         maxImageArrayLayers                       /// max layers for image arrays
+-    VkSampleCountFlags                          sampleCounts                              /// sample counts supported for all images supporting rendering and sampling
+     u32                                         maxTexelBufferElements
+     u32                                         maxUniformBufferRange                     /// max uniform buffer size (bytes)
+     u32                                         maxStorageBufferRange                     /// max storage buffer size (bytes)
+     u32                                         maxPushConstantsSize                      /// max size of the push constants pool (bytes)
+     /// memory limits
+     u32                                         maxMemoryAllocationCount                  /// max number of device memory allocations supported
++    u32                                         maxSamplerAllocationCount
+     VkDeviceSize                                bufferImageGranularity                    /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
+     VkDeviceSize                                sparseAddressSpaceSize                    /// Total address space available for sparse allocations (bytes)
+     /// descriptor set limits
+@@ -2176,16 +2179,17 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxFramebufferWidth                       /// max width for a framebuffer
+     u32                                         maxFramebufferHeight                      /// max height for a framebuffer
+     u32                                         maxFramebufferLayers                      /// max layer count for a layered framebuffer
+-    u32                                         maxFramebufferColorSamples                /// max color sample count for a framebuffer
+-    u32                                         maxFramebufferDepthSamples                /// max depth sample count for a framebuffer
+-    u32                                         maxFramebufferStencilSamples              /// max stencil sample count for a framebuffer
++    VkSampleCountFlags                          framebufferColorSampleCounts
++    VkSampleCountFlags                          framebufferDepthSampleCounts
++    VkSampleCountFlags                          framebufferStencilSampleCounts
++    VkSampleCountFlags                          framebufferNoAttachmentSampleCounts
+     u32                                         maxColorAttachments                       /// max num of framebuffer color attachments
+-    u32                                         maxSampledImageColorSamples               /// max num of color samples for a non-integer sampled image
+-    u32                                         maxSampledImageDepthSamples               /// max num of depth samples for a sampled image
+-    u32                                         maxSampledImageStencilSamples             /// max num of stencil samples for a sampled image
+-    u32                                         maxSampledImageIntegerSamples             /// max num of samples supported for an integer image
+-    u32                                         maxStorageImageSamples                    /// max num of samples for a storage image
++    VkSampleCountFlags                          sampledImageColorSampleCounts
++    VkSampleCountFlags                          sampledImageIntegerSampleCounts
++    VkSampleCountFlags                          sampledImageDepthSampleCounts
++    VkSampleCountFlags                          sampledImageStencilSampleCounts
++    VkSampleCountFlags                          storageImageSampleCounts
+     u32                                         maxSampleMaskWords                        /// max num of sample mask words
+     f32                                         timestampPeriod
+@@ -2201,6 +2205,7 @@ class VkPhysicalDeviceLimits {
+     f32                                         pointSizeGranularity                      /// granularity of supported point sizes
+     f32                                         lineWidthGranularity                      /// granularity of supported line widths
+     VkBool32                                    strictLines
++    VkBool32                                    standardSampleLocations
+     VkDeviceSize                                optimalBufferCopyOffsetAlignment
+     VkDeviceSize                                optimalBufferCopyRowPitchAlignment
+@@ -2948,7 +2953,7 @@ cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkFormat                                    format,
+         VkImageType                                 type,
+-        u32                                         samples,
++        VkSampleCountFlagBits                       samples,
+         VkImageUsageFlags                           usage,
+         VkImageTiling                               tiling,
+         u32*                                        pPropertyCount,
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 2e66e27..ca00976 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 200, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 202, 0)
+ #define VK_NULL_HANDLE 0
+@@ -123,9 +123,10 @@ typedef enum VkResult {
+     VK_ERROR_EXTENSION_NOT_PRESENT = -7,
+     VK_ERROR_FEATURE_NOT_PRESENT = -8,
+     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+-    VK_RESULT_BEGIN_RANGE = VK_ERROR_INCOMPATIBLE_DRIVER,
++    VK_ERROR_TOO_MANY_OBJECTS = -10,
++    VK_RESULT_BEGIN_RANGE = VK_ERROR_TOO_MANY_OBJECTS,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+-    VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_INCOMPATIBLE_DRIVER + 1),
++    VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_TOO_MANY_OBJECTS + 1),
+     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+ } VkResult;
+@@ -499,10 +500,10 @@ typedef enum VkPrimitiveTopology {
+     VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
+     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
+-    VK_PRIMITIVE_TOPOLOGY_PATCH = 10,
++    VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
+     VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
+-    VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH,
+-    VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
++    VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
++    VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
+     VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
+ } VkPrimitiveTopology;
+@@ -838,6 +839,10 @@ typedef enum VkSparseImageFormatFlagBits {
+     VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
+ } VkSparseImageFormatFlagBits;
+ typedef VkFlags VkSparseImageFormatFlags;
++
++typedef enum VkSparseMemoryBindFlagBits {
++    VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
++} VkSparseMemoryBindFlagBits;
+ typedef VkFlags VkSparseMemoryBindFlags;
+ typedef enum VkFenceCreateFlagBits {
+@@ -973,8 +978,8 @@ typedef enum VkPipelineStageFlagBits {
+     VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
+     VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
+     VK_PIPELINE_STAGE_HOST_BIT = 0x00002000,
+-    VK_PIPELINE_STAGE_ALL_GRAPHICS = 0x000007FF,
+-    VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00001FFF,
++    VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00004000,
++    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00008000,
+ } VkPipelineStageFlagBits;
+ typedef VkFlags VkPipelineStageFlags;
+@@ -1183,12 +1188,12 @@ typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    maxImageDimension3D;
+     uint32_t                                    maxImageDimensionCube;
+     uint32_t                                    maxImageArrayLayers;
+-    VkSampleCountFlags                          sampleCounts;
+     uint32_t                                    maxTexelBufferElements;
+     uint32_t                                    maxUniformBufferRange;
+     uint32_t                                    maxStorageBufferRange;
+     uint32_t                                    maxPushConstantsSize;
+     uint32_t                                    maxMemoryAllocationCount;
++    uint32_t                                    maxSamplerAllocationCount;
+     VkDeviceSize                                bufferImageGranularity;
+     VkDeviceSize                                sparseAddressSpaceSize;
+     uint32_t                                    maxBoundDescriptorSets;
+@@ -1255,15 +1260,16 @@ typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    maxFramebufferWidth;
+     uint32_t                                    maxFramebufferHeight;
+     uint32_t                                    maxFramebufferLayers;
+-    uint32_t                                    maxFramebufferColorSamples;
+-    uint32_t                                    maxFramebufferDepthSamples;
+-    uint32_t                                    maxFramebufferStencilSamples;
++    VkSampleCountFlags                          framebufferColorSampleCounts;
++    VkSampleCountFlags                          framebufferDepthSampleCounts;
++    VkSampleCountFlags                          framebufferStencilSampleCounts;
++    VkSampleCountFlags                          framebufferNoAttachmentsSampleCounts;
+     uint32_t                                    maxColorAttachments;
+-    uint32_t                                    maxSampledImageColorSamples;
+-    uint32_t                                    maxSampledImageDepthSamples;
+-    uint32_t                                    maxSampledImageStencilSamples;
+-    uint32_t                                    maxSampledImageIntegerSamples;
+-    uint32_t                                    maxStorageImageSamples;
++    VkSampleCountFlags                          sampledImageColorSampleCounts;
++    VkSampleCountFlags                          sampledImageIntegerSampleCounts;
++    VkSampleCountFlags                          sampledImageDepthSampleCounts;
++    VkSampleCountFlags                          sampledImageStencilSampleCounts;
++    VkSampleCountFlags                          storageImageSampleCounts;
+     uint32_t                                    maxSampleMaskWords;
+     float                                       timestampPeriod;
+     uint32_t                                    maxClipDistances;
+@@ -1275,6 +1281,7 @@ typedef struct VkPhysicalDeviceLimits {
+     float                                       pointSizeGranularity;
+     float                                       lineWidthGranularity;
+     VkBool32                                    strictLines;
++    VkBool32                                    standardSampleLocations;
+     VkDeviceSize                                optimalBufferCopyOffsetAlignment;
+     VkDeviceSize                                optimalBufferCopyRowPitchAlignment;
+ } VkPhysicalDeviceLimits;
+@@ -1522,7 +1529,7 @@ typedef struct VkImageCreateInfo {
+     VkExtent3D                                  extent;
+     uint32_t                                    mipLevels;
+     uint32_t                                    arrayLayers;
+-    uint32_t                                    samples;
++    VkSampleCountFlagBits                       samples;
+     VkImageTiling                               tiling;
+     VkImageUsageFlags                           usage;
+     VkSharingMode                               sharingMode;
+@@ -1695,7 +1702,7 @@ typedef struct VkPipelineMultisampleStateCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkPipelineMultisampleStateCreateFlags       flags;
+-    uint32_t                                    rasterizationSamples;
++    VkSampleCountFlagBits                       rasterizationSamples;
+     VkBool32                                    sampleShadingEnable;
+     float                                       minSampleShading;
+     const VkSampleMask*                         pSampleMask;
+@@ -1827,6 +1834,7 @@ typedef struct VkSamplerCreateInfo {
+ } VkSamplerCreateInfo;
+ typedef struct VkDescriptorSetLayoutBinding {
++    uint32_t                                    binding;
+     VkDescriptorType                            descriptorType;
+     uint32_t                                    arraySize;
+     VkShaderStageFlags                          stageFlags;
+@@ -1915,7 +1923,7 @@ typedef struct VkFramebufferCreateInfo {
+ typedef struct VkAttachmentDescription {
+     VkAttachmentDescriptionFlags                flags;
+     VkFormat                                    format;
+-    uint32_t                                    samples;
++    VkSampleCountFlagBits                       samples;
+     VkAttachmentLoadOp                          loadOp;
+     VkAttachmentStoreOp                         storeOp;
+     VkAttachmentLoadOp                          stencilLoadOp;
+@@ -2160,7 +2168,7 @@ typedef VkResult (VKAPI *PFN_vkBindImageMemory)(VkDevice device, VkImage image,
+ typedef void (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+ typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
++typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+ typedef VkResult (VKAPI *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+ typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+ typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+@@ -2437,7 +2445,7 @@ void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkImageType                                 type,
+-    uint32_t                                    samples,
++    VkSampleCountFlagBits                       samples,
+     VkImageUsageFlags                           usage,
+     VkImageTiling                               tiling,
+     uint32_t*                                   pPropertyCount,
+@@ -3054,7 +3062,7 @@ void VKAPI vkCmdExecuteCommands(
+     const VkCommandBuffer*                      pCommandBuffers);
+ #endif
+-#define vk_khr_surface 1
++#define VK_KHR_surface 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+ #define VK_KHR_SURFACE_REVISION           22
+@@ -3174,7 +3182,7 @@ VkResult VKAPI vkGetPhysicalDeviceSurfacePresentModesKHR(
+     VkPresentModeKHR*                           pPresentModes);
+ #endif
+-#define vk_khr_swapchain 1
++#define VK_KHR_swapchain 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+ #define VK_KHR_SWAPCHAIN_REVISION         64
+@@ -3252,7 +3260,7 @@ VkResult VKAPI vkQueuePresentKHR(
+     VkPresentInfoKHR*                            pPresentInfo);
+ #endif
+-#define vk_khr_display 1
++#define VK_KHR_display 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+@@ -3374,7 +3382,7 @@ VkResult VKAPI vkCreateDisplayPlaneSurfaceKHR(
+     VkSurfaceKHR*                               pSurface);
+ #endif
+-#define vk_khr_display_swapchain 1
++#define VK_KHR_display_swapchain 1
+ #define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 7
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+@@ -3399,12 +3407,12 @@ typedef struct VkDisplayPresentInfoKHR {
+ #ifdef VK_USE_PLATFORM_XLIB_KHR
+-#define vk_khr_xlib_surface 1
++#define VK_KHR_xlib_surface 1
+ #include <X11/Xlib.h>
+ #define VK_KHR_XLIB_SURFACE_REVISION      4
+ #define VK_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
+-#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "vk_khr_xlib_surface"
++#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
+ typedef VkResult (VKAPI *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+@@ -3425,7 +3433,7 @@ VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_XLIB_KHR */
+ #ifdef VK_USE_PLATFORM_XCB_KHR
+-#define vk_khr_xcb_surface 1
++#define VK_KHR_xcb_surface 1
+ #include <xcb/xcb.h>
+ #define VK_KHR_XCB_SURFACE_REVISION       4
+@@ -3451,7 +3459,7 @@ VkBool32 VKAPI vkGetPhysicalDeviceXcbPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_XCB_KHR */
+ #ifdef VK_USE_PLATFORM_WAYLAND_KHR
+-#define vk_khr_wayland_surface 1
++#define VK_KHR_wayland_surface 1
+ #include <wayland-client.h>
+ #define VK_KHR_WAYLAND_SURFACE_REVISION   3
+@@ -3476,7 +3484,7 @@ VkBool32 VKAPI vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
+ #ifdef VK_USE_PLATFORM_MIR_KHR
+-#define vk_khr_mir_surface 1
++#define VK_KHR_mir_surface 1
+ #include <mir_toolkit/client_types.h>
+ #define VK_KHR_MIR_SURFACE_REVISION       3
+@@ -3501,7 +3509,7 @@ VkBool32 VKAPI vkGetPhysicalDeviceMirPresentationSupportKHR(
+ #endif /* VK_USE_PLATFORM_MIR_KHR */
+ #ifdef VK_USE_PLATFORM_ANDROID_KHR
+-#define vk_khr_android_surface 1
++#define VK_KHR_android_surface 1
+ #include <android/native_window.h>
+ #define VK_KHR_ANDROID_SURFACE_REVISION   2
+@@ -3521,7 +3529,7 @@ VkResult VKAPI vkCreateAndroidSurfaceKHR(
+ #endif /* VK_USE_PLATFORM_ANDROID_KHR */
+ #ifdef VK_USE_PLATFORM_WIN32_KHR
+-#define vk_khr_win32_surface 1
++#define VK_KHR_win32_surface 1
+ #include <windows.h>
+ #define VK_KHR_WIN32_SURFACE_REVISION     3
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 9037e17..0e01d4e 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -207,7 +207,7 @@ void vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) {
++void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
+ }
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index 246c37d..e0eddba 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -860,7 +860,7 @@ void GetPhysicalDeviceSparseImageFormatPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkFormat format,
+     VkImageType type,
+-    uint32_t samples,
++    VkSampleCountFlagBits samples,
+     VkImageUsageFlags usage,
+     VkImageTiling tiling,
+     uint32_t* properties_count,
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 5b35506..d93a80f 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -405,7 +405,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         .extent = {0, 0, 1},
+         .mipLevels = 1,
+         .arrayLayers = 1,
+-        .samples = 1,
++        .samples = VK_SAMPLE_COUNT_1_BIT,
+         .tiling = VK_IMAGE_TILING_OPTIMAL,
+         .usage = create_info->imageUsageFlags,
+         .flags = 0,
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index e75eb3a..8f0a0e5 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -808,7 +808,7 @@ void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t*
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
++void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 6d14e57..0ed9cd0 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -59,7 +59,7 @@ VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkD
+ void GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+ void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+ void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
++void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+ VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+ VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFence* pFence);
+ void DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* allocator);
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0023-vulkan-Update-from-version-0.202.0-to-0.203.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0023-vulkan-Update-from-version-0.202.0-to-0.203.0.patch
new file mode 100644 (file)
index 0000000..d05a728
--- /dev/null
@@ -0,0 +1,300 @@
+From 8fb824bebd02ae132ac846abbd225fde366f4798 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 01:03:10 -0800
+Subject: [PATCH 23/30] vulkan: Update from version 0.202.0 to 0.203.0
+
+Change-Id: I21a390bd57082194f6131b118ecd6c94874d2f7f
+---
+ vulkan/api/vulkan.api          | 10 +++++++---
+ vulkan/include/vulkan/vulkan.h | 30 ++++++++++++++++--------------
+ vulkan/libvulkan/entry.cpp     |  4 ++--
+ vulkan/libvulkan/loader.cpp    |  7 ++++---
+ vulkan/libvulkan/swapchain.cpp |  7 +++++++
+ vulkan/nulldrv/null_driver.cpp |  3 ++-
+ vulkan/nulldrv/null_driver.h   |  2 +-
+ 7 files changed, 39 insertions(+), 24 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 89ed617..3966f87 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 202
++define VERSION_MINOR 203
+ define VERSION_PATCH 0
+ // API limits
+@@ -49,7 +49,7 @@ define NULL_HANDLE 0
+ @extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER             1
+ @extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
+-@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 64
++@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 65
+ @extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
+ @extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
+@@ -653,6 +653,7 @@ enum VkResult {
+     VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+     VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
+     VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6,
++    VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5,
+     //@extension("VK_KHR_surface")
+     VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
+@@ -2317,6 +2318,7 @@ class VkPresentInfoKHR {
+     u32                                         swapchainCount
+     const VkSwapchainKHR*                       pSwapchains
+     const u32*                                  imageIndices
++    const VkResult*                             pResults
+ }
+ @extension("VK_KHR_display")
+@@ -2577,7 +2579,7 @@ cmd void vkGetPhysicalDeviceFormatProperties(
+     pFormatProperties[0] = formatProperties
+ }
+-cmd void vkGetPhysicalDeviceImageFormatProperties(
++cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
+         VkPhysicalDevice                            physicalDevice,
+         VkFormat                                    format,
+         VkImageType                                 type,
+@@ -2589,6 +2591,8 @@ cmd void vkGetPhysicalDeviceImageFormatProperties(
+     imageFormatProperties := ?
+     pImageFormatProperties[0] = imageFormatProperties
++
++    return ?
+ }
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index ca00976..21bb796 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,11 +41,11 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 202, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 203, 0)
+ #define VK_NULL_HANDLE 0
+-        
++
+ #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+@@ -56,7 +56,7 @@ extern "C" {
+ #else
+         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+ #endif
+-        
++
+ typedef uint32_t VkFlags;
+@@ -124,9 +124,10 @@ typedef enum VkResult {
+     VK_ERROR_FEATURE_NOT_PRESENT = -8,
+     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+     VK_ERROR_TOO_MANY_OBJECTS = -10,
+-    VK_RESULT_BEGIN_RANGE = VK_ERROR_TOO_MANY_OBJECTS,
++    VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
++    VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+-    VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_TOO_MANY_OBJECTS + 1),
++    VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
+     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
+ } VkResult;
+@@ -2140,7 +2141,7 @@ typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocat
+ typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
++typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+ typedef void (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+@@ -2297,7 +2298,7 @@ void VKAPI vkGetPhysicalDeviceFormatProperties(
+     VkFormat                                    format,
+     VkFormatProperties*                         pFormatProperties);
+-void VKAPI vkGetPhysicalDeviceImageFormatProperties(
++VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkImageType                                 type,
+@@ -3185,7 +3186,7 @@ VkResult VKAPI vkGetPhysicalDeviceSurfacePresentModesKHR(
+ #define VK_KHR_swapchain 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+-#define VK_KHR_SWAPCHAIN_REVISION         64
++#define VK_KHR_SWAPCHAIN_REVISION         65
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
+ #define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+@@ -3196,7 +3197,7 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+ typedef struct VkSwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+-    const void*                                   pNext;
++    const void*                                 pNext;
+     VkSurfaceKHR                                surface;
+     uint32_t                                    minImageCount;
+     VkFormat                                    imageFormat;
+@@ -3216,12 +3217,13 @@ typedef struct VkSwapchainCreateInfoKHR {
+ typedef struct VkPresentInfoKHR {
+     VkStructureType                             sType;
+-    const void*                                   pNext;
++    const void*                                 pNext;
+     uint32_t                                    waitSemaphoreCount;
+     const VkSemaphore*                          pWaitSemaphores;
+     uint32_t                                    swapchainCount;
+     const VkSwapchainKHR*                       pSwapchains;
+     const uint32_t*                             imageIndices;
++    VkResult*                                   pResults;
+ } VkPresentInfoKHR;
+@@ -3300,7 +3302,7 @@ typedef struct VkDisplayModePropertiesKHR {
+ typedef struct VkDisplayModeCreateInfoKHR {
+     VkStructureType                             sType;
+-    const void*                                   pNext;
++    const void*                                 pNext;
+     VkDisplayModeParametersKHR                  parameters;
+ } VkDisplayModeCreateInfoKHR;
+@@ -3323,7 +3325,7 @@ typedef struct VkDisplayPlanePropertiesKHR {
+ typedef struct VkDisplaySurfaceCreateInfoKHR {
+     VkStructureType                             sType;
+-    const void*                                   pNext;
++    const void*                                 pNext;
+     VkDisplayModeKHR                            displayMode;
+     uint32_t                                    planeIndex;
+     uint32_t                                    planeStackIndex;
+@@ -3392,13 +3394,13 @@ VkResult VKAPI vkCreateDisplayPlaneSurfaceKHR(
+ typedef struct VkDisplaySwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+-    const void*                                   pNext;
++    const void*                                 pNext;
+     const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo;
+ } VkDisplaySwapchainCreateInfoKHR;
+ typedef struct VkDisplayPresentInfoKHR {
+     VkStructureType                             sType;
+-    const void*                                   pNext;
++    const void*                                 pNext;
+     VkRect2D                                    srcRect;
+     VkRect2D                                    dstRect;
+     VkBool32                                    persistent;
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 0e01d4e..fffb3eb 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -92,8 +92,8 @@ void vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkForm
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
+-    GetVtbl(physicalDevice).GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
++VkResult vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
++    return GetVtbl(physicalDevice).GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
+ }
+ __attribute__((visibility("default")))
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index e0eddba..135f06d 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -698,7 +698,7 @@ void GetPhysicalDeviceFormatPropertiesBottom(VkPhysicalDevice pdev,
+         pdev, format, properties);
+ }
+-void GetPhysicalDeviceImageFormatPropertiesBottom(
++VkResult GetPhysicalDeviceImageFormatPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkFormat format,
+     VkImageType type,
+@@ -706,8 +706,9 @@ void GetPhysicalDeviceImageFormatPropertiesBottom(
+     VkImageUsageFlags usage,
+     VkImageCreateFlags flags,
+     VkImageFormatProperties* properties) {
+-    GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceImageFormatProperties(
+-        pdev, format, type, tiling, usage, flags, properties);
++    return GetVtbl(pdev)
++        ->instance->drv.vtbl.GetPhysicalDeviceImageFormatProperties(
++            pdev, format, type, tiling, usage, flags, properties);
+ }
+ void GetPhysicalDevicePropertiesBottom(VkPhysicalDevice pdev,
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index d93a80f..98faaef 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -631,6 +631,8 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+         }
+         if (result != VK_SUCCESS) {
+             ALOGE("QueueSignalReleaseImageANDROID failed: %d", result);
++            if (present_info->pResults)
++                present_info->pResults[sc] = result;
+             if (final_result == VK_SUCCESS)
+                 final_result = result;
+             // TODO(jessehall): What happens to the buffer here? Does the app
+@@ -645,6 +647,8 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+             // TODO(jessehall): What now? We should probably cancel the buffer,
+             // I guess?
+             ALOGE("queueBuffer failed: %s (%d)", strerror(-err), err);
++            if (present_info->pResults)
++                present_info->pResults[sc] = result;
+             if (final_result == VK_SUCCESS)
+                 final_result = VK_ERROR_INITIALIZATION_FAILED;
+             continue;
+@@ -655,6 +659,9 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+             img.dequeue_fence = -1;
+         }
+         img.dequeued = false;
++
++        if (present_info->pResults)
++            present_info->pResults[sc] = VK_SUCCESS;
+     }
+     return final_result;
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 8f0a0e5..316d27f 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -746,8 +746,9 @@ void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat
+     ALOGV("TODO: vk%s", __FUNCTION__);
+ }
+-void GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
++VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
+     ALOGV("TODO: vk%s", __FUNCTION__);
++    return VK_SUCCESS;
+ }
+ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 0ed9cd0..1a524ff 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -31,7 +31,7 @@ void DestroyInstance(VkInstance instance, const VkAllocationCallbacks* allocator
+ VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+ void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+ void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+-void GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
++VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+ void GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+ void GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+ void GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0024-vulkan-Update-from-version-0.203.0-to-0.204.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0024-vulkan-Update-from-version-0.203.0-to-0.204.0.patch
new file mode 100644 (file)
index 0000000..541cc49
--- /dev/null
@@ -0,0 +1,3365 @@
+From 5b17dda5e7ca170fd8743ae19152b1766c506436 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 11:27:32 -0800
+Subject: [PATCH 24/30] vulkan: Update from version 0.203.0 to 0.204.0
+
+Change-Id: I2de0935df66b0110b566ed2025c39e0c17b98f17
+---
+ vulkan/api/vulkan.api                            |   6 +-
+ vulkan/include/vulkan/vk_android_native_buffer.h |  20 +-
+ vulkan/include/vulkan/vk_debug_report_lunarg.h   |  16 +-
+ vulkan/include/vulkan/vk_platform.h              |  34 +-
+ vulkan/include/vulkan/vulkan.h                   | 676 ++++++++++++-----------
+ vulkan/libvulkan/entry.cpp                       | 296 +++++-----
+ vulkan/libvulkan/entry.cpp.tmpl                  |   4 +-
+ vulkan/libvulkan/loader.cpp                      |  41 +-
+ vulkan/libvulkan/loader.h                        |  73 +--
+ vulkan/libvulkan/swapchain.cpp                   |  11 +
+ vulkan/nulldrv/null_driver.cpp                   |   4 +
+ vulkan/nulldrv/null_driver.h                     | 278 +++++-----
+ 12 files changed, 764 insertions(+), 695 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 3966f87..c77a148 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 203
++define VERSION_MINOR 204
+ define VERSION_PATCH 0
+ // API limits
+@@ -2110,6 +2110,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxPerStageDescriptorStorageBuffers       /// max num of storage buffers allowed per-stage in a descriptor set
+     u32                                         maxPerStageDescriptorSampledImages        /// max num of sampled images allowed per-stage in a descriptor set
+     u32                                         maxPerStageDescriptorStorageImages        /// max num of storage images allowed per-stage in a descriptor set
++    u32                                         maxPerStageDescriptorInputAttachments
+     u32                                         maxDescriptorSetSamplers                  /// max num of samplers allowed in all stages in a descriptor set
+     u32                                         maxDescriptorSetUniformBuffers            /// max num of uniform buffers allowed in all stages in a descriptor set
+     u32                                         maxDescriptorSetUniformBuffersDynamic     /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
+@@ -2117,6 +2118,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxDescriptorSetStorageBuffersDynamic     /// max num of dynamic storage buffers allowed in all stages in a descriptor set
+     u32                                         maxDescriptorSetSampledImages             /// max num of sampled images allowed in all stages in a descriptor set
+     u32                                         maxDescriptorSetStorageImages             /// max num of storage images allowed in all stages in a descriptor set
++    u32                                         maxDescriptorSetInputAttachments
+     /// vertex stage limits
+     u32                                         maxVertexInputAttributes                  /// max num of vertex input attribute slots
+     u32                                         maxVertexInputBindings                    /// max num of vertex input binding slots
+@@ -2318,7 +2320,7 @@ class VkPresentInfoKHR {
+     u32                                         swapchainCount
+     const VkSwapchainKHR*                       pSwapchains
+     const u32*                                  imageIndices
+-    const VkResult*                             pResults
++    VkResult*                                   pResults
+ }
+ @extension("VK_KHR_display")
+diff --git a/vulkan/include/vulkan/vk_android_native_buffer.h b/vulkan/include/vulkan/vk_android_native_buffer.h
+index f1f2676..bf4641e 100644
+--- a/vulkan/include/vulkan/vk_android_native_buffer.h
++++ b/vulkan/include/vulkan/vk_android_native_buffer.h
+@@ -47,39 +47,39 @@ typedef struct {
+     int                         usage;
+ } VkNativeBufferANDROID;
+-typedef VkResult (VKAPI *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
+-typedef VkResult (VKAPI *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
+-typedef VkResult (VKAPI *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, VkImage image, int* pNativeFenceFd);
++typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
++typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
++typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, VkImage image, int* pNativeFenceFd);
+ // -- DEPRECATED --
+-typedef VkResult (VKAPI *PFN_vkImportNativeFenceANDROID)(VkDevice device, VkSemaphore semaphore, int nativeFenceFd);
+-typedef VkResult (VKAPI *PFN_vkQueueSignalNativeFenceANDROID)(VkQueue queue, int* pNativeFenceFd);
++typedef VkResult (VKAPI_PTR *PFN_vkImportNativeFenceANDROID)(VkDevice device, VkSemaphore semaphore, int nativeFenceFd);
++typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalNativeFenceANDROID)(VkQueue queue, int* pNativeFenceFd);
+ // ----------------
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkGetSwapchainGrallocUsageANDROID(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsageANDROID(
+     VkDevice            device,
+     VkFormat            format,
+     VkImageUsageFlags   imageUsage,
+     int*                grallocUsage
+ );
+-VkResult VKAPI vkAcquireImageANDROID(
++VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID(
+     VkDevice            device,
+     VkImage             image,
+     int                 nativeFenceFd,
+     VkSemaphore         semaphore
+ );
+-VkResult VKAPI vkQueueSignalReleaseImageANDROID(
++VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalReleaseImageANDROID(
+     VkQueue             queue,
+     VkImage             image,
+     int*                pNativeFenceFd
+ );
+ // -- DEPRECATED --
+-VkResult VKAPI vkImportNativeFenceANDROID(
++VKAPI_ATTR VkResult VKAPI_CALL vkImportNativeFenceANDROID(
+     VkDevice            device,
+     VkSemaphore         semaphore,
+     int                 nativeFenceFd
+ );
+-VkResult VKAPI vkQueueSignalNativeFenceANDROID(
++VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalNativeFenceANDROID(
+     VkQueue             queue,
+     int*                pNativeFenceFd
+ );
+diff --git a/vulkan/include/vulkan/vk_debug_report_lunarg.h b/vulkan/include/vulkan/vk_debug_report_lunarg.h
+index 286c354..58939c9 100644
+--- a/vulkan/include/vulkan/vk_debug_report_lunarg.h
++++ b/vulkan/include/vulkan/vk_debug_report_lunarg.h
+@@ -112,7 +112,7 @@ typedef enum _DEBUG_REPORT_ERROR
+ // ------------------------------------------------------------------------------------------------
+ // Vulkan function pointers
+-typedef VkBool32 (*PFN_vkDbgMsgCallback)(
++typedef VkBool32 (VKAPI_PTR *PFN_vkDbgMsgCallback)(
+     VkFlags                             msgFlags,
+     VkDbgObjectType                     objType,
+     uint64_t                            srcObject,
+@@ -125,25 +125,25 @@ typedef VkBool32 (*PFN_vkDbgMsgCallback)(
+ // ------------------------------------------------------------------------------------------------
+ // API functions
+-typedef VkResult (VKAPI *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, void* pUserData, VkDbgMsgCallback* pMsgCallback);
+-typedef VkResult (VKAPI *PFN_vkDbgDestroyMsgCallback)(VkInstance instance, VkDbgMsgCallback msgCallback);
++typedef VkResult (VKAPI_PTR *PFN_vkDbgCreateMsgCallback)(VkInstance instance, VkFlags msgFlags, const PFN_vkDbgMsgCallback pfnMsgCallback, void* pUserData, VkDbgMsgCallback* pMsgCallback);
++typedef VkResult (VKAPI_PTR *PFN_vkDbgDestroyMsgCallback)(VkInstance instance, VkDbgMsgCallback msgCallback);
+ #ifdef VK_PROTOTYPES
+ // DebugReport extension entrypoints
+-VkResult VKAPI vkDbgCreateMsgCallback(
++VKAPI_ATTR VkResult VKAPI_CALL vkDbgCreateMsgCallback(
+     VkInstance                          instance,
+     VkFlags                             msgFlags,
+     const PFN_vkDbgMsgCallback          pfnMsgCallback,
+     void*                               pUserData,
+     VkDbgMsgCallback*                   pMsgCallback);
+-VkResult VKAPI vkDbgDestroyMsgCallback(
++VKAPI_ATTR VkResult VKAPI_CALL vkDbgDestroyMsgCallback(
+     VkInstance                          instance,
+     VkDbgMsgCallback                    msgCallback);
+ // DebugReport utility callback functions
+-void VKAPI vkDbgStringCallback(
++VKAPI_ATTR void VKAPI_CALL vkDbgStringCallback(
+     VkFlags                             msgFlags,
+     VkDbgObjectType                     objType,
+     uint64_t                            srcObject,
+@@ -153,7 +153,7 @@ void VKAPI vkDbgStringCallback(
+     const char*                         pMsg,
+     void*                               pUserData);
+-void VKAPI vkDbgStdioCallback(
++VKAPI_ATTR void VKAPI_CALL vkDbgStdioCallback(
+     VkFlags                             msgFlags,
+     VkDbgObjectType                     objType,
+     uint64_t                            srcObject,
+@@ -163,7 +163,7 @@ void VKAPI vkDbgStdioCallback(
+     const char*                         pMsg,
+     void*                               pUserData);
+-void VKAPI vkDbgBreakCallback(
++VKAPI_ATTR void VKAPI_CALL vkDbgBreakCallback(
+     VkFlags                             msgFlags,
+     VkDbgObjectType                     objType,
+     uint64_t                            srcObject,
+diff --git a/vulkan/include/vulkan/vk_platform.h b/vulkan/include/vulkan/vk_platform.h
+index 4bc6a86..a53e725 100644
+--- a/vulkan/include/vulkan/vk_platform.h
++++ b/vulkan/include/vulkan/vk_platform.h
+@@ -39,12 +39,40 @@ extern "C"
+ ***************************************************************************************************
+ */
++/* Platform-specific calling convention macros.
++ *
++ * Platforms should define these so that Vulkan clients call Vulkan commands
++ * with the same calling conventions that the Vulkan implementation expects.
++ *
++ * VKAPI_ATTR - Placed before the return type in function declarations.
++ *              Useful for C++11 and GCC/Clang-style function attribute syntax.
++ * VKAPI_CALL - Placed after the return type in function declarations.
++ *              Useful for MSVC-style calling convention syntax.
++ * VKAPI_PTR  - Placed between the '(' and '*' in function pointer types.
++ *
++ * Function declaration:  VKAPI_ATTR void VKAPI_CALL vkCommand(void);
++ * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
++ */
+ #if defined(_WIN32)
+-    // On Windows, VKAPI should equate to the __stdcall convention
+-    #define VKAPI   __stdcall
++    // On Windows, Vulkan commands use the stdcall convention
++    #define VKAPI_ATTR
++    #define VKAPI_CALL __stdcall
++    #define VKAPI_PTR  VKAPI_CALL
++#elif defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__)
++    // Android does not support Vulkan in native code using the "armeabi" ABI.
++    #error "Vulkan requires the 'armeabi-v7a' or 'armeabi-v7a-hard' ABI on 32-bit ARM CPUs"
++#elif defined(__ANDROID__) && defined(__ARM_ARCH_7A__)
++    // On Android/ARMv7a, Vulkan functions use the armeabi-v7a-hard calling
++    // convention, even if the application's native code is compiled with the
++    // armeabi-v7a calling convention.
++    #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
++    #define VKAPI_CALL
++    #define VKAPI_PTR  VKAPI_ATTR
+ #else
+     // On other platforms, use the default calling convention
+-    #define VKAPI
++    #define VKAPI_ATTR
++    #define VKAPI_CALL
++    #define VKAPI_PTR
+ #endif
+ #include <stddef.h>
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 21bb796..2791b8a 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 203, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 204, 0)
+ #define VK_NULL_HANDLE 0
+@@ -1046,36 +1046,36 @@ typedef enum VkQueryControlFlagBits {
+ } VkQueryControlFlagBits;
+ typedef VkFlags VkQueryControlFlags;
+-typedef void* (VKAPI *PFN_vkAllocationFunction)(
++typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
+     void*                                       pUserData,
+     size_t                                      size,
+     size_t                                      alignment,
+     VkSystemAllocationScope                     allocationScope);
+-typedef void* (VKAPI *PFN_vkReallocationFunction)(
++typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
+     void*                                       pUserData,
+     void*                                       pOriginal,
+     size_t                                      size,
+     size_t                                      alignment,
+     VkSystemAllocationScope                     allocationScope);
+-typedef void (VKAPI *PFN_vkFreeFunction)(
++typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
+     void*                                       pUserData,
+     void*                                       pMemory);
+-typedef void (VKAPI *PFN_vkInternalAllocationNotification)(
++typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
+     void*                                       pUserData,
+     size_t                                      size,
+     VkInternalAllocationType                    allocationType,
+     VkSystemAllocationScope                     allocationScope);
+-typedef void (VKAPI *PFN_vkInternalFreeNotification)(
++typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
+     void*                                       pUserData,
+     size_t                                      size,
+     VkInternalAllocationType                    allocationType,
+     VkSystemAllocationScope                     allocationScope);
+-typedef void (VKAPI *PFN_vkVoidFunction)(void);
++typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
+ typedef struct VkApplicationInfo {
+     VkStructureType                             sType;
+@@ -1203,6 +1203,7 @@ typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    maxPerStageDescriptorStorageBuffers;
+     uint32_t                                    maxPerStageDescriptorSampledImages;
+     uint32_t                                    maxPerStageDescriptorStorageImages;
++    uint32_t                                    maxPerStageDescriptorInputAttachments;
+     uint32_t                                    maxDescriptorSetSamplers;
+     uint32_t                                    maxDescriptorSetUniformBuffers;
+     uint32_t                                    maxDescriptorSetUniformBuffersDynamic;
+@@ -1210,6 +1211,7 @@ typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    maxDescriptorSetStorageBuffersDynamic;
+     uint32_t                                    maxDescriptorSetSampledImages;
+     uint32_t                                    maxDescriptorSetStorageImages;
++    uint32_t                                    maxDescriptorSetInputAttachments;
+     uint32_t                                    maxVertexInputAttributes;
+     uint32_t                                    maxVertexInputBindings;
+     uint32_t                                    maxVertexInputAttributeOffset;
+@@ -2136,169 +2138,169 @@ typedef struct VkMemoryBarrier {
+ } VkMemoryBarrier;
+-typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
+-typedef void (VKAPI *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+-typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
+-typedef PFN_vkVoidFunction (VKAPI *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
+-typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
+-typedef void (VKAPI *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
+-typedef void (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+-typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
+-typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue);
+-typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device);
+-typedef VkResult (VKAPI *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
+-typedef void (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+-typedef void (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
+-typedef VkResult (VKAPI *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+-typedef VkResult (VKAPI *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
+-typedef void (VKAPI *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+-typedef VkResult (VKAPI *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+-typedef VkResult (VKAPI *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
+-typedef void (VKAPI *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+-typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+-typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
+-typedef VkResult (VKAPI *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+-typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
+-typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+-typedef VkResult (VKAPI *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
+-typedef VkResult (VKAPI *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+-typedef VkResult (VKAPI *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
+-typedef void (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
+-typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
+-typedef VkResult (VKAPI *PFN_vkSetEvent)(VkDevice device, VkEvent event);
+-typedef VkResult (VKAPI *PFN_vkResetEvent)(VkDevice device, VkEvent event);
+-typedef VkResult (VKAPI *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
+-typedef void (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef VkResult (VKAPI *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
+-typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
+-typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
+-typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
+-typedef void (VKAPI *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+-typedef VkResult (VKAPI *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
+-typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
+-typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
+-typedef void (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+-typedef VkResult (VKAPI *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+-typedef VkResult (VKAPI *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+-typedef VkResult (VKAPI *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
+-typedef void (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
+-typedef void (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
+-typedef void (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
+-typedef void (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
+-typedef void (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+-typedef VkResult (VKAPI *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
+-typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
+-typedef void (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+-typedef VkResult (VKAPI *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
+-typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
+-typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
+-typedef void (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+-typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
+-typedef void (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
+-typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
+-typedef VkResult (VKAPI *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
+-typedef void (VKAPI *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
+-typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+-typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
+-typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
+-typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+-typedef void (VKAPI *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+-typedef void (VKAPI *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+-typedef void (VKAPI *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
+-typedef void (VKAPI *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
+-typedef void (VKAPI *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
+-typedef void (VKAPI *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
+-typedef void (VKAPI *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
+-typedef void (VKAPI *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
+-typedef void (VKAPI *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
+-typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+-typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+-typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+-typedef void (VKAPI *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+-typedef void (VKAPI *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+-typedef void (VKAPI *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+-typedef void (VKAPI *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
+-typedef void (VKAPI *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
+-typedef void (VKAPI *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
+-typedef void (VKAPI *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+-typedef void (VKAPI *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-typedef void (VKAPI *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData);
+-typedef void (VKAPI *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
+-typedef void (VKAPI *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-typedef void (VKAPI *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-typedef void (VKAPI *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+-typedef void (VKAPI *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+-typedef void (VKAPI *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-typedef void (VKAPI *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-typedef void (VKAPI *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
+-typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
+-typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry, VkQueryControlFlags flags);
+-typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry);
+-typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry);
+-typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
+-typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+-typedef void (VKAPI *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+-typedef void (VKAPI *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+-typedef void (VKAPI *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
++typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
++typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
++typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
++typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
++typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
++typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
++typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
++typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
++typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
++typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
++typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
++typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
++typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
++typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
++typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
++typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
++typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
++typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
++typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
++typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
++typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
++typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
++typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
++typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
++typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
++typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
++typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
++typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
++typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
++typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
++typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
++typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
++typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
++typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
++typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
++typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
++typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
++typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
++typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
++typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
++typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
++typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
++typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
++typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
++typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
++typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
++typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
++typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
++typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
++typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
++typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
++typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
++typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
++typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
++typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
++typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
++typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
++typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
++typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
++typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
++typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports);
++typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
++typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
++typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
++typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
++typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
++typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
++typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
++typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
++typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
++typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
++typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
++typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
++typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
++typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
++typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
++typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z);
++typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
++typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
++typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
++typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
++typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData);
++typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
++typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
++typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
++typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
++typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
++typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry, VkQueryControlFlags flags);
++typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry);
++typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
++typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry);
++typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
++typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
++typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
++typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
++typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
++typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateInstance(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
+     const VkInstanceCreateInfo*                 pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkInstance*                                 pInstance);
+-void VKAPI vkDestroyInstance(
++VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
+     VkInstance                                  instance,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkEnumeratePhysicalDevices(
++VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
+     VkInstance                                  instance,
+     uint32_t*                                   pPhysicalDeviceCount,
+     VkPhysicalDevice*                           pPhysicalDevices);
+-void VKAPI vkGetPhysicalDeviceFeatures(
++VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
+     VkPhysicalDevice                            physicalDevice,
+     VkPhysicalDeviceFeatures*                   pFeatures);
+-void VKAPI vkGetPhysicalDeviceFormatProperties(
++VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkFormatProperties*                         pFormatProperties);
+-VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkImageType                                 type,
+@@ -2307,87 +2309,87 @@ VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
+     VkImageCreateFlags                          flags,
+     VkImageFormatProperties*                    pImageFormatProperties);
+-void VKAPI vkGetPhysicalDeviceProperties(
++VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkPhysicalDeviceProperties*                 pProperties);
+-void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
++VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t*                                   pQueueFamilyPropertyCount,
+     VkQueueFamilyProperties*                    pQueueFamilyProperties);
+-void VKAPI vkGetPhysicalDeviceMemoryProperties(
++VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
+-PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(
++VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
+     VkInstance                                  instance,
+     const char*                                 pName);
+-PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(
++VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
+     VkDevice                                    device,
+     const char*                                 pName);
+-VkResult VKAPI vkCreateDevice(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
+     VkPhysicalDevice                            physicalDevice,
+     const VkDeviceCreateInfo*                   pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkDevice*                                   pDevice);
+-void VKAPI vkDestroyDevice(
++VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
+     VkDevice                                    device,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkEnumerateInstanceExtensionProperties(
++VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
+     const char*                                 pLayerName,
+     uint32_t*                                   pPropertyCount,
+     VkExtensionProperties*                      pProperties);
+-VkResult VKAPI vkEnumerateDeviceExtensionProperties(
++VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
+     VkPhysicalDevice                            physicalDevice,
+     const char*                                 pLayerName,
+     uint32_t*                                   pPropertyCount,
+     VkExtensionProperties*                      pProperties);
+-VkResult VKAPI vkEnumerateInstanceLayerProperties(
++VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
+     uint32_t*                                   pPropertyCount,
+     VkLayerProperties*                          pProperties);
+-VkResult VKAPI vkEnumerateDeviceLayerProperties(
++VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t*                                   pPropertyCount,
+     VkLayerProperties*                          pProperties);
+-void VKAPI vkGetDeviceQueue(
++VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
+     VkDevice                                    device,
+     uint32_t                                    queueFamilyIndex,
+     uint32_t                                    queueIndex,
+     VkQueue*                                    pQueue);
+-VkResult VKAPI vkQueueSubmit(
++VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
+     VkQueue                                     queue,
+     uint32_t                                    submitCount,
+     const VkSubmitInfo*                         pSubmits,
+     VkFence                                     fence);
+-VkResult VKAPI vkQueueWaitIdle(
++VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
+     VkQueue                                     queue);
+-VkResult VKAPI vkDeviceWaitIdle(
++VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
+     VkDevice                                    device);
+-VkResult VKAPI vkAllocateMemory(
++VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
+     VkDevice                                    device,
+     const VkMemoryAllocateInfo*                 pAllocateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkDeviceMemory*                             pMemory);
+-void VKAPI vkFreeMemory(
++VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
+     VkDevice                                    device,
+     VkDeviceMemory                              memory,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkMapMemory(
++VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
+     VkDevice                                    device,
+     VkDeviceMemory                              memory,
+     VkDeviceSize                                offset,
+@@ -2395,54 +2397,54 @@ VkResult VKAPI vkMapMemory(
+     VkMemoryMapFlags                            flags,
+     void**                                      ppData);
+-void VKAPI vkUnmapMemory(
++VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
+     VkDevice                                    device,
+     VkDeviceMemory                              memory);
+-VkResult VKAPI vkFlushMappedMemoryRanges(
++VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
+     VkDevice                                    device,
+     uint32_t                                    memoryRangeCount,
+     const VkMappedMemoryRange*                  pMemoryRanges);
+-VkResult VKAPI vkInvalidateMappedMemoryRanges(
++VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
+     VkDevice                                    device,
+     uint32_t                                    memoryRangeCount,
+     const VkMappedMemoryRange*                  pMemoryRanges);
+-void VKAPI vkGetDeviceMemoryCommitment(
++VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
+     VkDevice                                    device,
+     VkDeviceMemory                              memory,
+     VkDeviceSize*                               pCommittedMemoryInBytes);
+-VkResult VKAPI vkBindBufferMemory(
++VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
+     VkDevice                                    device,
+     VkBuffer                                    buffer,
+     VkDeviceMemory                              memory,
+     VkDeviceSize                                memoryOffset);
+-VkResult VKAPI vkBindImageMemory(
++VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
+     VkDevice                                    device,
+     VkImage                                     image,
+     VkDeviceMemory                              memory,
+     VkDeviceSize                                memoryOffset);
+-void VKAPI vkGetBufferMemoryRequirements(
++VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
+     VkDevice                                    device,
+     VkBuffer                                    buffer,
+     VkMemoryRequirements*                       pMemoryRequirements);
+-void VKAPI vkGetImageMemoryRequirements(
++VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
+     VkDevice                                    device,
+     VkImage                                     image,
+     VkMemoryRequirements*                       pMemoryRequirements);
+-void VKAPI vkGetImageSparseMemoryRequirements(
++VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
+     VkDevice                                    device,
+     VkImage                                     image,
+     uint32_t*                                   pSparseMemoryRequirementCount,
+     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements);
+-void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
++VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
+     VkPhysicalDevice                            physicalDevice,
+     VkFormat                                    format,
+     VkImageType                                 type,
+@@ -2452,85 +2454,85 @@ void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
+     uint32_t*                                   pPropertyCount,
+     VkSparseImageFormatProperties*              pProperties);
+-VkResult VKAPI vkQueueBindSparse(
++VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
+     VkQueue                                     queue,
+     uint32_t                                    bindInfoCount,
+     const VkBindSparseInfo*                     pBindInfo,
+     VkFence                                     fence);
+-VkResult VKAPI vkCreateFence(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
+     VkDevice                                    device,
+     const VkFenceCreateInfo*                    pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkFence*                                    pFence);
+-void VKAPI vkDestroyFence(
++VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
+     VkDevice                                    device,
+     VkFence                                     fence,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkResetFences(
++VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
+     VkDevice                                    device,
+     uint32_t                                    fenceCount,
+     const VkFence*                              pFences);
+-VkResult VKAPI vkGetFenceStatus(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
+     VkDevice                                    device,
+     VkFence                                     fence);
+-VkResult VKAPI vkWaitForFences(
++VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
+     VkDevice                                    device,
+     uint32_t                                    fenceCount,
+     const VkFence*                              pFences,
+     VkBool32                                    waitAll,
+     uint64_t                                    timeout);
+-VkResult VKAPI vkCreateSemaphore(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
+     VkDevice                                    device,
+     const VkSemaphoreCreateInfo*                pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkSemaphore*                                pSemaphore);
+-void VKAPI vkDestroySemaphore(
++VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
+     VkDevice                                    device,
+     VkSemaphore                                 semaphore,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateEvent(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
+     VkDevice                                    device,
+     const VkEventCreateInfo*                    pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkEvent*                                    pEvent);
+-void VKAPI vkDestroyEvent(
++VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
+     VkDevice                                    device,
+     VkEvent                                     event,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkGetEventStatus(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
+     VkDevice                                    device,
+     VkEvent                                     event);
+-VkResult VKAPI vkSetEvent(
++VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
+     VkDevice                                    device,
+     VkEvent                                     event);
+-VkResult VKAPI vkResetEvent(
++VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
+     VkDevice                                    device,
+     VkEvent                                     event);
+-VkResult VKAPI vkCreateQueryPool(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
+     VkDevice                                    device,
+     const VkQueryPoolCreateInfo*                pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkQueryPool*                                pQueryPool);
+-void VKAPI vkDestroyQueryPool(
++VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
+     VkDevice                                    device,
+     VkQueryPool                                 queryPool,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkGetQueryPoolResults(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
+     VkDevice                                    device,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    startQuery,
+@@ -2540,91 +2542,91 @@ VkResult VKAPI vkGetQueryPoolResults(
+     VkDeviceSize                                stride,
+     VkQueryResultFlags                          flags);
+-VkResult VKAPI vkCreateBuffer(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
+     VkDevice                                    device,
+     const VkBufferCreateInfo*                   pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkBuffer*                                   pBuffer);
+-void VKAPI vkDestroyBuffer(
++VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
+     VkDevice                                    device,
+     VkBuffer                                    buffer,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateBufferView(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
+     VkDevice                                    device,
+     const VkBufferViewCreateInfo*               pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkBufferView*                               pView);
+-void VKAPI vkDestroyBufferView(
++VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
+     VkDevice                                    device,
+     VkBufferView                                bufferView,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateImage(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
+     VkDevice                                    device,
+     const VkImageCreateInfo*                    pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkImage*                                    pImage);
+-void VKAPI vkDestroyImage(
++VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
+     VkDevice                                    device,
+     VkImage                                     image,
+     const VkAllocationCallbacks*                pAllocator);
+-void VKAPI vkGetImageSubresourceLayout(
++VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
+     VkDevice                                    device,
+     VkImage                                     image,
+     const VkImageSubresource*                   pSubresource,
+     VkSubresourceLayout*                        pLayout);
+-VkResult VKAPI vkCreateImageView(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
+     VkDevice                                    device,
+     const VkImageViewCreateInfo*                pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkImageView*                                pView);
+-void VKAPI vkDestroyImageView(
++VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
+     VkDevice                                    device,
+     VkImageView                                 imageView,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateShaderModule(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
+     VkDevice                                    device,
+     const VkShaderModuleCreateInfo*             pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkShaderModule*                             pShaderModule);
+-void VKAPI vkDestroyShaderModule(
++VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
+     VkDevice                                    device,
+     VkShaderModule                              shaderModule,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreatePipelineCache(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
+     VkDevice                                    device,
+     const VkPipelineCacheCreateInfo*            pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkPipelineCache*                            pPipelineCache);
+-void VKAPI vkDestroyPipelineCache(
++VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkGetPipelineCacheData(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+     size_t*                                     pDataSize,
+     void*                                       pData);
+-VkResult VKAPI vkMergePipelineCaches(
++VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
+     VkDevice                                    device,
+     VkPipelineCache                             dstCache,
+     uint32_t                                    srcCacheCount,
+     const VkPipelineCache*                      pSrcCaches);
+-VkResult VKAPI vkCreateGraphicsPipelines(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+     uint32_t                                    createInfoCount,
+@@ -2632,7 +2634,7 @@ VkResult VKAPI vkCreateGraphicsPipelines(
+     const VkAllocationCallbacks*                pAllocator,
+     VkPipeline*                                 pPipelines);
+-VkResult VKAPI vkCreateComputePipelines(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
+     VkDevice                                    device,
+     VkPipelineCache                             pipelineCache,
+     uint32_t                                    createInfoCount,
+@@ -2640,193 +2642,193 @@ VkResult VKAPI vkCreateComputePipelines(
+     const VkAllocationCallbacks*                pAllocator,
+     VkPipeline*                                 pPipelines);
+-void VKAPI vkDestroyPipeline(
++VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
+     VkDevice                                    device,
+     VkPipeline                                  pipeline,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreatePipelineLayout(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
+     VkDevice                                    device,
+     const VkPipelineLayoutCreateInfo*           pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkPipelineLayout*                           pPipelineLayout);
+-void VKAPI vkDestroyPipelineLayout(
++VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
+     VkDevice                                    device,
+     VkPipelineLayout                            pipelineLayout,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateSampler(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
+     VkDevice                                    device,
+     const VkSamplerCreateInfo*                  pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkSampler*                                  pSampler);
+-void VKAPI vkDestroySampler(
++VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
+     VkDevice                                    device,
+     VkSampler                                   sampler,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateDescriptorSetLayout(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
+     VkDevice                                    device,
+     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkDescriptorSetLayout*                      pSetLayout);
+-void VKAPI vkDestroyDescriptorSetLayout(
++VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
+     VkDevice                                    device,
+     VkDescriptorSetLayout                       descriptorSetLayout,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateDescriptorPool(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
+     VkDevice                                    device,
+     const VkDescriptorPoolCreateInfo*           pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkDescriptorPool*                           pDescriptorPool);
+-void VKAPI vkDestroyDescriptorPool(
++VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
+     VkDevice                                    device,
+     VkDescriptorPool                            descriptorPool,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkResetDescriptorPool(
++VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
+     VkDevice                                    device,
+     VkDescriptorPool                            descriptorPool,
+     VkDescriptorPoolResetFlags                  flags);
+-VkResult VKAPI vkAllocateDescriptorSets(
++VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
+     VkDevice                                    device,
+     const VkDescriptorSetAllocateInfo*          pAllocateInfo,
+     VkDescriptorSet*                            pDescriptorSets);
+-VkResult VKAPI vkFreeDescriptorSets(
++VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
+     VkDevice                                    device,
+     VkDescriptorPool                            descriptorPool,
+     uint32_t                                    descriptorSetCount,
+     const VkDescriptorSet*                      pDescriptorSets);
+-void VKAPI vkUpdateDescriptorSets(
++VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
+     VkDevice                                    device,
+     uint32_t                                    descriptorWriteCount,
+     const VkWriteDescriptorSet*                 pDescriptorWrites,
+     uint32_t                                    descriptorCopyCount,
+     const VkCopyDescriptorSet*                  pDescriptorCopies);
+-VkResult VKAPI vkCreateFramebuffer(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
+     VkDevice                                    device,
+     const VkFramebufferCreateInfo*              pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkFramebuffer*                              pFramebuffer);
+-void VKAPI vkDestroyFramebuffer(
++VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
+     VkDevice                                    device,
+     VkFramebuffer                               framebuffer,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkCreateRenderPass(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
+     VkDevice                                    device,
+     const VkRenderPassCreateInfo*               pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkRenderPass*                               pRenderPass);
+-void VKAPI vkDestroyRenderPass(
++VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
+     VkDevice                                    device,
+     VkRenderPass                                renderPass,
+     const VkAllocationCallbacks*                pAllocator);
+-void VKAPI vkGetRenderAreaGranularity(
++VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
+     VkDevice                                    device,
+     VkRenderPass                                renderPass,
+     VkExtent2D*                                 pGranularity);
+-VkResult VKAPI vkCreateCommandPool(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
+     VkDevice                                    device,
+     const VkCommandPoolCreateInfo*              pCreateInfo,
+     const VkAllocationCallbacks*                pAllocator,
+     VkCommandPool*                              pCommandPool);
+-void VKAPI vkDestroyCommandPool(
++VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
+     VkDevice                                    device,
+     VkCommandPool                               commandPool,
+     const VkAllocationCallbacks*                pAllocator);
+-VkResult VKAPI vkResetCommandPool(
++VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
+     VkDevice                                    device,
+     VkCommandPool                               commandPool,
+     VkCommandPoolResetFlags                     flags);
+-VkResult VKAPI vkAllocateCommandBuffers(
++VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
+     VkDevice                                    device,
+     const VkCommandBufferAllocateInfo*          pAllocateInfo,
+     VkCommandBuffer*                            pCommandBuffers);
+-void VKAPI vkFreeCommandBuffers(
++VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
+     VkDevice                                    device,
+     VkCommandPool                               commandPool,
+     uint32_t                                    commandBufferCount,
+     const VkCommandBuffer*                      pCommandBuffers);
+-VkResult VKAPI vkBeginCommandBuffer(
++VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
+     VkCommandBuffer                             commandBuffer,
+     const VkCommandBufferBeginInfo*             pBeginInfo);
+-VkResult VKAPI vkEndCommandBuffer(
++VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
+     VkCommandBuffer                             commandBuffer);
+-VkResult VKAPI vkResetCommandBuffer(
++VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
+     VkCommandBuffer                             commandBuffer,
+     VkCommandBufferResetFlags                   flags);
+-void VKAPI vkCmdBindPipeline(
++VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
+     VkCommandBuffer                             commandBuffer,
+     VkPipelineBindPoint                         pipelineBindPoint,
+     VkPipeline                                  pipeline);
+-void VKAPI vkCmdSetViewport(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    viewportCount,
+     const VkViewport*                           pViewports);
+-void VKAPI vkCmdSetScissor(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    scissorCount,
+     const VkRect2D*                             pScissors);
+-void VKAPI vkCmdSetLineWidth(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
+     VkCommandBuffer                             commandBuffer,
+     float                                       lineWidth);
+-void VKAPI vkCmdSetDepthBias(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
+     VkCommandBuffer                             commandBuffer,
+     float                                       depthBiasConstantFactor,
+     float                                       depthBiasClamp,
+     float                                       depthBiasSlopeFactor);
+-void VKAPI vkCmdSetBlendConstants(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
+     VkCommandBuffer                             commandBuffer,
+     const float                                 blendConstants[4]);
+-void VKAPI vkCmdSetDepthBounds(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
+     VkCommandBuffer                             commandBuffer,
+     float                                       minDepthBounds,
+     float                                       maxDepthBounds);
+-void VKAPI vkCmdSetStencilCompareMask(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
+     VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+     uint32_t                                    compareMask);
+-void VKAPI vkCmdSetStencilWriteMask(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
+     VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+     uint32_t                                    writeMask);
+-void VKAPI vkCmdSetStencilReference(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
+     VkCommandBuffer                             commandBuffer,
+     VkStencilFaceFlags                          faceMask,
+     uint32_t                                    reference);
+-void VKAPI vkCmdBindDescriptorSets(
++VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
+     VkCommandBuffer                             commandBuffer,
+     VkPipelineBindPoint                         pipelineBindPoint,
+     VkPipelineLayout                            layout,
+@@ -2836,27 +2838,27 @@ void VKAPI vkCmdBindDescriptorSets(
+     uint32_t                                    dynamicOffsetCount,
+     const uint32_t*                             pDynamicOffsets);
+-void VKAPI vkCmdBindIndexBuffer(
++VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+     VkIndexType                                 indexType);
+-void VKAPI vkCmdBindVertexBuffers(
++VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    startBinding,
+     uint32_t                                    bindingCount,
+     const VkBuffer*                             pBuffers,
+     const VkDeviceSize*                         pOffsets);
+-void VKAPI vkCmdDraw(
++VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    vertexCount,
+     uint32_t                                    instanceCount,
+     uint32_t                                    firstVertex,
+     uint32_t                                    firstInstance);
+-void VKAPI vkCmdDrawIndexed(
++VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    indexCount,
+     uint32_t                                    instanceCount,
+@@ -2864,39 +2866,39 @@ void VKAPI vkCmdDrawIndexed(
+     int32_t                                     vertexOffset,
+     uint32_t                                    firstInstance);
+-void VKAPI vkCmdDrawIndirect(
++VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+     uint32_t                                    drawCount,
+     uint32_t                                    stride);
+-void VKAPI vkCmdDrawIndexedIndirect(
++VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset,
+     uint32_t                                    drawCount,
+     uint32_t                                    stride);
+-void VKAPI vkCmdDispatch(
++VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    x,
+     uint32_t                                    y,
+     uint32_t                                    z);
+-void VKAPI vkCmdDispatchIndirect(
++VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    buffer,
+     VkDeviceSize                                offset);
+-void VKAPI vkCmdCopyBuffer(
++VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    srcBuffer,
+     VkBuffer                                    dstBuffer,
+     uint32_t                                    regionCount,
+     const VkBufferCopy*                         pRegions);
+-void VKAPI vkCmdCopyImage(
++VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
+     VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+@@ -2905,7 +2907,7 @@ void VKAPI vkCmdCopyImage(
+     uint32_t                                    regionCount,
+     const VkImageCopy*                          pRegions);
+-void VKAPI vkCmdBlitImage(
++VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
+     VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+@@ -2915,7 +2917,7 @@ void VKAPI vkCmdBlitImage(
+     const VkImageBlit*                          pRegions,
+     VkFilter                                    filter);
+-void VKAPI vkCmdCopyBufferToImage(
++VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    srcBuffer,
+     VkImage                                     dstImage,
+@@ -2923,7 +2925,7 @@ void VKAPI vkCmdCopyBufferToImage(
+     uint32_t                                    regionCount,
+     const VkBufferImageCopy*                    pRegions);
+-void VKAPI vkCmdCopyImageToBuffer(
++VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
+     VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+@@ -2931,21 +2933,21 @@ void VKAPI vkCmdCopyImageToBuffer(
+     uint32_t                                    regionCount,
+     const VkBufferImageCopy*                    pRegions);
+-void VKAPI vkCmdUpdateBuffer(
++VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    dstBuffer,
+     VkDeviceSize                                dstOffset,
+     VkDeviceSize                                dataSize,
+     const uint32_t*                             pData);
+-void VKAPI vkCmdFillBuffer(
++VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
+     VkCommandBuffer                             commandBuffer,
+     VkBuffer                                    dstBuffer,
+     VkDeviceSize                                dstOffset,
+     VkDeviceSize                                size,
+     uint32_t                                    data);
+-void VKAPI vkCmdClearColorImage(
++VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
+     VkCommandBuffer                             commandBuffer,
+     VkImage                                     image,
+     VkImageLayout                               imageLayout,
+@@ -2953,7 +2955,7 @@ void VKAPI vkCmdClearColorImage(
+     uint32_t                                    rangeCount,
+     const VkImageSubresourceRange*              pRanges);
+-void VKAPI vkCmdClearDepthStencilImage(
++VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
+     VkCommandBuffer                             commandBuffer,
+     VkImage                                     image,
+     VkImageLayout                               imageLayout,
+@@ -2961,14 +2963,14 @@ void VKAPI vkCmdClearDepthStencilImage(
+     uint32_t                                    rangeCount,
+     const VkImageSubresourceRange*              pRanges);
+-void VKAPI vkCmdClearAttachments(
++VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    attachmentCount,
+     const VkClearAttachment*                    pAttachments,
+     uint32_t                                    rectCount,
+     const VkClearRect*                          pRects);
+-void VKAPI vkCmdResolveImage(
++VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
+     VkCommandBuffer                             commandBuffer,
+     VkImage                                     srcImage,
+     VkImageLayout                               srcImageLayout,
+@@ -2977,17 +2979,17 @@ void VKAPI vkCmdResolveImage(
+     uint32_t                                    regionCount,
+     const VkImageResolve*                       pRegions);
+-void VKAPI vkCmdSetEvent(
++VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
+     VkCommandBuffer                             commandBuffer,
+     VkEvent                                     event,
+     VkPipelineStageFlags                        stageMask);
+-void VKAPI vkCmdResetEvent(
++VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
+     VkCommandBuffer                             commandBuffer,
+     VkEvent                                     event,
+     VkPipelineStageFlags                        stageMask);
+-void VKAPI vkCmdWaitEvents(
++VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    eventCount,
+     const VkEvent*                              pEvents,
+@@ -2996,7 +2998,7 @@ void VKAPI vkCmdWaitEvents(
+     uint32_t                                    memoryBarrierCount,
+     const void* const*                          ppMemoryBarriers);
+-void VKAPI vkCmdPipelineBarrier(
++VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
+     VkCommandBuffer                             commandBuffer,
+     VkPipelineStageFlags                        srcStageMask,
+     VkPipelineStageFlags                        dstStageMask,
+@@ -3004,30 +3006,30 @@ void VKAPI vkCmdPipelineBarrier(
+     uint32_t                                    memoryBarrierCount,
+     const void* const*                          ppMemoryBarriers);
+-void VKAPI vkCmdBeginQuery(
++VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
+     VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    entry,
+     VkQueryControlFlags                         flags);
+-void VKAPI vkCmdEndQuery(
++VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
+     VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    entry);
+-void VKAPI vkCmdResetQueryPool(
++VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
+     VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    startQuery,
+     uint32_t                                    queryCount);
+-void VKAPI vkCmdWriteTimestamp(
++VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
+     VkCommandBuffer                             commandBuffer,
+     VkPipelineStageFlagBits                     pipelineStage,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    entry);
+-void VKAPI vkCmdCopyQueryPoolResults(
++VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
+     VkCommandBuffer                             commandBuffer,
+     VkQueryPool                                 queryPool,
+     uint32_t                                    startQuery,
+@@ -3037,7 +3039,7 @@ void VKAPI vkCmdCopyQueryPoolResults(
+     VkDeviceSize                                stride,
+     VkQueryResultFlags                          flags);
+-void VKAPI vkCmdPushConstants(
++VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
+     VkCommandBuffer                             commandBuffer,
+     VkPipelineLayout                            layout,
+     VkShaderStageFlags                          stageFlags,
+@@ -3045,19 +3047,19 @@ void VKAPI vkCmdPushConstants(
+     uint32_t                                    size,
+     const void*                                 values);
+-void VKAPI vkCmdBeginRenderPass(
++VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
+     VkCommandBuffer                             commandBuffer,
+     const VkRenderPassBeginInfo*                pRenderPassBegin,
+     VkSubpassContents                           contents);
+-void VKAPI vkCmdNextSubpass(
++VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
+     VkCommandBuffer                             commandBuffer,
+     VkSubpassContents                           contents);
+-void VKAPI vkCmdEndRenderPass(
++VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
+     VkCommandBuffer                             commandBuffer);
+-void VKAPI vkCmdExecuteCommands(
++VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+     VkCommandBuffer                             commandBuffer,
+     uint32_t                                    commandBuffersCount,
+     const VkCommandBuffer*                      pCommandBuffers);
+@@ -3148,35 +3150,35 @@ typedef struct VkSurfaceFormatKHR {
+ } VkSurfaceFormatKHR;
+-typedef void (VKAPI *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
++typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
+ #ifdef VK_PROTOTYPES
+-void VKAPI vkDestroySurfaceKHR(
++VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+     VkInstance                                   instance,
+     VkSurfaceKHR                                 surface);
+-VkResult VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     VkSurfaceKHR                                surface,
+     VkBool32*                                   pSupported);
+-VkResult VKAPI vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkSurfaceKHR                                surface,
+     VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities);
+-VkResult VKAPI vkGetPhysicalDeviceSurfaceFormatsKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkSurfaceKHR                                surface,
+     uint32_t*                                   pSurfaceFormatCount,
+     VkSurfaceFormatKHR*                         pSurfaceFormats);
+-VkResult VKAPI vkGetPhysicalDeviceSurfacePresentModesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkSurfaceKHR                                surface,
+     uint32_t*                                   pPresentModeCount,
+@@ -3227,29 +3229,29 @@ typedef struct VkPresentInfoKHR {
+ } VkPresentInfoKHR;
+-typedef VkResult (VKAPI *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, VkSwapchainKHR*  pSwapchain);
+-typedef void (VKAPI *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain);
+-typedef VkResult (VKAPI *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pSwapchainImageCount, VkImage*  pSwapchainImages);
+-typedef VkResult (VKAPI *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint64_t  timeout, VkSemaphore  semaphore, VkFence  fence, uint32_t*  pImageIndex);
+-typedef VkResult (VKAPI *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, VkSwapchainKHR*  pSwapchain);
++typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain);
++typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pSwapchainImageCount, VkImage*  pSwapchainImages);
++typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint64_t  timeout, VkSemaphore  semaphore, VkFence  fence, uint32_t*  pImageIndex);
++typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateSwapchainKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+     VkDevice                                     device,
+     const VkSwapchainCreateInfoKHR*              pCreateInfo,
+     VkSwapchainKHR*                              pSwapchain);
+-void VKAPI vkDestroySwapchainKHR(
++VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
+     VkDevice                                     device,
+     VkSwapchainKHR                               swapchain);
+-VkResult VKAPI vkGetSwapchainImagesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
+     VkDevice                                     device,
+     VkSwapchainKHR                               swapchain,
+     uint32_t*                                    pSwapchainImageCount,
+     VkImage*                                     pSwapchainImages);
+-VkResult VKAPI vkAcquireNextImageKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
+     VkDevice                                     device,
+     VkSwapchainKHR                               swapchain,
+     uint64_t                                     timeout,
+@@ -3257,7 +3259,7 @@ VkResult VKAPI vkAcquireNextImageKHR(
+     VkFence                                      fence,
+     uint32_t*                                    pImageIndex);
+-VkResult VKAPI vkQueuePresentKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+     VkQueue                                      queue,
+     VkPresentInfoKHR*                            pPresentInfo);
+ #endif
+@@ -3336,49 +3338,49 @@ typedef struct VkDisplaySurfaceCreateInfoKHR {
+ } VkDisplaySurfaceCreateInfoKHR;
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+-typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+-typedef VkResult (VKAPI *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayKHR* pProperties);
+-typedef VkResult (VKAPI *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+-typedef VkResult (VKAPI *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
+-typedef VkResult (VKAPI *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+-typedef VkResult (VKAPI *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayKHR* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
++typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, VkSurfaceKHR* pSurface);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkGetPhysicalDeviceDisplayPropertiesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t*                                   pPropertyCount,
+     VkDisplayPropertiesKHR*                     pProperties);
+-VkResult VKAPI vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t*                                   pPropertyCount,
+     VkDisplayPlanePropertiesKHR*                pProperties);
+-VkResult VKAPI vkGetDisplayPlaneSupportedDisplaysKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t*                                   pPropertyCount,
+     VkDisplayKHR*                               pProperties);
+-VkResult VKAPI vkGetDisplayModePropertiesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkDisplayKHR                                display,
+     uint32_t*                                   pPropertyCount,
+     VkDisplayModePropertiesKHR*                 pProperties);
+-VkResult VKAPI vkCreateDisplayModeKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkDisplayKHR                                display,
+     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
+     VkDisplayModeKHR*                           pMode);
+-VkResult VKAPI vkGetDisplayPlaneCapabilitiesKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkDisplayModeCreateInfoKHR                  mode,
+     uint32_t                                    planeIndex,
+     VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
+-VkResult VKAPI vkCreateDisplayPlaneSurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+     VkInstance                                  instance,
+     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
+     VkSurfaceKHR*                               pSurface);
+@@ -3416,17 +3418,17 @@ typedef struct VkDisplayPresentInfoKHR {
+ #define VK_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
+ #define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateXlibSurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
+     VkInstance                                  instance,
+     Display*                                    dpy,
+     Window                                      window,
+     VkSurfaceKHR*                               pSurface);
+-VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
++VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     Display*                                    dpy,
+@@ -3442,17 +3444,17 @@ VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
+ #define VK_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
+ #define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, VkSurfaceKHR* pSurface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateXcbSurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
+     VkInstance                                  instance,
+     xcb_connection_t*                           connection,
+     xcb_window_t                                window,
+     VkSurfaceKHR*                               pSurface);
+-VkBool32 VKAPI vkGetPhysicalDeviceXcbPresentationSupportKHR(
++VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     xcb_connection_t*                           connection,
+@@ -3468,17 +3470,17 @@ VkBool32 VKAPI vkGetPhysicalDeviceXcbPresentationSupportKHR(
+ #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
+ #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateWaylandSurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
+     VkInstance                                  instance,
+     struct wl_display*                          display,
+     struct wl_surface*                          surface,
+     VkSurfaceKHR*                               pSurface);
+-VkBool32 VKAPI vkGetPhysicalDeviceWaylandPresentationSupportKHR(
++VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     struct wl_display*                          display);
+@@ -3493,17 +3495,17 @@ VkBool32 VKAPI vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+ #define VK_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
+ #define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateMirSurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
+     VkInstance                                  instance,
+     MirConnection*                              connection,
+     MirSurface*                                 mirSurface,
+     VkSurfaceKHR*                               pSurface);
+-VkBool32 VKAPI vkGetPhysicalDeviceMirPresentationSupportKHR(
++VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex,
+     MirConnection*                              connection);
+@@ -3520,10 +3522,10 @@ VkBool32 VKAPI vkGetPhysicalDeviceMirPresentationSupportKHR(
+ #define VK_ERROR_INVALID_ANDROID_WINDOW_KHR ((VkResult)(int)0xc0002400)
+ #define VK_ERROR_ANDROID_WINDOW_IN_USE_KHR ((VkResult)(int)0xc0002401)
+-typedef VkResult (VKAPI *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, ANativeWindow* window, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, ANativeWindow* window, VkSurfaceKHR* pSurface);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateAndroidSurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
+     VkInstance                                  instance,
+     ANativeWindow*                              window,
+     VkSurfaceKHR*                               pSurface);
+@@ -3538,17 +3540,17 @@ VkResult VKAPI vkCreateAndroidSurfaceKHR(
+ #define VK_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
+ #define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
+-typedef VkResult (VKAPI *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
+-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
++typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
+ #ifdef VK_PROTOTYPES
+-VkResult VKAPI vkCreateWin32SurfaceKHR(
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
+     VkInstance                                  instance,
+     HINSTANCE                                   hinstance,
+     HWND                                        hwnd,
+     VkSurfaceKHR*                               pSurface);
+-VkBool32 VKAPI vkGetPhysicalDeviceWin32PresentationSupportKHR(
++VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+     uint32_t                                    queueFamilyIndex);
+ #endif
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index fffb3eb..7b8db6b 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -42,741 +42,741 @@ namespace {
+ } // namespace
+ __attribute__((visibility("default")))
+-VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) {
++VKAPI_ATTR VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) {
+     return vulkan::CreateInstance(pCreateInfo, pAllocator, pInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(instance).DestroyInstance(instance, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices) {
++VKAPI_ATTR VkResult vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices) {
+     return GetVtbl(instance).EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
+ }
+ __attribute__((visibility("default")))
+-PFN_vkVoidFunction vkGetDeviceProcAddr(VkDevice device, const char* pName) {
++VKAPI_ATTR PFN_vkVoidFunction vkGetDeviceProcAddr(VkDevice device, const char* pName) {
+     return vulkan::GetDeviceProcAddr(device, pName);
+ }
+ __attribute__((visibility("default")))
+-PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance, const char* pName) {
++VKAPI_ATTR PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance, const char* pName) {
+     return vulkan::GetInstanceProcAddr(instance, pName);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) {
++VKAPI_ATTR void vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceProperties(physicalDevice, pProperties);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
++VKAPI_ATTR void vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
++VKAPI_ATTR void vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
++VKAPI_ATTR void vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
++VKAPI_ATTR void vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
++VKAPI_ATTR VkResult vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
+     return GetVtbl(physicalDevice).GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) {
++VKAPI_ATTR VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) {
+     return GetVtbl(physicalDevice).CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator) {
+     vulkan::DestroyDevice(device, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) {
++VKAPI_ATTR VkResult vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount, VkLayerProperties* pProperties) {
+     return vulkan::EnumerateInstanceLayerProperties(pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) {
++VKAPI_ATTR VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) {
+     return vulkan::EnumerateInstanceExtensionProperties(pLayerName, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties) {
++VKAPI_ATTR VkResult vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties) {
+     return GetVtbl(physicalDevice).EnumerateDeviceLayerProperties(physicalDevice, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) {
++VKAPI_ATTR VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) {
+     return GetVtbl(physicalDevice).EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-void vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue) {
++VKAPI_ATTR void vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue) {
+     vulkan::GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) {
++VKAPI_ATTR VkResult vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence) {
+     return GetVtbl(queue).QueueSubmit(queue, submitCount, pSubmits, fence);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueWaitIdle(VkQueue queue) {
++VKAPI_ATTR VkResult vkQueueWaitIdle(VkQueue queue) {
+     return GetVtbl(queue).QueueWaitIdle(queue);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkDeviceWaitIdle(VkDevice device) {
++VKAPI_ATTR VkResult vkDeviceWaitIdle(VkDevice device) {
+     return GetVtbl(device).DeviceWaitIdle(device);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) {
++VKAPI_ATTR VkResult vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory) {
+     return GetVtbl(device).AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
+ }
+ __attribute__((visibility("default")))
+-void vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).FreeMemory(device, memory, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) {
++VKAPI_ATTR VkResult vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) {
+     return GetVtbl(device).MapMemory(device, memory, offset, size, flags, ppData);
+ }
+ __attribute__((visibility("default")))
+-void vkUnmapMemory(VkDevice device, VkDeviceMemory memory) {
++VKAPI_ATTR void vkUnmapMemory(VkDevice device, VkDeviceMemory memory) {
+     GetVtbl(device).UnmapMemory(device, memory);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) {
++VKAPI_ATTR VkResult vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) {
+     return GetVtbl(device).FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) {
++VKAPI_ATTR VkResult vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) {
+     return GetVtbl(device).InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
+ }
+ __attribute__((visibility("default")))
+-void vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
++VKAPI_ATTR void vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
+     GetVtbl(device).GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
+ }
+ __attribute__((visibility("default")))
+-void vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) {
++VKAPI_ATTR void vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements) {
+     GetVtbl(device).GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) {
++VKAPI_ATTR VkResult vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) {
+     return GetVtbl(device).BindBufferMemory(device, buffer, memory, memoryOffset);
+ }
+ __attribute__((visibility("default")))
+-void vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) {
++VKAPI_ATTR void vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements) {
+     GetVtbl(device).GetImageMemoryRequirements(device, image, pMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) {
++VKAPI_ATTR VkResult vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) {
+     return GetVtbl(device).BindImageMemory(device, image, memory, memoryOffset);
+ }
+ __attribute__((visibility("default")))
+-void vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
++VKAPI_ATTR void vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
+     GetVtbl(device).GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
+ }
+ __attribute__((visibility("default")))
+-void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) {
++VKAPI_ATTR void vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties) {
+     GetVtbl(physicalDevice).GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) {
++VKAPI_ATTR VkResult vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) {
+     return GetVtbl(queue).QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) {
++VKAPI_ATTR VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) {
+     return GetVtbl(device).CreateFence(device, pCreateInfo, pAllocator, pFence);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyFence(device, fence, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
++VKAPI_ATTR VkResult vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
+     return GetVtbl(device).ResetFences(device, fenceCount, pFences);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetFenceStatus(VkDevice device, VkFence fence) {
++VKAPI_ATTR VkResult vkGetFenceStatus(VkDevice device, VkFence fence) {
+     return GetVtbl(device).GetFenceStatus(device, fence);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) {
++VKAPI_ATTR VkResult vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) {
+     return GetVtbl(device).WaitForFences(device, fenceCount, pFences, waitAll, timeout);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) {
++VKAPI_ATTR VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore) {
+     return GetVtbl(device).CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroySemaphore(device, semaphore, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) {
++VKAPI_ATTR VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent) {
+     return GetVtbl(device).CreateEvent(device, pCreateInfo, pAllocator, pEvent);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyEvent(device, event, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetEventStatus(VkDevice device, VkEvent event) {
++VKAPI_ATTR VkResult vkGetEventStatus(VkDevice device, VkEvent event) {
+     return GetVtbl(device).GetEventStatus(device, event);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkSetEvent(VkDevice device, VkEvent event) {
++VKAPI_ATTR VkResult vkSetEvent(VkDevice device, VkEvent event) {
+     return GetVtbl(device).SetEvent(device, event);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetEvent(VkDevice device, VkEvent event) {
++VKAPI_ATTR VkResult vkResetEvent(VkDevice device, VkEvent event) {
+     return GetVtbl(device).ResetEvent(device, event);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) {
++VKAPI_ATTR VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool) {
+     return GetVtbl(device).CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyQueryPool(device, queryPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) {
++VKAPI_ATTR VkResult vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) {
+     return GetVtbl(device).GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) {
++VKAPI_ATTR VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer) {
+     return GetVtbl(device).CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyBuffer(device, buffer, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) {
++VKAPI_ATTR VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView) {
+     return GetVtbl(device).CreateBufferView(device, pCreateInfo, pAllocator, pView);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyBufferView(device, bufferView, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) {
++VKAPI_ATTR VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage) {
+     return GetVtbl(device).CreateImage(device, pCreateInfo, pAllocator, pImage);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyImage(device, image, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-void vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
++VKAPI_ATTR void vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
+     GetVtbl(device).GetImageSubresourceLayout(device, image, pSubresource, pLayout);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) {
++VKAPI_ATTR VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView) {
+     return GetVtbl(device).CreateImageView(device, pCreateInfo, pAllocator, pView);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyImageView(device, imageView, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) {
++VKAPI_ATTR VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule) {
+     return GetVtbl(device).CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyShaderModule(device, shaderModule, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) {
++VKAPI_ATTR VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache) {
+     return GetVtbl(device).CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyPipelineCache(device, pipelineCache, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) {
++VKAPI_ATTR VkResult vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) {
+     return GetVtbl(device).GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
++VKAPI_ATTR VkResult vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
+     return GetVtbl(device).MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) {
++VKAPI_ATTR VkResult vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) {
+     return GetVtbl(device).CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) {
++VKAPI_ATTR VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) {
+     return GetVtbl(device).CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyPipeline(device, pipeline, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) {
++VKAPI_ATTR VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout) {
+     return GetVtbl(device).CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyPipelineLayout(device, pipelineLayout, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) {
++VKAPI_ATTR VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler) {
+     return GetVtbl(device).CreateSampler(device, pCreateInfo, pAllocator, pSampler);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroySampler(device, sampler, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) {
++VKAPI_ATTR VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout) {
+     return GetVtbl(device).CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) {
++VKAPI_ATTR VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool) {
+     return GetVtbl(device).CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyDescriptorPool(device, descriptorPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
++VKAPI_ATTR VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
+     return GetVtbl(device).ResetDescriptorPool(device, descriptorPool, flags);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) {
++VKAPI_ATTR VkResult vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets) {
+     return GetVtbl(device).AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) {
++VKAPI_ATTR VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets) {
+     return GetVtbl(device).FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
+ }
+ __attribute__((visibility("default")))
+-void vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
++VKAPI_ATTR void vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
+     GetVtbl(device).UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) {
++VKAPI_ATTR VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) {
+     return GetVtbl(device).CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyFramebuffer(device, framebuffer, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) {
++VKAPI_ATTR VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) {
+     return GetVtbl(device).CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyRenderPass(device, renderPass, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-void vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
++VKAPI_ATTR void vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
+     GetVtbl(device).GetRenderAreaGranularity(device, renderPass, pGranularity);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) {
++VKAPI_ATTR VkResult vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool) {
+     return GetVtbl(device).CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) {
++VKAPI_ATTR void vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator) {
+     GetVtbl(device).DestroyCommandPool(device, commandPool, pAllocator);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) {
++VKAPI_ATTR VkResult vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) {
+     return GetVtbl(device).ResetCommandPool(device, commandPool, flags);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) {
++VKAPI_ATTR VkResult vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers) {
+     return GetVtbl(device).AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+-void vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) {
++VKAPI_ATTR void vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) {
+     GetVtbl(device).FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) {
++VKAPI_ATTR VkResult vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo) {
+     return GetVtbl(commandBuffer).BeginCommandBuffer(commandBuffer, pBeginInfo);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkEndCommandBuffer(VkCommandBuffer commandBuffer) {
++VKAPI_ATTR VkResult vkEndCommandBuffer(VkCommandBuffer commandBuffer) {
+     return GetVtbl(commandBuffer).EndCommandBuffer(commandBuffer);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) {
++VKAPI_ATTR VkResult vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) {
+     return GetVtbl(commandBuffer).ResetCommandBuffer(commandBuffer, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
++VKAPI_ATTR void vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
+     GetVtbl(commandBuffer).CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
++VKAPI_ATTR void vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
+     GetVtbl(commandBuffer).CmdSetViewport(commandBuffer, viewportCount, pViewports);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
++VKAPI_ATTR void vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
+     GetVtbl(commandBuffer).CmdSetScissor(commandBuffer, scissorCount, pScissors);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) {
++VKAPI_ATTR void vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) {
+     GetVtbl(commandBuffer).CmdSetLineWidth(commandBuffer, lineWidth);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) {
++VKAPI_ATTR void vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) {
+     GetVtbl(commandBuffer).CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) {
++VKAPI_ATTR void vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) {
+     GetVtbl(commandBuffer).CmdSetBlendConstants(commandBuffer, blendConstants);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) {
++VKAPI_ATTR void vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) {
+     GetVtbl(commandBuffer).CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask) {
++VKAPI_ATTR void vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask) {
+     GetVtbl(commandBuffer).CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) {
++VKAPI_ATTR void vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) {
+     GetVtbl(commandBuffer).CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) {
++VKAPI_ATTR void vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) {
+     GetVtbl(commandBuffer).CmdSetStencilReference(commandBuffer, faceMask, reference);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
++VKAPI_ATTR void vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
+     GetVtbl(commandBuffer).CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
++VKAPI_ATTR void vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
+     GetVtbl(commandBuffer).CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
++VKAPI_ATTR void vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
+     GetVtbl(commandBuffer).CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
++VKAPI_ATTR void vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
+     GetVtbl(commandBuffer).CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
++VKAPI_ATTR void vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
+     GetVtbl(commandBuffer).CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
++VKAPI_ATTR void vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
+     GetVtbl(commandBuffer).CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
++VKAPI_ATTR void vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
+     GetVtbl(commandBuffer).CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) {
++VKAPI_ATTR void vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) {
+     GetVtbl(commandBuffer).CmdDispatch(commandBuffer, x, y, z);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) {
++VKAPI_ATTR void vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) {
+     GetVtbl(commandBuffer).CmdDispatchIndirect(commandBuffer, buffer, offset);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
++VKAPI_ATTR void vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
+     GetVtbl(commandBuffer).CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
++VKAPI_ATTR void vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
+     GetVtbl(commandBuffer).CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
++VKAPI_ATTR void vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) {
+     GetVtbl(commandBuffer).CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
++VKAPI_ATTR void vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+     GetVtbl(commandBuffer).CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
++VKAPI_ATTR void vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
+     GetVtbl(commandBuffer).CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData) {
++VKAPI_ATTR void vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const uint32_t* pData) {
+     GetVtbl(commandBuffer).CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data) {
++VKAPI_ATTR void vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data) {
+     GetVtbl(commandBuffer).CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
++VKAPI_ATTR void vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+     GetVtbl(commandBuffer).CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
++VKAPI_ATTR void vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
+     GetVtbl(commandBuffer).CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
++VKAPI_ATTR void vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) {
+     GetVtbl(commandBuffer).CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
++VKAPI_ATTR void vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
+     GetVtbl(commandBuffer).CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
++VKAPI_ATTR void vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
+     GetVtbl(commandBuffer).CmdSetEvent(commandBuffer, event, stageMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
++VKAPI_ATTR void vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
+     GetVtbl(commandBuffer).CmdResetEvent(commandBuffer, event, stageMask);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers) {
++VKAPI_ATTR void vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers) {
+     GetVtbl(commandBuffer).CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers) {
++VKAPI_ATTR void vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers) {
+     GetVtbl(commandBuffer).CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry, VkQueryControlFlags flags) {
++VKAPI_ATTR void vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry, VkQueryControlFlags flags) {
+     GetVtbl(commandBuffer).CmdBeginQuery(commandBuffer, queryPool, entry, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry) {
++VKAPI_ATTR void vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t entry) {
+     GetVtbl(commandBuffer).CmdEndQuery(commandBuffer, queryPool, entry);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
++VKAPI_ATTR void vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
+     GetVtbl(commandBuffer).CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry) {
++VKAPI_ATTR void vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry) {
+     GetVtbl(commandBuffer).CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, entry);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) {
++VKAPI_ATTR void vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags) {
+     GetVtbl(commandBuffer).CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values) {
++VKAPI_ATTR void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values) {
+     GetVtbl(commandBuffer).CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) {
++VKAPI_ATTR void vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) {
+     GetVtbl(commandBuffer).CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) {
++VKAPI_ATTR void vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) {
+     GetVtbl(commandBuffer).CmdNextSubpass(commandBuffer, contents);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdEndRenderPass(VkCommandBuffer commandBuffer) {
++VKAPI_ATTR void vkCmdEndRenderPass(VkCommandBuffer commandBuffer) {
+     GetVtbl(commandBuffer).CmdEndRenderPass(commandBuffer);
+ }
+ __attribute__((visibility("default")))
+-void vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers) {
++VKAPI_ATTR void vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount, const VkCommandBuffer* pCommandBuffers) {
+     GetVtbl(commandBuffer).CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface) {
++VKAPI_ATTR void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface) {
+     GetVtbl(instance).DestroySurfaceKHR(instance, surface);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported) {
++VKAPI_ATTR VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported) {
+     return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
++VKAPI_ATTR VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
+     return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) {
++VKAPI_ATTR VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats) {
+     return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) {
++VKAPI_ATTR VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes) {
+     return GetVtbl(physicalDevice).GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, VkSwapchainKHR* pSwapchain) {
++VKAPI_ATTR VkResult vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, VkSwapchainKHR* pSwapchain) {
+     return GetVtbl(device).CreateSwapchainKHR(device, pCreateInfo, pSwapchain);
+ }
+ __attribute__((visibility("default")))
+-void vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain) {
++VKAPI_ATTR void vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain) {
+     GetVtbl(device).DestroySwapchainKHR(device, swapchain);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) {
++VKAPI_ATTR VkResult vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) {
+     return GetVtbl(device).GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) {
++VKAPI_ATTR VkResult vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) {
+     return GetVtbl(device).AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkQueuePresentKHR(VkQueue queue, VkPresentInfoKHR* pPresentInfo) {
++VKAPI_ATTR VkResult vkQueuePresentKHR(VkQueue queue, VkPresentInfoKHR* pPresentInfo) {
+     return GetVtbl(queue).QueuePresentKHR(queue, pPresentInfo);
+ }
+ __attribute__((visibility("default")))
+-VkResult vkCreateAndroidSurfaceKHR(VkInstance instance, struct ANativeWindow* window, VkSurfaceKHR* pSurface) {
++VKAPI_ATTR VkResult vkCreateAndroidSurfaceKHR(VkInstance instance, struct ANativeWindow* window, VkSurfaceKHR* pSurface) {
+     return GetVtbl(instance).CreateAndroidSurfaceKHR(instance, window, pSurface);
+ }
+diff --git a/vulkan/libvulkan/entry.cpp.tmpl b/vulkan/libvulkan/entry.cpp.tmpl
+index 712558b..5047741 100644
+--- a/vulkan/libvulkan/entry.cpp.tmpl
++++ b/vulkan/libvulkan/entry.cpp.tmpl
+@@ -124,7 +124,7 @@ namespace {
+ {{define "EmitSpecialEntry"}}
+   {{AssertType $ "Function"}}
+-  {{Node "Type" $.Return}} {{Macro "FunctionName" $}}({{Macro "Parameters" $}}) {
++  VKAPI_ATTR {{Node "Type" $.Return}} {{Macro "FunctionName" $}}({{Macro "Parameters" $}}) {
+     {{if not (IsVoid $.Return.Type)}}return §{{end}}
+     vulkan::{{TrimPrefix "vk" $.Name}}({{Macro "Arguments" $}});
+   }
+@@ -142,7 +142,7 @@ namespace {
+ {{define "EmitEntry"}}
+   {{AssertType $ "Function"}}
+-  {{Node "Type" $.Return}} {{Macro "FunctionName" $}}({{Macro "Parameters" $}}) {
++  VKAPI_ATTR {{Node "Type" $.Return}} {{Macro "FunctionName" $}}({{Macro "Parameters" $}}) {
+     {{if not (IsVoid $.Return.Type)}}return §{{end}}
+     {{Macro "Dispatch" $}}{{TrimPrefix "vk" $.Name}}({{Macro "Arguments" $}});
+   }
+diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
+index 135f06d..c24ef86 100644
+--- a/vulkan/libvulkan/loader.cpp
++++ b/vulkan/libvulkan/loader.cpp
+@@ -215,19 +215,19 @@ inline const DeviceVtbl* GetVtbl(VkQueue queue) {
+     return *reinterpret_cast<DeviceVtbl**>(queue);
+ }
+-void* DefaultAllocate(void*,
+-                      size_t size,
+-                      size_t alignment,
+-                      VkSystemAllocationScope) {
++VKAPI_ATTR void* DefaultAllocate(void*,
++                                 size_t size,
++                                 size_t alignment,
++                                 VkSystemAllocationScope) {
+     void* ptr = nullptr;
+     return posix_memalign(&ptr, alignment, size) == 0 ? ptr : nullptr;
+ }
+-void* DefaultReallocate(void*,
+-                        void* ptr,
+-                        size_t size,
+-                        size_t alignment,
+-                        VkSystemAllocationScope) {
++VKAPI_ATTR void* DefaultReallocate(void*,
++                                   void* ptr,
++                                   size_t size,
++                                   size_t alignment,
++                                   VkSystemAllocationScope) {
+     if (size == 0) {
+         free(ptr);
+         return nullptr;
+@@ -253,7 +253,7 @@ void* DefaultReallocate(void*,
+     return new_ptr;
+ }
+-void DefaultFree(void*, void* pMem) {
++VKAPI_ATTR void DefaultFree(void*, void* pMem) {
+     free(pMem);
+ }
+@@ -518,6 +518,7 @@ void FreeAllocatedCreateInfo(T& local_create_info,
+         const_cast<char**>(local_create_info.ppEnabledExtensionNames));
+ }
++VKAPI_ATTR
+ VkBool32 LogDebugMessageCallback(VkFlags message_flags,
+                                  VkDbgObjectType /*obj_type*/,
+                                  uint64_t /*src_object*/,
+@@ -538,7 +539,8 @@ VkResult Noop(...) {
+     return VK_SUCCESS;
+ }
+-PFN_vkVoidFunction GetLayerDeviceProcAddr(VkDevice device, const char* name) {
++VKAPI_ATTR PFN_vkVoidFunction
++GetLayerDeviceProcAddr(VkDevice device, const char* name) {
+     if (strcmp(name, "vkGetDeviceProcAddr") == 0) {
+         return reinterpret_cast<PFN_vkVoidFunction>(GetLayerDeviceProcAddr);
+     }
+@@ -571,6 +573,7 @@ PFN_vkVoidFunction GetLayerDeviceProcAddr(VkDevice device, const char* name) {
+ // "Bottom" functions. These are called at the end of the instance dispatch
+ // chain.
++VKAPI_ATTR
+ void DestroyInstanceBottom(VkInstance instance,
+                            const VkAllocationCallbacks* allocator) {
+     // These checks allow us to call DestroyInstanceBottom from any error path
+@@ -596,6 +599,7 @@ void DestroyInstanceBottom(VkInstance instance,
+     alloc->pfnFree(alloc->pUserData, instance);
+ }
++VKAPI_ATTR
+ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+                               const VkAllocationCallbacks* allocator,
+                               VkInstance* instance_ptr) {
+@@ -673,6 +677,7 @@ VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult EnumeratePhysicalDevicesBottom(VkInstance instance,
+                                         uint32_t* pdev_count,
+                                         VkPhysicalDevice* pdevs) {
+@@ -686,11 +691,13 @@ VkResult EnumeratePhysicalDevicesBottom(VkInstance instance,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ void GetPhysicalDeviceFeaturesBottom(VkPhysicalDevice pdev,
+                                      VkPhysicalDeviceFeatures* features) {
+     GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceFeatures(pdev, features);
+ }
++VKAPI_ATTR
+ void GetPhysicalDeviceFormatPropertiesBottom(VkPhysicalDevice pdev,
+                                              VkFormat format,
+                                              VkFormatProperties* properties) {
+@@ -698,6 +705,7 @@ void GetPhysicalDeviceFormatPropertiesBottom(VkPhysicalDevice pdev,
+         pdev, format, properties);
+ }
++VKAPI_ATTR
+ VkResult GetPhysicalDeviceImageFormatPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkFormat format,
+@@ -711,12 +719,14 @@ VkResult GetPhysicalDeviceImageFormatPropertiesBottom(
+             pdev, format, type, tiling, usage, flags, properties);
+ }
++VKAPI_ATTR
+ void GetPhysicalDevicePropertiesBottom(VkPhysicalDevice pdev,
+                                        VkPhysicalDeviceProperties* properties) {
+     GetVtbl(pdev)
+         ->instance->drv.vtbl.GetPhysicalDeviceProperties(pdev, properties);
+ }
++VKAPI_ATTR
+ void GetPhysicalDeviceQueueFamilyPropertiesBottom(
+     VkPhysicalDevice pdev,
+     uint32_t* pCount,
+@@ -725,6 +735,7 @@ void GetPhysicalDeviceQueueFamilyPropertiesBottom(
+         pdev, pCount, properties);
+ }
++VKAPI_ATTR
+ void GetPhysicalDeviceMemoryPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkPhysicalDeviceMemoryProperties* properties) {
+@@ -732,6 +743,7 @@ void GetPhysicalDeviceMemoryPropertiesBottom(
+         pdev, properties);
+ }
++VKAPI_ATTR
+ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+                             const VkDeviceCreateInfo* create_info,
+                             const VkAllocationCallbacks* allocator,
+@@ -840,6 +852,7 @@ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult EnumerateDeviceExtensionPropertiesBottom(
+     VkPhysicalDevice pdev,
+     const char* layer_name,
+@@ -850,6 +863,7 @@ VkResult EnumerateDeviceExtensionPropertiesBottom(
+         pdev, layer_name, properties_count, properties);
+ }
++VKAPI_ATTR
+ VkResult EnumerateDeviceLayerPropertiesBottom(VkPhysicalDevice pdev,
+                                               uint32_t* properties_count,
+                                               VkLayerProperties* properties) {
+@@ -857,6 +871,7 @@ VkResult EnumerateDeviceLayerPropertiesBottom(VkPhysicalDevice pdev,
+         pdev, properties_count, properties);
+ }
++VKAPI_ATTR
+ void GetPhysicalDeviceSparseImageFormatPropertiesBottom(
+     VkPhysicalDevice pdev,
+     VkFormat format,
+@@ -872,7 +887,8 @@ void GetPhysicalDeviceSparseImageFormatPropertiesBottom(
+             properties);
+ }
+-PFN_vkVoidFunction GetInstanceProcAddrBottom(VkInstance, const char*);
++VKAPI_ATTR PFN_vkVoidFunction
++GetInstanceProcAddrBottom(VkInstance, const char*);
+ const InstanceVtbl kBottomInstanceFunctions = {
+     // clang-format off
+@@ -898,6 +914,7 @@ const InstanceVtbl kBottomInstanceFunctions = {
+     // clang-format on
+ };
++VKAPI_ATTR
+ PFN_vkVoidFunction GetInstanceProcAddrBottom(VkInstance, const char* name) {
+     // TODO: Possibly move this into the instance table
+     // TODO: Possibly register the callbacks in the loader
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 5765d65..6aa8673 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -261,40 +261,45 @@ bool LoadDeviceVtbl(VkDevice device,
+ // -----------------------------------------------------------------------------
+ // swapchain.cpp
+-VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+-                                 ANativeWindow* window,
+-                                 VkSurfaceKHR* surface);
+-void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
+-VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
+-                                            uint32_t queue_family,
+-                                            VkSurfaceKHR surface,
+-                                            VkBool32* pSupported);
+-VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
+-    VkPhysicalDevice pdev,
+-    VkSurfaceKHR surface,
+-    VkSurfaceCapabilitiesKHR* capabilities);
+-VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev,
+-                                            VkSurfaceKHR surface,
+-                                            uint32_t* count,
+-                                            VkSurfaceFormatKHR* formats);
+-VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice pdev,
+-                                                 VkSurfaceKHR surface,
+-                                                 uint32_t* count,
+-                                                 VkPresentModeKHR* modes);
+-VkResult CreateSwapchainKHR(VkDevice device,
+-                            const VkSwapchainCreateInfoKHR* create_info,
+-                            VkSwapchainKHR* swapchain_handle);
+-VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle);
+-VkResult GetSwapchainImagesKHR(VkDevice device,
+-                               VkSwapchainKHR swapchain_handle,
+-                               uint32_t* count,
+-                               VkImage* images);
+-VkResult AcquireNextImageKHR(VkDevice device,
+-                             VkSwapchainKHR swapchain_handle,
+-                             uint64_t timeout,
+-                             VkSemaphore semaphore,
+-                             uint32_t* image_index);
+-VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info);
++VKAPI_ATTR VkResult CreateAndroidSurfaceKHR(VkInstance instance,
++                                            ANativeWindow* window,
++                                            VkSurfaceKHR* surface);
++VKAPI_ATTR void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
++VKAPI_ATTR VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
++                                                       uint32_t queue_family,
++                                                       VkSurfaceKHR surface,
++                                                       VkBool32* pSupported);
++VKAPI_ATTR VkResult
++GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice pdev,
++                                        VkSurfaceKHR surface,
++                                        VkSurfaceCapabilitiesKHR* capabilities);
++VKAPI_ATTR VkResult
++GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev,
++                                   VkSurfaceKHR surface,
++                                   uint32_t* count,
++                                   VkSurfaceFormatKHR* formats);
++VKAPI_ATTR VkResult
++GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice pdev,
++                                        VkSurfaceKHR surface,
++                                        uint32_t* count,
++                                        VkPresentModeKHR* modes);
++VKAPI_ATTR VkResult
++CreateSwapchainKHR(VkDevice device,
++                   const VkSwapchainCreateInfoKHR* create_info,
++                   VkSwapchainKHR* swapchain_handle);
++VKAPI_ATTR VkResult
++DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle);
++VKAPI_ATTR VkResult GetSwapchainImagesKHR(VkDevice device,
++                                          VkSwapchainKHR swapchain_handle,
++                                          uint32_t* count,
++                                          VkImage* images);
++VKAPI_ATTR VkResult AcquireNextImageKHR(VkDevice device,
++                                        VkSwapchainKHR swapchain_handle,
++                                        uint64_t timeout,
++                                        VkSemaphore semaphore,
++                                        uint32_t* image_index);
++VKAPI_ATTR VkResult
++QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info);
+ }  // namespace vulkan
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index 98faaef..fa5ea59 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -141,6 +141,7 @@ Swapchain* SwapchainFromHandle(VkSwapchainKHR handle) {
+ namespace vulkan {
++VKAPI_ATTR
+ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+                                  ANativeWindow* window,
+                                  VkSurfaceKHR* out_surface) {
+@@ -169,6 +170,7 @@ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface_handle) {
+     Surface* surface = SurfaceFromHandle(surface_handle);
+     if (!surface)
+@@ -178,6 +180,7 @@ void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface_handle) {
+     FreeMem(instance, surface);
+ }
++VKAPI_ATTR
+ VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
+                                             uint32_t /*queue_family*/,
+                                             VkSurfaceKHR /*surface*/,
+@@ -186,6 +189,7 @@ VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
+     VkPhysicalDevice /*pdev*/,
+     VkSurfaceKHR surface,
+@@ -242,6 +246,7 @@ VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice /*pdev*/,
+                                             VkSurfaceKHR /*surface*/,
+                                             uint32_t* count,
+@@ -268,6 +273,7 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice /*pdev*/,
+     return result;
+ }
++VKAPI_ATTR
+ VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice /*pdev*/,
+                                                  VkSurfaceKHR /*surface*/,
+                                                  uint32_t* count,
+@@ -287,6 +293,7 @@ VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice /*pdev*/,
+     return result;
+ }
++VKAPI_ATTR
+ VkResult CreateSwapchainKHR(VkDevice device,
+                             const VkSwapchainCreateInfoKHR* create_info,
+                             VkSwapchainKHR* swapchain_handle) {
+@@ -475,6 +482,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle) {
+     const DeviceVtbl& driver_vtbl = GetDriverVtbl(device);
+     Swapchain* swapchain = SwapchainFromHandle(swapchain_handle);
+@@ -499,6 +507,7 @@ VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle) {
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult GetSwapchainImagesKHR(VkDevice,
+                                VkSwapchainKHR swapchain_handle,
+                                uint32_t* count,
+@@ -518,6 +527,7 @@ VkResult GetSwapchainImagesKHR(VkDevice,
+     return result;
+ }
++VKAPI_ATTR
+ VkResult AcquireNextImageKHR(VkDevice device,
+                              VkSwapchainKHR swapchain_handle,
+                              uint64_t timeout,
+@@ -598,6 +608,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wold-style-cast"
+diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
+index 316d27f..4fd0103 100644
+--- a/vulkan/nulldrv/null_driver.cpp
++++ b/vulkan/nulldrv/null_driver.cpp
+@@ -129,6 +129,7 @@ __attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = {
+ namespace {
++VKAPI_ATTR
+ VkResult CreateInstance(const VkInstanceCreateInfo* /*create_info*/,
+                         const VkAllocationCallbacks* allocator,
+                         VkInstance* out_instance) {
+@@ -212,6 +213,7 @@ namespace null_driver {
+ // -----------------------------------------------------------------------------
+ // Global
++VKAPI_ATTR
+ VkResult EnumerateInstanceExtensionProperties(const char*,
+                                               uint32_t* count,
+                                               VkExtensionProperties*) {
+@@ -219,6 +221,7 @@ VkResult EnumerateInstanceExtensionProperties(const char*,
+     return VK_SUCCESS;
+ }
++VKAPI_ATTR
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance, const char* name) {
+     PFN_vkVoidFunction proc = LookupInstanceProcAddr(name);
+     if (!proc && strcmp(name, "vkGetDeviceProcAddr") == 0)
+@@ -226,6 +229,7 @@ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance, const char* name) {
+     return proc;
+ }
++VKAPI_ATTR
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) {
+     PFN_vkVoidFunction proc = LookupDeviceProcAddr(name);
+     if (proc)
+diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
+index 1a524ff..1018afa 100644
+--- a/vulkan/nulldrv/null_driver.h
++++ b/vulkan/nulldrv/null_driver.h
+@@ -27,146 +27,146 @@ PFN_vkVoidFunction LookupInstanceProcAddr(const char* name);
+ PFN_vkVoidFunction LookupDeviceProcAddr(const char* name);
+ // clang-format off
+-void DestroyInstance(VkInstance instance, const VkAllocationCallbacks* allocator);
+-VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
+-void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
+-void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
+-VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
+-void GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
+-void GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
+-void GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
+-PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
+-PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
+-VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDevice* pDevice);
+-void DestroyDevice(VkDevice device, const VkAllocationCallbacks* allocator);
+-VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+-VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
+-VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
+-VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
+-void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
+-VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
+-VkResult QueueWaitIdle(VkQueue queue);
+-VkResult DeviceWaitIdle(VkDevice device);
+-VkResult AllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocInfo, const VkAllocationCallbacks* allocator, VkDeviceMemory* pMem);
+-void FreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocationCallbacks* allocator);
+-VkResult MapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
+-void UnmapMemory(VkDevice device, VkDeviceMemory mem);
+-VkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+-VkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
+-void GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
+-VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset);
+-VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset);
+-void GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
+-void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
+-void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
+-void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
+-VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+-VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFence* pFence);
+-void DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* allocator);
+-VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
+-VkResult GetFenceStatus(VkDevice device, VkFence fence);
+-VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
+-VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkSemaphore* pSemaphore);
+-void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* allocator);
+-VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkEvent* pEvent);
+-void DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* allocator);
+-VkResult GetEventStatus(VkDevice device, VkEvent event);
+-VkResult SetEvent(VkDevice device, VkEvent event);
+-VkResult ResetEvent(VkDevice device, VkEvent event);
+-VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkQueryPool* pQueryPool);
+-void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* allocator);
+-VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
+-VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkBuffer* pBuffer);
+-void DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* allocator);
+-VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkBufferView* pView);
+-void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* allocator);
+-VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkImage* pImage);
+-void DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* allocator);
+-void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
+-VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkImageView* pView);
+-void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* allocator);
+-VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkShaderModule* pShaderModule);
+-void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator);
+-VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineCache* pPipelineCache);
+-void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator);
+-VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
+-VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
+-VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* allocator, VkPipeline* pPipelines);
+-VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* allocator, VkPipeline* pPipelines);
+-void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* allocator);
+-VkResult CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineLayout* pPipelineLayout);
+-void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* allocator);
+-VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkSampler* pSampler);
+-void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* allocator);
+-VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDescriptorSetLayout* pSetLayout);
+-void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* allocator);
+-VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDescriptorPool* pDescriptorPool);
+-void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* allocator);
+-VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
+-VkResult AllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
+-VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
+-void UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
+-VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFramebuffer* pFramebuffer);
+-void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* allocator);
+-VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkRenderPass* pRenderPass);
+-void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* allocator);
+-void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
+-VkResult CreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkCommandPool* pCmdPool);
+-void DestroyCommandPool(VkDevice device, VkCommandPool cmdPool, const VkAllocationCallbacks* allocator);
+-VkResult ResetCommandPool(VkDevice device, VkCommandPool cmdPool, VkCommandPoolResetFlags flags);
+-VkResult AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocInfo, VkCommandBuffer* pCmdBuffers);
+-void FreeCommandBuffers(VkDevice device, VkCommandPool cmdPool, uint32_t count, const VkCommandBuffer* pCommandBuffers);
+-VkResult BeginCommandBuffer(VkCommandBuffer cmdBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
+-VkResult EndCommandBuffer(VkCommandBuffer cmdBuffer);
+-VkResult ResetCommandBuffer(VkCommandBuffer cmdBuffer, VkCommandBufferResetFlags flags);
+-void CmdBindPipeline(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
+-void CmdSetViewport(VkCommandBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+-void CmdSetScissor(VkCommandBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+-void CmdSetLineWidth(VkCommandBuffer cmdBuffer, float lineWidth);
+-void CmdSetDepthBias(VkCommandBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias);
+-void CmdSetBlendConstants(VkCommandBuffer cmdBuffer, const float blendConst[4]);
+-void CmdSetDepthBounds(VkCommandBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
+-void CmdSetStencilCompareMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
+-void CmdSetStencilWriteMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
+-void CmdSetStencilReference(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
+-void CmdBindDescriptorSets(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
+-void CmdBindIndexBuffer(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
+-void CmdBindVertexBuffers(VkCommandBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
+-void CmdDraw(VkCommandBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+-void CmdDrawIndexed(VkCommandBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
+-void CmdDrawIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
+-void CmdDrawIndexedIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
+-void CmdDispatch(VkCommandBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
+-void CmdDispatchIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
+-void CmdCopyBuffer(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
+-void CmdCopyImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
+-void CmdBlitImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
+-void CmdCopyBufferToImage(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-void CmdCopyImageToBuffer(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
+-void CmdUpdateBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
+-void CmdFillBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
+-void CmdClearColorImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-void CmdClearDepthStencilImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
+-void CmdClearAttachments(VkCommandBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
+-void CmdResolveImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
+-void CmdSetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-void CmdResetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
+-void CmdWaitEvents(VkCommandBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-void CmdPipelineBarrier(VkCommandBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
+-void CmdBeginQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
+-void CmdEndQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
+-void CmdResetQueryPool(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+-void CmdWriteTimestamp(VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
+-void CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
+-void CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
+-void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+-void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkSubpassContents contents);
+-void CmdEndRenderPass(VkCommandBuffer cmdBuffer);
+-void CmdExecuteCommands(VkCommandBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCommandBuffer* pCmdBuffers);
++VKAPI_ATTR void DestroyInstance(VkInstance instance, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
++VKAPI_ATTR void GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
++VKAPI_ATTR void GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
++VKAPI_ATTR VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
++VKAPI_ATTR void GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
++VKAPI_ATTR void GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
++VKAPI_ATTR void GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
++VKAPI_ATTR PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
++VKAPI_ATTR PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
++VKAPI_ATTR VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDevice* pDevice);
++VKAPI_ATTR void DestroyDevice(VkDevice device, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult EnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
++VKAPI_ATTR VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
++VKAPI_ATTR VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
++VKAPI_ATTR VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
++VKAPI_ATTR void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
++VKAPI_ATTR VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence);
++VKAPI_ATTR VkResult QueueWaitIdle(VkQueue queue);
++VKAPI_ATTR VkResult DeviceWaitIdle(VkDevice device);
++VKAPI_ATTR VkResult AllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocInfo, const VkAllocationCallbacks* allocator, VkDeviceMemory* pMem);
++VKAPI_ATTR void FreeMemory(VkDevice device, VkDeviceMemory mem, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult MapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
++VKAPI_ATTR void UnmapMemory(VkDevice device, VkDeviceMemory mem);
++VKAPI_ATTR VkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
++VKAPI_ATTR VkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges);
++VKAPI_ATTR void GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
++VKAPI_ATTR VkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset);
++VKAPI_ATTR VkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset);
++VKAPI_ATTR void GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
++VKAPI_ATTR void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
++VKAPI_ATTR void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
++VKAPI_ATTR void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
++VKAPI_ATTR VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
++VKAPI_ATTR VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFence* pFence);
++VKAPI_ATTR void DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
++VKAPI_ATTR VkResult GetFenceStatus(VkDevice device, VkFence fence);
++VKAPI_ATTR VkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
++VKAPI_ATTR VkResult CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkSemaphore* pSemaphore);
++VKAPI_ATTR void DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkEvent* pEvent);
++VKAPI_ATTR void DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult GetEventStatus(VkDevice device, VkEvent event);
++VKAPI_ATTR VkResult SetEvent(VkDevice device, VkEvent event);
++VKAPI_ATTR VkResult ResetEvent(VkDevice device, VkEvent event);
++VKAPI_ATTR VkResult CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkQueryPool* pQueryPool);
++VKAPI_ATTR void DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
++VKAPI_ATTR VkResult CreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkBuffer* pBuffer);
++VKAPI_ATTR void DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkBufferView* pView);
++VKAPI_ATTR void DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkImage* pImage);
++VKAPI_ATTR void DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR void GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
++VKAPI_ATTR VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkImageView* pView);
++VKAPI_ATTR void DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkShaderModule* pShaderModule);
++VKAPI_ATTR void DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineCache* pPipelineCache);
++VKAPI_ATTR void DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
++VKAPI_ATTR VkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
++VKAPI_ATTR VkResult CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* allocator, VkPipeline* pPipelines);
++VKAPI_ATTR VkResult CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t count, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* allocator, VkPipeline* pPipelines);
++VKAPI_ATTR void DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkPipelineLayout* pPipelineLayout);
++VKAPI_ATTR void DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkSampler* pSampler);
++VKAPI_ATTR void DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDescriptorSetLayout* pSetLayout);
++VKAPI_ATTR void DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkDescriptorPool* pDescriptorPool);
++VKAPI_ATTR void DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
++VKAPI_ATTR VkResult AllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocInfo, VkDescriptorSet* pDescriptorSets);
++VKAPI_ATTR VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
++VKAPI_ATTR void UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
++VKAPI_ATTR VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkFramebuffer* pFramebuffer);
++VKAPI_ATTR void DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkRenderPass* pRenderPass);
++VKAPI_ATTR void DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR void GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
++VKAPI_ATTR VkResult CreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* allocator, VkCommandPool* pCmdPool);
++VKAPI_ATTR void DestroyCommandPool(VkDevice device, VkCommandPool cmdPool, const VkAllocationCallbacks* allocator);
++VKAPI_ATTR VkResult ResetCommandPool(VkDevice device, VkCommandPool cmdPool, VkCommandPoolResetFlags flags);
++VKAPI_ATTR VkResult AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocInfo, VkCommandBuffer* pCmdBuffers);
++VKAPI_ATTR void FreeCommandBuffers(VkDevice device, VkCommandPool cmdPool, uint32_t count, const VkCommandBuffer* pCommandBuffers);
++VKAPI_ATTR VkResult BeginCommandBuffer(VkCommandBuffer cmdBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
++VKAPI_ATTR VkResult EndCommandBuffer(VkCommandBuffer cmdBuffer);
++VKAPI_ATTR VkResult ResetCommandBuffer(VkCommandBuffer cmdBuffer, VkCommandBufferResetFlags flags);
++VKAPI_ATTR void CmdBindPipeline(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
++VKAPI_ATTR void CmdSetViewport(VkCommandBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports);
++VKAPI_ATTR void CmdSetScissor(VkCommandBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
++VKAPI_ATTR void CmdSetLineWidth(VkCommandBuffer cmdBuffer, float lineWidth);
++VKAPI_ATTR void CmdSetDepthBias(VkCommandBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias);
++VKAPI_ATTR void CmdSetBlendConstants(VkCommandBuffer cmdBuffer, const float blendConst[4]);
++VKAPI_ATTR void CmdSetDepthBounds(VkCommandBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds);
++VKAPI_ATTR void CmdSetStencilCompareMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask);
++VKAPI_ATTR void CmdSetStencilWriteMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask);
++VKAPI_ATTR void CmdSetStencilReference(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference);
++VKAPI_ATTR void CmdBindDescriptorSets(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
++VKAPI_ATTR void CmdBindIndexBuffer(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
++VKAPI_ATTR void CmdBindVertexBuffers(VkCommandBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
++VKAPI_ATTR void CmdDraw(VkCommandBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
++VKAPI_ATTR void CmdDrawIndexed(VkCommandBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
++VKAPI_ATTR void CmdDrawIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
++VKAPI_ATTR void CmdDrawIndexedIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride);
++VKAPI_ATTR void CmdDispatch(VkCommandBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
++VKAPI_ATTR void CmdDispatchIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset);
++VKAPI_ATTR void CmdCopyBuffer(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
++VKAPI_ATTR void CmdCopyImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
++VKAPI_ATTR void CmdBlitImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
++VKAPI_ATTR void CmdCopyBufferToImage(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++VKAPI_ATTR void CmdCopyImageToBuffer(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
++VKAPI_ATTR void CmdUpdateBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData);
++VKAPI_ATTR void CmdFillBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data);
++VKAPI_ATTR void CmdClearColorImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++VKAPI_ATTR void CmdClearDepthStencilImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
++VKAPI_ATTR void CmdClearAttachments(VkCommandBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
++VKAPI_ATTR void CmdResolveImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
++VKAPI_ATTR void CmdSetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++VKAPI_ATTR void CmdResetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask);
++VKAPI_ATTR void CmdWaitEvents(VkCommandBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers);
++VKAPI_ATTR void CmdPipelineBarrier(VkCommandBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkDependencyFlags dependencyFlags, uint32_t memBarrierCount, const void* const* ppMemBarriers);
++VKAPI_ATTR void CmdBeginQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags);
++VKAPI_ATTR void CmdEndQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot);
++VKAPI_ATTR void CmdResetQueryPool(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
++VKAPI_ATTR void CmdWriteTimestamp(VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot);
++VKAPI_ATTR void CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags);
++VKAPI_ATTR void CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values);
++VKAPI_ATTR void CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
++VKAPI_ATTR void CmdNextSubpass(VkCommandBuffer cmdBuffer, VkSubpassContents contents);
++VKAPI_ATTR void CmdEndRenderPass(VkCommandBuffer cmdBuffer);
++VKAPI_ATTR void CmdExecuteCommands(VkCommandBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCommandBuffer* pCmdBuffers);
+-VkResult GetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
+-VkResult AcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
+-VkResult QueueSignalReleaseImageANDROID(VkQueue queue, VkImage image, int* pNativeFenceFd);
++VKAPI_ATTR VkResult GetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
++VKAPI_ATTR VkResult AcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore);
++VKAPI_ATTR VkResult QueueSignalReleaseImageANDROID(VkQueue queue, VkImage image, int* pNativeFenceFd);
+ // clang-format on
+ }  // namespace null_driver
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0025-vulkan-Update-from-version-0.204.0-to-0.205.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0025-vulkan-Update-from-version-0.204.0-to-0.205.0.patch
new file mode 100644 (file)
index 0000000..6174a64
--- /dev/null
@@ -0,0 +1,581 @@
+From 091923b2022e23b128e8de404cef2b7f70e80b8e Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 11:37:59 -0800
+Subject: [PATCH 25/30] vulkan: Update from version 0.204.0 to 0.205.0
+
+Change-Id: Ic0b91f338bcddc50b4617da266347ae8b9cc29fa
+---
+ vulkan/api/vulkan.api          | 43 ++++++++++++++++++------------
+ vulkan/include/vulkan/vulkan.h | 59 +++++++++++++++++++++++++-----------------
+ vulkan/libvulkan/entry.cpp     | 16 ++++++------
+ vulkan/libvulkan/loader.h      | 22 ++++++++++------
+ vulkan/libvulkan/swapchain.cpp | 14 +++++++---
+ 5 files changed, 94 insertions(+), 60 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index c77a148..1c4bb8f 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 204
++define VERSION_MINOR 205
+ define VERSION_PATCH 0
+ // API limits
+@@ -45,43 +45,43 @@ define VK_FALSE       0
+ // API keyword, but needs special handling by some templates
+ define NULL_HANDLE 0
+-@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION                     22
++@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION                     23
+ @extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER             1
+ @extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
+-@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 65
++@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 66
+ @extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
+ @extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
+-@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION                     18
++@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION                     19
+ @extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER             3
+ @extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
+-@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_REVISION           7
+-@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NUMBER   4
+-@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display_swapchain"
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_REVISION         8
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_display_swapchain"
+-@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION           4
++@extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_REVISION           5
+ @extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NUMBER             5
+ @extension("VK_KHR_xlib_surface") define VK_KHR_XLIB_SURFACE_NAME               "VK_KHR_xlib_surface"
+-@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION             4
++@extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_REVISION             5
+ @extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NUMBER               6
+ @extension("VK_KHR_xcb_surface") define VK_KHR_XCB_SURFACE_NAME                 "VK_KHR_xcb_surface"
+-@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION     3
++@extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_REVISION     4
+ @extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NUMBER       7
+ @extension("VK_KHR_wayland_surface") define VK_KHR_WAYLAND_SURFACE_NAME         "VK_KHR_wayland_surface"
+-@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION             3
++@extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_REVISION             4
+ @extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NUMBER               8
+ @extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME                 "VK_KHR_mir_surface"
+-@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION     2
++@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION     3
+ @extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NUMBER       8
+ @extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME         "VK_KHR_android_surface"
+-@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION         3
++@extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_REVISION         4
+ @extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NUMBER           9
+ @extension("VK_KHR_win32_surface") define VK_KHR_WIN32_SURFACE_NAME             "VK_KHR_win32_surface"
+@@ -4594,7 +4594,8 @@ cmd void vkCmdExecuteCommands(
+ @extension("VK_KHR_surface")
+ cmd void vkDestroySurfaceKHR(
+         VkInstance                                  instance,
+-        VkSurfaceKHR                                surface) {
++        VkSurfaceKHR                                surface,
++        const VkAllocationCallbacks*                pAllocator) {
+     instanceObject := GetInstance(instance)
+     surfaceObject := GetSurface(surface)
+     assert(surfaceObject.instance == instance)
+@@ -4670,6 +4671,7 @@ cmd VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
+ cmd VkResult vkCreateSwapchainKHR(
+         VkDevice                                 device,
+         const VkSwapchainCreateInfoKHR*          pCreateInfo,
++        const VkAllocationCallbacks*             pAllocator,
+         VkSwapchainKHR*                          pSwapchain) {
+     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR)
+     deviceObject := GetDevice(device)
+@@ -4684,7 +4686,8 @@ cmd VkResult vkCreateSwapchainKHR(
+ @extension("VK_KHR_swapchain")
+ cmd void vkDestroySwapchainKHR(
+         VkDevice                                 device,
+-        VkSwapchainKHR                           swapchain) {
++        VkSwapchainKHR                           swapchain,
++        const VkAllocationCallbacks*             pAllocator) {
+     deviceObject := GetDevice(device)
+     swapchainObject := GetSwapchain(swapchain)
+     assert(swapchainObject.device == device)
+@@ -4784,6 +4787,7 @@ cmd VkResult vkCreateDisplayModeKHR(
+         VkPhysicalDevice                        physicalDevice,
+         VkDisplayKHR                            display,
+         const VkDisplayModeCreateInfoKHR*       pCreateInfo,
++        const VkAllocationCallbacks*            pAllocator,
+         VkDisplayModeKHR*                       pMode) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     return ?
+@@ -4803,6 +4807,7 @@ cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
+ cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
+         VkInstance                              instance,
+         const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     return ?
+ }
+@@ -4812,6 +4817,7 @@ cmd VkResult vkCreateXlibSurfaceKHR(
+         VkInstance                              instance,
+         platform.Display*                       dpy,
+         platform.Window                         window,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+@@ -4832,6 +4838,7 @@ cmd VkResult vkCreateXCBSurfaceKHR(
+         VkInstance                              instance,
+         platform.xcb_connection_t*              connection,
+         platform.xcb_window_t                   window,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+@@ -4852,6 +4859,7 @@ cmd VkResult vkCreateWaylandSurfaceKHR(
+         VkInstance                              instance,
+         platform.wl_display*                    display,
+         platform.wl_surface*                    surface,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+@@ -4871,6 +4879,7 @@ cmd VkResult vkCreateMirSurfaceKHR(
+         VkInstance                              instance,
+         platform.MirConnection*                 connection,
+         platform.MirSurface*                    mirSurface,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+@@ -4888,7 +4897,8 @@ cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
+ @extension("VK_KHR_android_surface")
+ cmd VkResult vkCreateAndroidSurfaceKHR(
+         VkInstance                              instance,
+-        platform.ANativeWindow*                 window
++        platform.ANativeWindow*                 window,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+@@ -4899,6 +4909,7 @@ cmd VkResult vkCreateWin32SurfaceKHR(
+         VkInstance                              instance,
+         platform.HINSTANCE                      hinstance,
+         platform.HWND                           hwnd,
++        const VkAllocationCallbacks*            pAllocator,
+         VkSurfaceKHR*                           pSurface) {
+     instanceObject := GetInstance(instance)
+     return ?
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 2791b8a..b342285 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 204, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 205, 0)
+ #define VK_NULL_HANDLE 0
+@@ -3068,7 +3068,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+ #define VK_KHR_surface 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+-#define VK_KHR_SURFACE_REVISION           22
++#define VK_KHR_SURFACE_REVISION           23
+ #define VK_KHR_SURFACE_EXTENSION_NUMBER   1
+ #define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
+ #define VK_ERROR_SURFACE_LOST_KHR         ((VkResult)(int)0xc0000400)
+@@ -3150,7 +3150,7 @@ typedef struct VkSurfaceFormatKHR {
+ } VkSurfaceFormatKHR;
+-typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
++typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
+@@ -3159,7 +3159,8 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPh
+ #ifdef VK_PROTOTYPES
+ VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
+     VkInstance                                   instance,
+-    VkSurfaceKHR                                 surface);
++    VkSurfaceKHR                                 surface,
++    const VkAllocationCallbacks*                pAllocator);
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
+     VkPhysicalDevice                            physicalDevice,
+@@ -3188,7 +3189,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+ #define VK_KHR_swapchain 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+-#define VK_KHR_SWAPCHAIN_REVISION         65
++#define VK_KHR_SWAPCHAIN_REVISION         66
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
+ #define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+@@ -3229,8 +3230,8 @@ typedef struct VkPresentInfoKHR {
+ } VkPresentInfoKHR;
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, VkSwapchainKHR*  pSwapchain);
+-typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice  device, const VkSwapchainCreateInfoKHR*  pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR*  pSwapchain);
++typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pSwapchainImageCount, VkImage*  pSwapchainImages);
+ typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint64_t  timeout, VkSemaphore  semaphore, VkFence  fence, uint32_t*  pImageIndex);
+ typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
+@@ -3239,11 +3240,13 @@ typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInf
+ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+     VkDevice                                     device,
+     const VkSwapchainCreateInfoKHR*              pCreateInfo,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSwapchainKHR*                              pSwapchain);
+ VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
+     VkDevice                                     device,
+-    VkSwapchainKHR                               swapchain);
++    VkSwapchainKHR                               swapchain,
++    const VkAllocationCallbacks*                pAllocator);
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
+     VkDevice                                     device,
+@@ -3268,7 +3271,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+-#define VK_KHR_DISPLAY_REVISION           18
++#define VK_KHR_DISPLAY_REVISION           19
+ #define VK_KHR_DISPLAY_EXTENSION_NUMBER   3
+ #define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
+ #define VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c00)
+@@ -3342,9 +3345,9 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhys
+ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayKHR* pProperties);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ #ifdef VK_PROTOTYPES
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
+@@ -3372,6 +3375,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+     VkPhysicalDevice                            physicalDevice,
+     VkDisplayKHR                                display,
+     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
++    const VkAllocationCallbacks*                pAllocator,
+     VkDisplayModeKHR*                           pMode);
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+@@ -3383,11 +3387,12 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+     VkInstance                                  instance,
+     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ #endif
+ #define VK_KHR_display_swapchain 1
+-#define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 7
++#define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 8
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+ #define VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0001000)
+@@ -3414,11 +3419,11 @@ typedef struct VkDisplayPresentInfoKHR {
+ #define VK_KHR_xlib_surface 1
+ #include <X11/Xlib.h>
+-#define VK_KHR_XLIB_SURFACE_REVISION      4
++#define VK_KHR_XLIB_SURFACE_REVISION      5
+ #define VK_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
+ #define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
+ #ifdef VK_PROTOTYPES
+@@ -3426,6 +3431,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
+     VkInstance                                  instance,
+     Display*                                    dpy,
+     Window                                      window,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
+@@ -3440,11 +3446,11 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
+ #define VK_KHR_xcb_surface 1
+ #include <xcb/xcb.h>
+-#define VK_KHR_XCB_SURFACE_REVISION       4
++#define VK_KHR_XCB_SURFACE_REVISION       5
+ #define VK_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
+ #define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
+ #ifdef VK_PROTOTYPES
+@@ -3452,6 +3458,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
+     VkInstance                                  instance,
+     xcb_connection_t*                           connection,
+     xcb_window_t                                window,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
+@@ -3466,11 +3473,11 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
+ #define VK_KHR_wayland_surface 1
+ #include <wayland-client.h>
+-#define VK_KHR_WAYLAND_SURFACE_REVISION   3
++#define VK_KHR_WAYLAND_SURFACE_REVISION   4
+ #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
+ #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
+ #ifdef VK_PROTOTYPES
+@@ -3478,6 +3485,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
+     VkInstance                                  instance,
+     struct wl_display*                          display,
+     struct wl_surface*                          surface,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+@@ -3491,11 +3499,11 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+ #define VK_KHR_mir_surface 1
+ #include <mir_toolkit/client_types.h>
+-#define VK_KHR_MIR_SURFACE_REVISION       3
++#define VK_KHR_MIR_SURFACE_REVISION       4
+ #define VK_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
+ #define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
+ #ifdef VK_PROTOTYPES
+@@ -3503,6 +3511,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
+     VkInstance                                  instance,
+     MirConnection*                              connection,
+     MirSurface*                                 mirSurface,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+@@ -3516,18 +3525,19 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+ #define VK_KHR_android_surface 1
+ #include <android/native_window.h>
+-#define VK_KHR_ANDROID_SURFACE_REVISION   2
++#define VK_KHR_ANDROID_SURFACE_REVISION   3
+ #define VK_KHR_ANDROID_SURFACE_EXTENSION_NUMBER 9
+ #define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
+ #define VK_ERROR_INVALID_ANDROID_WINDOW_KHR ((VkResult)(int)0xc0002400)
+ #define VK_ERROR_ANDROID_WINDOW_IN_USE_KHR ((VkResult)(int)0xc0002401)
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, ANativeWindow* window, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, ANativeWindow* window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ #ifdef VK_PROTOTYPES
+ VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
+     VkInstance                                  instance,
+     ANativeWindow*                              window,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ #endif
+ #endif /* VK_USE_PLATFORM_ANDROID_KHR */
+@@ -3536,11 +3546,11 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
+ #define VK_KHR_win32_surface 1
+ #include <windows.h>
+-#define VK_KHR_WIN32_SURFACE_REVISION     3
++#define VK_KHR_WIN32_SURFACE_REVISION     4
+ #define VK_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
+ #define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
+-typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
++typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
+ #ifdef VK_PROTOTYPES
+@@ -3548,6 +3558,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
+     VkInstance                                  instance,
+     HINSTANCE                                   hinstance,
+     HWND                                        hwnd,
++    const VkAllocationCallbacks*                pAllocator,
+     VkSurfaceKHR*                               pSurface);
+ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 7b8db6b..67b8c38 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -727,8 +727,8 @@ VKAPI_ATTR void vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t com
+ }
+ __attribute__((visibility("default")))
+-VKAPI_ATTR void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface) {
+-    GetVtbl(instance).DestroySurfaceKHR(instance, surface);
++VKAPI_ATTR void vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator) {
++    GetVtbl(instance).DestroySurfaceKHR(instance, surface, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -752,13 +752,13 @@ VKAPI_ATTR VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice p
+ }
+ __attribute__((visibility("default")))
+-VKAPI_ATTR VkResult vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, VkSwapchainKHR* pSwapchain) {
+-    return GetVtbl(device).CreateSwapchainKHR(device, pCreateInfo, pSwapchain);
++VKAPI_ATTR VkResult vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) {
++    return GetVtbl(device).CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
+ }
+ __attribute__((visibility("default")))
+-VKAPI_ATTR void vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain) {
+-    GetVtbl(device).DestroySwapchainKHR(device, swapchain);
++VKAPI_ATTR void vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) {
++    GetVtbl(device).DestroySwapchainKHR(device, swapchain, pAllocator);
+ }
+ __attribute__((visibility("default")))
+@@ -777,6 +777,6 @@ VKAPI_ATTR VkResult vkQueuePresentKHR(VkQueue queue, VkPresentInfoKHR* pPresentI
+ }
+ __attribute__((visibility("default")))
+-VKAPI_ATTR VkResult vkCreateAndroidSurfaceKHR(VkInstance instance, struct ANativeWindow* window, VkSurfaceKHR* pSurface) {
+-    return GetVtbl(instance).CreateAndroidSurfaceKHR(instance, window, pSurface);
++VKAPI_ATTR VkResult vkCreateAndroidSurfaceKHR(VkInstance instance, struct ANativeWindow* window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface) {
++    return GetVtbl(instance).CreateAndroidSurfaceKHR(instance, window, pAllocator, pSurface);
+ }
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 6aa8673..35d0eaa 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -212,7 +212,7 @@ VkResult EnumerateInstanceExtensionProperties(
+ VkResult EnumerateInstanceLayerProperties(uint32_t* count,
+                                           VkLayerProperties* properties);
+ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
+-                        const VkAllocationCallbacks* pAllocator,
++                        const VkAllocationCallbacks* allocator,
+                         VkInstance* instance);
+ PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name);
+ PFN_vkVoidFunction GetDeviceProcAddr(VkDevice drv_device, const char* name);
+@@ -224,7 +224,7 @@ VkResult AllocCommandBuffers(VkDevice device,
+                              const VkCommandBufferAllocateInfo* alloc_info,
+                              VkCommandBuffer* cmdbufs);
+ VkResult DestroyDevice(VkDevice drv_device,
+-                       const VkAllocationCallbacks* pAllocator);
++                       const VkAllocationCallbacks* allocator);
+ void* AllocMem(VkInstance instance,
+                size_t size,
+@@ -261,10 +261,14 @@ bool LoadDeviceVtbl(VkDevice device,
+ // -----------------------------------------------------------------------------
+ // swapchain.cpp
+-VKAPI_ATTR VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+-                                            ANativeWindow* window,
+-                                            VkSurfaceKHR* surface);
+-VKAPI_ATTR void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
++VKAPI_ATTR VkResult
++CreateAndroidSurfaceKHR(VkInstance instance,
++                        ANativeWindow* window,
++                        const VkAllocationCallbacks* allocator,
++                        VkSurfaceKHR* surface);
++VKAPI_ATTR void DestroySurfaceKHR(VkInstance instance,
++                                  VkSurfaceKHR surface,
++                                  const VkAllocationCallbacks* allocator);
+ VKAPI_ATTR VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
+                                                        uint32_t queue_family,
+                                                        VkSurfaceKHR surface,
+@@ -286,9 +290,11 @@ GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice pdev,
+ VKAPI_ATTR VkResult
+ CreateSwapchainKHR(VkDevice device,
+                    const VkSwapchainCreateInfoKHR* create_info,
++                   const VkAllocationCallbacks* allocator,
+                    VkSwapchainKHR* swapchain_handle);
+-VKAPI_ATTR VkResult
+-DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle);
++VKAPI_ATTR VkResult DestroySwapchainKHR(VkDevice device,
++                                        VkSwapchainKHR swapchain_handle,
++                                        const VkAllocationCallbacks* allocator);
+ VKAPI_ATTR VkResult GetSwapchainImagesKHR(VkDevice device,
+                                           VkSwapchainKHR swapchain_handle,
+                                           uint32_t* count,
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index fa5ea59..ee15878 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -144,6 +144,7 @@ namespace vulkan {
+ VKAPI_ATTR
+ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+                                  ANativeWindow* window,
++                                 const VkAllocationCallbacks* /*allocator*/,
+                                  VkSurfaceKHR* out_surface) {
+     void* mem = AllocMem(instance, sizeof(Surface), alignof(Surface),
+                          VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+@@ -171,7 +172,9 @@ VkResult CreateAndroidSurfaceKHR(VkInstance instance,
+ }
+ VKAPI_ATTR
+-void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface_handle) {
++void DestroySurfaceKHR(VkInstance instance,
++                       VkSurfaceKHR surface_handle,
++                       const VkAllocationCallbacks* /*allocator*/) {
+     Surface* surface = SurfaceFromHandle(surface_handle);
+     if (!surface)
+         return;
+@@ -184,8 +187,8 @@ VKAPI_ATTR
+ VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
+                                             uint32_t /*queue_family*/,
+                                             VkSurfaceKHR /*surface*/,
+-                                            VkBool32* pSupported) {
+-    *pSupported = VK_TRUE;
++                                            VkBool32* supported) {
++    *supported = VK_TRUE;
+     return VK_SUCCESS;
+ }
+@@ -296,6 +299,7 @@ VkResult GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice /*pdev*/,
+ VKAPI_ATTR
+ VkResult CreateSwapchainKHR(VkDevice device,
+                             const VkSwapchainCreateInfoKHR* create_info,
++                            const VkAllocationCallbacks* /*allocator*/,
+                             VkSwapchainKHR* swapchain_handle) {
+     int err;
+     VkResult result = VK_SUCCESS;
+@@ -483,7 +487,9 @@ VkResult CreateSwapchainKHR(VkDevice device,
+ }
+ VKAPI_ATTR
+-VkResult DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain_handle) {
++VkResult DestroySwapchainKHR(VkDevice device,
++                             VkSwapchainKHR swapchain_handle,
++                             const VkAllocationCallbacks* /*allocator*/) {
+     const DeviceVtbl& driver_vtbl = GetDriverVtbl(device);
+     Swapchain* swapchain = SwapchainFromHandle(swapchain_handle);
+     const std::shared_ptr<ANativeWindow>& window = swapchain->surface.window;
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0026-vulkan-Update-from-version-0.205.0-to-0.206.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0026-vulkan-Update-from-version-0.205.0-to-0.206.0.patch
new file mode 100644 (file)
index 0000000..f79ee4e
--- /dev/null
@@ -0,0 +1,292 @@
+From 63b94206122e3a7e1175471be20ee22d445ee201 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 14:25:46 -0800
+Subject: [PATCH 26/30] vulkan: Update from version 0.205.0 to 0.206.0
+
+Change-Id: I36370f6ec41abf235975a0c769c03c8f25851d14
+---
+ vulkan/api/vulkan.api          | 14 ++++++++------
+ vulkan/include/vulkan/vulkan.h | 40 +++++++++++++++++++++-------------------
+ vulkan/libvulkan/Android.mk    |  4 ++++
+ vulkan/libvulkan/swapchain.cpp |  7 -------
+ vulkan/tools/Android.mk        |  4 ++++
+ 5 files changed, 37 insertions(+), 32 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 1c4bb8f..73f26e0 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 205
++define VERSION_MINOR 206
+ define VERSION_PATCH 0
+ // API limits
+@@ -1293,7 +1293,7 @@ class VkDeviceQueueCreateInfo {
+     const void*                                 pNext                     /// Pointer to next structure
+     VkDeviceQueueCreateFlags                    flags
+     u32                                         queueFamilyIndex
+-    u32                                         queuePriorityCount
++    u32                                         queueCount
+     const f32*                                  pQueuePriorities
+ }
+@@ -1301,8 +1301,8 @@ class VkDeviceCreateInfo {
+     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
+     VkDeviceCreateFlags                         flags
+-    u32                                         requestedQueueRecordCount
+-    const VkDeviceQueueCreateInfo*              pRequestedQueues
++    u32                                         queueCreateInfoCount
++    const VkDeviceQueueCreateInfo*              pQueueCreateInfos
+     u32                                         enabledLayerNameCount
+     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
+     u32                                         enabledExtensionNameCount
+@@ -1642,7 +1642,7 @@ class VkShaderModuleCreateInfo {
+ class VkDescriptorSetLayoutBinding {
+     u32                                         binding
+     VkDescriptorType                            descriptorType     /// Type of the descriptors in this binding
+-    u32                                         arraySize          /// Number of descriptors in this binding
++    u32                                         descriptorCount    /// Number of descriptors in this binding
+     VkShaderStageFlags                          stageFlags         /// Shader stages this binding is visible to
+     const VkSampler*                            pImmutableSamplers /// Immutable samplers (used if descriptor type is SAMPLER or COMBINED_IMAGE_SAMPLER, is either NULL or contains <count> number of elements)
+ }
+@@ -2111,6 +2111,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         maxPerStageDescriptorSampledImages        /// max num of sampled images allowed per-stage in a descriptor set
+     u32                                         maxPerStageDescriptorStorageImages        /// max num of storage images allowed per-stage in a descriptor set
+     u32                                         maxPerStageDescriptorInputAttachments
++    u32                                         maxPerStageResources
+     u32                                         maxDescriptorSetSamplers                  /// max num of samplers allowed in all stages in a descriptor set
+     u32                                         maxDescriptorSetUniformBuffers            /// max num of uniform buffers allowed in all stages in a descriptor set
+     u32                                         maxDescriptorSetUniformBuffersDynamic     /// max num of dynamic uniform buffers allowed in all stages in a descriptor set
+@@ -2156,7 +2157,7 @@ class VkPhysicalDeviceLimits {
+     u32                                         mipmapPrecisionBits                       /// num bits of mipmap precision
+     u32                                         maxDrawIndexedIndexValue                  /// max index value for indexed draw calls (for 32-bit indices)
+-    u32                                         maxDrawIndirectInstanceCount              /// max instance count for indirect draw calls
++    u32                                         maxDrawIndirectCount
+     f32                                         maxSamplerLodBias                         /// max absolute sampler level of detail bias
+     f32                                         maxSamplerAnisotropy                      /// max degree of sampler anisotropy
+@@ -2212,6 +2213,7 @@ class VkPhysicalDeviceLimits {
+     VkDeviceSize                                optimalBufferCopyOffsetAlignment
+     VkDeviceSize                                optimalBufferCopyRowPitchAlignment
++    VkDeviceSize                                nonCoherentAtomSize
+ }
+ class VkPhysicalDeviceSparseProperties {
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index b342285..ba749a1 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 205, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 206, 0)
+ #define VK_NULL_HANDLE 0
+@@ -125,6 +125,12 @@ typedef enum VkResult {
+     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+     VK_ERROR_TOO_MANY_OBJECTS = -10,
+     VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
++    VK_ERROR_SURFACE_LOST_KHR = 0xC0000400,
++    VK_SUBOPTIMAL_KHR = 0x40000403,
++    VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
++    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001002,
++    VK_ERROR_INVALID_ANDROID_WINDOW_KHR = 0xC0002400,
++    VK_ERROR_ANDROID_WINDOW_IN_USE_KHR = 0xC0002401,
+     VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+     VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
+@@ -180,6 +186,12 @@ typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
+     VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 46,
+     VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 47,
++    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0xC0000800,
++    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 0xC0000801,
++    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xC0000C00,
++    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 0xC0000C01,
++    VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR = 0xC0001000,
++    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 0xC0001001,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
+     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+@@ -447,6 +459,7 @@ typedef enum VkImageLayout {
+     VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
+     VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+     VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
++    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 0xC0000802,
+     VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
+     VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
+     VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
+@@ -1204,6 +1217,7 @@ typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    maxPerStageDescriptorSampledImages;
+     uint32_t                                    maxPerStageDescriptorStorageImages;
+     uint32_t                                    maxPerStageDescriptorInputAttachments;
++    uint32_t                                    maxPerStageResources;
+     uint32_t                                    maxDescriptorSetSamplers;
+     uint32_t                                    maxDescriptorSetUniformBuffers;
+     uint32_t                                    maxDescriptorSetUniformBuffersDynamic;
+@@ -1242,7 +1256,7 @@ typedef struct VkPhysicalDeviceLimits {
+     uint32_t                                    subTexelPrecisionBits;
+     uint32_t                                    mipmapPrecisionBits;
+     uint32_t                                    maxDrawIndexedIndexValue;
+-    uint32_t                                    maxDrawIndirectInstanceCount;
++    uint32_t                                    maxDrawIndirectCount;
+     float                                       maxSamplerLodBias;
+     float                                       maxSamplerAnisotropy;
+     uint32_t                                    maxViewports;
+@@ -1287,6 +1301,7 @@ typedef struct VkPhysicalDeviceLimits {
+     VkBool32                                    standardSampleLocations;
+     VkDeviceSize                                optimalBufferCopyOffsetAlignment;
+     VkDeviceSize                                optimalBufferCopyRowPitchAlignment;
++    VkDeviceSize                                nonCoherentAtomSize;
+ } VkPhysicalDeviceLimits;
+ typedef struct VkPhysicalDeviceSparseProperties {
+@@ -1338,7 +1353,7 @@ typedef struct VkDeviceQueueCreateInfo {
+     const void*                                 pNext;
+     VkDeviceQueueCreateFlags                    flags;
+     uint32_t                                    queueFamilyIndex;
+-    uint32_t                                    queuePriorityCount;
++    uint32_t                                    queueCount;
+     const float*                                pQueuePriorities;
+ } VkDeviceQueueCreateInfo;
+@@ -1346,8 +1361,8 @@ typedef struct VkDeviceCreateInfo {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+     VkDeviceCreateFlags                         flags;
+-    uint32_t                                    requestedQueueCount;
+-    const VkDeviceQueueCreateInfo*              pRequestedQueues;
++    uint32_t                                    queueCreateInfoCount;
++    const VkDeviceQueueCreateInfo*              pQueueCreateInfos;
+     uint32_t                                    enabledLayerNameCount;
+     const char*const*                           ppEnabledLayerNames;
+     uint32_t                                    enabledExtensionNameCount;
+@@ -1839,7 +1854,7 @@ typedef struct VkSamplerCreateInfo {
+ typedef struct VkDescriptorSetLayoutBinding {
+     uint32_t                                    binding;
+     VkDescriptorType                            descriptorType;
+-    uint32_t                                    arraySize;
++    uint32_t                                    descriptorCount;
+     VkShaderStageFlags                          stageFlags;
+     const VkSampler*                            pImmutableSamplers;
+ } VkDescriptorSetLayoutBinding;
+@@ -3071,7 +3086,6 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+ #define VK_KHR_SURFACE_REVISION           23
+ #define VK_KHR_SURFACE_EXTENSION_NUMBER   1
+ #define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
+-#define VK_ERROR_SURFACE_LOST_KHR         ((VkResult)(int)0xc0000400)
+ typedef enum VkSurfaceTransformKHR {
+@@ -3192,11 +3206,6 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+ #define VK_KHR_SWAPCHAIN_REVISION         66
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
+-#define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
+-#define VK_STRUCTURE_TYPE_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0000801)
+-#define VK_IMAGE_LAYOUT_PRESENT_SRC_KHR   ((VkImageLayout)(int)0xc0000802)
+-#define VK_SUBOPTIMAL_KHR                 ((VkResult)(int)0x40000403)
+-#define VK_ERROR_OUT_OF_DATE_KHR          ((VkResult)(int)0xc0000804)
+ typedef struct VkSwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+@@ -3274,8 +3283,6 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+ #define VK_KHR_DISPLAY_REVISION           19
+ #define VK_KHR_DISPLAY_EXTENSION_NUMBER   3
+ #define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
+-#define VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c00)
+-#define VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c01)
+ typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+@@ -3395,9 +3402,6 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+ #define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 8
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+-#define VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0001000)
+-#define VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR ((VkStructureType)(int)0xc0001001)
+-#define VK_ERROR_INCOMPATIBLE_DISPLAY_KHR ((VkResult)(int)0xc0001002)
+ typedef struct VkDisplaySwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+@@ -3528,8 +3532,6 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+ #define VK_KHR_ANDROID_SURFACE_REVISION   3
+ #define VK_KHR_ANDROID_SURFACE_EXTENSION_NUMBER 9
+ #define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
+-#define VK_ERROR_INVALID_ANDROID_WINDOW_KHR ((VkResult)(int)0xc0002400)
+-#define VK_ERROR_ANDROID_WINDOW_IN_USE_KHR ((VkResult)(int)0xc0002401)
+ typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, ANativeWindow* window, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+diff --git a/vulkan/libvulkan/Android.mk b/vulkan/libvulkan/Android.mk
+index 7a2eb64..2f809c2 100644
+--- a/vulkan/libvulkan/Android.mk
++++ b/vulkan/libvulkan/Android.mk
+@@ -25,6 +25,10 @@ LOCAL_CPPFLAGS := -std=c++1y \
+       -Wno-c99-extensions \
+       -Wno-zero-length-array
++# TODO(jessehall): Very temporary, until VkResult values are defined as signed integers
++# rather than unsigned hex values.
++LOCAL_CFLAGS += -Wno-error=format
++
+ LOCAL_C_INCLUDES := \
+       frameworks/native/vulkan/include \
+       system/core/libsync/include
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index ee15878..ff02b35 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -569,10 +569,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+     if (idx == swapchain.num_images) {
+         ALOGE("dequeueBuffer returned unrecognized buffer");
+         window->cancelBuffer(window, buffer, fence);
+-#pragma clang diagnostic push
+-#pragma clang diagnostic ignored "-Wold-style-cast"
+         return VK_ERROR_OUT_OF_DATE_KHR;
+-#pragma clang diagnostic pop
+     }
+     int fence_clone = -1;
+@@ -616,13 +613,9 @@ VkResult AcquireNextImageKHR(VkDevice device,
+ VKAPI_ATTR
+ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+-#pragma clang diagnostic push
+-#pragma clang diagnostic ignored "-Wold-style-cast"
+-#pragma clang diagnostic ignored "-Wsign-conversion"
+     ALOGV_IF(present_info->sType != VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
+              "vkQueuePresentKHR: invalid VkPresentInfoKHR structure type %d",
+              present_info->sType);
+-#pragma clang diagnostic pop
+     ALOGV_IF(present_info->pNext, "VkPresentInfo::pNext != NULL");
+     const DeviceVtbl& driver_vtbl = GetDriverVtbl(queue);
+diff --git a/vulkan/tools/Android.mk b/vulkan/tools/Android.mk
+index 31d6089..2c2309f 100644
+--- a/vulkan/tools/Android.mk
++++ b/vulkan/tools/Android.mk
+@@ -23,6 +23,10 @@ LOCAL_CPPFLAGS := -std=c++1y \
+       -Wno-c++98-compat-pedantic \
+       -Wno-c99-extensions
++# TODO(jessehall): Very temporary, until VkResult values are defined as signed integers
++# rather than unsigned hex values.
++LOCAL_CFLAGS += -Wno-error=format
++
+ LOCAL_C_INCLUDES := \
+       frameworks/native/vulkan/include
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0027-vulkan-Update-from-version-0.206.0-to-0.209.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0027-vulkan-Update-from-version-0.206.0-to-0.209.0.patch
new file mode 100644 (file)
index 0000000..fe01c4f
--- /dev/null
@@ -0,0 +1,1441 @@
+From 6b46fedd72f5168b95519afeeeb74c92c663affe Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 16:04:55 -0800
+Subject: [PATCH 27/30] vulkan: Update from version 0.206.0 to 0.209.0
+
+Change-Id: Ieaf1c4c01f3376cde407bef193a9aa33e77ca123
+---
+ vulkan/api/vulkan.api          | 459 +++++++++++++++++++++--------------------
+ vulkan/include/vulkan/vulkan.h | 437 ++++++++++++++++++++-------------------
+ vulkan/libvulkan/entry.cpp     |   6 +-
+ vulkan/libvulkan/loader.h      |   2 +-
+ vulkan/libvulkan/swapchain.cpp |  16 +-
+ 5 files changed, 469 insertions(+), 451 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 73f26e0..d35e11d 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 206
++define VERSION_MINOR 209
+ define VERSION_PATCH 0
+ // API limits
+@@ -45,15 +45,15 @@ define VK_FALSE       0
+ // API keyword, but needs special handling by some templates
+ define NULL_HANDLE 0
+-@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION                     23
++@extension("VK_KHR_surface") define VK_KHR_SURFACE_REVISION                     24
+ @extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NUMBER             1
+ @extension("VK_KHR_surface") define VK_KHR_SURFACE_EXTENSION_NAME               "VK_KHR_surface"
+-@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 66
++@extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_REVISION                 67
+ @extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
+ @extension("VK_KHR_swapchain") define VK_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_KHR_swapchain"
+-@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION                     19
++@extension("VK_KHR_display") define VK_KHR_DISPLAY_REVISION                     21
+ @extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER             3
+ @extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
+@@ -77,7 +77,7 @@ define NULL_HANDLE 0
+ @extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NUMBER               8
+ @extension("VK_KHR_mir_surface") define VK_KHR_MIR_SURFACE_NAME                 "VK_KHR_mir_surface"
+-@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION     3
++@extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_REVISION     4
+ @extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NUMBER       8
+ @extension("VK_KHR_android_surface") define VK_KHR_ANDROID_SURFACE_NAME         "VK_KHR_android_surface"
+@@ -384,180 +384,191 @@ enum VkVertexInputRate {
+ /// Vulkan format definitions
+ enum VkFormat {
+-    VK_FORMAT_UNDEFINED                                     = 0x00000000,
+-    VK_FORMAT_R4G4_UNORM                                    = 0x00000001,
+-    VK_FORMAT_R4G4_USCALED                                  = 0x00000002,
+-    VK_FORMAT_R4G4B4A4_UNORM                                = 0x00000003,
+-    VK_FORMAT_R4G4B4A4_USCALED                              = 0x00000004,
+-    VK_FORMAT_R5G6B5_UNORM                                  = 0x00000005,
+-    VK_FORMAT_R5G6B5_USCALED                                = 0x00000006,
+-    VK_FORMAT_R5G5B5A1_UNORM                                = 0x00000007,
+-    VK_FORMAT_R5G5B5A1_USCALED                              = 0x00000008,
+-    VK_FORMAT_R8_UNORM                                      = 0x00000009,
+-    VK_FORMAT_R8_SNORM                                      = 0x0000000A,
+-    VK_FORMAT_R8_USCALED                                    = 0x0000000B,
+-    VK_FORMAT_R8_SSCALED                                    = 0x0000000C,
+-    VK_FORMAT_R8_UINT                                       = 0x0000000D,
+-    VK_FORMAT_R8_SINT                                       = 0x0000000E,
+-    VK_FORMAT_R8_SRGB                                       = 0x0000000F,
+-    VK_FORMAT_R8G8_UNORM                                    = 0x00000010,
+-    VK_FORMAT_R8G8_SNORM                                    = 0x00000011,
+-    VK_FORMAT_R8G8_USCALED                                  = 0x00000012,
+-    VK_FORMAT_R8G8_SSCALED                                  = 0x00000013,
+-    VK_FORMAT_R8G8_UINT                                     = 0x00000014,
+-    VK_FORMAT_R8G8_SINT                                     = 0x00000015,
+-    VK_FORMAT_R8G8_SRGB                                     = 0x00000016,
+-    VK_FORMAT_R8G8B8_UNORM                                  = 0x00000017,
+-    VK_FORMAT_R8G8B8_SNORM                                  = 0x00000018,
+-    VK_FORMAT_R8G8B8_USCALED                                = 0x00000019,
+-    VK_FORMAT_R8G8B8_SSCALED                                = 0x0000001A,
+-    VK_FORMAT_R8G8B8_UINT                                   = 0x0000001B,
+-    VK_FORMAT_R8G8B8_SINT                                   = 0x0000001C,
+-    VK_FORMAT_R8G8B8_SRGB                                   = 0x0000001D,
+-    VK_FORMAT_R8G8B8A8_UNORM                                = 0x0000001E,
+-    VK_FORMAT_R8G8B8A8_SNORM                                = 0x0000001F,
+-    VK_FORMAT_R8G8B8A8_USCALED                              = 0x00000020,
+-    VK_FORMAT_R8G8B8A8_SSCALED                              = 0x00000021,
+-    VK_FORMAT_R8G8B8A8_UINT                                 = 0x00000022,
+-    VK_FORMAT_R8G8B8A8_SINT                                 = 0x00000023,
+-    VK_FORMAT_R8G8B8A8_SRGB                                 = 0x00000024,
+-    VK_FORMAT_R10G10B10A2_UNORM                             = 0x00000025,
+-    VK_FORMAT_R10G10B10A2_SNORM                             = 0x00000026,
+-    VK_FORMAT_R10G10B10A2_USCALED                           = 0x00000027,
+-    VK_FORMAT_R10G10B10A2_SSCALED                           = 0x00000028,
+-    VK_FORMAT_R10G10B10A2_UINT                              = 0x00000029,
+-    VK_FORMAT_R10G10B10A2_SINT                              = 0x0000002A,
+-    VK_FORMAT_R16_UNORM                                     = 0x0000002B,
+-    VK_FORMAT_R16_SNORM                                     = 0x0000002C,
+-    VK_FORMAT_R16_USCALED                                   = 0x0000002D,
+-    VK_FORMAT_R16_SSCALED                                   = 0x0000002E,
+-    VK_FORMAT_R16_UINT                                      = 0x0000002F,
+-    VK_FORMAT_R16_SINT                                      = 0x00000030,
+-    VK_FORMAT_R16_SFLOAT                                    = 0x00000031,
+-    VK_FORMAT_R16G16_UNORM                                  = 0x00000032,
+-    VK_FORMAT_R16G16_SNORM                                  = 0x00000033,
+-    VK_FORMAT_R16G16_USCALED                                = 0x00000034,
+-    VK_FORMAT_R16G16_SSCALED                                = 0x00000035,
+-    VK_FORMAT_R16G16_UINT                                   = 0x00000036,
+-    VK_FORMAT_R16G16_SINT                                   = 0x00000037,
+-    VK_FORMAT_R16G16_SFLOAT                                 = 0x00000038,
+-    VK_FORMAT_R16G16B16_UNORM                               = 0x00000039,
+-    VK_FORMAT_R16G16B16_SNORM                               = 0x0000003A,
+-    VK_FORMAT_R16G16B16_USCALED                             = 0x0000003B,
+-    VK_FORMAT_R16G16B16_SSCALED                             = 0x0000003C,
+-    VK_FORMAT_R16G16B16_UINT                                = 0x0000003D,
+-    VK_FORMAT_R16G16B16_SINT                                = 0x0000003E,
+-    VK_FORMAT_R16G16B16_SFLOAT                              = 0x0000003F,
+-    VK_FORMAT_R16G16B16A16_UNORM                            = 0x00000040,
+-    VK_FORMAT_R16G16B16A16_SNORM                            = 0x00000041,
+-    VK_FORMAT_R16G16B16A16_USCALED                          = 0x00000042,
+-    VK_FORMAT_R16G16B16A16_SSCALED                          = 0x00000043,
+-    VK_FORMAT_R16G16B16A16_UINT                             = 0x00000044,
+-    VK_FORMAT_R16G16B16A16_SINT                             = 0x00000045,
+-    VK_FORMAT_R16G16B16A16_SFLOAT                           = 0x00000046,
+-    VK_FORMAT_R32_UINT                                      = 0x00000047,
+-    VK_FORMAT_R32_SINT                                      = 0x00000048,
+-    VK_FORMAT_R32_SFLOAT                                    = 0x00000049,
+-    VK_FORMAT_R32G32_UINT                                   = 0x0000004A,
+-    VK_FORMAT_R32G32_SINT                                   = 0x0000004B,
+-    VK_FORMAT_R32G32_SFLOAT                                 = 0x0000004C,
+-    VK_FORMAT_R32G32B32_UINT                                = 0x0000004D,
+-    VK_FORMAT_R32G32B32_SINT                                = 0x0000004E,
+-    VK_FORMAT_R32G32B32_SFLOAT                              = 0x0000004F,
+-    VK_FORMAT_R32G32B32A32_UINT                             = 0x00000050,
+-    VK_FORMAT_R32G32B32A32_SINT                             = 0x00000051,
+-    VK_FORMAT_R32G32B32A32_SFLOAT                           = 0x00000052,
+-    VK_FORMAT_R64_SFLOAT                                    = 0x00000053,
+-    VK_FORMAT_R64G64_SFLOAT                                 = 0x00000054,
+-    VK_FORMAT_R64G64B64_SFLOAT                              = 0x00000055,
+-    VK_FORMAT_R64G64B64A64_SFLOAT                           = 0x00000056,
+-    VK_FORMAT_R11G11B10_UFLOAT                              = 0x00000057,
+-    VK_FORMAT_R9G9B9E5_UFLOAT                               = 0x00000058,
+-    VK_FORMAT_D16_UNORM                                     = 0x00000059,
+-    VK_FORMAT_D24_UNORM_X8                                  = 0x0000005A,
+-    VK_FORMAT_D32_SFLOAT                                    = 0x0000005B,
+-    VK_FORMAT_S8_UINT                                       = 0x0000005C,
+-    VK_FORMAT_D16_UNORM_S8_UINT                             = 0x0000005D,
+-    VK_FORMAT_D24_UNORM_S8_UINT                             = 0x0000005E,
+-    VK_FORMAT_D32_SFLOAT_S8_UINT                            = 0x0000005F,
+-    VK_FORMAT_BC1_RGB_UNORM                                 = 0x00000060,
+-    VK_FORMAT_BC1_RGB_SRGB                                  = 0x00000061,
+-    VK_FORMAT_BC1_RGBA_UNORM                                = 0x00000062,
+-    VK_FORMAT_BC1_RGBA_SRGB                                 = 0x00000063,
+-    VK_FORMAT_BC2_UNORM                                     = 0x00000064,
+-    VK_FORMAT_BC2_SRGB                                      = 0x00000065,
+-    VK_FORMAT_BC3_UNORM                                     = 0x00000066,
+-    VK_FORMAT_BC3_SRGB                                      = 0x00000067,
+-    VK_FORMAT_BC4_UNORM                                     = 0x00000068,
+-    VK_FORMAT_BC4_SNORM                                     = 0x00000069,
+-    VK_FORMAT_BC5_UNORM                                     = 0x0000006A,
+-    VK_FORMAT_BC5_SNORM                                     = 0x0000006B,
+-    VK_FORMAT_BC6H_UFLOAT                                   = 0x0000006C,
+-    VK_FORMAT_BC6H_SFLOAT                                   = 0x0000006D,
+-    VK_FORMAT_BC7_UNORM                                     = 0x0000006E,
+-    VK_FORMAT_BC7_SRGB                                      = 0x0000006F,
+-    VK_FORMAT_ETC2_R8G8B8_UNORM                             = 0x00000070,
+-    VK_FORMAT_ETC2_R8G8B8_SRGB                              = 0x00000071,
+-    VK_FORMAT_ETC2_R8G8B8A1_UNORM                           = 0x00000072,
+-    VK_FORMAT_ETC2_R8G8B8A1_SRGB                            = 0x00000073,
+-    VK_FORMAT_ETC2_R8G8B8A8_UNORM                           = 0x00000074,
+-    VK_FORMAT_ETC2_R8G8B8A8_SRGB                            = 0x00000075,
+-    VK_FORMAT_EAC_R11_UNORM                                 = 0x00000076,
+-    VK_FORMAT_EAC_R11_SNORM                                 = 0x00000077,
+-    VK_FORMAT_EAC_R11G11_UNORM                              = 0x00000078,
+-    VK_FORMAT_EAC_R11G11_SNORM                              = 0x00000079,
+-    VK_FORMAT_ASTC_4x4_UNORM                                = 0x0000007A,
+-    VK_FORMAT_ASTC_4x4_SRGB                                 = 0x0000007B,
+-    VK_FORMAT_ASTC_5x4_UNORM                                = 0x0000007C,
+-    VK_FORMAT_ASTC_5x4_SRGB                                 = 0x0000007D,
+-    VK_FORMAT_ASTC_5x5_UNORM                                = 0x0000007E,
+-    VK_FORMAT_ASTC_5x5_SRGB                                 = 0x0000007F,
+-    VK_FORMAT_ASTC_6x5_UNORM                                = 0x00000080,
+-    VK_FORMAT_ASTC_6x5_SRGB                                 = 0x00000081,
+-    VK_FORMAT_ASTC_6x6_UNORM                                = 0x00000082,
+-    VK_FORMAT_ASTC_6x6_SRGB                                 = 0x00000083,
+-    VK_FORMAT_ASTC_8x5_UNORM                                = 0x00000084,
+-    VK_FORMAT_ASTC_8x5_SRGB                                 = 0x00000085,
+-    VK_FORMAT_ASTC_8x6_UNORM                                = 0x00000086,
+-    VK_FORMAT_ASTC_8x6_SRGB                                 = 0x00000087,
+-    VK_FORMAT_ASTC_8x8_UNORM                                = 0x00000088,
+-    VK_FORMAT_ASTC_8x8_SRGB                                 = 0x00000089,
+-    VK_FORMAT_ASTC_10x5_UNORM                               = 0x0000008A,
+-    VK_FORMAT_ASTC_10x5_SRGB                                = 0x0000008B,
+-    VK_FORMAT_ASTC_10x6_UNORM                               = 0x0000008C,
+-    VK_FORMAT_ASTC_10x6_SRGB                                = 0x0000008D,
+-    VK_FORMAT_ASTC_10x8_UNORM                               = 0x0000008E,
+-    VK_FORMAT_ASTC_10x8_SRGB                                = 0x0000008F,
+-    VK_FORMAT_ASTC_10x10_UNORM                              = 0x00000090,
+-    VK_FORMAT_ASTC_10x10_SRGB                               = 0x00000091,
+-    VK_FORMAT_ASTC_12x10_UNORM                              = 0x00000092,
+-    VK_FORMAT_ASTC_12x10_SRGB                               = 0x00000093,
+-    VK_FORMAT_ASTC_12x12_UNORM                              = 0x00000094,
+-    VK_FORMAT_ASTC_12x12_SRGB                               = 0x00000095,
+-    VK_FORMAT_B4G4R4A4_UNORM                                = 0x00000096,
+-    VK_FORMAT_B5G5R5A1_UNORM                                = 0x00000097,
+-    VK_FORMAT_B5G6R5_UNORM                                  = 0x00000098,
+-    VK_FORMAT_B5G6R5_USCALED                                = 0x00000099,
+-    VK_FORMAT_B8G8R8_UNORM                                  = 0x0000009A,
+-    VK_FORMAT_B8G8R8_SNORM                                  = 0x0000009B,
+-    VK_FORMAT_B8G8R8_USCALED                                = 0x0000009C,
+-    VK_FORMAT_B8G8R8_SSCALED                                = 0x0000009D,
+-    VK_FORMAT_B8G8R8_UINT                                   = 0x0000009E,
+-    VK_FORMAT_B8G8R8_SINT                                   = 0x0000009F,
+-    VK_FORMAT_B8G8R8_SRGB                                   = 0x000000A0,
+-    VK_FORMAT_B8G8R8A8_UNORM                                = 0x000000A1,
+-    VK_FORMAT_B8G8R8A8_SNORM                                = 0x000000A2,
+-    VK_FORMAT_B8G8R8A8_USCALED                              = 0x000000A3,
+-    VK_FORMAT_B8G8R8A8_SSCALED                              = 0x000000A4,
+-    VK_FORMAT_B8G8R8A8_UINT                                 = 0x000000A5,
+-    VK_FORMAT_B8G8R8A8_SINT                                 = 0x000000A6,
+-    VK_FORMAT_B8G8R8A8_SRGB                                 = 0x000000A7,
+-    VK_FORMAT_B10G10R10A2_UNORM                             = 0x000000A8,
+-    VK_FORMAT_B10G10R10A2_SNORM                             = 0x000000A9,
+-    VK_FORMAT_B10G10R10A2_USCALED                           = 0x000000AA,
+-    VK_FORMAT_B10G10R10A2_SSCALED                           = 0x000000AB,
+-    VK_FORMAT_B10G10R10A2_UINT                              = 0x000000AC,
+-    VK_FORMAT_B10G10R10A2_SINT                              = 0x000000AD,
++    VK_FORMAT_UNDEFINED                                     = 0,
++    VK_FORMAT_R4G4_UNORM_PACK8                              = 1,
++    VK_FORMAT_R4G4B4A4_UNORM_PACK16                         = 2,
++    VK_FORMAT_B4G4R4A4_UNORM_PACK16                         = 3,
++    VK_FORMAT_R5G6B5_UNORM_PACK16                           = 4,
++    VK_FORMAT_B5G6R5_UNORM_PACK16                           = 5,
++    VK_FORMAT_R5G5B5A1_UNORM_PACK16                         = 6,
++    VK_FORMAT_B5G5R5A1_UNORM_PACK16                         = 7,
++    VK_FORMAT_A1R5G5B5_UNORM_PACK16                         = 8,
++    VK_FORMAT_R8_UNORM                                      = 9,
++    VK_FORMAT_R8_SNORM                                      = 10,
++    VK_FORMAT_R8_USCALED                                    = 11,
++    VK_FORMAT_R8_SSCALED                                    = 12,
++    VK_FORMAT_R8_UINT                                       = 13,
++    VK_FORMAT_R8_SINT                                       = 14,
++    VK_FORMAT_R8_SRGB                                       = 15,
++    VK_FORMAT_R8G8_UNORM                                    = 16,
++    VK_FORMAT_R8G8_SNORM                                    = 17,
++    VK_FORMAT_R8G8_USCALED                                  = 18,
++    VK_FORMAT_R8G8_SSCALED                                  = 19,
++    VK_FORMAT_R8G8_UINT                                     = 20,
++    VK_FORMAT_R8G8_SINT                                     = 21,
++    VK_FORMAT_R8G8_SRGB                                     = 22,
++    VK_FORMAT_R8G8B8_UNORM                                  = 23,
++    VK_FORMAT_R8G8B8_SNORM                                  = 24,
++    VK_FORMAT_R8G8B8_USCALED                                = 25,
++    VK_FORMAT_R8G8B8_SSCALED                                = 26,
++    VK_FORMAT_R8G8B8_UINT                                   = 27,
++    VK_FORMAT_R8G8B8_SINT                                   = 28,
++    VK_FORMAT_R8G8B8_SRGB                                   = 29,
++    VK_FORMAT_B8G8R8_UNORM                                  = 30,
++    VK_FORMAT_B8G8R8_SNORM                                  = 31,
++    VK_FORMAT_B8G8R8_USCALED                                = 32,
++    VK_FORMAT_B8G8R8_SSCALED                                = 33,
++    VK_FORMAT_B8G8R8_UINT                                   = 34,
++    VK_FORMAT_B8G8R8_SINT                                   = 35,
++    VK_FORMAT_B8G8R8_SRGB                                   = 36,
++    VK_FORMAT_R8G8B8A8_UNORM                                = 37,
++    VK_FORMAT_R8G8B8A8_SNORM                                = 38,
++    VK_FORMAT_R8G8B8A8_USCALED                              = 39,
++    VK_FORMAT_R8G8B8A8_SSCALED                              = 40,
++    VK_FORMAT_R8G8B8A8_UINT                                 = 41,
++    VK_FORMAT_R8G8B8A8_SINT                                 = 42,
++    VK_FORMAT_R8G8B8A8_SRGB                                 = 43,
++    VK_FORMAT_B8G8R8A8_UNORM                                = 44,
++    VK_FORMAT_B8G8R8A8_SNORM                                = 45,
++    VK_FORMAT_B8G8R8A8_USCALED                              = 46,
++    VK_FORMAT_B8G8R8A8_SSCALED                              = 47,
++    VK_FORMAT_B8G8R8A8_UINT                                 = 48,
++    VK_FORMAT_B8G8R8A8_SINT                                 = 49,
++    VK_FORMAT_B8G8R8A8_SRGB                                 = 50,
++    VK_FORMAT_A8B8G8R8_UNORM_PACK32                         = 51,
++    VK_FORMAT_A8B8G8R8_SNORM_PACK32                         = 52,
++    VK_FORMAT_A8B8G8R8_USCALED_PACK32                       = 53,
++    VK_FORMAT_A8B8G8R8_SSCALED_PACK32                       = 54,
++    VK_FORMAT_A8B8G8R8_UINT_PACK32                          = 55,
++    VK_FORMAT_A8B8G8R8_SINT_PACK32                          = 56,
++    VK_FORMAT_A8B8G8R8_SRGB_PACK32                          = 57,
++    VK_FORMAT_A2R10G10B10_UNORM_PACK32                      = 58,
++    VK_FORMAT_A2R10G10B10_SNORM_PACK32                      = 59,
++    VK_FORMAT_A2R10G10B10_USCALED_PACK32                    = 60,
++    VK_FORMAT_A2R10G10B10_SSCALED_PACK32                    = 61,
++    VK_FORMAT_A2R10G10B10_UINT_PACK32                       = 62,
++    VK_FORMAT_A2R10G10B10_SINT_PACK32                       = 63,
++    VK_FORMAT_A2B10G10R10_UNORM_PACK32                      = 64,
++    VK_FORMAT_A2B10G10R10_SNORM_PACK32                      = 65,
++    VK_FORMAT_A2B10G10R10_USCALED_PACK32                    = 66,
++    VK_FORMAT_A2B10G10R10_SSCALED_PACK32                    = 67,
++    VK_FORMAT_A2B10G10R10_UINT_PACK32                       = 68,
++    VK_FORMAT_A2B10G10R10_SINT_PACK32                       = 69,
++    VK_FORMAT_R16_UNORM                                     = 70,
++    VK_FORMAT_R16_SNORM                                     = 71,
++    VK_FORMAT_R16_USCALED                                   = 72,
++    VK_FORMAT_R16_SSCALED                                   = 73,
++    VK_FORMAT_R16_UINT                                      = 74,
++    VK_FORMAT_R16_SINT                                      = 75,
++    VK_FORMAT_R16_SFLOAT                                    = 76,
++    VK_FORMAT_R16G16_UNORM                                  = 77,
++    VK_FORMAT_R16G16_SNORM                                  = 78,
++    VK_FORMAT_R16G16_USCALED                                = 79,
++    VK_FORMAT_R16G16_SSCALED                                = 80,
++    VK_FORMAT_R16G16_UINT                                   = 81,
++    VK_FORMAT_R16G16_SINT                                   = 82,
++    VK_FORMAT_R16G16_SFLOAT                                 = 83,
++    VK_FORMAT_R16G16B16_UNORM                               = 84,
++    VK_FORMAT_R16G16B16_SNORM                               = 85,
++    VK_FORMAT_R16G16B16_USCALED                             = 86,
++    VK_FORMAT_R16G16B16_SSCALED                             = 87,
++    VK_FORMAT_R16G16B16_UINT                                = 88,
++    VK_FORMAT_R16G16B16_SINT                                = 89,
++    VK_FORMAT_R16G16B16_SFLOAT                              = 90,
++    VK_FORMAT_R16G16B16A16_UNORM                            = 91,
++    VK_FORMAT_R16G16B16A16_SNORM                            = 92,
++    VK_FORMAT_R16G16B16A16_USCALED                          = 93,
++    VK_FORMAT_R16G16B16A16_SSCALED                          = 94,
++    VK_FORMAT_R16G16B16A16_UINT                             = 95,
++    VK_FORMAT_R16G16B16A16_SINT                             = 96,
++    VK_FORMAT_R16G16B16A16_SFLOAT                           = 97,
++    VK_FORMAT_R32_UINT                                      = 98,
++    VK_FORMAT_R32_SINT                                      = 99,
++    VK_FORMAT_R32_SFLOAT                                    = 100,
++    VK_FORMAT_R32G32_UINT                                   = 101,
++    VK_FORMAT_R32G32_SINT                                   = 102,
++    VK_FORMAT_R32G32_SFLOAT                                 = 103,
++    VK_FORMAT_R32G32B32_UINT                                = 104,
++    VK_FORMAT_R32G32B32_SINT                                = 105,
++    VK_FORMAT_R32G32B32_SFLOAT                              = 106,
++    VK_FORMAT_R32G32B32A32_UINT                             = 107,
++    VK_FORMAT_R32G32B32A32_SINT                             = 108,
++    VK_FORMAT_R32G32B32A32_SFLOAT                           = 109,
++    VK_FORMAT_R64_UINT                                      = 110,
++    VK_FORMAT_R64_SINT                                      = 111,
++    VK_FORMAT_R64_SFLOAT                                    = 112,
++    VK_FORMAT_R64G64_UINT                                   = 113,
++    VK_FORMAT_R64G64_SINT                                   = 114,
++    VK_FORMAT_R64G64_SFLOAT                                 = 115,
++    VK_FORMAT_R64G64B64_UINT                                = 116,
++    VK_FORMAT_R64G64B64_SINT                                = 117,
++    VK_FORMAT_R64G64B64_SFLOAT                              = 118,
++    VK_FORMAT_R64G64B64A64_UINT                             = 119,
++    VK_FORMAT_R64G64B64A64_SINT                             = 120,
++    VK_FORMAT_R64G64B64A64_SFLOAT                           = 121,
++    VK_FORMAT_B10G11R11_UFLOAT_PACK32                       = 122,
++    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32                        = 123,
++    VK_FORMAT_D16_UNORM                                     = 124,
++    VK_FORMAT_X8_D24_UNORM_PACK32                           = 125,
++    VK_FORMAT_D32_SFLOAT                                    = 126,
++    VK_FORMAT_S8_UINT                                       = 127,
++    VK_FORMAT_D16_UNORM_S8_UINT                             = 128,
++    VK_FORMAT_D24_UNORM_S8_UINT                             = 129,
++    VK_FORMAT_D32_SFLOAT_S8_UINT                            = 130,
++    VK_FORMAT_BC1_RGB_UNORM_BLOCK                           = 131,
++    VK_FORMAT_BC1_RGB_SRGB_BLOCK                            = 132,
++    VK_FORMAT_BC1_RGBA_UNORM_BLOCK                          = 133,
++    VK_FORMAT_BC1_RGBA_SRGB_BLOCK                           = 134,
++    VK_FORMAT_BC2_UNORM_BLOCK                               = 135,
++    VK_FORMAT_BC2_SRGB_BLOCK                                = 136,
++    VK_FORMAT_BC3_UNORM_BLOCK                               = 137,
++    VK_FORMAT_BC3_SRGB_BLOCK                                = 138,
++    VK_FORMAT_BC4_UNORM_BLOCK                               = 139,
++    VK_FORMAT_BC4_SNORM_BLOCK                               = 140,
++    VK_FORMAT_BC5_UNORM_BLOCK                               = 141,
++    VK_FORMAT_BC5_SNORM_BLOCK                               = 142,
++    VK_FORMAT_BC6H_UFLOAT_BLOCK                             = 143,
++    VK_FORMAT_BC6H_SFLOAT_BLOCK                             = 144,
++    VK_FORMAT_BC7_UNORM_BLOCK                               = 145,
++    VK_FORMAT_BC7_SRGB_BLOCK                                = 146,
++    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK                       = 147,
++    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK                        = 148,
++    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK                     = 149,
++    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK                      = 150,
++    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK                     = 151,
++    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK                      = 152,
++    VK_FORMAT_EAC_R11_UNORM_BLOCK                           = 153,
++    VK_FORMAT_EAC_R11_SNORM_BLOCK                           = 154,
++    VK_FORMAT_EAC_R11G11_UNORM_BLOCK                        = 155,
++    VK_FORMAT_EAC_R11G11_SNORM_BLOCK                        = 156,
++    VK_FORMAT_ASTC_4x4_UNORM_BLOCK                          = 157,
++    VK_FORMAT_ASTC_4x4_SRGB_BLOCK                           = 158,
++    VK_FORMAT_ASTC_5x4_UNORM_BLOCK                          = 159,
++    VK_FORMAT_ASTC_5x4_SRGB_BLOCK                           = 160,
++    VK_FORMAT_ASTC_5x5_UNORM_BLOCK                          = 161,
++    VK_FORMAT_ASTC_5x5_SRGB_BLOCK                           = 162,
++    VK_FORMAT_ASTC_6x5_UNORM_BLOCK                          = 163,
++    VK_FORMAT_ASTC_6x5_SRGB_BLOCK                           = 164,
++    VK_FORMAT_ASTC_6x6_UNORM_BLOCK                          = 165,
++    VK_FORMAT_ASTC_6x6_SRGB_BLOCK                           = 166,
++    VK_FORMAT_ASTC_8x5_UNORM_BLOCK                          = 167,
++    VK_FORMAT_ASTC_8x5_SRGB_BLOCK                           = 168,
++    VK_FORMAT_ASTC_8x6_UNORM_BLOCK                          = 169,
++    VK_FORMAT_ASTC_8x6_SRGB_BLOCK                           = 170,
++    VK_FORMAT_ASTC_8x8_UNORM_BLOCK                          = 171,
++    VK_FORMAT_ASTC_8x8_SRGB_BLOCK                           = 172,
++    VK_FORMAT_ASTC_10x5_UNORM_BLOCK                         = 173,
++    VK_FORMAT_ASTC_10x5_SRGB_BLOCK                          = 174,
++    VK_FORMAT_ASTC_10x6_UNORM_BLOCK                         = 175,
++    VK_FORMAT_ASTC_10x6_SRGB_BLOCK                          = 176,
++    VK_FORMAT_ASTC_10x8_UNORM_BLOCK                         = 177,
++    VK_FORMAT_ASTC_10x8_SRGB_BLOCK                          = 178,
++    VK_FORMAT_ASTC_10x10_UNORM_BLOCK                        = 179,
++    VK_FORMAT_ASTC_10x10_SRGB_BLOCK                         = 180,
++    VK_FORMAT_ASTC_12x10_UNORM_BLOCK                        = 181,
++    VK_FORMAT_ASTC_12x10_SRGB_BLOCK                         = 182,
++    VK_FORMAT_ASTC_12x12_UNORM_BLOCK                        = 183,
++    VK_FORMAT_ASTC_12x12_SRGB_BLOCK                         = 184,
+ }
+ /// Structure type enumerant
+@@ -567,7 +578,7 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO                  = 2,
+     VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO                        = 3,
+     VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 4,
+-    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO                         = 5,
++    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO                      = 5,
+     VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 6,
+     VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 7,
+     VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 8,
+@@ -596,20 +607,20 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 31,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 32,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 33,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO                 = 34,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO              = 34,
+     VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 35,
+     VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 36,
+     VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 37,
+     VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 38,
+     VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO                  = 39,
+-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO                 = 40,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO              = 40,
+     VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO                 = 41,
+     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 42,
+     VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 43,
+     VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 44,
+     VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 45,
+-    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 46,
+-    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 47,
++    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO               = 46,
++    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                 = 47,
+     //@extension("VK_KHR_swapchain")
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
+@@ -665,8 +676,7 @@ enum VkResult {
+     VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001002,
+     //@extension("VK_KHR_android_surface")
+-    VK_ERROR_INVALID_ANDROID_WINDOW_KHR                     = 0xC002400,
+-    VK_ERROR_ANDROID_WINDOW_IN_USE_KHR                      = 0xC002401,
++    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                       = 0xC0002400,
+ }
+ enum VkDynamicState {
+@@ -681,19 +691,6 @@ enum VkDynamicState {
+     VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
+ }
+-@extension("VK_KHR_surface")
+-enum VkSurfaceTransformKHR {
+-    VK_SURFACE_TRANSFORM_NONE_KHR                           = 0x00000000,
+-    VK_SURFACE_TRANSFORM_ROT90_KHR                          = 0x00000001,
+-    VK_SURFACE_TRANSFORM_ROT180_KHR                         = 0x00000002,
+-    VK_SURFACE_TRANSFORM_ROT270_KHR                         = 0x00000003,
+-    VK_SURFACE_TRANSFORM_HMIRROR_KHR                        = 0x00000004,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR                  = 0x00000005,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR                 = 0x00000006,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR                 = 0x00000007,
+-    VK_SURFACE_TRANSFORM_INHERIT_KHR                        = 0x00000008,
+-}
+-
+ @extension("VK_KHR_swapchain")
+ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
+@@ -1171,15 +1168,28 @@ bitfield VkCompositeAlphaFlagBitsKHR {
+     VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
+ }
++@extension("VK_KHR_swapchain")
++type VkFlags VkSwapchainCreateFlagsKHR
++//@extension("VK_KHR_swapchain")
++//bitfield VkSwapchainCreateFlagBitsKHR {
++//}
++
+ @extension("VK_KHR_display")
+ type VkFlags VkDisplayPlaneAlphaFlagsKHR
+ @extension("VK_KHR_display")
+ bitfield VkDisplayPlaneAlphaFlagBitsKHR {
+-    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000001,
+-    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000002,
+-    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000004,
++    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR                   = 0x00000001,
++    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR                   = 0x00000002,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR                = 0x00000004,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR  = 0x00000008,
+ }
++@extension("VK_KHR_display")
++type VkFlags VkDisplaySurfaceCreateFlagsKHR
++//@extension("VK_KHR_display")
++//bitfield VkDisplaySurfaceCreateFlagBitsKHR {
++//}
++
+ //////////////////
+ //  Structures  //
+@@ -1336,7 +1346,7 @@ class VkPhysicalDeviceMemoryProperties {
+ }
+ class VkMemoryAllocateInfo {
+-    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
++    VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
+     const void*                                 pNext                      /// Pointer to next structure
+     VkDeviceSize                                allocationSize             /// Size of memory allocation
+     u32                                         memoryTypeIndex            /// Index of the of the memory type to allocate from
+@@ -1670,7 +1680,7 @@ class VkDescriptorPoolCreateInfo {
+ }
+ class VkDescriptorSetAllocateInfo {
+-    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO
++    VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
+     const void*                                 pNext              /// Pointer to next structure
+     VkDescriptorPool                            descriptorPool
+     u32                                         setCount
+@@ -1915,7 +1925,7 @@ class VkCommandPoolCreateInfo {
+ }
+ class VkCommandBufferAllocateInfo {
+-    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO
++    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
+     const void*                                 pNext      /// Pointer to next structure
+     VkCommandPool                               commandPool
+     VkCommandBufferLevel                        level
+@@ -1929,6 +1939,9 @@ class VkCommandBufferBeginInfo {
+     VkRenderPass                                renderPass  /// Render pass for secondary command buffers
+     u32                                         subpass
+     VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
++    VkBool32                                    occlusionQueryEnable
++    VkQueryControlFlags                         queryFlags
++    VkQueryPipelineStatisticFlags               pipelineStatistics
+ }
+ class VkRenderPassBeginInfo {
+@@ -2279,10 +2292,10 @@ class VkSurfaceCapabilitiesKHR {
+     VkExtent2D                                  currentExtent
+     VkExtent2D                                  minImageExtent
+     VkExtent2D                                  maxImageExtent
++    u32                                         maxImageArrayLayers
+     VkSurfaceTransformFlagsKHR                  supportedTransforms
+-    VkSurfaceTransformKHR                       currentTransform
++    VkSurfaceTransformFlagBitsKHR               currentTransform
+     VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
+-    u32                                         maxImageArraySize
+     VkImageUsageFlags                           supportedUsageFlags
+ }
+@@ -2296,21 +2309,22 @@ class VkSurfaceFormatKHR {
+ class VkSwapchainCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
++    VkSwapchainCreateFlagsKHR                   flags
+     VkSurfaceKHR                                surface
+     u32                                         minImageCount
+     VkFormat                                    imageFormat
+     VkColorSpaceKHR                             imageColorSpace
+     VkExtent2D                                  imageExtent
+-    VkImageUsageFlags                           imageUsageFlags
+-    VkSurfaceTransformKHR                       preTransform
+-    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
+-    u32                                         imageArraySize
++    u32                                         imageArrayLayers
++    VkImageUsageFlags                           imageUsage
+     VkSharingMode                               sharingMode
+     u32                                         queueFamilyIndexCount
+     const u32*                                  pQueueFamilyIndices
++    VkSurfaceTransformFlagBitsKHR               preTransform
++    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
+     VkPresentModeKHR                            presentMode
+-    VkSwapchainKHR                              oldSwapchain
+     VkBool32                                    clipped
++    VkSwapchainKHR                              oldSwapchain
+ }
+ @extension("VK_KHR_swapchain")
+@@ -2321,7 +2335,7 @@ class VkPresentInfoKHR {
+     const VkSemaphore*                          pWaitSemaphores
+     u32                                         swapchainCount
+     const VkSwapchainKHR*                       pSwapchains
+-    const u32*                                  imageIndices
++    const u32*                                  pImageIndices
+     VkResult*                                   pResults
+ }
+@@ -2378,13 +2392,14 @@ class VkDisplayPlaneCapabilitiesKHR {
+ class VkDisplaySurfaceCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
++    VkDisplaySurfaceCreateFlagsKHR              flags
+     VkDisplayModeKHR                            displayMode
+     u32                                         planeIndex
+     u32                                         planeStackIndex
+-    VkSurfaceTransformKHR                       transform
++    VkSurfaceTransformFlagBitsKHR               transform
+     f32                                         globalAlpha
+-    VkDisplayPlaneAlphaFlagsKHR                 alphaMode
+-    VkExtent2D                                  imageSize
++    VkDisplayPlaneAlphaFlagBitsKHR              alphaMode
++    VkExtent2D                                  imageExtent
+ }
+ @extension("VK_KHR_display_swapchain")
+@@ -2767,7 +2782,7 @@ cmd VkResult vkAllocateMemory(
+         const VkMemoryAllocateInfo*                 pAllocateInfo,
+         const VkAllocationCallbacks*                pAllocator,
+         VkDeviceMemory*                             pMemory) {
+-    assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
++    assert(pAllocateInfo.sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
+     deviceObject := GetDevice(device)
+     memory := ?
+@@ -3830,7 +3845,7 @@ cmd VkResult vkAllocateCommandBuffers(
+         VkDevice                                    device,
+         const VkCommandBufferAllocateInfo*          pAllocateInfo,
+         VkCommandBuffer*                            pCommandBuffers) {
+-    assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
++    assert(pAllocateInfo[0].sType == VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
+     count := pAllocateInfo[0].bufferCount
+     commandBuffers := pCommandBuffers[0:count]
+@@ -4545,7 +4560,7 @@ cmd void vkCmdPushConstants(
+         VkShaderStageFlags                          stageFlags,
+         u32                                         offset,
+         u32                                         size,
+-        const void*                                 values) {
++        const void*                                 pValues) {
+     commandBufferObject := GetCommandBuffer(commandBuffer)
+     layoutObject := GetPipelineLayout(layout)
+     assert(commandBufferObject.device == layoutObject.device)
+@@ -4738,7 +4753,7 @@ cmd VkResult vkAcquireNextImageKHR(
+ @extension("VK_KHR_swapchain")
+ cmd VkResult vkQueuePresentKHR(
+         VkQueue                                  queue,
+-        VkPresentInfoKHR*                        pPresentInfo) {
++        const VkPresentInfoKHR*                  pPresentInfo) {
+     queueObject := GetQueue(queue)
+     presentInfo := ?
+@@ -4768,8 +4783,8 @@ cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+ @extension("VK_KHR_display")
+ cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
+         VkPhysicalDevice                        physicalDevice,
+-        u32*                                    pPropertyCount,
+-        VkDisplayKHR*                           pProperties) {
++        u32*                                    pDisplayCount,
++        VkDisplayKHR*                           pDisplays) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+     return ?
+ }
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index ba749a1..a255e1f 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,11 +41,11 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 206, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 209, 0)
+ #define VK_NULL_HANDLE 0
+-
++        
+ #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
+@@ -56,7 +56,7 @@ extern "C" {
+ #else
+         #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
+ #endif
+-
++        
+ typedef uint32_t VkFlags;
+@@ -129,8 +129,7 @@ typedef enum VkResult {
+     VK_SUBOPTIMAL_KHR = 0x40000403,
+     VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
+     VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001002,
+-    VK_ERROR_INVALID_ANDROID_WINDOW_KHR = 0xC0002400,
+-    VK_ERROR_ANDROID_WINDOW_IN_USE_KHR = 0xC0002401,
++    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = 0xC0002400,
+     VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+     VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
+@@ -143,7 +142,7 @@ typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
+     VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
+     VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
+-    VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 5,
++    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
+     VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
+     VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
+     VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
+@@ -172,20 +171,20 @@ typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
+     VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
+-    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 34,
++    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
+     VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
+     VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
+     VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
+     VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
+     VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
+-    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO = 40,
++    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
+     VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 41,
+     VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 42,
+     VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 43,
+     VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 44,
+     VK_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
+-    VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 46,
+-    VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 47,
++    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 46,
++    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 47,
+     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0xC0000800,
+     VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 0xC0000801,
+     VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xC0000C00,
+@@ -193,8 +192,8 @@ typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR = 0xC0001000,
+     VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 0xC0001001,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+-    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
+-    VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
++    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
++    VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+ } VkStructureType;
+@@ -220,14 +219,14 @@ typedef enum VkInternalAllocationType {
+ typedef enum VkFormat {
+     VK_FORMAT_UNDEFINED = 0,
+-    VK_FORMAT_R4G4_UNORM = 1,
+-    VK_FORMAT_R4G4_USCALED = 2,
+-    VK_FORMAT_R4G4B4A4_UNORM = 3,
+-    VK_FORMAT_R4G4B4A4_USCALED = 4,
+-    VK_FORMAT_R5G6B5_UNORM = 5,
+-    VK_FORMAT_R5G6B5_USCALED = 6,
+-    VK_FORMAT_R5G5B5A1_UNORM = 7,
+-    VK_FORMAT_R5G5B5A1_USCALED = 8,
++    VK_FORMAT_R4G4_UNORM_PACK8 = 1,
++    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
++    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
++    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
++    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
++    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
++    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
++    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
+     VK_FORMAT_R8_UNORM = 9,
+     VK_FORMAT_R8_SNORM = 10,
+     VK_FORMAT_R8_USCALED = 11,
+@@ -249,153 +248,164 @@ typedef enum VkFormat {
+     VK_FORMAT_R8G8B8_UINT = 27,
+     VK_FORMAT_R8G8B8_SINT = 28,
+     VK_FORMAT_R8G8B8_SRGB = 29,
+-    VK_FORMAT_R8G8B8A8_UNORM = 30,
+-    VK_FORMAT_R8G8B8A8_SNORM = 31,
+-    VK_FORMAT_R8G8B8A8_USCALED = 32,
+-    VK_FORMAT_R8G8B8A8_SSCALED = 33,
+-    VK_FORMAT_R8G8B8A8_UINT = 34,
+-    VK_FORMAT_R8G8B8A8_SINT = 35,
+-    VK_FORMAT_R8G8B8A8_SRGB = 36,
+-    VK_FORMAT_R10G10B10A2_UNORM = 37,
+-    VK_FORMAT_R10G10B10A2_SNORM = 38,
+-    VK_FORMAT_R10G10B10A2_USCALED = 39,
+-    VK_FORMAT_R10G10B10A2_SSCALED = 40,
+-    VK_FORMAT_R10G10B10A2_UINT = 41,
+-    VK_FORMAT_R10G10B10A2_SINT = 42,
+-    VK_FORMAT_R16_UNORM = 43,
+-    VK_FORMAT_R16_SNORM = 44,
+-    VK_FORMAT_R16_USCALED = 45,
+-    VK_FORMAT_R16_SSCALED = 46,
+-    VK_FORMAT_R16_UINT = 47,
+-    VK_FORMAT_R16_SINT = 48,
+-    VK_FORMAT_R16_SFLOAT = 49,
+-    VK_FORMAT_R16G16_UNORM = 50,
+-    VK_FORMAT_R16G16_SNORM = 51,
+-    VK_FORMAT_R16G16_USCALED = 52,
+-    VK_FORMAT_R16G16_SSCALED = 53,
+-    VK_FORMAT_R16G16_UINT = 54,
+-    VK_FORMAT_R16G16_SINT = 55,
+-    VK_FORMAT_R16G16_SFLOAT = 56,
+-    VK_FORMAT_R16G16B16_UNORM = 57,
+-    VK_FORMAT_R16G16B16_SNORM = 58,
+-    VK_FORMAT_R16G16B16_USCALED = 59,
+-    VK_FORMAT_R16G16B16_SSCALED = 60,
+-    VK_FORMAT_R16G16B16_UINT = 61,
+-    VK_FORMAT_R16G16B16_SINT = 62,
+-    VK_FORMAT_R16G16B16_SFLOAT = 63,
+-    VK_FORMAT_R16G16B16A16_UNORM = 64,
+-    VK_FORMAT_R16G16B16A16_SNORM = 65,
+-    VK_FORMAT_R16G16B16A16_USCALED = 66,
+-    VK_FORMAT_R16G16B16A16_SSCALED = 67,
+-    VK_FORMAT_R16G16B16A16_UINT = 68,
+-    VK_FORMAT_R16G16B16A16_SINT = 69,
+-    VK_FORMAT_R16G16B16A16_SFLOAT = 70,
+-    VK_FORMAT_R32_UINT = 71,
+-    VK_FORMAT_R32_SINT = 72,
+-    VK_FORMAT_R32_SFLOAT = 73,
+-    VK_FORMAT_R32G32_UINT = 74,
+-    VK_FORMAT_R32G32_SINT = 75,
+-    VK_FORMAT_R32G32_SFLOAT = 76,
+-    VK_FORMAT_R32G32B32_UINT = 77,
+-    VK_FORMAT_R32G32B32_SINT = 78,
+-    VK_FORMAT_R32G32B32_SFLOAT = 79,
+-    VK_FORMAT_R32G32B32A32_UINT = 80,
+-    VK_FORMAT_R32G32B32A32_SINT = 81,
+-    VK_FORMAT_R32G32B32A32_SFLOAT = 82,
+-    VK_FORMAT_R64_SFLOAT = 83,
+-    VK_FORMAT_R64G64_SFLOAT = 84,
+-    VK_FORMAT_R64G64B64_SFLOAT = 85,
+-    VK_FORMAT_R64G64B64A64_SFLOAT = 86,
+-    VK_FORMAT_R11G11B10_UFLOAT = 87,
+-    VK_FORMAT_R9G9B9E5_UFLOAT = 88,
+-    VK_FORMAT_D16_UNORM = 89,
+-    VK_FORMAT_D24_UNORM_X8 = 90,
+-    VK_FORMAT_D32_SFLOAT = 91,
+-    VK_FORMAT_S8_UINT = 92,
+-    VK_FORMAT_D16_UNORM_S8_UINT = 93,
+-    VK_FORMAT_D24_UNORM_S8_UINT = 94,
+-    VK_FORMAT_D32_SFLOAT_S8_UINT = 95,
+-    VK_FORMAT_BC1_RGB_UNORM = 96,
+-    VK_FORMAT_BC1_RGB_SRGB = 97,
+-    VK_FORMAT_BC1_RGBA_UNORM = 98,
+-    VK_FORMAT_BC1_RGBA_SRGB = 99,
+-    VK_FORMAT_BC2_UNORM = 100,
+-    VK_FORMAT_BC2_SRGB = 101,
+-    VK_FORMAT_BC3_UNORM = 102,
+-    VK_FORMAT_BC3_SRGB = 103,
+-    VK_FORMAT_BC4_UNORM = 104,
+-    VK_FORMAT_BC4_SNORM = 105,
+-    VK_FORMAT_BC5_UNORM = 106,
+-    VK_FORMAT_BC5_SNORM = 107,
+-    VK_FORMAT_BC6H_UFLOAT = 108,
+-    VK_FORMAT_BC6H_SFLOAT = 109,
+-    VK_FORMAT_BC7_UNORM = 110,
+-    VK_FORMAT_BC7_SRGB = 111,
+-    VK_FORMAT_ETC2_R8G8B8_UNORM = 112,
+-    VK_FORMAT_ETC2_R8G8B8_SRGB = 113,
+-    VK_FORMAT_ETC2_R8G8B8A1_UNORM = 114,
+-    VK_FORMAT_ETC2_R8G8B8A1_SRGB = 115,
+-    VK_FORMAT_ETC2_R8G8B8A8_UNORM = 116,
+-    VK_FORMAT_ETC2_R8G8B8A8_SRGB = 117,
+-    VK_FORMAT_EAC_R11_UNORM = 118,
+-    VK_FORMAT_EAC_R11_SNORM = 119,
+-    VK_FORMAT_EAC_R11G11_UNORM = 120,
+-    VK_FORMAT_EAC_R11G11_SNORM = 121,
+-    VK_FORMAT_ASTC_4x4_UNORM = 122,
+-    VK_FORMAT_ASTC_4x4_SRGB = 123,
+-    VK_FORMAT_ASTC_5x4_UNORM = 124,
+-    VK_FORMAT_ASTC_5x4_SRGB = 125,
+-    VK_FORMAT_ASTC_5x5_UNORM = 126,
+-    VK_FORMAT_ASTC_5x5_SRGB = 127,
+-    VK_FORMAT_ASTC_6x5_UNORM = 128,
+-    VK_FORMAT_ASTC_6x5_SRGB = 129,
+-    VK_FORMAT_ASTC_6x6_UNORM = 130,
+-    VK_FORMAT_ASTC_6x6_SRGB = 131,
+-    VK_FORMAT_ASTC_8x5_UNORM = 132,
+-    VK_FORMAT_ASTC_8x5_SRGB = 133,
+-    VK_FORMAT_ASTC_8x6_UNORM = 134,
+-    VK_FORMAT_ASTC_8x6_SRGB = 135,
+-    VK_FORMAT_ASTC_8x8_UNORM = 136,
+-    VK_FORMAT_ASTC_8x8_SRGB = 137,
+-    VK_FORMAT_ASTC_10x5_UNORM = 138,
+-    VK_FORMAT_ASTC_10x5_SRGB = 139,
+-    VK_FORMAT_ASTC_10x6_UNORM = 140,
+-    VK_FORMAT_ASTC_10x6_SRGB = 141,
+-    VK_FORMAT_ASTC_10x8_UNORM = 142,
+-    VK_FORMAT_ASTC_10x8_SRGB = 143,
+-    VK_FORMAT_ASTC_10x10_UNORM = 144,
+-    VK_FORMAT_ASTC_10x10_SRGB = 145,
+-    VK_FORMAT_ASTC_12x10_UNORM = 146,
+-    VK_FORMAT_ASTC_12x10_SRGB = 147,
+-    VK_FORMAT_ASTC_12x12_UNORM = 148,
+-    VK_FORMAT_ASTC_12x12_SRGB = 149,
+-    VK_FORMAT_B4G4R4A4_UNORM = 150,
+-    VK_FORMAT_B5G5R5A1_UNORM = 151,
+-    VK_FORMAT_B5G6R5_UNORM = 152,
+-    VK_FORMAT_B5G6R5_USCALED = 153,
+-    VK_FORMAT_B8G8R8_UNORM = 154,
+-    VK_FORMAT_B8G8R8_SNORM = 155,
+-    VK_FORMAT_B8G8R8_USCALED = 156,
+-    VK_FORMAT_B8G8R8_SSCALED = 157,
+-    VK_FORMAT_B8G8R8_UINT = 158,
+-    VK_FORMAT_B8G8R8_SINT = 159,
+-    VK_FORMAT_B8G8R8_SRGB = 160,
+-    VK_FORMAT_B8G8R8A8_UNORM = 161,
+-    VK_FORMAT_B8G8R8A8_SNORM = 162,
+-    VK_FORMAT_B8G8R8A8_USCALED = 163,
+-    VK_FORMAT_B8G8R8A8_SSCALED = 164,
+-    VK_FORMAT_B8G8R8A8_UINT = 165,
+-    VK_FORMAT_B8G8R8A8_SINT = 166,
+-    VK_FORMAT_B8G8R8A8_SRGB = 167,
+-    VK_FORMAT_B10G10R10A2_UNORM = 168,
+-    VK_FORMAT_B10G10R10A2_SNORM = 169,
+-    VK_FORMAT_B10G10R10A2_USCALED = 170,
+-    VK_FORMAT_B10G10R10A2_SSCALED = 171,
+-    VK_FORMAT_B10G10R10A2_UINT = 172,
+-    VK_FORMAT_B10G10R10A2_SINT = 173,
++    VK_FORMAT_B8G8R8_UNORM = 30,
++    VK_FORMAT_B8G8R8_SNORM = 31,
++    VK_FORMAT_B8G8R8_USCALED = 32,
++    VK_FORMAT_B8G8R8_SSCALED = 33,
++    VK_FORMAT_B8G8R8_UINT = 34,
++    VK_FORMAT_B8G8R8_SINT = 35,
++    VK_FORMAT_B8G8R8_SRGB = 36,
++    VK_FORMAT_R8G8B8A8_UNORM = 37,
++    VK_FORMAT_R8G8B8A8_SNORM = 38,
++    VK_FORMAT_R8G8B8A8_USCALED = 39,
++    VK_FORMAT_R8G8B8A8_SSCALED = 40,
++    VK_FORMAT_R8G8B8A8_UINT = 41,
++    VK_FORMAT_R8G8B8A8_SINT = 42,
++    VK_FORMAT_R8G8B8A8_SRGB = 43,
++    VK_FORMAT_B8G8R8A8_UNORM = 44,
++    VK_FORMAT_B8G8R8A8_SNORM = 45,
++    VK_FORMAT_B8G8R8A8_USCALED = 46,
++    VK_FORMAT_B8G8R8A8_SSCALED = 47,
++    VK_FORMAT_B8G8R8A8_UINT = 48,
++    VK_FORMAT_B8G8R8A8_SINT = 49,
++    VK_FORMAT_B8G8R8A8_SRGB = 50,
++    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
++    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
++    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
++    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
++    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
++    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
++    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
++    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
++    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
++    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
++    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
++    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
++    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
++    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
++    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
++    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
++    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
++    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
++    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
++    VK_FORMAT_R16_UNORM = 70,
++    VK_FORMAT_R16_SNORM = 71,
++    VK_FORMAT_R16_USCALED = 72,
++    VK_FORMAT_R16_SSCALED = 73,
++    VK_FORMAT_R16_UINT = 74,
++    VK_FORMAT_R16_SINT = 75,
++    VK_FORMAT_R16_SFLOAT = 76,
++    VK_FORMAT_R16G16_UNORM = 77,
++    VK_FORMAT_R16G16_SNORM = 78,
++    VK_FORMAT_R16G16_USCALED = 79,
++    VK_FORMAT_R16G16_SSCALED = 80,
++    VK_FORMAT_R16G16_UINT = 81,
++    VK_FORMAT_R16G16_SINT = 82,
++    VK_FORMAT_R16G16_SFLOAT = 83,
++    VK_FORMAT_R16G16B16_UNORM = 84,
++    VK_FORMAT_R16G16B16_SNORM = 85,
++    VK_FORMAT_R16G16B16_USCALED = 86,
++    VK_FORMAT_R16G16B16_SSCALED = 87,
++    VK_FORMAT_R16G16B16_UINT = 88,
++    VK_FORMAT_R16G16B16_SINT = 89,
++    VK_FORMAT_R16G16B16_SFLOAT = 90,
++    VK_FORMAT_R16G16B16A16_UNORM = 91,
++    VK_FORMAT_R16G16B16A16_SNORM = 92,
++    VK_FORMAT_R16G16B16A16_USCALED = 93,
++    VK_FORMAT_R16G16B16A16_SSCALED = 94,
++    VK_FORMAT_R16G16B16A16_UINT = 95,
++    VK_FORMAT_R16G16B16A16_SINT = 96,
++    VK_FORMAT_R16G16B16A16_SFLOAT = 97,
++    VK_FORMAT_R32_UINT = 98,
++    VK_FORMAT_R32_SINT = 99,
++    VK_FORMAT_R32_SFLOAT = 100,
++    VK_FORMAT_R32G32_UINT = 101,
++    VK_FORMAT_R32G32_SINT = 102,
++    VK_FORMAT_R32G32_SFLOAT = 103,
++    VK_FORMAT_R32G32B32_UINT = 104,
++    VK_FORMAT_R32G32B32_SINT = 105,
++    VK_FORMAT_R32G32B32_SFLOAT = 106,
++    VK_FORMAT_R32G32B32A32_UINT = 107,
++    VK_FORMAT_R32G32B32A32_SINT = 108,
++    VK_FORMAT_R32G32B32A32_SFLOAT = 109,
++    VK_FORMAT_R64_UINT = 110,
++    VK_FORMAT_R64_SINT = 111,
++    VK_FORMAT_R64_SFLOAT = 112,
++    VK_FORMAT_R64G64_UINT = 113,
++    VK_FORMAT_R64G64_SINT = 114,
++    VK_FORMAT_R64G64_SFLOAT = 115,
++    VK_FORMAT_R64G64B64_UINT = 116,
++    VK_FORMAT_R64G64B64_SINT = 117,
++    VK_FORMAT_R64G64B64_SFLOAT = 118,
++    VK_FORMAT_R64G64B64A64_UINT = 119,
++    VK_FORMAT_R64G64B64A64_SINT = 120,
++    VK_FORMAT_R64G64B64A64_SFLOAT = 121,
++    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
++    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
++    VK_FORMAT_D16_UNORM = 124,
++    VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
++    VK_FORMAT_D32_SFLOAT = 126,
++    VK_FORMAT_S8_UINT = 127,
++    VK_FORMAT_D16_UNORM_S8_UINT = 128,
++    VK_FORMAT_D24_UNORM_S8_UINT = 129,
++    VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
++    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
++    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
++    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
++    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
++    VK_FORMAT_BC2_UNORM_BLOCK = 135,
++    VK_FORMAT_BC2_SRGB_BLOCK = 136,
++    VK_FORMAT_BC3_UNORM_BLOCK = 137,
++    VK_FORMAT_BC3_SRGB_BLOCK = 138,
++    VK_FORMAT_BC4_UNORM_BLOCK = 139,
++    VK_FORMAT_BC4_SNORM_BLOCK = 140,
++    VK_FORMAT_BC5_UNORM_BLOCK = 141,
++    VK_FORMAT_BC5_SNORM_BLOCK = 142,
++    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
++    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
++    VK_FORMAT_BC7_UNORM_BLOCK = 145,
++    VK_FORMAT_BC7_SRGB_BLOCK = 146,
++    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
++    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
++    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
++    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
++    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
++    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
++    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
++    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
++    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
++    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
++    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
++    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
++    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
++    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
++    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
++    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
++    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
++    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
++    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
++    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
++    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
++    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
++    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
++    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
++    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
++    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
++    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
++    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
++    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
++    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
++    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
++    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
++    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
++    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
++    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
++    VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
++    VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
++    VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
+     VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
+-    VK_FORMAT_END_RANGE = VK_FORMAT_B10G10R10A2_SINT,
+-    VK_FORMAT_RANGE_SIZE = (VK_FORMAT_B10G10R10A2_SINT - VK_FORMAT_UNDEFINED + 1),
++    VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
++    VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
+     VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
+ } VkFormat;
+@@ -1041,6 +1051,11 @@ typedef enum VkCommandBufferUsageFlagBits {
+ } VkCommandBufferUsageFlagBits;
+ typedef VkFlags VkCommandBufferUsageFlags;
++typedef enum VkQueryControlFlagBits {
++    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
++} VkQueryControlFlagBits;
++typedef VkFlags VkQueryControlFlags;
++
+ typedef enum VkCommandBufferResetFlagBits {
+     VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
+ } VkCommandBufferResetFlagBits;
+@@ -1054,11 +1069,6 @@ typedef enum VkStencilFaceFlagBits {
+ } VkStencilFaceFlagBits;
+ typedef VkFlags VkStencilFaceFlags;
+-typedef enum VkQueryControlFlagBits {
+-    VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
+-} VkQueryControlFlagBits;
+-typedef VkFlags VkQueryControlFlags;
+-
+ typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
+     void*                                       pUserData,
+     size_t                                      size,
+@@ -1106,9 +1116,9 @@ typedef struct VkInstanceCreateInfo {
+     VkInstanceCreateFlags                       flags;
+     const VkApplicationInfo*                    pApplicationInfo;
+     uint32_t                                    enabledLayerNameCount;
+-    const char*const*                           ppEnabledLayerNames;
++    const char* const*                          ppEnabledLayerNames;
+     uint32_t                                    enabledExtensionNameCount;
+-    const char*const*                           ppEnabledExtensionNames;
++    const char* const*                          ppEnabledExtensionNames;
+ } VkInstanceCreateInfo;
+ typedef struct VkAllocationCallbacks {
+@@ -1364,9 +1374,9 @@ typedef struct VkDeviceCreateInfo {
+     uint32_t                                    queueCreateInfoCount;
+     const VkDeviceQueueCreateInfo*              pQueueCreateInfos;
+     uint32_t                                    enabledLayerNameCount;
+-    const char*const*                           ppEnabledLayerNames;
++    const char* const*                          ppEnabledLayerNames;
+     uint32_t                                    enabledExtensionNameCount;
+-    const char*const*                           ppEnabledExtensionNames;
++    const char* const*                          ppEnabledExtensionNames;
+     const VkPhysicalDeviceFeatures*             pEnabledFeatures;
+ } VkDeviceCreateInfo;
+@@ -2012,6 +2022,9 @@ typedef struct VkCommandBufferBeginInfo {
+     VkRenderPass                                renderPass;
+     uint32_t                                    subpass;
+     VkFramebuffer                               framebuffer;
++    VkBool32                                    occlusionQueryEnable;
++    VkQueryControlFlags                         queryFlags;
++    VkQueryPipelineStatisticFlags               pipelineStatistics;
+ } VkCommandBufferBeginInfo;
+ typedef struct VkBufferCopy {
+@@ -2285,7 +2298,7 @@ typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQue
+ typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount);
+ typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t entry);
+ typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
+-typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values);
++typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
+ typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
+ typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
+ typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
+@@ -3060,7 +3073,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
+     VkShaderStageFlags                          stageFlags,
+     uint32_t                                    offset,
+     uint32_t                                    size,
+-    const void*                                 values);
++    const void*                                 pValues);
+ VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
+     VkCommandBuffer                             commandBuffer,
+@@ -3083,27 +3096,11 @@ VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
+ #define VK_KHR_surface 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
+-#define VK_KHR_SURFACE_REVISION           23
++#define VK_KHR_SURFACE_REVISION           24
+ #define VK_KHR_SURFACE_EXTENSION_NUMBER   1
+ #define VK_KHR_SURFACE_EXTENSION_NAME     "VK_KHR_surface"
+-typedef enum VkSurfaceTransformKHR {
+-    VK_SURFACE_TRANSFORM_NONE_KHR = 0,
+-    VK_SURFACE_TRANSFORM_ROT90_KHR = 1,
+-    VK_SURFACE_TRANSFORM_ROT180_KHR = 2,
+-    VK_SURFACE_TRANSFORM_ROT270_KHR = 3,
+-    VK_SURFACE_TRANSFORM_HMIRROR_KHR = 4,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_KHR = 5,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_KHR = 6,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_KHR = 7,
+-    VK_SURFACE_TRANSFORM_INHERIT_KHR = 8,
+-    VK_SURFACE_TRANSFORM_BEGIN_RANGE = VK_SURFACE_TRANSFORM_NONE_KHR,
+-    VK_SURFACE_TRANSFORM_END_RANGE = VK_SURFACE_TRANSFORM_INHERIT_KHR,
+-    VK_SURFACE_TRANSFORM_RANGE_SIZE = (VK_SURFACE_TRANSFORM_INHERIT_KHR - VK_SURFACE_TRANSFORM_NONE_KHR + 1),
+-    VK_SURFACE_TRANSFORM_MAX_ENUM = 0x7FFFFFFF
+-} VkSurfaceTransformKHR;
+-
+ typedef enum VkColorSpaceKHR {
+     VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0,
+     VK_COLORSPACE_BEGIN_RANGE = VK_COLORSPACE_SRGB_NONLINEAR_KHR,
+@@ -3151,10 +3148,10 @@ typedef struct VkSurfaceCapabilitiesKHR {
+     VkExtent2D                                  currentExtent;
+     VkExtent2D                                  minImageExtent;
+     VkExtent2D                                  maxImageExtent;
++    uint32_t                                    maxImageArrayLayers;
+     VkSurfaceTransformFlagsKHR                  supportedTransforms;
+-    VkSurfaceTransformKHR                       currentTransform;
++    VkSurfaceTransformFlagBitsKHR               currentTransform;
+     VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha;
+-    uint32_t                                    maxImageArraySize;
+     VkImageUsageFlags                           supportedUsageFlags;
+ } VkSurfaceCapabilitiesKHR;
+@@ -3203,28 +3200,31 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
+ #define VK_KHR_swapchain 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
+-#define VK_KHR_SWAPCHAIN_REVISION         66
++#define VK_KHR_SWAPCHAIN_REVISION         67
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
+ #define VK_KHR_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_swapchain"
++typedef VkFlags VkSwapchainCreateFlagsKHR;
++
+ typedef struct VkSwapchainCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkSwapchainCreateFlagsKHR                   flags;
+     VkSurfaceKHR                                surface;
+     uint32_t                                    minImageCount;
+     VkFormat                                    imageFormat;
+     VkColorSpaceKHR                             imageColorSpace;
+     VkExtent2D                                  imageExtent;
+-    VkImageUsageFlags                           imageUsageFlags;
+-    VkSurfaceTransformKHR                       preTransform;
+-    VkCompositeAlphaFlagBitsKHR                 compositeAlpha;
+-    uint32_t                                    imageArraySize;
+-    VkSharingMode                               sharingMode;
++    uint32_t                                    imageArrayLayers;
++    VkImageUsageFlags                           imageUsage;
++    VkSharingMode                               imageSharingMode;
+     uint32_t                                    queueFamilyIndexCount;
+     const uint32_t*                             pQueueFamilyIndices;
++    VkSurfaceTransformFlagBitsKHR               preTransform;
++    VkCompositeAlphaFlagBitsKHR                 compositeAlpha;
+     VkPresentModeKHR                            presentMode;
+-    VkSwapchainKHR                              oldSwapchain;
+     VkBool32                                    clipped;
++    VkSwapchainKHR                              oldSwapchain;
+ } VkSwapchainCreateInfoKHR;
+ typedef struct VkPresentInfoKHR {
+@@ -3234,7 +3234,7 @@ typedef struct VkPresentInfoKHR {
+     const VkSemaphore*                          pWaitSemaphores;
+     uint32_t                                    swapchainCount;
+     const VkSwapchainKHR*                       pSwapchains;
+-    const uint32_t*                             imageIndices;
++    const uint32_t*                             pImageIndices;
+     VkResult*                                   pResults;
+ } VkPresentInfoKHR;
+@@ -3243,7 +3243,7 @@ typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice  device, const V
+ typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice  device, VkSwapchainKHR  swapchain, const VkAllocationCallbacks* pAllocator);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint32_t*  pSwapchainImageCount, VkImage*  pSwapchainImages);
+ typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice  device, VkSwapchainKHR  swapchain, uint64_t  timeout, VkSemaphore  semaphore, VkFence  fence, uint32_t*  pImageIndex);
+-typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue  queue, VkPresentInfoKHR*  pPresentInfo);
++typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue  queue, const VkPresentInfoKHR*  pPresentInfo);
+ #ifdef VK_PROTOTYPES
+ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
+@@ -3273,24 +3273,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
+ VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
+     VkQueue                                      queue,
+-    VkPresentInfoKHR*                            pPresentInfo);
++    const VkPresentInfoKHR*                      pPresentInfo);
+ #endif
+ #define VK_KHR_display 1
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
+ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
+-#define VK_KHR_DISPLAY_REVISION           19
++#define VK_KHR_DISPLAY_REVISION           21
+ #define VK_KHR_DISPLAY_EXTENSION_NUMBER   3
+ #define VK_KHR_DISPLAY_EXTENSION_NAME     "VK_KHR_display"
+ typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+-    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000001,
+-    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000002,
+-    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000004,
++    VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
++    VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
++    VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
+ } VkDisplayPlaneAlphaFlagBitsKHR;
+ typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
++typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
+ typedef struct VkDisplayPropertiesKHR {
+     VkDisplayKHR                                display;
+@@ -3338,19 +3340,20 @@ typedef struct VkDisplayPlanePropertiesKHR {
+ typedef struct VkDisplaySurfaceCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkDisplaySurfaceCreateFlagsKHR              flags;
+     VkDisplayModeKHR                            displayMode;
+     uint32_t                                    planeIndex;
+     uint32_t                                    planeStackIndex;
+-    VkSurfaceTransformKHR                       transform;
++    VkSurfaceTransformFlagBitsKHR               transform;
+     float                                       globalAlpha;
+-    VkDisplayPlaneAlphaFlagsKHR                 alphaMode;
+-    VkExtent2D                                  imageSize;
++    VkDisplayPlaneAlphaFlagBitsKHR              alphaMode;
++    VkExtent2D                                  imageExtent;
+ } VkDisplaySurfaceCreateInfoKHR;
+ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayKHR* pProperties);
++typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+ typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+@@ -3369,8 +3372,8 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
+     VkPhysicalDevice                            physicalDevice,
+-    uint32_t*                                   pPropertyCount,
+-    VkDisplayKHR*                               pProperties);
++    uint32_t*                                   pDisplayCount,
++    VkDisplayKHR*                               pDisplays);
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+@@ -3529,7 +3532,7 @@ VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
+ #define VK_KHR_android_surface 1
+ #include <android/native_window.h>
+-#define VK_KHR_ANDROID_SURFACE_REVISION   3
++#define VK_KHR_ANDROID_SURFACE_REVISION   4
+ #define VK_KHR_ANDROID_SURFACE_EXTENSION_NUMBER 9
+ #define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
+diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
+index 67b8c38..9c0444f 100644
+--- a/vulkan/libvulkan/entry.cpp
++++ b/vulkan/libvulkan/entry.cpp
+@@ -702,8 +702,8 @@ VKAPI_ATTR void vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQuery
+ }
+ __attribute__((visibility("default")))
+-VKAPI_ATTR void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* values) {
+-    GetVtbl(commandBuffer).CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
++VKAPI_ATTR void vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues) {
++    GetVtbl(commandBuffer).CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
+ }
+ __attribute__((visibility("default")))
+@@ -772,7 +772,7 @@ VKAPI_ATTR VkResult vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapch
+ }
+ __attribute__((visibility("default")))
+-VKAPI_ATTR VkResult vkQueuePresentKHR(VkQueue queue, VkPresentInfoKHR* pPresentInfo) {
++VKAPI_ATTR VkResult vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* pPresentInfo) {
+     return GetVtbl(queue).QueuePresentKHR(queue, pPresentInfo);
+ }
+diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
+index 35d0eaa..1f777fc 100644
+--- a/vulkan/libvulkan/loader.h
++++ b/vulkan/libvulkan/loader.h
+@@ -305,7 +305,7 @@ VKAPI_ATTR VkResult AcquireNextImageKHR(VkDevice device,
+                                         VkSemaphore semaphore,
+                                         uint32_t* image_index);
+ VKAPI_ATTR VkResult
+-QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info);
++QueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* present_info);
+ }  // namespace vulkan
+diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
+index ff02b35..39a581c 100644
+--- a/vulkan/libvulkan/swapchain.cpp
++++ b/vulkan/libvulkan/swapchain.cpp
+@@ -230,9 +230,9 @@ VkResult GetPhysicalDeviceSurfaceCapabilitiesKHR(
+     capabilities->supportedTransforms = VK_SURFACE_TRANSFORM_NONE_BIT_KHR;
+     // TODO(jessehall): Implement based on NATIVE_WINDOW_TRANSFORM_HINT.
+-    capabilities->currentTransform = VK_SURFACE_TRANSFORM_NONE_KHR;
++    capabilities->currentTransform = VK_SURFACE_TRANSFORM_NONE_BIT_KHR;
+-    capabilities->maxImageArraySize = 1;
++    capabilities->maxImageArrayLayers = 1;
+     // TODO(jessehall): I think these are right, but haven't thought hard about
+     // it. Do we need to query the driver for support of any of these?
+@@ -314,7 +314,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+              "color spaces other than SRGB_NONLINEAR not yet implemented");
+     ALOGE_IF(create_info->oldSwapchain,
+              "swapchain re-creation not yet implemented");
+-    ALOGE_IF(create_info->preTransform != VK_SURFACE_TRANSFORM_NONE_KHR,
++    ALOGE_IF(create_info->preTransform != VK_SURFACE_TRANSFORM_NONE_BIT_KHR,
+              "swapchain preTransform not yet implemented");
+     ALOGE_IF(create_info->presentMode != VK_PRESENT_MODE_FIFO_KHR,
+              "present modes other than FIFO are not yet implemented");
+@@ -371,7 +371,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
+     // TODO(jessehall): Remove conditional once all drivers have been updated
+     if (driver_vtbl.GetSwapchainGrallocUsageANDROID) {
+         result = driver_vtbl.GetSwapchainGrallocUsageANDROID(
+-            device, create_info->imageFormat, create_info->imageUsageFlags,
++            device, create_info->imageFormat, create_info->imageUsage,
+             &gralloc_usage);
+         if (result != VK_SUCCESS) {
+             ALOGE("vkGetSwapchainGrallocUsageANDROID failed: %d", result);
+@@ -418,9 +418,9 @@ VkResult CreateSwapchainKHR(VkDevice device,
+         .arrayLayers = 1,
+         .samples = VK_SAMPLE_COUNT_1_BIT,
+         .tiling = VK_IMAGE_TILING_OPTIMAL,
+-        .usage = create_info->imageUsageFlags,
++        .usage = create_info->imageUsage,
+         .flags = 0,
+-        .sharingMode = create_info->sharingMode,
++        .sharingMode = create_info->imageSharingMode,
+         .queueFamilyIndexCount = create_info->queueFamilyIndexCount,
+         .pQueueFamilyIndices = create_info->pQueueFamilyIndices,
+     };
+@@ -612,7 +612,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
+ }
+ VKAPI_ATTR
+-VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
++VkResult QueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* present_info) {
+     ALOGV_IF(present_info->sType != VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
+              "vkQueuePresentKHR: invalid VkPresentInfoKHR structure type %d",
+              present_info->sType);
+@@ -624,7 +624,7 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
+         Swapchain& swapchain =
+             *SwapchainFromHandle(present_info->pSwapchains[sc]);
+         ANativeWindow* window = swapchain.surface.window.get();
+-        uint32_t image_idx = present_info->imageIndices[sc];
++        uint32_t image_idx = present_info->pImageIndices[sc];
+         Swapchain::Image& img = swapchain.images[image_idx];
+         VkResult result;
+         int err;
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0028-vulkan-Update-from-version-0.209.0-to-0.210.0.patch b/vulkan/patches/frameworks_native-sdk_0.10/0028-vulkan-Update-from-version-0.209.0-to-0.210.0.patch
new file mode 100644 (file)
index 0000000..b42fc0b
--- /dev/null
@@ -0,0 +1,291 @@
+From 9b545cb7b82a038b6da6355b742da425cbfd05fb Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 16:22:16 -0800
+Subject: [PATCH 28/30] vulkan: Update from version 0.209.0 to 0.210.0
+
+Change-Id: Ic5791cf1193de1e5d2ce355d9dcc4450b0def85a
+---
+ vulkan/api/vulkan.api                   | 53 +++++++++++++++++++--------------
+ vulkan/include/vulkan/vulkan.h          | 45 +++++++++++++++-------------
+ vulkan/libvulkan/get_proc_addr.cpp.tmpl | 15 +++++++++-
+ 3 files changed, 70 insertions(+), 43 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index d35e11d..243951d 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -27,7 +27,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+-define VERSION_MINOR 209
++define VERSION_MINOR 210
+ define VERSION_PATCH 0
+ // API limits
+@@ -57,7 +57,7 @@ define NULL_HANDLE 0
+ @extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NUMBER             3
+ @extension("VK_KHR_display") define VK_KHR_DISPLAY_EXTENSION_NAME               "VK_KHR_display"
+-@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_REVISION         8
++@extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_REVISION         9
+ @extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+ @extension("VK_KHR_display_swapchain") define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME   "VK_KHR_display_swapchain"
+@@ -630,8 +630,7 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 0xc0000c01,
+     //@extension("VK_KHR_display_swapchain")
+-    VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR         = 0xc0001000,
+-    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001001,
++    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001000,
+ }
+ enum VkSubpassContents {
+@@ -673,7 +672,7 @@ enum VkResult {
+     VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
+     //@extension("VK_KHR_display_swapchain")
+-    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001002,
++    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001001,
+     //@extension("VK_KHR_android_surface")
+     VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                       = 0xC0002400,
+@@ -1147,15 +1146,15 @@ bitfield VkCullModeFlagBits {
+ type VkFlags VkSurfaceTransformFlagsKHR
+ @extension("VK_KHR_swapchain")
+ bitfield VkSurfaceTransformFlagBitsKHR {
+-    VK_SURFACE_TRANSFORM_NONE_BIT_KHR                       = 0x00000001,
+-    VK_SURFACE_TRANSFORM_ROT90_BIT_KHR                      = 0x00000002,
+-    VK_SURFACE_TRANSFORM_ROT180_BIT_KHR                     = 0x00000004,
+-    VK_SURFACE_TRANSFORM_ROT270_BIT_KHR                     = 0x00000008,
+-    VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR                    = 0x00000010,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR              = 0x00000020,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR             = 0x00000040,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR             = 0x00000080,
+-    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                    = 0x00000100,
++    VK_SURFACE_TRANSFORM_NONE_BIT_KHR                           = 0x00000001,
++    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR                      = 0x00000002,
++    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR                     = 0x00000004,
++    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR                     = 0x00000008,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR              = 0x00000010,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR    = 0x00000020,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR   = 0x00000040,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR   = 0x00000080,
++    VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                        = 0x00000100,
+ }
+ @extension("VK_KHR_swapchain")
+@@ -1190,6 +1189,12 @@ type VkFlags VkDisplaySurfaceCreateFlagsKHR
+ //bitfield VkDisplaySurfaceCreateFlagBitsKHR {
+ //}
++@extension("VK_KHR_display")
++type VkFlags VkDisplayModeCreateFlagsKHR
++//@extension("VK_KHR_display")
++//bitfield VkDisplayModeCreateFlagBitsKHR {
++//}
++
+ //////////////////
+ //  Structures  //
+@@ -2366,6 +2371,7 @@ class VkDisplayModePropertiesKHR {
+ class VkDisplayModeCreateInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
++    VkDisplayModeCreateFlagsKHR                 flags
+     VkDisplayModeParametersKHR                  parameters
+ }
+@@ -2403,13 +2409,6 @@ class VkDisplaySurfaceCreateInfoKHR {
+ }
+ @extension("VK_KHR_display_swapchain")
+-class VkDisplaySwapchainCreateInfoKHR {
+-    VkStructureType                             sType
+-    const void*                                 pNext
+-    const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo
+-}
+-
+-@extension("VK_KHR_display_swapchain")
+ class VkDisplayPresentInfoKHR {
+     VkStructureType                             sType
+     const void*                                 pNext
+@@ -4813,7 +4812,7 @@ cmd VkResult vkCreateDisplayModeKHR(
+ @extension("VK_KHR_display")
+ cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
+         VkPhysicalDevice                        physicalDevice,
+-        VkDisplayModeCreateInfoKHR              mode,
++        VkDisplayModeKHR                        mode,
+         u32                                     planeIndex,
+         VkDisplayPlaneCapabilitiesKHR*          pCapabilities) {
+     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+@@ -4829,6 +4828,16 @@ cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
+     return ?
+ }
++@extension("VK_KHR_display_swapchain")
++cmd VkResult vkCreateSharedSwapchainsKHR(
++        VkDevice                                device,
++        u32                                     swapchainCount,
++        const VkSwapchainCreateInfoKHR*         pCreateInfos,
++        const VkAllocationCallbacks*            pAllocator,
++        VkSwapchainKHR*                         pSwapchains) {
++    return ?
++}
++
+ @extension("VK_KHR_xlib_surface")
+ cmd VkResult vkCreateXlibSurfaceKHR(
+         VkInstance                              instance,
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index a255e1f..598d98e 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 209, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 210, 0)
+ #define VK_NULL_HANDLE 0
+@@ -128,7 +128,7 @@ typedef enum VkResult {
+     VK_ERROR_SURFACE_LOST_KHR = 0xC0000400,
+     VK_SUBOPTIMAL_KHR = 0x40000403,
+     VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
+-    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001002,
++    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001001,
+     VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = 0xC0002400,
+     VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+@@ -189,8 +189,7 @@ typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 0xC0000801,
+     VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xC0000C00,
+     VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 0xC0000C01,
+-    VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR = 0xC0001000,
+-    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 0xC0001001,
++    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 0xC0001000,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
+     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+@@ -3123,13 +3122,13 @@ typedef enum VkPresentModeKHR {
+ typedef enum VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_NONE_BIT_KHR = 0x00000001,
+-    VK_SURFACE_TRANSFORM_ROT90_BIT_KHR = 0x00000002,
+-    VK_SURFACE_TRANSFORM_ROT180_BIT_KHR = 0x00000004,
+-    VK_SURFACE_TRANSFORM_ROT270_BIT_KHR = 0x00000008,
+-    VK_SURFACE_TRANSFORM_HMIRROR_BIT_KHR = 0x00000010,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT90_BIT_KHR = 0x00000020,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT180_BIT_KHR = 0x00000040,
+-    VK_SURFACE_TRANSFORM_HMIRROR_ROT270_BIT_KHR = 0x00000080,
++    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
++    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
++    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
++    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
+     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
+ } VkSurfaceTransformFlagBitsKHR;
+ typedef VkFlags VkSurfaceTransformFlagsKHR;
+@@ -3291,6 +3290,7 @@ typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
+     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
+ } VkDisplayPlaneAlphaFlagBitsKHR;
++typedef VkFlags VkDisplayModeCreateFlagsKHR;
+ typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
+ typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
+@@ -3317,6 +3317,7 @@ typedef struct VkDisplayModePropertiesKHR {
+ typedef struct VkDisplayModeCreateInfoKHR {
+     VkStructureType                             sType;
+     const void*                                 pNext;
++    VkDisplayModeCreateFlagsKHR                 flags;
+     VkDisplayModeParametersKHR                  parameters;
+ } VkDisplayModeCreateInfoKHR;
+@@ -3356,7 +3357,7 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(V
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
+ typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
+ typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
+-typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
++typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+ typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
+ #ifdef VK_PROTOTYPES
+@@ -3390,7 +3391,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
+ VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
+     VkPhysicalDevice                            physicalDevice,
+-    VkDisplayModeCreateInfoKHR                  mode,
++    VkDisplayModeKHR                            mode,
+     uint32_t                                    planeIndex,
+     VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
+@@ -3402,16 +3403,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
+ #endif
+ #define VK_KHR_display_swapchain 1
+-#define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 8
++#define VK_KHR_DISPLAY_SWAPCHAIN_REVISION 9
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
+ #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
+-typedef struct VkDisplaySwapchainCreateInfoKHR {
+-    VkStructureType                             sType;
+-    const void*                                 pNext;
+-    const VkSwapchainCreateInfoKHR*             pNextSwapchainCreateInfo;
+-} VkDisplaySwapchainCreateInfoKHR;
+-
+ typedef struct VkDisplayPresentInfoKHR {
+     VkStructureType                             sType;
+     const void*                                 pNext;
+@@ -3421,6 +3416,16 @@ typedef struct VkDisplayPresentInfoKHR {
+ } VkDisplayPresentInfoKHR;
++typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
++
++#ifdef VK_PROTOTYPES
++VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
++    VkDevice                                    device,
++    uint32_t                                    swapchainCount,
++    const VkSwapchainCreateInfoKHR*             pCreateInfos,
++    const VkAllocationCallbacks*                pAllocator,
++    VkSwapchainKHR*                             pSwapchains);
++#endif
+ #ifdef VK_USE_PLATFORM_XLIB_KHR
+ #define VK_KHR_xlib_surface 1
+diff --git a/vulkan/libvulkan/get_proc_addr.cpp.tmpl b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+index aad177d..423dea4 100644
+--- a/vulkan/libvulkan/get_proc_addr.cpp.tmpl
++++ b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+@@ -217,8 +217,21 @@ bool LoadDeviceVtbl(VkDevice device,
+         success = false;
+     }
+     {{range $f := AllCommands $}}
++      {{if and (eq (Macro "Vtbl" $f) "Device") (not (eq (Macro "FunctionName" $f) "vkGetDeviceProcAddr"))}}
++        {{if not (GetAnnotation $f "extension")}}
++    vtbl.{{TrimPrefix "vk" (Macro "FunctionName" $f)}} = §
++        reinterpret_cast<{{Macro "FunctionPtrName" $f}}>(§
++            get_proc_addr(device, "{{Macro "FunctionName" $f}}"));
++    if (UNLIKELY(!vtbl.{{TrimPrefix "vk" (Macro "FunctionName" $f)}})) {
++        ALOGE("missing device proc: %s", "{{Macro "FunctionName" $f}}");
++        success = false;
++    }
++        {{end}}
++      {{end}}
++    {{end}}
++    {{range $f := AllCommands $}}
+       {{if eq (Macro "Vtbl" $f) "Device"}}
+-        {{if not (eq (Macro "FunctionName" $f) "vkGetDeviceProcAddr")}}
++        {{if and (GetAnnotation $f "extension") (Macro "IsDispatched" $f)}}
+     vtbl.{{TrimPrefix "vk" (Macro "FunctionName" $f)}} = §
+         reinterpret_cast<{{Macro "FunctionPtrName" $f}}>(§
+             get_proc_addr(device, "{{Macro "FunctionName" $f}}"));
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0029-vulkan-Assign-enums-to-the-correct-extension.patch b/vulkan/patches/frameworks_native-sdk_0.10/0029-vulkan-Assign-enums-to-the-correct-extension.patch
new file mode 100644 (file)
index 0000000..9113680
--- /dev/null
@@ -0,0 +1,56 @@
+From f0429ae266f2738835c80808a3ae4133165bcff5 Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 21:12:55 -0800
+Subject: [PATCH 29/30] vulkan: Assign enums to the correct extension
+
+Change-Id: I9ba61b9bfe349f7079833de89d66aa4a2e993e2f
+---
+ vulkan/api/vulkan.api | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 243951d..63188d5 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -690,7 +690,7 @@ enum VkDynamicState {
+     VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
+ }
+-@extension("VK_KHR_swapchain")
++@extension("VK_KHR_surface")
+ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_IMMEDIATE_KHR                           = 0x00000000,
+     VK_PRESENT_MODE_MAILBOX_KHR                             = 0x00000001,
+@@ -698,7 +698,7 @@ enum VkPresentModeKHR {
+     VK_PRESENT_MODE_FIFO_RELAXED_KHR                        = 0x00000003,
+ }
+-@extension("VK_KHR_swapchain")
++@extension("VK_KHR_surface")
+ enum VkColorSpaceKHR {
+     VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = 0x00000000,
+ }
+@@ -1142,7 +1142,7 @@ bitfield VkCullModeFlagBits {
+     VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
+ }
+-@extension("VK_KHR_swapchain")
++@extension("VK_KHR_surface")
+ type VkFlags VkSurfaceTransformFlagsKHR
+ @extension("VK_KHR_swapchain")
+ bitfield VkSurfaceTransformFlagBitsKHR {
+@@ -1157,9 +1157,9 @@ bitfield VkSurfaceTransformFlagBitsKHR {
+     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                        = 0x00000100,
+ }
+-@extension("VK_KHR_swapchain")
++@extension("VK_KHR_surface")
+ type VkFlags VkCompositeAlphaFlagsKHR
+-@extension("VK_KHR_swapchain")
++@extension("VK_KHR_surface")
+ bitfield VkCompositeAlphaFlagBitsKHR {
+     VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
+     VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
+-- 
+2.4.0
+
diff --git a/vulkan/patches/frameworks_native-sdk_0.10/0030-vulkan-Update-from-version-0.210.0-to-0.210.1.patch b/vulkan/patches/frameworks_native-sdk_0.10/0030-vulkan-Update-from-version-0.210.0-to-0.210.1.patch
new file mode 100644 (file)
index 0000000..a5c11b5
--- /dev/null
@@ -0,0 +1,212 @@
+From 1bed42cafc4ee646dd964d99749dabd45399667a Mon Sep 17 00:00:00 2001
+From: Jesse Hall <jessehall@google.com>
+Date: Mon, 30 Nov 2015 21:44:14 -0800
+Subject: [PATCH 30/30] vulkan: Update from version 0.210.0 to 0.210.1
+
+Change-Id: I9adf217587a8b666bcf04818004dce4e97b87fd1
+---
+ vulkan/api/vulkan.api          | 59 +++++++++++++++++++++---------------------
+ vulkan/include/vulkan/vulkan.h | 24 ++++++++---------
+ vulkan/libvulkan/Android.mk    |  4 ---
+ vulkan/tools/Android.mk        |  4 ---
+ 4 files changed, 42 insertions(+), 49 deletions(-)
+
+diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
+index 63188d5..b31e6a2 100644
+--- a/vulkan/api/vulkan.api
++++ b/vulkan/api/vulkan.api
+@@ -28,7 +28,7 @@ import platform "platform.api"
+ // API version (major.minor.patch)
+ define VERSION_MAJOR 0
+ define VERSION_MINOR 210
+-define VERSION_PATCH 0
++define VERSION_PATCH 1
+ // API limits
+ define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
+@@ -148,7 +148,7 @@ enum VkImageLayout {
+     VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
+     //@extension("VK_KHR_swapchain")
+-    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 0xc0000802,
++    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR                         = 1000001002,
+ }
+ enum VkAttachmentLoadOp {
+@@ -623,14 +623,15 @@ enum VkStructureType {
+     VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                 = 47,
+     //@extension("VK_KHR_swapchain")
+-    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
++    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 1000001000,
++    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR                          = 1000001001,
+     //@extension("VK_KHR_display")
+-    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 0xc0000c00,
+-    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 0xc0000c01,
++    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 1000002000,
++    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 1000002001,
+     //@extension("VK_KHR_display_swapchain")
+-    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 0xc0001000,
++    VK_STRUCTURE_TYPE_DISPLAY_DISPLAY_PRESENT_INFO_KHR          = 1000003000,
+ }
+ enum VkSubpassContents {
+@@ -638,44 +639,44 @@ enum VkSubpassContents {
+     VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS           = 0x00000001,
+ }
+-@lastUnused(-10)
++@lastUnused(-11)
+ /// Error and return codes
+ enum VkResult {
+     // Return codes for successful operation execution (positive values)
+-    VK_SUCCESS                                              = 0x00000000,
+-    VK_NOT_READY                                            = 0x00000001,
+-    VK_TIMEOUT                                              = 0x00000002,
+-    VK_EVENT_SET                                            = 0x00000003,
+-    VK_EVENT_RESET                                          = 0x00000004,
+-    VK_INCOMPLETE                                           = 0x00000005,
++    VK_SUCCESS                                              = 0,
++    VK_NOT_READY                                            = 1,
++    VK_TIMEOUT                                              = 2,
++    VK_EVENT_SET                                            = 3,
++    VK_EVENT_RESET                                          = 4,
++    VK_INCOMPLETE                                           = 5,
+     //@extension("VK_KHR_swapchain")
+-    VK_SUBOPTIMAL_KHR                                       = 0x40000403,
++    VK_SUBOPTIMAL_KHR                                       = 1000001003,
+     // Error codes (negative values)
+-    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF,
+-    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE,
+-    VK_ERROR_INITIALIZATION_FAILED                          = 0xFFFFFFFD,
+-    VK_ERROR_DEVICE_LOST                                    = 0xFFFFFFFC,
+-    VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB,
+-    VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA,
+-    VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9,
+-    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+-    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
+-    VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6,
+-    VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5,
++    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF, // -1
++    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE, // -2
++    VK_ERROR_INITIALIZATION_FAILED                          = 0xFFFFFFFD, // -3
++    VK_ERROR_DEVICE_LOST                                    = 0xFFFFFFFC, // -4
++    VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB, // -5
++    VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA, // -6
++    VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9, // -7
++    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8, // -8
++    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7, // -9
++    VK_ERROR_TOO_MANY_OBJECTS                               = 0xFFFFFFF6, // -10
++    VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5, // -11
+     //@extension("VK_KHR_surface")
+-    VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
++    VK_ERROR_SURFACE_LOST_KHR                               = 0xC4653600, // -1000000000
+     //@extension("VK_KHR_swapchain")
+-    VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
++    VK_ERROR_OUT_OF_DATE_KHR                                = 0xC4653214, // -1000001004
+     //@extension("VK_KHR_display_swapchain")
+-    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC0001001,
++    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR                       = 0xC4652A47, // -1000003001
+     //@extension("VK_KHR_android_surface")
+-    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                       = 0xC0002400,
++    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR                       = 0xC46516C0, // -1000008000
+ }
+ enum VkDynamicState {
+diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
+index 598d98e..fa58c59 100644
+--- a/vulkan/include/vulkan/vulkan.h
++++ b/vulkan/include/vulkan/vulkan.h
+@@ -41,7 +41,7 @@ extern "C" {
+     ((major << 22) | (minor << 12) | patch)
+ // Vulkan API version supported by this file
+-#define VK_API_VERSION VK_MAKE_VERSION(0, 210, 0)
++#define VK_API_VERSION VK_MAKE_VERSION(0, 210, 1)
+ #define VK_NULL_HANDLE 0
+@@ -125,11 +125,11 @@ typedef enum VkResult {
+     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
+     VK_ERROR_TOO_MANY_OBJECTS = -10,
+     VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
+-    VK_ERROR_SURFACE_LOST_KHR = 0xC0000400,
+-    VK_SUBOPTIMAL_KHR = 0x40000403,
+-    VK_ERROR_OUT_OF_DATE_KHR = 0xC0000804,
+-    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = 0xC0001001,
+-    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = 0xC0002400,
++    VK_ERROR_SURFACE_LOST_KHR = -1000000000,
++    VK_SUBOPTIMAL_KHR = 1000001003,
++    VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
++    VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
++    VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000008000,
+     VK_RESULT_BEGIN_RANGE = VK_ERROR_FORMAT_NOT_SUPPORTED,
+     VK_RESULT_END_RANGE = VK_INCOMPLETE,
+     VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FORMAT_NOT_SUPPORTED + 1),
+@@ -185,11 +185,11 @@ typedef enum VkStructureType {
+     VK_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
+     VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 46,
+     VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 47,
+-    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 0xC0000800,
+-    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 0xC0000801,
+-    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 0xC0000C00,
+-    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 0xC0000C01,
+-    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 0xC0001000,
++    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
++    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
++    VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
++    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
++    VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
+     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
+     VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
+     VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+@@ -468,7 +468,7 @@ typedef enum VkImageLayout {
+     VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
+     VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
+     VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
+-    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 0xC0000802,
++    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+     VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
+     VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
+     VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
+diff --git a/vulkan/libvulkan/Android.mk b/vulkan/libvulkan/Android.mk
+index 2f809c2..7a2eb64 100644
+--- a/vulkan/libvulkan/Android.mk
++++ b/vulkan/libvulkan/Android.mk
+@@ -25,10 +25,6 @@ LOCAL_CPPFLAGS := -std=c++1y \
+       -Wno-c99-extensions \
+       -Wno-zero-length-array
+-# TODO(jessehall): Very temporary, until VkResult values are defined as signed integers
+-# rather than unsigned hex values.
+-LOCAL_CFLAGS += -Wno-error=format
+-
+ LOCAL_C_INCLUDES := \
+       frameworks/native/vulkan/include \
+       system/core/libsync/include
+diff --git a/vulkan/tools/Android.mk b/vulkan/tools/Android.mk
+index 2c2309f..31d6089 100644
+--- a/vulkan/tools/Android.mk
++++ b/vulkan/tools/Android.mk
+@@ -23,10 +23,6 @@ LOCAL_CPPFLAGS := -std=c++1y \
+       -Wno-c++98-compat-pedantic \
+       -Wno-c99-extensions
+-# TODO(jessehall): Very temporary, until VkResult values are defined as signed integers
+-# rather than unsigned hex values.
+-LOCAL_CFLAGS += -Wno-error=format
+-
+ LOCAL_C_INCLUDES := \
+       frameworks/native/vulkan/include
+-- 
+2.4.0
+