vulkan: Remove sdk-0.9 virtual branch, has been merged

Change-Id: I67e15c1d5fdd3364232051ab94e24e91a826c6a2
(cherry picked from commit e8faab3a100346438f43178e2c902642f57a0841)
diff --git a/vulkan/patches/README b/vulkan/patches/README
index 7e0376a..64ccf5d 100644
--- a/vulkan/patches/README
+++ b/vulkan/patches/README
@@ -17,11 +17,3 @@
 activity's native library directory. The loader will search this
 directory for layer libraries. Without this change, layers will only
 be loaded from a global location under /data.
-
-
-sdk-0.9
--------
-This branch contains experimental support for the sdk-0.9. Changes to
-the core API up to version 0.170.2 are complete, but not tested much
-yet. These patches are probably missing changes to the swapchain
-extensions.
diff --git a/vulkan/patches/sdk-0.9/0001-vulkan-Update-from-header-0.138.2-to-0.170.2.patch b/vulkan/patches/sdk-0.9/0001-vulkan-Update-from-header-0.138.2-to-0.170.2.patch
deleted file mode 100644
index e88258d..0000000
--- a/vulkan/patches/sdk-0.9/0001-vulkan-Update-from-header-0.138.2-to-0.170.2.patch
+++ /dev/null
@@ -1,6298 +0,0 @@
-From dc816657910a33b838074dca34c4a2f5739f1b6f Mon Sep 17 00:00:00 2001
-From: Jesse Hall <jessehall@google.com>
-Date: Thu, 8 Oct 2015 14:00:22 -0700
-Subject: [PATCH] vulkan: Update from header 0.138.2 to 0.170.2
-
-Change-Id: I011e1f27d025730d448ee5cfefc6701300b455c2
----
- vulkan/api/platform.api                 |    6 -
- vulkan/api/templates/vk_xml.tmpl        |   33 +-
- vulkan/api/templates/vulkan_common.tmpl |    2 +-
- vulkan/api/templates/vulkan_h.tmpl      |   27 +-
- vulkan/api/vulkan.api                   | 1144 +++++++++++++------------------
- vulkan/include/hardware/hwvulkan.h      |    3 +-
- vulkan/include/vulkan/vk_platform.h     |   16 -
- vulkan/include/vulkan/vulkan.h          |  924 ++++++++++++-------------
- vulkan/libvulkan/entry.cpp              |  249 +++----
- vulkan/libvulkan/get_proc_addr.cpp      |  190 ++---
- vulkan/libvulkan/loader.cpp             |   85 +--
- vulkan/libvulkan/loader.h               |   42 +-
- vulkan/libvulkan/swapchain.cpp          |   44 +-
- vulkan/nulldrv/null_driver.cpp          |  139 ++--
- vulkan/nulldrv/null_driver.h            |   40 +-
- vulkan/nulldrv/null_driver_gen.cpp      |   31 +-
- vulkan/tools/Android.mk                 |    1 +
- vulkan/tools/vkinfo.cpp                 |   82 ++-
- 18 files changed, 1338 insertions(+), 1720 deletions(-)
-
-diff --git a/vulkan/api/platform.api b/vulkan/api/platform.api
-index 3da6fed..23f649d 100644
---- a/vulkan/api/platform.api
-+++ b/vulkan/api/platform.api
-@@ -22,9 +22,3 @@
- // Platform types, as defined or included in vk_platform.h
- 
- type u64 size_t
--
--type u64 VkDeviceSize
--type u32 VkBool32
--
--type u32 VkSampleMask
--type u32 VkFlags
-diff --git a/vulkan/api/templates/vk_xml.tmpl b/vulkan/api/templates/vk_xml.tmpl
-index c040938..893bde7 100644
---- a/vulkan/api/templates/vk_xml.tmpl
-+++ b/vulkan/api/templates/vk_xml.tmpl
-@@ -68,13 +68,18 @@ This file, vk.xml, is the Vulkan API Registry.»
-         // 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 <name>VK_DEFINE_NONDISP_HANDLE</name>(obj) \»
-         struct obj { \
-             obj() { } \
--            obj(uint64_t x) { handle = x; } \
-+            VK_NONDISP_HANDLE_CONSTRUCTOR_FROM_UINT64(obj) \
-             obj&amp; operator =(uint64_t x) { handle = x; return *this; } \
-             bool operator==(const obj&amp; other) const { return handle == other.handle; } \
-             bool operator!=(const obj&amp; other) const { return handle != other.handle; } \
-@@ -87,6 +92,14 @@ This file, vk.xml, is the Vulkan API Registry.»
- #endif
-         »»</type>
- ¶
-+        <type category="define">
-+#if defined(__cplusplus) &amp;&amp; ((defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1800) || __cplusplus &gt;= 201103L)
-+    »#define <name>VK_NULL_HANDLE</name> nullptr
-+«#else
-+    »#define VK_NULL_HANDLE 0
-+«#endif
-+        »»</type>
-+¶
-         <type requires="vk_platform" name="VkDeviceSize"/>
-         <type requires="vk_platform" name="VkSampleMask"/>
-         <type requires="vk_platform" name="VkFlags"/>
-@@ -170,12 +183,13 @@ This file, vk.xml, is the Vulkan API Registry.»
-         <enum value="{{$d.Expression}}"        name="{{$d.Name}}"/>{{Macro "XML.Docs" $d.Docs}}
-         {{end}}
-       {{end}}
--        <enum value="MAX_FLOAT"  name="VK_LOD_CLAMP_NONE"/>
--        <enum value="UINT32_MAX" name="VK_LAST_MIP_LEVEL"/>
--        <enum value="UINT32_MAX" name="VK_LAST_ARRAY_SLICE"/>
--        <enum value="UINT64_MAX" name="VK_WHOLE_SIZE"/>
--        <enum value="UINT32_MAX" name="VK_ATTACHMENT_UNUSED"/>
--        <enum value="UINT32_MAX" name="VK_QUEUE_FAMILY_IGNORED"/>
-+        <enum value="1000.0f"  name="VK_LOD_CLAMP_NONE"/>
-+        <enum value="(-0U)" name="VK_REMAINING_MIP_LEVELS"/>
-+        <enum value="(~0U)" name="VK_REMAINING_ARRAY_LAYERS"/>
-+        <enum value="(_0ULL)" name="VK_WHOLE_SIZE"/>
-+        <enum value="(~0U)" name="VK_ATTACHMENT_UNUSED"/>
-+        <enum value="(~0U)" name="VK_QUEUE_FAMILY_IGNORED"/>
-+        <enum value="(~0U)" name="VK_SUBPASS_EXTERNAL"/>
-     «</enums>
- ¶
-     <!-- Unlike OpenGL, most tokens in Vulkan are actual typed enumerants in»
-@@ -217,13 +231,12 @@ This file, vk.xml, is the Vulkan API Registry.»
-         «</require>
-         <require comment="API constants">»
-             <enum name="VK_LOD_CLAMP_NONE"/>
--            <enum name="VK_LAST_MIP_LEVEL"/>
--            <enum name="VK_LAST_ARRAY_SLICE"/>
-+            <enum name="VK_REMAINING_MIP_LEVELS"/>
-+            <enum name="VK_REMAINING_ARRAY_LAYERS"/>
-             <enum name="VK_WHOLE_SIZE"/>
-             <enum name="VK_ATTACHMENT_UNUSED"/>
-             <enum name="VK_TRUE"/>
-             <enum name="VK_FALSE"/>
--            <enum name="VK_NULL_HANDLE"/>
-         «</require>
-         <require comment="All functions (TODO: split by type)">»
-         {{range $f := AllCommands $}}
-diff --git a/vulkan/api/templates/vulkan_common.tmpl b/vulkan/api/templates/vulkan_common.tmpl
-index 135c835..12d5788 100644
---- a/vulkan/api/templates/vulkan_common.tmpl
-+++ b/vulkan/api/templates/vulkan_common.tmpl
-@@ -137,7 +137,7 @@
- {{define "Parameter"}}
-   {{AssertType $ "Parameter"}}
- 
--  {{Macro "ParameterType" $}} {{$.Name}}{{Macro "ArrayPostfix" $}}
-+  {{if GetAnnotation $ "readonly"}}const {{end}}{{Macro "ParameterType" $}} {{$.Name}}{{Macro "ArrayPostfix" $}}
- {{end}}
- 
- 
-diff --git a/vulkan/api/templates/vulkan_h.tmpl b/vulkan/api/templates/vulkan_h.tmpl
-index 6747147..2dee541 100644
---- a/vulkan/api/templates/vulkan_h.tmpl
-+++ b/vulkan/api/templates/vulkan_h.tmpl
-@@ -53,10 +53,16 @@ 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)
-+    #define VK_NULL_HANDLE nullptr
-+#else
-+    #define VK_NULL_HANDLE 0
-+#endif
-+¶
- #define VK_DEFINE_HANDLE(obj) typedef struct obj##_T* obj;
- ¶
- #if defined(__cplusplus)
--#if (_MSC_VER >= 1800 || __cplusplus >= 201103L)
-+#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
-@@ -65,13 +71,18 @@ extern "C" {
- //     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) { }                                                      \
--        obj(uint64_t x) : handle(x) { }                                            \
-+        VK_NONDISP_HANDLE_CONSTRUCTOR_FROM_UINT64(obj)                             \
-         obj& operator=(uint64_t x) {                                               \
-             handle = x;                                                            \
-             return *this;                                                          \
-@@ -87,11 +98,13 @@ extern "C" {
-     typedef struct obj##_T { uint64_t handle; } obj;
- #endif
- ¶
--#define VK_LOD_CLAMP_NONE       MAX_FLOAT
--#define VK_LAST_MIP_LEVEL       UINT32_MAX
--#define VK_LAST_ARRAY_SLICE     UINT32_MAX
--#define VK_WHOLE_SIZE           UINT64_MAX
--#define VK_ATTACHMENT_UNUSED    UINT32_MAX
-+#define VK_LOD_CLAMP_NONE         1000.0f
-+#define VK_REMAINING_MIP_LEVELS   (~0U)
-+#define VK_REMAINING_ARRAY_LAYERS (~0U)
-+#define VK_WHOLE_SIZE             (~0ULL)
-+#define VK_ATTACHMENT_UNUSED      (~0U)
-+define VK_QUEUE_FAMILY_IGNORED    (~0U)
-+define VK_SUBPASS_EXTERNAL        (~0U)
- {{range $d := $.Definitions}}
-   {{if HasPrefix $d.Name "VK_"}}#define {{$d.Name}}  {{$d.Expression}}{{end}}
- {{end}}
-diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
-index c014454..9ea1ee4 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 138
-+define VERSION_MINOR 170
- define VERSION_PATCH 2
- 
- // API limits
-@@ -41,13 +41,20 @@ define VK_MAX_MEMORY_HEAPS         16    /// The maximum number of unique memory
- // API keywords
- define VK_TRUE        1
- define VK_FALSE       0
--define VK_NULL_HANDLE 0
-+
-+// API keyword, but needs special handling by some templates
-+define NULL_HANDLE 0
- 
- 
- /////////////
- //  Types  //
- /////////////
- 
-+type u32 VkBool32
-+type u32 VkFlags
-+type u64 VkDeviceSize
-+type u32 VkSampleMask
-+
- /// Dispatchable handle types.
- @dispatchHandle type u64 VkInstance
- @dispatchHandle type u64 VkPhysicalDevice
-@@ -62,7 +69,6 @@ define VK_NULL_HANDLE 0
- @nonDispatchHandle type u64 VkBufferView
- @nonDispatchHandle type u64 VkImage
- @nonDispatchHandle type u64 VkImageView
--@nonDispatchHandle type u64 VkAttachmentView
- @nonDispatchHandle type u64 VkShaderModule
- @nonDispatchHandle type u64 VkShader
- @nonDispatchHandle type u64 VkPipeline
-@@ -71,10 +77,6 @@ define VK_NULL_HANDLE 0
- @nonDispatchHandle type u64 VkDescriptorSet
- @nonDispatchHandle type u64 VkDescriptorSetLayout
- @nonDispatchHandle type u64 VkDescriptorPool
--@nonDispatchHandle type u64 VkDynamicViewportState
--@nonDispatchHandle type u64 VkDynamicRasterState
--@nonDispatchHandle type u64 VkDynamicColorBlendState
--@nonDispatchHandle type u64 VkDynamicDepthStencilState
- @nonDispatchHandle type u64 VkFence
- @nonDispatchHandle type u64 VkSemaphore
- @nonDispatchHandle type u64 VkEvent
-@@ -97,6 +99,7 @@ enum VkImageLayout {
-     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_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
- }
- 
- enum VkAttachmentLoadOp {
-@@ -138,11 +141,6 @@ enum VkImageAspect {
-     VK_IMAGE_ASPECT_METADATA                                = 0x00000003,
- }
- 
--enum VkBufferViewType {
--    VK_BUFFER_VIEW_TYPE_RAW                                 = 0x00000000,   /// Raw buffer without special structure (UBO, SSBO)
--    VK_BUFFER_VIEW_TYPE_FORMATTED                           = 0x00000001,   /// Buffer with format (TBO, IBO)
--}
--
- enum VkCmdBufferLevel {
-     VK_CMD_BUFFER_LEVEL_PRIMARY                             = 0x00000000,
-     VK_CMD_BUFFER_LEVEL_SECONDARY                           = 0x00000001,
-@@ -240,12 +238,12 @@ enum VkTexMipmapMode {
-     VK_TEX_MIPMAP_MODE_LINEAR                               = 0x00000002,   /// Linear filter between mip levels
- }
- 
--enum VkTexAddress {
--    VK_TEX_ADDRESS_WRAP                                     = 0x00000000,
--    VK_TEX_ADDRESS_MIRROR                                   = 0x00000001,
--    VK_TEX_ADDRESS_CLAMP                                    = 0x00000002,
--    VK_TEX_ADDRESS_MIRROR_ONCE                              = 0x00000003,
--    VK_TEX_ADDRESS_CLAMP_BORDER                             = 0x00000004,
-+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 VkCompareOp {
-@@ -450,7 +448,7 @@ enum VkFormat {
-     VK_FORMAT_R11G11B10_UFLOAT                              = 0x00000057,
-     VK_FORMAT_R9G9B9E5_UFLOAT                               = 0x00000058,
-     VK_FORMAT_D16_UNORM                                     = 0x00000059,
--    VK_FORMAT_D24_UNORM                                     = 0x0000005A,
-+    VK_FORMAT_D24_UNORM_X8                                  = 0x0000005A,
-     VK_FORMAT_D32_SFLOAT                                    = 0x0000005B,
-     VK_FORMAT_S8_UINT                                       = 0x0000005C,
-     VK_FORMAT_D16_UNORM_S8_UINT                             = 0x0000005D,
-@@ -552,52 +550,49 @@ enum VkStructureType {
-     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_ATTACHMENT_VIEW_CREATE_INFO               = 4,
--    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO                 = 5,
--    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO                        = 6,
--    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO              = 7,
--    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO                       = 8,
--    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO         = 9,
--    VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO        = 10,
--    VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO          = 11,
--    VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO     = 12,
--    VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO   = 13,
--    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO                    = 14,
--    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO                         = 15,
--    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO                         = 16,
--    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO                     = 17,
--    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO                    = 18,
--    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO         = 19,
--    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO             = 20,
--    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO   = 21,
--    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 22,
--    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO   = 23,
--    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO       = 24,
--    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO         = 25,
--    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO    = 26,
--    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO    = 27,
--    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO  = 28,
--    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO                         = 29,
--    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO                        = 30,
--    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO                   = 31,
--    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO                   = 32,
--    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO                     = 33,
--    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO                   = 34,
--    VK_STRUCTURE_TYPE_MEMORY_BARRIER                            = 35,
--    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER                     = 36,
--    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER                      = 37,
--    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO               = 38,
--    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET                      = 39,
--    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET                       = 40,
--    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO                      = 41,
--    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO               = 42,
--    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE                       = 43,
--    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO                = 44,
--    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION                    = 45,
--    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION                       = 46,
--    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY                        = 47,
--    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO                    = 48,
--    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO                      = 49,
-+    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_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_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,
- }
- 
- enum VkRenderPassContents {
-@@ -605,7 +600,7 @@ enum VkRenderPassContents {
-     VK_RENDER_PASS_CONTENTS_SECONDARY_CMD_BUFFERS           = 0x00000001,
- }
- 
--@lastUnused(-33)
-+@lastUnused(-8)
- /// Error and return codes
- enum VkResult {
-     // Return codes for successful operation execution (positive values)
-@@ -618,38 +613,26 @@ enum VkResult {
-     VK_INCOMPLETE                                           = 0x00000006,
- 
-     // Error codes (negative values)
--    VK_ERROR_UNKNOWN                                        = 0xFFFFFFFF,
--    VK_ERROR_UNAVAILABLE                                    = 0xFFFFFFFE,
-+    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFF,
-+    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFE,
-     VK_ERROR_INITIALIZATION_FAILED                          = 0xFFFFFFFD,
--    VK_ERROR_OUT_OF_HOST_MEMORY                             = 0xFFFFFFFC,
--    VK_ERROR_OUT_OF_DEVICE_MEMORY                           = 0xFFFFFFFB,
--    VK_ERROR_DEVICE_ALREADY_CREATED                         = 0xFFFFFFFA,
--    VK_ERROR_DEVICE_LOST                                    = 0xFFFFFFF9,
--    VK_ERROR_INVALID_POINTER                                = 0xFFFFFFF8,
--    VK_ERROR_INVALID_VALUE                                  = 0xFFFFFFF7,
--    VK_ERROR_INVALID_HANDLE                                 = 0xFFFFFFF6,
--    VK_ERROR_INVALID_ORDINAL                                = 0xFFFFFFF5,
--    VK_ERROR_INVALID_MEMORY_SIZE                            = 0xFFFFFFF4,
--    VK_ERROR_INVALID_EXTENSION                              = 0xFFFFFFF3,
--    VK_ERROR_INVALID_FLAGS                                  = 0xFFFFFFF2,
--    VK_ERROR_INVALID_ALIGNMENT                              = 0xFFFFFFF1,
--    VK_ERROR_INVALID_FORMAT                                 = 0xFFFFFFF0,
--    VK_ERROR_INVALID_IMAGE                                  = 0xFFFFFFEF,
--    VK_ERROR_INVALID_DESCRIPTOR_SET_DATA                    = 0xFFFFFFEE,
--    VK_ERROR_INVALID_QUEUE_TYPE                             = 0xFFFFFFED,
--    VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION                  = 0xFFFFFFEC,
--    VK_ERROR_BAD_SHADER_CODE                                = 0xFFFFFFEB,
--    VK_ERROR_BAD_PIPELINE_DATA                              = 0xFFFFFFEA,
--    VK_ERROR_NOT_MAPPABLE                                   = 0xFFFFFFE9,
--    VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFE8,
--    VK_ERROR_MEMORY_UNMAP_FAILED                            = 0xFFFFFFE7,
--    VK_ERROR_INCOMPATIBLE_DEVICE                            = 0xFFFFFFE6,
--    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFE5,
--    VK_ERROR_INCOMPLETE_COMMAND_BUFFER                      = 0xFFFFFFE4,
--    VK_ERROR_BUILDING_COMMAND_BUFFER                        = 0xFFFFFFE3,
--    VK_ERROR_MEMORY_NOT_BOUND                               = 0xFFFFFFE2,
--    VK_ERROR_INCOMPATIBLE_QUEUE                             = 0xFFFFFFE1,
--    VK_ERROR_INVALID_LAYER                                  = 0xFFFFFFE0,
-+    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_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF8,
-+}
-+
-+enum VkDynamicState {
-+    VK_DYNAMIC_STATE_VIEWPORT                               = 0x00000000,
-+    VK_DYNAMIC_STATE_SCISSOR                                = 0x00000001,
-+    VK_DYNAMIC_STATE_LINE_WIDTH                             = 0x00000002,
-+    VK_DYNAMIC_STATE_DEPTH_BIAS                             = 0x00000003,
-+    VK_DYNAMIC_STATE_BLEND_CONSTANTS                        = 0x00000004,
-+    VK_DYNAMIC_STATE_DEPTH_BOUNDS                           = 0x00000005,
-+    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK                   = 0x00000006,
-+    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK                     = 0x00000007,
-+    VK_DYNAMIC_STATE_STENCIL_REFERENCE                      = 0x00000008,
- }
- 
- 
-@@ -657,11 +640,6 @@ enum VkResult {
- //  Bitfields  //
- /////////////////
- 
--/// Device creation flags
--bitfield VkDeviceCreateFlags {
--    VK_DEVICE_CREATE_VALIDATION_BIT                         = 0x00000001,
--}
--
- /// Queue capabilities
- bitfield VkQueueFlags {
-     VK_QUEUE_GRAPHICS_BIT                                   = 0x00000001,    /// Queue supports graphics operations
-@@ -684,7 +662,7 @@ bitfield VkMemoryPropertyFlags {
- 
- /// Memory heap flags
- bitfield VkMemoryHeapFlags {
--    VK_MEMORY_HEAP_HOST_LOCAL                               = 0x00000001,    /// If set, heap represents host memory
-+    VK_MEMORY_HEAP_HOST_LOCAL_BIT                           = 0x00000001,    /// If set, heap represents host memory
- }
- 
- /// Memory output flags passed to resource transition commands
-@@ -712,7 +690,6 @@ bitfield VkMemoryInputFlags {
- 
- /// Buffer usage flags
- bitfield VkBufferUsageFlags {
--    VK_BUFFER_USAGE_GENERAL                                 = 0x00000000,    /// No special usage
-     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
-@@ -726,7 +703,7 @@ bitfield VkBufferUsageFlags {
- 
- /// Buffer creation flags
- bitfield VkBufferCreateFlags {
--    VK_BUFFER_CREATE_SPARSE_BIT                             = 0x00000001,    /// Buffer should support sparse backing
-+    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
- }
-@@ -745,31 +722,29 @@ bitfield VkShaderStageFlags {
- 
- /// Image usage flags
- bitfield VkImageUsageFlags {
--    VK_IMAGE_USAGE_GENERAL                                  = 0x00000000,    /// No special usage
-     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)
-     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
--    VK_IMAGE_USAGE_DEPTH_STENCIL_BIT                        = 0x00000020,    /// Can be used as framebuffer depth/stencil attachment
-+    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT             = 0x00000020,    /// Can be used as framebuffer depth/stencil attachment
-     VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT                 = 0x00000040,    /// Image data not needed outside of rendering
-     VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT                     = 0x00000080,    /// Can be used as framebuffer input attachment
- }
- 
- /// Image creation flags
- bitfield VkImageCreateFlags {
--    VK_IMAGE_CREATE_SPARSE_BIT                              = 0x00000001,    /// Image should support sparse backing
-+    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
--    VK_IMAGE_CREATE_INVARIANT_DATA_BIT                      = 0x00000008,
--    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = 0x00000010,    /// Allows image views to have different format than the base image
--    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000020,    /// Allows creating image views with cube type from the created image
-+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = 0x00000008,    /// Allows image views to have different format than the base image
-+    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000010,    /// Allows creating image views with cube type from the created image
- }
- 
- /// Framebuffer attachment view creation flags
--bitfield VkAttachmentViewCreateFlags {
--    VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT           = 0x00000001,
--    VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT         = 0x00000002,
-+bitfield VkImageViewCreateFlags {
-+    VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT                = 0x00000001,
-+    VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT              = 0x00000002,
- }
- 
- /// Pipeline creation flags
-@@ -808,7 +783,8 @@ bitfield VkFormatFeatureFlags {
-     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_CONVERSION_BIT                        = 0x00000400,    /// Format can be used as the source or destination of format converting blits
-+    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
- }
- 
- /// Query control flags
-@@ -904,11 +880,15 @@ bitfield VkPipelineStageFlags {
-     VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT           = 0x00000400,  /// Color attachment writes
-     VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT                    = 0x00000800,  /// Compute shading
-     VK_PIPELINE_STAGE_TRANSFER_BIT                          = 0x00001000,  /// Transfer/copy operations
--    VK_PIPELINE_STAGE_TRANSITION_BIT                        = 0x00002000,  /// Resource transition commands
--    VK_PIPELINE_STAGE_HOST_BIT                              = 0x00004000,  /// Indicates host (CPU) is a source/sink of the dependency
-+    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                      = 0x00003FFF,  /// All graphics, compute, copy, and transition commands
-+    VK_PIPELINE_STAGE_ALL_GPU_COMMANDS                      = 0x00001FFF,  /// All graphics, compute, copy, and transition commands
-+}
-+
-+/// Render pass attachment description flags
-+bitfield VkAttachmentDescriptionFlags {
-+    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT                 = 0x00000001,  /// The attachment may alias physical memory of another attachment in the same renderpass
- }
- 
- /// Subpass description flags
-@@ -924,11 +904,27 @@ bitfield VkCmdPoolCreateFlags {
- 
- /// Command pool reset flags
- bitfield VkCmdPoolResetFlags {
--    VK_CMD_POOL_RESET_RELEASE_RESOURCES                     = 0x00000001,  /// Release resources owned by the pool
-+    VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT                 = 0x00000001,  /// Release resources owned by the pool
- }
- 
- bitfield VkCmdBufferResetFlags {
--    VK_CMD_BUFFER_RESET_RELEASE_RESOURCES                   = 0x00000001,  /// Release resources owned by the buffer
-+    VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT               = 0x00000001,  /// Release resources owned by the buffer
-+}
-+
-+bitfield VkSampleCountFlags {
-+    VK_SAMPLE_COUNT_1_BIT                                   = 0x00000001,
-+    VK_SAMPLE_COUNT_2_BIT                                   = 0x00000002,
-+    VK_SAMPLE_COUNT_4_BIT                                   = 0x00000004,
-+    VK_SAMPLE_COUNT_8_BIT                                   = 0x00000008,
-+    VK_SAMPLE_COUNT_16_BIT                                  = 0x00000010,
-+    VK_SAMPLE_COUNT_32_BIT                                  = 0x00000020,
-+    VK_SAMPLE_COUNT_64_BIT                                  = 0x00000040,
-+}
-+
-+bitfield VkStencilFaceFlags {
-+    VK_STENCIL_FACE_NONE                                    = 0x00000000,   /// No faces
-+    VK_STENCIL_FACE_FRONT_BIT                               = 0x00000001,   /// Front face
-+    VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
- }
- 
- 
-@@ -992,6 +988,8 @@ class VkPhysicalDeviceProperties {
-     VkPhysicalDeviceType                        deviceType
-     char[VK_MAX_PHYSICAL_DEVICE_NAME]           deviceName
-     u8[VK_UUID_LENGTH]                          pipelineCacheUUID
-+    VkPhysicalDeviceLimits                      limits
-+    VkPhysicalDeviceSparseProperties            sparseProperties
- }
- 
- class VkExtensionProperties {
-@@ -1023,6 +1021,8 @@ class VkAllocCallbacks {
- }
- 
- class VkDeviceQueueCreateInfo {
-+    VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
-+    const void*                                 pNext                     /// Pointer to next structure
-     u32                                         queueFamilyIndex
-     u32                                         queueCount
- }
-@@ -1037,7 +1037,6 @@ class VkDeviceCreateInfo {
-     u32                                         extensionCount
-     const char* const*                          ppEnabledExtensionNames
-     const VkPhysicalDeviceFeatures*             pEnabledFeatures
--    VkDeviceCreateFlags                         flags                      /// Device creation flags
- }
- 
- class VkInstanceCreateInfo {
-@@ -1051,10 +1050,10 @@ class VkInstanceCreateInfo {
-     const char* const*                          ppEnabledExtensionNames    /// Extension names to be enabled
- }
- 
--class VkPhysicalDeviceQueueProperties {
-+class VkQueueFamilyProperties {
-     VkQueueFlags                                queueFlags                 /// Queue flags
-     u32                                         queueCount
--    platform.VkBool32                           supportsTimestamps
-+    VkBool32                                    supportsTimestamps
- }
- 
- class VkPhysicalDeviceMemoryProperties {
-@@ -1067,13 +1066,13 @@ class VkPhysicalDeviceMemoryProperties {
- class VkMemoryAllocInfo {
-     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
-     const void*                                 pNext                      /// Pointer to next structure
--    platform.VkDeviceSize                       allocationSize             /// Size of memory allocation
-+    VkDeviceSize                                allocationSize             /// Size of memory allocation
-     u32                                         memoryTypeIndex            /// Index of the of the memory type to allocate from
- }
- 
- class VkMemoryRequirements {
--    platform.VkDeviceSize                       size                       /// Specified in bytes
--    platform.VkDeviceSize                       alignment                  /// Specified in bytes
-+    VkDeviceSize                                size                       /// Specified in bytes
-+    VkDeviceSize                                alignment                  /// Specified in bytes
-     u32                                         memoryTypeBits             /// Bitfield of the allowed memory type indices into memoryTypes[] for this object
- }
- 
-@@ -1086,9 +1085,9 @@ class VkSparseImageFormatProperties {
- class VkSparseImageMemoryRequirements {
-     VkSparseImageFormatProperties               formatProps
-     u32                                         imageMipTailStartLOD
--    platform.VkDeviceSize                       imageMipTailSize           /// Specified in bytes, must be a multiple of image block size / alignment
--    platform.VkDeviceSize                       imageMipTailOffset         /// Specified in bytes, must be a multiple of image block size / alignment
--    platform.VkDeviceSize                       imageMipTailStride         /// Specified in bytes, must be a multiple of image block size / alignment
-+    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
- }
- 
- class VkMemoryType {
-@@ -1097,7 +1096,7 @@ class VkMemoryType {
- }
- 
- class VkMemoryHeap {
--    platform.VkDeviceSize                       size                       /// Available memory in the heap
-+    VkDeviceSize                                size                       /// Available memory in the heap
-     VkMemoryHeapFlags                           flags                      /// Flags for the heap
- }
- 
-@@ -1105,26 +1104,36 @@ class VkMappedMemoryRange {
-     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
-     const void*                                 pNext                      /// Pointer to next structure
-     VkDeviceMemory                              mem                        /// Mapped memory object
--    platform.VkDeviceSize                       offset                     /// Offset within the mapped memory the range starts from
--    platform.VkDeviceSize                       size                       /// Size of the range within the mapped memory
-+    VkDeviceSize                                offset                     /// Offset within the mapped memory the range starts from
-+    VkDeviceSize                                size                       /// Size of the range within the mapped memory
- }
- 
- class VkFormatProperties {
-     VkFormatFeatureFlags                        linearTilingFeatures       /// Format features in case of linear tiling
-     VkFormatFeatureFlags                        optimalTilingFeatures      /// Format features in case of optimal tiling
-+    VkFormatFeatureFlags                        bufferFeatures             /// Format features supported by buffers
- }
- 
- class VkImageFormatProperties {
--    u64                                         maxResourceSize            /// max size (in bytes) of this resource type
--    u32                                         maxSamples                 /// max sample count for this resource type
-+    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
-+    VkSampleCountFlags                          sampleCounts               /// supported sample counts for this resource type
-+    VkDeviceSize                                maxResourceSize            /// max size (in bytes) of this resource type
-+}
-+
-+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.
- }
- 
- 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, or COMBINED_IMAGE_SAMPLER descriptor, otherwise should be VK_NULL_HANDLE)
--    VkAttachmentView                            attachmentView             /// Input attachment view to write to the descriptor (in case it's a 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 or attachmentView is not 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)
-+    VkDescriptorBufferInfo                      bufferInfo                 /// Raw buffer, size and offset for UNIFORM_BUFFER[_DYNAMIC] or STORAGE_BUFFER[_DYNAMIC] descriptor types. Ignored otherwise.
- }
- 
- class VkWriteDescriptorSet {
-@@ -1153,7 +1162,7 @@ class VkCopyDescriptorSet {
- class VkBufferCreateInfo {
-     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
-     const void*                                 pNext                      /// Pointer to next structure.
--    platform.VkDeviceSize                       size                       /// Specified in bytes
-+    VkDeviceSize                                size                       /// Specified in bytes
-     VkBufferUsageFlags                          usage                      /// Buffer usage flags
-     VkBufferCreateFlags                         flags                      /// Buffer creation flags
-     VkSharingMode                               sharingMode
-@@ -1165,23 +1174,22 @@ class VkBufferViewCreateInfo {
-     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
-     const void*                                 pNext                      /// Pointer to next structure.
-     VkBuffer                                    buffer
--    VkBufferViewType                            viewType
-     VkFormat                                    format                     /// Optionally specifies format of elements
--    platform.VkDeviceSize                       offset                     /// Specified in bytes
--    platform.VkDeviceSize                       range                      /// View size specified in bytes
-+    VkDeviceSize                                offset                     /// Specified in bytes
-+    VkDeviceSize                                range                      /// View size specified in bytes
- }
- 
- class VkImageSubresource {
-     VkImageAspect                               aspect
-     u32                                         mipLevel
--    u32                                         arraySlice
-+    u32                                         arrayLayer
- }
- 
- class VkImageSubresourceRange {
--    VkImageAspect                               aspect
-+    VkImageAspectFlags                          aspectMask
-     u32                                         baseMipLevel
-     u32                                         mipLevels
--    u32                                         baseArraySlice
-+    u32                                         baseArrayLayer
-     u32                                         arraySize
- }
- 
-@@ -1200,8 +1208,8 @@ class VkBufferMemoryBarrier {
-     u32                                         srcQueueFamilyIndex        /// Queue family to transition ownership from
-     u32                                         destQueueFamilyIndex       /// Queue family to transition ownership to
-     VkBuffer                                    buffer                     /// Buffer to sync
--    platform.VkDeviceSize                       offset                     /// Offset within the buffer to sync
--    platform.VkDeviceSize                       size                       /// Amount of bytes to sync
-+    VkDeviceSize                                offset                     /// Offset within the buffer to sync
-+    VkDeviceSize                                size                       /// Amount of bytes to sync
- }
- 
- class VkImageMemoryBarrier {
-@@ -1232,13 +1240,14 @@ class VkImageCreateInfo {
-     VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
-     u32                                         queueFamilyCount           /// 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
- }
- 
- class VkSubresourceLayout {
--    platform.VkDeviceSize                       offset                 /// Specified in bytes
--    platform.VkDeviceSize                       size                   /// Specified in bytes
--    platform.VkDeviceSize                       rowPitch               /// Specified in bytes
--    platform.VkDeviceSize                       depthPitch             /// Specified in bytes
-+    VkDeviceSize                                offset                 /// Specified in bytes
-+    VkDeviceSize                                size                   /// Specified in bytes
-+    VkDeviceSize                                rowPitch               /// Specified in bytes
-+    VkDeviceSize                                depthPitch             /// Specified in bytes
- }
- 
- class VkImageViewCreateInfo {
-@@ -1249,34 +1258,19 @@ class VkImageViewCreateInfo {
-     VkFormat                                    format
-     VkChannelMapping                            channels
-     VkImageSubresourceRange                     subresourceRange
--}
--
--class VkAttachmentViewCreateInfo {
--    VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_VIEW_CREATE_INFO
--    const void*                                 pNext                  /// Pointer to next structure
--    VkImage                                     image
--    VkFormat                                    format
--    u32                                         mipLevel
--    u32                                         baseArraySlice
--    u32                                         arraySize
--    VkAttachmentViewCreateFlags                 flags                  /// Framebuffer attachment view flags
--}
--
--class VkAttachmentBindInfo {
--    VkAttachmentView                            view
--    VkImageLayout                               layout
-+    VkImageViewCreateFlags                      flags
- }
- 
- class VkBufferCopy {
--    platform.VkDeviceSize                       srcOffset              /// Specified in bytes
--    platform.VkDeviceSize                       destOffset             /// Specified in bytes
--    platform.VkDeviceSize                       copySize               /// Specified in bytes
-+    VkDeviceSize                                srcOffset              /// Specified in bytes
-+    VkDeviceSize                                destOffset             /// Specified in bytes
-+    VkDeviceSize                                copySize               /// Specified in bytes
- }
- 
- class VkSparseMemoryBindInfo {
--    platform.VkDeviceSize                       rangeOffset           /// Specified in bytes
--    platform.VkDeviceSize                       rangeSize             /// Specified in bytes
--    platform.VkDeviceSize                       memOffset             /// Specified in bytes
-+    VkDeviceSize                                rangeOffset           /// Specified in bytes
-+    VkDeviceSize                                rangeSize             /// Specified in bytes
-+    VkDeviceSize                                memOffset             /// Specified in bytes
-     VkDeviceMemory                              mem
-     VkSparseMemoryBindFlags                     flags
- }
-@@ -1285,41 +1279,48 @@ class VkSparseImageMemoryBindInfo {
-     VkImageSubresource                          subresource
-     VkOffset3D                                  offset
-     VkExtent3D                                  extent
--    platform.VkDeviceSize                       memOffset             /// Specified in bytes
-+    VkDeviceSize                                memOffset             /// Specified in bytes
-     VkDeviceMemory                              mem
-     VkSparseMemoryBindFlags                     flags
- }
- 
-+class VkImageSubresourceCopy {
-+    VkImageAspect                               aspect
-+    u32                                         mipLevel
-+    u32                                         arrayLayer
-+    u32                                         arraySize
-+}
-+
- class VkImageCopy {
--    VkImageSubresource                          srcSubresource
-+    VkImageSubresourceCopy                      srcSubresource
-     VkOffset3D                                  srcOffset             /// Specified in pixels for both compressed and uncompressed images
--    VkImageSubresource                          destSubresource
-+    VkImageSubresourceCopy                      destSubresource
-     VkOffset3D                                  destOffset            /// Specified in pixels for both compressed and uncompressed images
-     VkExtent3D                                  extent                /// Specified in pixels for both compressed and uncompressed images
- }
- 
- class VkImageBlit {
--    VkImageSubresource                          srcSubresource
-+    VkImageSubresourceCopy                      srcSubresource
-     VkOffset3D                                  srcOffset              /// Specified in pixels for both compressed and uncompressed images
-     VkExtent3D                                  srcExtent              /// Specified in pixels for both compressed and uncompressed images
--    VkImageSubresource                          destSubresource
-+    VkImageSubresourceCopy                      destSubresource
-     VkOffset3D                                  destOffset             /// Specified in pixels for both compressed and uncompressed images
-     VkExtent3D                                  destExtent             /// Specified in pixels for both compressed and uncompressed images
- }
- 
- class VkBufferImageCopy {
--    platform.VkDeviceSize                       bufferOffset           /// Specified in bytes
-+    VkDeviceSize                                bufferOffset           /// Specified in bytes
-     u32                                         bufferRowLength        /// Specified in texels
-     u32                                         bufferImageHeight
--    VkImageSubresource                          imageSubresource
-+    VkImageSubresourceCopy                      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 {
--    VkImageSubresource                          srcSubresource
-+    VkImageSubresourceCopy                      srcSubresource
-     VkOffset3D                                  srcOffset
--    VkImageSubresource                          destSubresource
-+    VkImageSubresourceCopy                      destSubresource
-     VkOffset3D                                  destOffset
-     VkExtent3D                                  extent
- }
-@@ -1338,6 +1339,7 @@ class VkShaderCreateInfo {
-     VkShaderModule                              module             /// Module containing entry point
-     const char*                                 pName              /// Null-terminated entry point name
-     VkShaderCreateFlags                         flags              /// Reserved
-+    VkShaderStage                               stage
- }
- 
- class VkDescriptorSetLayoutBinding {
-@@ -1362,6 +1364,8 @@ class VkDescriptorTypeCount {
- class VkDescriptorPoolCreateInfo {
-     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
-     const void*                                 pNext              /// Pointer to next structure
-+    VkDescriptorPoolUsage                       poolUsage
-+    u32                                         maxSets
-     u32                                         count
-     const VkDescriptorTypeCount*                pTypeCount
- }
-@@ -1390,7 +1394,7 @@ class VkPipelineShaderStageCreateInfo {
- class VkComputePipelineCreateInfo {
-     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
-     const void*                                 pNext              /// Pointer to next structure
--    VkPipelineShaderStageCreateInfo             cs
-+    VkPipelineShaderStageCreateInfo             stage
-     VkPipelineCreateFlags                       flags              /// Pipeline creation flags
-     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
-@@ -1423,7 +1427,7 @@ class VkPipelineInputAssemblyStateCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
-     VkPrimitiveTopology                         topology
--    platform.VkBool32                           primitiveRestartEnable
-+    VkBool32                                    primitiveRestartEnable
- }
- 
- class VkPipelineTessellationStateCreateInfo {
-@@ -1436,29 +1440,37 @@ class VkPipelineViewportStateCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
-     u32                                         viewportCount
-+    const VkViewport*                           pViewports
-+    u32                                         scissorCount
-+    const VkRect2D*                             pScissors
- }
- 
- class VkPipelineRasterStateCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
--    platform.VkBool32                           depthClipEnable
--    platform.VkBool32                           rasterizerDiscardEnable
-+    VkBool32                                    depthClipEnable
-+    VkBool32                                    rasterizerDiscardEnable
-     VkFillMode                                  fillMode                   /// optional (GL45)
-     VkCullMode                                  cullMode
-     VkFrontFace                                 frontFace
-+    VkBool32                                    depthBiasEnable
-+    f32                                         depthBias
-+    f32                                         depthBiasClamp
-+    f32                                         slopeScaledDepthBias
-+    f32                                         lineWidth
- }
- 
- class VkPipelineMultisampleStateCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
-     u32                                         rasterSamples              /// Number of samples used for rasterization
--    platform.VkBool32                           sampleShadingEnable        /// optional (GL45)
-+    VkBool32                                    sampleShadingEnable        /// optional (GL45)
-     f32                                         minSampleShading           /// optional (GL45)
--    platform.VkSampleMask                       sampleMask
-+    const VkSampleMask*                         pSampleMask
- }
- 
- class VkPipelineColorBlendAttachmentState {
--    platform.VkBool32                           blendEnable
-+    VkBool32                                    blendEnable
-     VkBlend                                     srcBlendColor
-     VkBlend                                     destBlendColor
-     VkBlendOp                                   blendOpColor
-@@ -1471,11 +1483,13 @@ class VkPipelineColorBlendAttachmentState {
- class VkPipelineColorBlendStateCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
--    platform.VkBool32                           alphaToCoverageEnable
--    platform.VkBool32                           logicOpEnable
-+    VkBool32                                    alphaToCoverageEnable
-+    VkBool32                                    alphaToOneEnable
-+    VkBool32                                    logicOpEnable
-     VkLogicOp                                   logicOp
-     u32                                         attachmentCount    /// # of pAttachments
-     const VkPipelineColorBlendAttachmentState*  pAttachments
-+    f32[4]                                      blendConst
- }
- 
- class VkStencilOpState {
-@@ -1483,18 +1497,30 @@ class VkStencilOpState {
-     VkStencilOp                                 stencilPassOp
-     VkStencilOp                                 stencilDepthFailOp
-     VkCompareOp                                 stencilCompareOp
-+    u32                                         stencilCompareMask
-+    u32                                         stencilWriteMask
-+    u32                                         stencilReference
- }
- 
- class VkPipelineDepthStencilStateCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
--    platform.VkBool32                           depthTestEnable
--    platform.VkBool32                           depthWriteEnable
-+    VkBool32                                    depthTestEnable
-+    VkBool32                                    depthWriteEnable
-     VkCompareOp                                 depthCompareOp
--    platform.VkBool32                           depthBoundsEnable  /// optional (depth_bounds_test)
--    platform.VkBool32                           stencilTestEnable
-+    VkBool32                                    depthBoundsTestEnable  /// optional (depth_bounds_test)
-+    VkBool32                                    stencilTestEnable
-     VkStencilOpState                            front
-     VkStencilOpState                            back
-+    f32                                         minDepthBounds
-+    f32                                         maxDepthBounds
-+}
-+
-+class VkPipelineDynamicStateCreateInfo {
-+    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
-+    const void*                                 pNext      /// Pointer to next structure
-+    u32                                         dynamicStateCount
-+    const VkDynamicState*                       pDynamicStates
- }
- 
- class VkGraphicsPipelineCreateInfo {
-@@ -1510,6 +1536,7 @@ class VkGraphicsPipelineCreateInfo {
-     const VkPipelineMultisampleStateCreateInfo*     pMultisampleState
-     const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
-     const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
-+    const VkPipelineDynamicStateCreateInfo*         pDynamicState
-     VkPipelineCreateFlags                           flags              /// Pipeline creation flags
-     VkPipelineLayout                                layout             /// Interface layout of the pipeline
-     VkRenderPass                                    renderPass
-@@ -1547,50 +1574,17 @@ class VkSamplerCreateInfo {
-     VkTexFilter                                 magFilter      /// Filter mode for magnification
-     VkTexFilter                                 minFilter      /// Filter mode for minifiation
-     VkTexMipmapMode                             mipMode        /// Mipmap selection mode
--    VkTexAddress                                addressU
--    VkTexAddress                                addressV
--    VkTexAddress                                addressW
-+    VkTexAddressMode                            addressModeU
-+    VkTexAddressMode                            addressModeV
-+    VkTexAddressMode                            addressModeW
-     f32                                         mipLodBias
-     f32                                         maxAnisotropy
--    platform.VkBool32                           compareEnable
-+    VkBool32                                    compareEnable
-     VkCompareOp                                 compareOp
-     f32                                         minLod
-     f32                                         maxLod
-     VkBorderColor                               borderColor
--}
--
--class VkDynamicViewportStateCreateInfo {
--    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO
--    const void*                                 pNext      /// Pointer to next structure
--    u32                                         viewportAndScissorCount  /// number of entries in pViewports and pScissors
--    const VkViewport*                           pViewports
--    const VkRect2D*                             pScissors
--}
--
--class VkDynamicRasterStateCreateInfo {
--    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO
--    const void*                                 pNext      /// Pointer to next structure
--    f32                                         depthBias
--    f32                                         depthBiasClamp
--    f32                                         slopeScaledDepthBias
--    f32                                         lineWidth          /// optional (GL45) - Width of lines
--}
--
--class VkDynamicColorBlendStateCreateInfo {
--    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO
--    const void*                                 pNext      /// Pointer to next structure
--    f32[4]                                      blendConst
--}
--
--class VkDynamicDepthStencilStateCreateInfo {
--    VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO
--    const void*                                 pNext      /// Pointer to next structure
--    f32                                         minDepthBounds         /// optional (depth_bounds_test)
--    f32                                         maxDepthBounds         /// optional (depth_bounds_test)
--    u32                                         stencilReadMask
--    u32                                         stencilWriteMask
--    u32                                         stencilFrontRef
--    u32                                         stencilBackRef
-+    VkBool32                                    unnormalizedCoordinates
- }
- 
- class VkCmdPoolCreateInfo {
-@@ -1613,6 +1607,7 @@ class VkCmdBufferBeginInfo {
-     const void*                                 pNext       /// Pointer to next structure
-     VkCmdBufferOptimizeFlags                    flags       /// Command buffer optimization flags
-     VkRenderPass                                renderPass  /// Render pass for secondary command buffers
-+    u32                                         subpass
-     VkFramebuffer                               framebuffer /// Framebuffer for secondary command buffers
- }
- 
-@@ -1622,16 +1617,16 @@ class VkRenderPassBeginInfo {
-     VkRenderPass                                renderPass
-     VkFramebuffer                               framebuffer
-     VkRect2D                                    renderArea
--    u32                                         attachmentCount
--    const VkClearValue*                         pAttachmentClearValues
-+    u32                                         clearValueCount
-+    const VkClearValue*                         pClearValues
- }
- 
- @union
- /// Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
- class VkClearColorValue {
--    f32[4]                                      f32
--    s32[4]                                      s32
--    u32[4]                                      u32
-+    f32[4]                                      float32
-+    s32[4]                                      int32
-+    u32[4]                                      uint32
- }
- 
- class VkClearDepthStencilValue {
-@@ -1643,7 +1638,7 @@ class VkClearDepthStencilValue {
- /// Union allowing specification of color, depth, and stencil color values. Actual value selected is based on attachment being cleared.
- class VkClearValue {
-     VkClearColorValue                           color
--    VkClearDepthStencilValue                    ds
-+    VkClearDepthStencilValue                    depthStencil
- }
- 
- class VkAttachmentDescription {
-@@ -1657,6 +1652,7 @@ class VkAttachmentDescription {
-     VkAttachmentStoreOp                         stencilStoreOp  /// Store op for stencil data
-     VkImageLayout                               initialLayout
-     VkImageLayout                               finalLayout
-+    VkAttachmentDescriptionFlags                flags
- }
- 
- class VkAttachmentReference {
-@@ -1670,13 +1666,13 @@ class VkSubpassDescription {
-     VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
-     VkSubpassDescriptionFlags                   flags
-     u32                                         inputCount
--    const VkAttachmentReference*                inputAttachments
-+    const VkAttachmentReference*                pInputAttachments
-     u32                                         colorCount
--    const VkAttachmentReference*                colorAttachments
--    const VkAttachmentReference*                resolveAttachments
-+    const VkAttachmentReference*                pColorAttachments
-+    const VkAttachmentReference*                pResolveAttachments
-     VkAttachmentReference                       depthStencilAttachment
-     u32                                         preserveCount
--    const VkAttachmentReference*                preserveAttachments
-+    const VkAttachmentReference*                pPreserveAttachments
- }
- 
- class VkSubpassDependency {
-@@ -1688,7 +1684,7 @@ class VkSubpassDependency {
-     VkPipelineStageFlags                        destStageMask
-     VkMemoryOutputFlags                         outputMask
-     VkMemoryInputFlags                          inputMask
--    platform.VkBool32                           byRegion
-+    VkBool32                                    byRegion
- }
- 
- class VkRenderPassCreateInfo {
-@@ -1715,64 +1711,57 @@ class VkFenceCreateInfo {
- }
- 
- class VkPhysicalDeviceFeatures {
--    platform.VkBool32                           robustBufferAccess                        /// out of bounds buffer accesses are well defined
--    platform.VkBool32                           fullDrawIndexUint32                       /// full 32-bit range of indices for indexed draw calls
--    platform.VkBool32                           imageCubeArray                            /// image views which are arrays of cube maps
--    platform.VkBool32                           independentBlend                          /// blending operations are controlled per-attachment
--    platform.VkBool32                           geometryShader                            /// geometry stage
--    platform.VkBool32                           tessellationShader                        /// tessellation control and evaluation stage
--    platform.VkBool32                           sampleRateShading                         /// per-sample shading and interpolation
--    platform.VkBool32                           dualSourceBlend                           /// blend operations which take two sources
--    platform.VkBool32                           logicOp                                   /// logic operations
--    platform.VkBool32                           instancedDrawIndirect                     /// multi draw indirect
--    platform.VkBool32                           depthClip                                 /// depth clipping
--    platform.VkBool32                           depthBiasClamp                            /// depth bias clamping
--    platform.VkBool32                           fillModeNonSolid                          /// point and wireframe fill modes
--    platform.VkBool32                           depthBounds                               /// depth bounds test
--    platform.VkBool32                           wideLines                                 /// lines with width greater than 1
--    platform.VkBool32                           largePoints                               /// points with size greater than 1
--    platform.VkBool32                           textureCompressionETC2                    /// ETC texture compression formats
--    platform.VkBool32                           textureCompressionASTC_LDR                /// ASTC LDR texture compression formats
--    platform.VkBool32                           textureCompressionBC                      /// BC1-7 texture compressed formats
--    platform.VkBool32                           pipelineStatisticsQuery                   /// pipeline statistics query
--    platform.VkBool32                           vertexSideEffects                         /// storage buffers and images in vertex stage
--    platform.VkBool32                           tessellationSideEffects                   /// storage buffers and images in tessellation stage
--    platform.VkBool32                           geometrySideEffects                       /// storage buffers and images in geometry stage
--    platform.VkBool32                           fragmentSideEffects                       /// storage buffers and images in fragment stage
--    platform.VkBool32                           shaderTessellationPointSize               /// tessellation stage can export point size
--    platform.VkBool32                           shaderGeometryPointSize                   /// geometry stage can export point size
--    platform.VkBool32                           shaderTextureGatherExtended               /// texture gather with run-time values and independent offsets
--    platform.VkBool32                           shaderStorageImageExtendedFormats         /// the extended set of formats can be used for storage images
--    platform.VkBool32                           shaderStorageImageMultisample             /// multisample images can be used for storage images
--    platform.VkBool32                           shaderStorageBufferArrayConstantIndexing  /// arrays of storage buffers can be accessed with constant indices
--    platform.VkBool32                           shaderStorageImageArrayConstantIndexing   /// arrays of storage images can be accessed with constant indices
--    platform.VkBool32                           shaderUniformBufferArrayDynamicIndexing   /// arrays of uniform buffers can be accessed with dynamically uniform indices
--    platform.VkBool32                           shaderSampledImageArrayDynamicIndexing    /// arrays of sampled images can be accessed with dynamically uniform indices
--    platform.VkBool32                           shaderStorageBufferArrayDynamicIndexing   /// arrays of storage buffers can be accessed with dynamically uniform indices
--    platform.VkBool32                           shaderStorageImageArrayDynamicIndexing    /// arrays of storage images can be accessed with dynamically uniform indices
--    platform.VkBool32                           shaderClipDistance                        /// clip distance in shaders
--    platform.VkBool32                           shaderCullDistance                        /// cull distance in shaders
--    platform.VkBool32                           shaderFloat64                             /// 64-bit floats (doubles) in shaders
--    platform.VkBool32                           shaderInt64                               /// 64-bit integers in shaders
--    platform.VkBool32                           shaderFloat16                             /// 16-bit floats in shaders
--    platform.VkBool32                           shaderInt16                               /// 16-bit integers in shaders
--    platform.VkBool32                           shaderResourceResidency                   /// shader can use texture operations that return resource residency information (requires sparseNonResident support)
--    platform.VkBool32                           shaderResourceMinLOD                      /// shader can use texture operations that specify minimum resource LOD
--    platform.VkBool32                           sparse                                    /// Sparse resources support: Resource memory can be managed at opaque page level rather than object level
--    platform.VkBool32                           sparseResidencyBuffer                     /// Sparse resources support: GPU can access partially resident buffers
--    platform.VkBool32                           sparseResidencyImage2D                    /// Sparse resources support: GPU can access partially resident 2D (non-MSAA non-DepthStencil) images
--    platform.VkBool32                           sparseResidencyImage3D                    /// Sparse resources support: GPU can access partially resident 3D images
--    platform.VkBool32                           sparseResidency2Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
--    platform.VkBool32                           sparseResidency4Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
--    platform.VkBool32                           sparseResidency8Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 8 samples
--    platform.VkBool32                           sparseResidency16Samples                  /// Sparse resources support: GPU can access partially resident MSAA 2D images with 16 samples
--    platform.VkBool32                           sparseResidencyStandard2DBlockShape       /// Sparse resources support: GPU will access all 2D (single sample) sparse resources using the standard block shapes (based on pixel format)
--    platform.VkBool32                           sparseResidencyStandard2DMSBlockShape     /// Sparse resources support: GPU will access all 2D (multisample) sparse resources using the standard block shapes (based on pixel format)
--    platform.VkBool32                           sparseResidencyStandard3DBlockShape       /// Sparse resources support: GPU will access all 3D sparse resources using the standard block shapes (based on pixel format)
--    platform.VkBool32                           sparseResidencyAlignedMipSize             /// Sparse resources support: Images with mip-level dimensions that are NOT a multiple of the block size will be placed in the mip tail
--    platform.VkBool32                           sparseResidencyNonResident                /// Sparse resources support: GPU can safely access non-resident regions of a resource, read values from read-write resources are undefined
--    platform.VkBool32                           sparseResidencyNonResidentStrict          /// Sparse resources support: GPU can safely access non-resident regions of a resource, all reads return as if data is 0, writes are discarded
--    platform.VkBool32                           sparseResidencyAliased                    /// Sparse resources support: GPU can correctly access data aliased into multiple locations (opt-in)
-+    VkBool32                                    robustBufferAccess                        /// out of bounds buffer accesses are well defined
-+    VkBool32                                    fullDrawIndexUint32                       /// full 32-bit range of indices for indexed draw calls
-+    VkBool32                                    imageCubeArray                            /// image views which are arrays of cube maps
-+    VkBool32                                    independentBlend                          /// blending operations are controlled per-attachment
-+    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                                    logicOp                                   /// logic operations
-+    VkBool32                                    multiDrawIndirect                         /// multi draw indirect
-+    VkBool32                                    depthClip                                 /// depth clipping
-+    VkBool32                                    depthBiasClamp                            /// depth bias clamping
-+    VkBool32                                    fillModeNonSolid                          /// point and wireframe fill modes
-+    VkBool32                                    depthBounds                               /// depth bounds test
-+    VkBool32                                    wideLines                                 /// lines with width greater than 1
-+    VkBool32                                    largePoints                               /// points with size greater than 1
-+    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                                    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                                    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                                    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
-+    VkBool32                                    shaderStorageImageArrayDynamicIndexing    /// arrays of storage images can be accessed with dynamically uniform indices
-+    VkBool32                                    shaderClipDistance                        /// clip distance in shaders
-+    VkBool32                                    shaderCullDistance                        /// cull distance in shaders
-+    VkBool32                                    shaderFloat64                             /// 64-bit floats (doubles) in shaders
-+    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                                    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
-+    VkBool32                                    sparseResidencyImage3D                    /// Sparse resources support: GPU can access partially resident 3D images
-+    VkBool32                                    sparseResidency2Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 2 samples
-+    VkBool32                                    sparseResidency4Samples                   /// Sparse resources support: GPU can access partially resident MSAA 2D images with 4 samples
-+    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)
- }
- 
- class VkPhysicalDeviceLimits {
-@@ -1782,13 +1771,15 @@ 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                                         maxTexelBufferSize                        /// max texel buffer size (bytes)
-     u32                                         maxUniformBufferSize                      /// max uniform buffer size (bytes)
-     u32                                         maxStorageBufferSize                      /// 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
--    platform.VkDeviceSize                       bufferImageGranularity                    /// Granularity (in bytes) at which buffers and images can be bound to adjacent memory for simultaneous usage
-+    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
-     u32                                         maxBoundDescriptorSets                    /// max number of descriptors sets that can be bound to a pipeline
-     u32                                         maxDescriptorSets                         /// max number of allocated descriptor sets
-@@ -1799,11 +1790,14 @@ class VkPhysicalDeviceLimits {
-     u32                                         maxPerStageDescriptorStorageImages        /// max num of storage images allowed per-stage in a descriptor set
-     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
-     u32                                         maxDescriptorSetStorageBuffers            /// max num of storage buffers allowed in all stages in a descriptor set
-+    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
-     /// vertex stage limits
-     u32                                         maxVertexInputAttributes                  /// max num of vertex input attribute slots
-+    u32                                         maxVertexInputBindings                    /// max num of vertex input binding slots
-     u32                                         maxVertexInputAttributeOffset             /// max vertex input attribute offset added to vertex buffer offset
-     u32                                         maxVertexInputBindingStride               /// max vertex input binding stride
-     u32                                         maxVertexOutputComponents                 /// max num of output components written by vertex shader
-@@ -1839,13 +1833,12 @@ class VkPhysicalDeviceLimits {
- 
-     u32                                         maxDrawIndexedIndexValue                  /// max index value for indexed draw calls (for 32-bit indices)
-     u32                                         maxDrawIndirectInstanceCount              /// max instance count for indirect draw calls
--    platform.VkBool32                           primitiveRestartForPatches                /// is primitive restart supported for PATCHES
-+    VkBool32                                    primitiveRestartForPatches                /// is primitive restart supported for PATCHES
- 
-     f32                                         maxSamplerLodBias                         /// max absolute sampler level of detail bias
-     f32                                         maxSamplerAnisotropy                      /// max degree of sampler anisotropy
- 
-     u32                                         maxViewports                              /// max number of active viewports
--    u32                                         maxDynamicViewportStates                  /// max number of dynamic viewport state objects
-     u32[2]                                      maxViewportDimensions                     /// max viewport dimensions (x,y)
-     f32[2]                                      viewportBoundsRange                       /// viewport bounds range (min,max)
-     u32                                         viewportSubPixelBits                      /// num bits of subpixel precision for viewport
-@@ -1883,12 +1876,21 @@ class VkPhysicalDeviceLimits {
-     u32                                         maxCullDistances                          /// max number of cull distances
-     u32                                         maxCombinedClipAndCullDistances           /// max combined number of user clipping
- 
--    f32[2]                                      pointSizeRange                         /// range (min,max) of supported point sizes
--    f32[2]                                      lineWidthRange                         /// range (min,max) of supported line widths
-+    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
-     f32                                         lineWidthGranularity                      /// granularity of supported line widths
- }
- 
-+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                                    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
-+}
-+
- class VkSemaphoreCreateInfo {
-     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
-     const void*                                 pNext      /// Pointer to next structure
-@@ -1908,7 +1910,7 @@ class VkFramebufferCreateInfo {
-     const void*                                 pNext  /// Pointer to next structure
-     VkRenderPass                                renderPass
-     u32                                         attachmentCount
--    const VkAttachmentBindInfo*                 pAttachments
-+    const VkImageView*                          pAttachments
-     u32                                         width
-     u32                                         height
-     u32                                         layers
-@@ -1981,13 +1983,11 @@ cmd VkResult vkCreateInstance(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyInstance(
-+cmd void vkDestroyInstance(
-         VkInstance                                  instance) {
-     instanceObject := GetInstance(instance)
- 
-     State.Instances[instance] = null
--
--    return ?
- }
- 
- @threadSafety("system")
-@@ -2015,7 +2015,7 @@ cmd VkResult vkEnumeratePhysicalDevices(
- cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
-         VkDevice                                    device,
-         const char*                                 pName) {
--    if device != VK_NULL_HANDLE {
-+    if device != NULL_HANDLE {
-         device := GetDevice(device)
-     }
- 
-@@ -2025,7 +2025,7 @@ cmd PFN_vkVoidFunction vkGetDeviceProcAddr(
- cmd PFN_vkVoidFunction vkGetInstanceProcAddr(
-         VkInstance                                  instance,
-         const char*                                 pName) {
--    if instance != VK_NULL_HANDLE {
-+    if instance != NULL_HANDLE {
-         instanceObject := GetInstance(instance)
-     }
- 
-@@ -2043,27 +2043,25 @@ cmd VkResult vkGetPhysicalDeviceProperties(
-     return ?
- }
- 
--cmd VkResult vkGetPhysicalDeviceQueueCount(
--        VkPhysicalDevice                            physicalDevice,
--        u32*                                        pCount) {
--    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
--
--    count := ?
--    pCount[0] = count
--
--    return ?
--}
--
--cmd VkResult vkGetPhysicalDeviceQueueProperties(
-+cmd VkResult vkGetPhysicalDeviceQueueFamilyProperties(
-         VkPhysicalDevice                            physicalDevice,
--        u32                                         count,
--        VkPhysicalDeviceQueueProperties*            pQueueProperties) {
-+        u32*                                        pCount,
-+        VkQueueFamilyProperties*                    pQueueFamilyProperties) {
-     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
--    queuesProperties := pQueueProperties[0:count]
--    for i in (0 .. count) {
--        queueProperties := as!VkPhysicalDeviceQueueProperties(?)
--        queuesProperties[i] = queueProperties
--    }
-+    // TODO: Figure out how to express fetch-count-or-properties
-+    // This version fails 'apic validate' with 'fence not allowed in
-+    // *semantic.Branch'. Other attempts have failed with the same or other
-+    // errors.
-+    // if pQueueFamilyProperties != null {
-+    //     queuesProperties := pQueueFamilyProperties[0:pCount[0]]
-+    //     for i in (0 .. pCount[0]) {
-+    //         queueProperties := as!VkQueueFamilyProperties(?)
-+    //         queuesProperties[i] = queueProperties
-+    //    }
-+    // } else {
-+    //     count := ?
-+    //     pCount[0] = count
-+    // }
-     return ?
- }
- 
-@@ -2107,6 +2105,7 @@ cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
-         VkImageType                                 type,
-         VkImageTiling                               tiling,
-         VkImageUsageFlags                           usage,
-+        VkImageCreateFlags                          flags,
-         VkImageFormatProperties*                    pImageFormatProperties) {
-     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
- 
-@@ -2116,17 +2115,6 @@ cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
-     return ?
- }
- 
--cmd VkResult vkGetPhysicalDeviceLimits(
--        VkPhysicalDevice                            physicalDevice,
--        VkPhysicalDeviceLimits*                     pLimits) {
--    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
--
--    limits := ?
--    pLimits[0] = limits
--
--    return ?
--}
--
- 
- // Device functions
- 
-@@ -2146,19 +2134,17 @@ cmd VkResult vkCreateDevice(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyDevice(
-+cmd void vkDestroyDevice(
-         VkDevice                                    device) {
-     deviceObject := GetDevice(device)
- 
-     State.Devices[device] = null
--
--    return ?
- }
- 
- 
- // Extension discovery functions
- 
--cmd VkResult vkGetGlobalLayerProperties(
-+cmd VkResult vkEnumerateInstanceLayerProperties(
-         u32*                                        pCount,
-         VkLayerProperties*                          pProperties) {
-     count := as!u32(?)
-@@ -2173,7 +2159,7 @@ cmd VkResult vkGetGlobalLayerProperties(
-     return ?
- }
- 
--cmd VkResult vkGetGlobalExtensionProperties(
-+cmd VkResult vkEnumerateInstanceExtensionProperties(
-         const char*                                 pLayerName,
-         u32*                                        pCount,
-         VkExtensionProperties*                      pProperties) {
-@@ -2189,7 +2175,7 @@ cmd VkResult vkGetGlobalExtensionProperties(
-     return ?
- }
- 
--cmd VkResult vkGetPhysicalDeviceLayerProperties(
-+cmd VkResult vkEnumerateDeviceLayerProperties(
-         VkPhysicalDevice                            physicalDevice,
-         u32*                                        pCount,
-         VkLayerProperties*                          pProperties) {
-@@ -2206,7 +2192,7 @@ cmd VkResult vkGetPhysicalDeviceLayerProperties(
-     return ?
- }
- 
--cmd VkResult vkGetPhysicalDeviceExtensionProperties(
-+cmd VkResult vkEnumerateDeviceExtensionProperties(
-         VkPhysicalDevice                            physicalDevice,
-         const char*                                 pLayerName,
-         u32*                                        pCount,
-@@ -2254,7 +2240,7 @@ cmd VkResult vkQueueSubmit(
-         VkFence                                     fence) {
-     queueObject := GetQueue(queue)
- 
--    if fence != VK_NULL_HANDLE {
-+    if fence != NULL_HANDLE {
-         fenceObject := GetFence(fence)
-         assert(fenceObject.device == queueObject.device)
-     }
-@@ -2309,7 +2295,7 @@ cmd VkResult vkAllocMemory(
- }
- 
- @threadSafety("system")
--cmd VkResult vkFreeMemory(
-+cmd void vkFreeMemory(
-         VkDevice                                    device,
-         VkDeviceMemory                              mem) {
-     deviceObject := GetDevice(device)
-@@ -2322,16 +2308,14 @@ cmd VkResult vkFreeMemory(
-     validate("MemoryCheck", len(memObject.boundCommandBuffers) == 0,
-         "vkFreeMemory: cmdBuffers still bound")
-     State.DeviceMemories[mem] = null
--
--    return ?
- }
- 
- @threadSafety("app")
- cmd VkResult vkMapMemory(
-         VkDevice                                    device,
-         VkDeviceMemory                              mem,
--        platform.VkDeviceSize                       offset,
--        platform.VkDeviceSize                       size,
-+        VkDeviceSize                                offset,
-+        VkDeviceSize                                size,
-         VkMemoryMapFlags                            flags,
-         void**                                      ppData) {
-     deviceObject := GetDevice(device)
-@@ -2345,14 +2329,12 @@ cmd VkResult vkMapMemory(
- }
- 
- @threadSafety("app")
--cmd VkResult vkUnmapMemory(
-+cmd void vkUnmapMemory(
-         VkDevice                                    device,
-         VkDeviceMemory                              mem) {
-     deviceObject := GetDevice(device)
-     memObject := GetDeviceMemory(mem)
-     assert(memObject.device == device)
--
--    return ?
- }
- 
- cmd VkResult vkFlushMappedMemoryRanges(
-@@ -2395,10 +2377,10 @@ cmd VkResult vkInvalidateMappedMemoryRanges(
- cmd VkResult vkGetDeviceMemoryCommitment(
-         VkDevice                                    device,
-         VkDeviceMemory                              memory,
--        platform.VkDeviceSize*                      pCommittedMemoryInBytes) {
-+        VkDeviceSize*                               pCommittedMemoryInBytes) {
-     deviceObject := GetDevice(device)
- 
--    if memory != VK_NULL_HANDLE {
-+    if memory != NULL_HANDLE {
-         memoryObject := GetDeviceMemory(memory)
-         assert(memoryObject.device == device)
-     }
-@@ -2424,19 +2406,19 @@ cmd VkResult vkBindBufferMemory(
-         VkDevice                                    device,
-         VkBuffer                                    buffer,
-         VkDeviceMemory                              mem,
--        platform.VkDeviceSize                       memOffset) {
-+        VkDeviceSize                                memOffset) {
-     deviceObject := GetDevice(device)
-     bufferObject := GetBuffer(buffer)
-     assert(bufferObject.device == device)
- 
-     // Unbind buffer from previous memory object, if not VK_NULL_HANDLE.
--    if bufferObject.mem != VK_NULL_HANDLE {
-+    if bufferObject.mem != NULL_HANDLE {
-         memObject := GetDeviceMemory(bufferObject.mem)
-         memObject.boundObjects[as!u64(buffer)] = null
-     }
- 
-     // Bind buffer to given memory object, if not VK_NULL_HANDLE.
--    if mem != VK_NULL_HANDLE {
-+    if mem != NULL_HANDLE {
-         memObject := GetDeviceMemory(mem)
-         assert(memObject.device == device)
-         memObject.boundObjects[as!u64(buffer)] = memOffset
-@@ -2462,19 +2444,19 @@ cmd VkResult vkBindImageMemory(
-         VkDevice                                    device,
-         VkImage                                     image,
-         VkDeviceMemory                              mem,
--        platform.VkDeviceSize                       memOffset) {
-+        VkDeviceSize                                memOffset) {
-     deviceObject := GetDevice(device)
-     imageObject := GetImage(image)
-     assert(imageObject.device == device)
- 
-     // Unbind image from previous memory object, if not VK_NULL_HANDLE.
--    if imageObject.mem != VK_NULL_HANDLE {
-+    if imageObject.mem != NULL_HANDLE {
-         memObject := GetDeviceMemory(imageObject.mem)
-         memObject.boundObjects[as!u64(image)] = null
-     }
- 
-     // Bind image to given memory object, if not VK_NULL_HANDLE.
--    if mem != VK_NULL_HANDLE {
-+    if mem != NULL_HANDLE {
-         memObject := GetDeviceMemory(mem)
-         assert(memObject.device == device)
-         memObject.boundObjects[as!u64(image)] = memOffset
-@@ -2567,7 +2549,7 @@ cmd VkResult vkCreateFence(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyFence(
-+cmd void vkDestroyFence(
-         VkDevice                                    device,
-         VkFence                                     fence) {
-     deviceObject := GetDevice(device)
-@@ -2575,8 +2557,6 @@ cmd VkResult vkDestroyFence(
-     assert(fenceObject.device == device)
- 
-     State.Fences[fence] = null
--
--    return ?
- }
- 
- @threadSafety("system")
-@@ -2613,7 +2593,7 @@ cmd VkResult vkWaitForFences(
-         VkDevice                                    device,
-         u32                                         fenceCount,
-         const VkFence*                              pFences,
--        platform.VkBool32                           waitAll,
-+        VkBool32                                    waitAll,
-         u64                                         timeout) {  /// timeout in nanoseconds
-     deviceObject := GetDevice(device)
- 
-@@ -2646,7 +2626,7 @@ cmd VkResult vkCreateSemaphore(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroySemaphore(
-+cmd void vkDestroySemaphore(
-         VkDevice                                    device,
-         VkSemaphore                                 semaphore) {
-     deviceObject := GetDevice(device)
-@@ -2654,8 +2634,6 @@ cmd VkResult vkDestroySemaphore(
-     assert(semaphoreObject.device == device)
- 
-     State.Semaphores[semaphore] = null
--
--    return ?
- }
- 
- @threadSafety("app")
-@@ -2699,7 +2677,7 @@ cmd VkResult vkCreateEvent(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyEvent(
-+cmd void vkDestroyEvent(
-         VkDevice                                    device,
-         VkEvent                                     event) {
-     deviceObject := GetDevice(device)
-@@ -2707,8 +2685,6 @@ cmd VkResult vkDestroyEvent(
-     assert(eventObject.device == device)
- 
-     State.Events[event] = null
--
--    return ?
- }
- 
- @threadSafety("system")
-@@ -2763,7 +2739,7 @@ cmd VkResult vkCreateQueryPool(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyQueryPool(
-+cmd void vkDestroyQueryPool(
-         VkDevice                                    device,
-         VkQueryPool                                 queryPool) {
-     deviceObject := GetDevice(device)
-@@ -2771,8 +2747,6 @@ cmd VkResult vkDestroyQueryPool(
-     assert(queryPoolObject.device == device)
- 
-     State.QueryPools[queryPool] = null
--
--    return ?
- }
- 
- @threadSafety("system")
-@@ -2813,7 +2787,7 @@ cmd VkResult vkCreateBuffer(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyBuffer(
-+cmd void vkDestroyBuffer(
-         VkDevice                                    device,
-         VkBuffer                                    buffer) {
-     deviceObject := GetDevice(device)
-@@ -2822,8 +2796,6 @@ cmd VkResult vkDestroyBuffer(
- 
-     assert(bufferObject.mem == 0)
-     State.Buffers[buffer] = null
--
--    return ?
- }
- 
- 
-@@ -2848,7 +2820,7 @@ cmd VkResult vkCreateBufferView(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyBufferView(
-+cmd void vkDestroyBufferView(
-         VkDevice                                    device,
-         VkBufferView                                bufferView) {
-     deviceObject := GetDevice(device)
-@@ -2856,8 +2828,6 @@ cmd VkResult vkDestroyBufferView(
-     assert(bufferViewObject.device == device)
- 
-     State.BufferViews[bufferView] = null
--
--    return ?
- }
- 
- 
-@@ -2879,7 +2849,7 @@ cmd VkResult vkCreateImage(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyImage(
-+cmd void vkDestroyImage(
-         VkDevice                                    device,
-         VkImage                                     image) {
-     deviceObject := GetDevice(device)
-@@ -2888,8 +2858,6 @@ cmd VkResult vkDestroyImage(
- 
-     assert(imageObject.mem == 0)
-     State.Images[image] = null
--
--    return ?
- }
- 
- cmd VkResult vkGetImageSubresourceLayout(
-@@ -2926,7 +2894,7 @@ cmd VkResult vkCreateImageView(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyImageView(
-+cmd void vkDestroyImageView(
-         VkDevice                                    device,
-         VkImageView                                 imageView) {
-     deviceObject := GetDevice(device)
-@@ -2934,39 +2902,6 @@ cmd VkResult vkDestroyImageView(
-     assert(imageViewObject.device == device)
- 
-     State.ImageViews[imageView] = null
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkCreateAttachmentView(
--        VkDevice                                    device,
--        const VkAttachmentViewCreateInfo*           pCreateInfo,
--        VkAttachmentView*                           pView) {
--    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_ATTACHMENT_VIEW_CREATE_INFO)
--    deviceObject := GetDevice(device)
--
--    imageObject := GetImage(pCreateInfo.image)
--    assert(imageObject.device == device)
--
--    view := ?
--    pView[0] = view
--    State.AttachmentViews[view] = new!AttachmentViewObject(device: device, image: pCreateInfo.image)
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkDestroyAttachmentView(
--        VkDevice                                    device,
--        VkAttachmentView                            attachmentView) {
--    deviceObject := GetDevice(device)
--    attachmentViewObject := GetAttachmentView(attachmentView)
--    assert(attachmentViewObject.device == device)
--
--    State.AttachmentViews[attachmentView] = null
--
--    return ?
- }
- 
- 
-@@ -2986,7 +2921,7 @@ cmd VkResult vkCreateShaderModule(
-     return ?
- }
- 
--cmd VkResult vkDestroyShaderModule(
-+cmd void vkDestroyShaderModule(
-         VkDevice                                    device,
-         VkShaderModule                              shaderModule) {
-     deviceObject := GetDevice(device)
-@@ -2994,8 +2929,6 @@ cmd VkResult vkDestroyShaderModule(
-     assert(shaderModuleObject.device == device)
- 
-     State.ShaderModules[shaderModule] = null
--
--    return ?
- }
- 
- @threadSafety("system")
-@@ -3014,7 +2947,7 @@ cmd VkResult vkCreateShader(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyShader(
-+cmd void vkDestroyShader(
-         VkDevice                                    device,
-         VkShader                                    shader) {
-     deviceObject := GetDevice(device)
-@@ -3022,8 +2955,6 @@ cmd VkResult vkDestroyShader(
-     assert(shaderObject.device == device)
- 
-     State.Shaders[shader] = null
--
--    return ?
- }
- 
- 
-@@ -3043,7 +2974,7 @@ cmd VkResult vkCreatePipelineCache(
-     return ?
- }
- 
--cmd VkResult vkDestroyPipelineCache(
-+cmd void vkDestroyPipelineCache(
-         VkDevice                                    device,
-         VkPipelineCache                             pipelineCache) {
-     deviceObject := GetDevice(device)
-@@ -3051,8 +2982,6 @@ cmd VkResult vkDestroyPipelineCache(
-     assert(pipelineCacheObject.device == device)
- 
-     State.PipelineCaches[pipelineCache] = null
--
--    return ?
- }
- 
- cmd platform.size_t vkGetPipelineCacheSize(
-@@ -3102,7 +3031,7 @@ cmd VkResult vkCreateGraphicsPipelines(
-         const VkGraphicsPipelineCreateInfo*         pCreateInfos,
-         VkPipeline*                                 pPipelines) {
-     deviceObject := GetDevice(device)
--    if pipelineCache != VK_NULL_HANDLE {
-+    if pipelineCache != NULL_HANDLE {
-         pipelineCacheObject := GetPipelineCache(pipelineCache)
-         assert(pipelineCacheObject.device == device)
-     }
-@@ -3125,7 +3054,7 @@ cmd VkResult vkCreateComputePipelines(
-         const VkComputePipelineCreateInfo*          pCreateInfos,
-         VkPipeline*                                 pPipelines) {
-     deviceObject := GetDevice(device)
--    if pipelineCache != VK_NULL_HANDLE {
-+    if pipelineCache != NULL_HANDLE {
-         pipelineCacheObject := GetPipelineCache(pipelineCache)
-         assert(pipelineCacheObject.device == device)
-     }
-@@ -3142,7 +3071,7 @@ cmd VkResult vkCreateComputePipelines(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyPipeline(
-+cmd void vkDestroyPipeline(
-         VkDevice                                    device,
-         VkPipeline                                  pipeline) {
-     deviceObject := GetDevice(device)
-@@ -3150,8 +3079,6 @@ cmd VkResult vkDestroyPipeline(
-     assert(pipelineObjects.device == device)
- 
-     State.Pipelines[pipeline] = null
--
--    return ?
- }
- 
- 
-@@ -3173,7 +3100,7 @@ cmd VkResult vkCreatePipelineLayout(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyPipelineLayout(
-+cmd void vkDestroyPipelineLayout(
-         VkDevice                                    device,
-         VkPipelineLayout                            pipelineLayout) {
-     deviceObject := GetDevice(device)
-@@ -3181,8 +3108,6 @@ cmd VkResult vkDestroyPipelineLayout(
-     assert(pipelineLayoutObjects.device == device)
- 
-     State.PipelineLayouts[pipelineLayout] = null
--
--    return ?
- }
- 
- 
-@@ -3204,7 +3129,7 @@ cmd VkResult vkCreateSampler(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroySampler(
-+cmd void vkDestroySampler(
-         VkDevice                                    device,
-         VkSampler                                   sampler) {
-     deviceObject := GetDevice(device)
-@@ -3212,8 +3137,6 @@ cmd VkResult vkDestroySampler(
-     assert(samplerObject.device == device)
- 
-     State.Samplers[sampler] = null
--
--    return ?
- }
- 
- 
-@@ -3235,7 +3158,7 @@ cmd VkResult vkCreateDescriptorSetLayout(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyDescriptorSetLayout(
-+cmd void vkDestroyDescriptorSetLayout(
-         VkDevice                                    device,
-         VkDescriptorSetLayout                       descriptorSetLayout) {
-     deviceObject := GetDevice(device)
-@@ -3243,16 +3166,12 @@ cmd VkResult vkDestroyDescriptorSetLayout(
-     assert(descriptorSetLayoutObject.device == device)
- 
-     State.DescriptorSetLayouts[descriptorSetLayout] = null
--
--    return ?
- }
- 
- @threadSafety("system")
- cmd VkResult vkCreateDescriptorPool(
-         VkDevice                                    device,
--        VkDescriptorPoolUsage                       poolUsage,
--        u32                                         maxSets,
--        const VkDescriptorPoolCreateInfo*           pCreateInfo,
-+        const VkDescriptorPoolCreateInfo*           pCreateInfo
-         VkDescriptorPool*                           pDescriptorPool) {
-     assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
-     deviceObject := GetDevice(device)
-@@ -3265,7 +3184,7 @@ cmd VkResult vkCreateDescriptorPool(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyDescriptorPool(
-+cmd void vkDestroyDescriptorPool(
-         VkDevice                                    device,
-         VkDescriptorPool                            descriptorPool) {
-     deviceObject := GetDevice(device)
-@@ -3273,8 +3192,6 @@ cmd VkResult vkDestroyDescriptorPool(
-     assert(descriptorPoolObject.device == device)
- 
-     State.DescriptorPools[descriptorPool] = null
--
--    return ?
- }
- 
- @threadSafety("app")
-@@ -3295,8 +3212,7 @@ cmd VkResult vkAllocDescriptorSets(
-         VkDescriptorSetUsage                        setUsage,
-         u32                                         count,
-         const VkDescriptorSetLayout*                pSetLayouts,
--        VkDescriptorSet*                            pDescriptorSets,
--        u32*                                        pCount) {
-+        VkDescriptorSet*                            pDescriptorSets) {
-     deviceObject := GetDevice(device)
-     descriptorPoolObject := GetDescriptorPool(descriptorPool)
- 
-@@ -3307,10 +3223,8 @@ cmd VkResult vkAllocDescriptorSets(
-         assert(setLayoutObject.device == device)
-     }
- 
--    setsCount := as!u32(?)
--    pCount[0] = setsCount
--    descriptorSets := pDescriptorSets[0:setsCount]
--    for i in (0 .. setsCount) {
-+    descriptorSets := pDescriptorSets[0:count]
-+    for i in (0 .. count) {
-         descriptorSet := ?
-         descriptorSets[i] = descriptorSet
-         State.DescriptorSets[descriptorSet] = new!DescriptorSetObject(device: device)
-@@ -3338,7 +3252,7 @@ cmd VkResult vkFreeDescriptorSets(
-     return ?
- }
- 
--cmd VkResult vkUpdateDescriptorSets(
-+cmd void vkUpdateDescriptorSets(
-         VkDevice                                    device,
-         u32                                         writeCount,
-         const VkWriteDescriptorSet*                 pDescriptorWrites,
-@@ -3359,123 +3273,6 @@ cmd VkResult vkUpdateDescriptorSets(
-         descriptorCopyObject := GetDescriptorSet(descriptorCopy.destSet)
-         assert(descriptorCopyObject.device == device)
-     }
--
--    return ?
--}
--
--
--// State object functions
--
--@threadSafety("system")
--cmd VkResult vkCreateDynamicViewportState(
--        VkDevice                                    device,
--        const VkDynamicViewportStateCreateInfo*     pCreateInfo,
--        VkDynamicViewportState*                     pState) {
--    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
--    deviceObject := GetDevice(device)
--
--    state := ?
--    pState[0] = state
--    State.DynamicViewportStates[state] = new!DynamicViewportStateObject(device: device)
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkDestroyDynamicViewportState(
--        VkDevice                                    device,
--        VkDynamicViewportState                      dynamicViewportState) {
--    deviceObject := GetDevice(device)
--    dynamicViewportStateObject := GetDynamicViewportState(dynamicViewportState)
--    assert(dynamicViewportStateObject.device == device)
--
--    State.DynamicViewportStates[dynamicViewportState] = null
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkCreateDynamicRasterState(
--        VkDevice                                    device,
--        const VkDynamicRasterStateCreateInfo*       pCreateInfo,
--        VkDynamicRasterState*                       pState) {
--    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO)
--    deviceObject := GetDevice(device)
--
--    state := ?
--    pState[0] = state
--    State.DynamicRasterStates[state] = new!DynamicRasterStateObject(device: device)
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkDestroyDynamicRasterState(
--        VkDevice                                    device,
--        VkDynamicRasterState                        dynamicRasterState) {
--    deviceObject := GetDevice(device)
--    dynamicRasterStateObject := GetDynamicRasterState(dynamicRasterState)
--    assert(dynamicRasterStateObject.device == device)
--
--    State.DynamicRasterStates[dynamicRasterState] = null
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkCreateDynamicColorBlendState(
--        VkDevice                                    device,
--        const VkDynamicColorBlendStateCreateInfo*   pCreateInfo,
--        VkDynamicColorBlendState*                   pState) {
--    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO)
--    deviceObject := GetDevice(device)
--
--    state := ?
--    pState[0] = state
--    State.DynamicColorBlendStates[state] = new!DynamicColorBlendStateObject(device: device)
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkDestroyDynamicColorBlendState(
--        VkDevice                                    device,
--        VkDynamicColorBlendState                    dynamicColorBlendState) {
--    deviceObject := GetDevice(device)
--    dynamicColorBlendStateObject := GetDynamicColorBlendState(dynamicColorBlendState)
--    assert(dynamicColorBlendStateObject.device == device)
--
--    State.DynamicColorBlendStates[dynamicColorBlendState] = null
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkCreateDynamicDepthStencilState(
--        VkDevice                                    device,
--        const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
--        VkDynamicDepthStencilState*                 pState) {
--    assert(pCreateInfo.sType == VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO)
--    deviceObject := GetDevice(device)
--
--    state := ?
--    pState[0] = state
--    State.DynamicDepthStencilStates[state] = new!DynamicDepthStencilStateObject(device: device)
--
--    return ?
--}
--
--@threadSafety("system")
--cmd VkResult vkDestroyDynamicDepthStencilState(
--        VkDevice                                    device,
--        VkDynamicDepthStencilState                  dynamicDepthStencilState) {
--    deviceObject := GetDevice(device)
--    dynamicDepthStencilStateObject := GetDynamicDepthStencilState(dynamicDepthStencilState)
--    assert(dynamicDepthStencilStateObject.device == device)
--
--    State.DynamicDepthStencilStates[dynamicDepthStencilState] = null
--
--    return ?
- }
- 
- 
-@@ -3497,7 +3294,7 @@ cmd VkResult vkCreateFramebuffer(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyFramebuffer(
-+cmd void vkDestroyFramebuffer(
-         VkDevice                                    device,
-         VkFramebuffer                               framebuffer) {
-     deviceObject := GetDevice(device)
-@@ -3505,8 +3302,6 @@ cmd VkResult vkDestroyFramebuffer(
-     assert(framebufferObject.device == device)
- 
-     State.Framebuffers[framebuffer] = null
--
--    return ?
- }
- 
- 
-@@ -3528,7 +3323,7 @@ cmd VkResult vkCreateRenderPass(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyRenderPass(
-+cmd void vkDestroyRenderPass(
-         VkDevice                                    device,
-         VkRenderPass                                renderPass) {
-     deviceObject := GetDevice(device)
-@@ -3536,8 +3331,6 @@ cmd VkResult vkDestroyRenderPass(
-     assert(renderPassObject.device == device)
- 
-     State.RenderPasses[renderPass] = null
--
--    return ?
- }
- 
- cmd VkResult vkGetRenderAreaGranularity(
-@@ -3569,7 +3362,7 @@ cmd VkResult vkCreateCommandPool(
-     return ?
- }
- 
--cmd VkResult vkDestroyCommandPool(
-+cmd void vkDestroyCommandPool(
-         VkDevice                                    device,
-         VkCmdPool                                   cmdPool) {
-     deviceObject := GetDevice(device)
-@@ -3577,8 +3370,6 @@ cmd VkResult vkDestroyCommandPool(
-     assert(cmdPoolObject.device == device)
- 
-     State.CmdPools[cmdPool] = null
--
--    return ?
- }
- 
- cmd VkResult vkResetCommandPool(
-@@ -3625,7 +3416,7 @@ cmd VkResult vkCreateCommandBuffer(
- }
- 
- @threadSafety("system")
--cmd VkResult vkDestroyCommandBuffer(
-+cmd void vkDestroyCommandBuffer(
-         VkDevice                                    device,
-         VkCmdBuffer                                 commandBuffer) {
-     deviceObject := GetDevice(device)
-@@ -3634,8 +3425,6 @@ cmd VkResult vkDestroyCommandBuffer(
- 
-     // TODO: iterate over boundObjects and clear memory bindings
-     State.CmdBuffers[commandBuffer] = null
--
--    return ?
- }
- 
- @threadSafety("app")
-@@ -3689,49 +3478,93 @@ cmd void vkCmdBindPipeline(
- }
- 
- @threadSafety("app")
--cmd void vkCmdBindDynamicViewportState(
-+cmd void vkCmdSetViewport(
-         VkCmdBuffer                                 cmdBuffer,
--        VkDynamicViewportState                      dynamicViewportState) {
-+        u32                                         viewportCount,
-+        const VkViewport*                           pViewports) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
--    dynamicViewportStateObject := GetDynamicViewportState(dynamicViewportState)
--    assert(cmdBufferObject.device == dynamicViewportStateObject.device)
-+    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-+    cmdBufferObject.queueFlags = queueFlags
-+}
- 
-+@threadSafety("app")
-+cmd void vkCmdSetScissor(
-+        VkCmdBuffer                                 cmdBuffer,
-+        u32                                         scissorCount,
-+        const VkRect2D*                             pScissors) {
-+    cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-     cmdBufferObject.queueFlags = queueFlags
- }
- 
- @threadSafety("app")
--cmd void vkCmdBindDynamicRasterState(
-+cmd void vkCmdSetLineWidth(
-         VkCmdBuffer                                 cmdBuffer,
--        VkDynamicRasterState                        dynamicRasterState) {
-+        f32                                         lineWidth) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
--    dynamicRasterStateObject := GetDynamicRasterState(dynamicRasterState)
--    assert(cmdBufferObject.device == dynamicRasterStateObject.device)
-+    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-+    cmdBufferObject.queueFlags = queueFlags
-+}
- 
-+@threadSafety("app")
-+cmd void vkCmdSetDepthBias(
-+        VkCmdBuffer                                 cmdBuffer,
-+        f32                                         depthBias,
-+        f32                                         depthBiasClamp,
-+        f32                                         slopeScaledDepthBias) {
-+    cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-     cmdBufferObject.queueFlags = queueFlags
- }
- 
- @threadSafety("app")
--cmd void vkCmdBindDynamicColorBlendState(
-+cmd void vkCmdSetBlendConstants(
-         VkCmdBuffer                                 cmdBuffer,
--        VkDynamicColorBlendState                    dynamicColorBlendState) {
-+        // 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) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
--    dynamicColorBlendStateObject := GetDynamicColorBlendState(dynamicColorBlendState)
--    assert(cmdBufferObject.device == dynamicColorBlendStateObject.device)
-+    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-+    cmdBufferObject.queueFlags = queueFlags
-+}
- 
-+@threadSafety("app")
-+cmd void vkCmdSetDepthBounds(
-+        VkCmdBuffer                                 cmdBuffer,
-+        f32                                         minDepthBounds,
-+        f32                                         maxDepthBounds) {
-+    cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-     cmdBufferObject.queueFlags = queueFlags
- }
- 
- @threadSafety("app")
--cmd void vkCmdBindDynamicDepthStencilState(
-+cmd void vkCmdSetStencilCompareMask(
-         VkCmdBuffer                                 cmdBuffer,
--        VkDynamicDepthStencilState                  dynamicDepthStencilState) {
-+        VkStencilFaceFlags                          faceMask,
-+        u32                                         stencilCompareMask) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
--    dynamicDepthStencilStateObject := GetDynamicDepthStencilState(dynamicDepthStencilState)
--    assert(cmdBufferObject.device == dynamicDepthStencilStateObject.device)
-+    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-+    cmdBufferObject.queueFlags = queueFlags
-+}
- 
-+@threadSafety("app")
-+cmd void vkCmdSetStencilWriteMask(
-+        VkCmdBuffer                                 cmdBuffer,
-+        VkStencilFaceFlags                          faceMask,
-+        u32                                         stencilWriteMask) {
-+    cmdBufferObject := GetCmdBuffer(cmdBuffer)
-+    queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-+    cmdBufferObject.queueFlags = queueFlags
-+}
-+
-+@threadSafety("app")
-+cmd void vkCmdSetStencilReference(
-+        VkCmdBuffer                                 cmdBuffer,
-+        VkStencilFaceFlags                          faceMask,
-+        u32                                         stencilReference) {
-+    cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-     cmdBufferObject.queueFlags = queueFlags
- }
-@@ -3771,7 +3604,7 @@ cmd void vkCmdBindDescriptorSets(
- cmd void vkCmdBindIndexBuffer(
-         VkCmdBuffer                                 cmdBuffer,
-         VkBuffer                                    buffer,
--        platform.VkDeviceSize                       offset,
-+        VkDeviceSize                                offset,
-         VkIndexType                                 indexType) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     bufferObject := GetBuffer(buffer)
-@@ -3789,7 +3622,7 @@ cmd void vkCmdBindVertexBuffers(
-         u32                                         startBinding,
-         u32                                         bindingCount,
-         const VkBuffer*                             pBuffers,
--        const platform.VkDeviceSize*                pOffsets) {
-+        const VkDeviceSize*                         pOffsets) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
- 
-     // TODO: check if not [startBinding:startBinding+bindingCount]
-@@ -3811,10 +3644,10 @@ cmd void vkCmdBindVertexBuffers(
- @threadSafety("app")
- cmd void vkCmdDraw(
-         VkCmdBuffer                                 cmdBuffer,
--        u32                                         firstVertex,
-         u32                                         vertexCount,
--        u32                                         firstInstance,
--        u32                                         instanceCount) {
-+        u32                                         instanceCount,
-+        u32                                         firstVertex,
-+        u32                                         firstInstance) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
- 
-     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-@@ -3824,11 +3657,11 @@ cmd void vkCmdDraw(
- @threadSafety("app")
- cmd void vkCmdDrawIndexed(
-         VkCmdBuffer                                 cmdBuffer,
--        u32                                         firstIndex,
-         u32                                         indexCount,
-+        u32                                         instanceCount,
-+        u32                                         firstIndex,
-         s32                                         vertexOffset,
--        u32                                         firstInstance,
--        u32                                         instanceCount) {
-+        u32                                         firstInstance) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
- 
-     queueFlags := cmdBufferObject.queueFlags | VK_QUEUE_GRAPHICS_BIT
-@@ -3839,7 +3672,7 @@ cmd void vkCmdDrawIndexed(
- cmd void vkCmdDrawIndirect(
-         VkCmdBuffer                                 cmdBuffer,
-         VkBuffer                                    buffer,
--        platform.VkDeviceSize                       offset,
-+        VkDeviceSize                                offset,
-         u32                                         count,
-         u32                                         stride) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-@@ -3856,7 +3689,7 @@ cmd void vkCmdDrawIndirect(
- cmd void vkCmdDrawIndexedIndirect(
-         VkCmdBuffer                                 cmdBuffer,
-         VkBuffer                                    buffer,
--        platform.VkDeviceSize                       offset,
-+        VkDeviceSize                                offset,
-         u32                                         count,
-         u32                                         stride) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-@@ -3885,7 +3718,7 @@ cmd void vkCmdDispatch(
- cmd void vkCmdDispatchIndirect(
-         VkCmdBuffer                                 cmdBuffer,
-         VkBuffer                                    buffer,
--        platform.VkDeviceSize                       offset) {
-+        VkDeviceSize                                offset) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     bufferObject := GetBuffer(buffer)
-     assert(cmdBufferObject.device == bufferObject.device)
-@@ -4032,8 +3865,8 @@ cmd void vkCmdCopyImageToBuffer(
- cmd void vkCmdUpdateBuffer(
-         VkCmdBuffer                                 cmdBuffer,
-         VkBuffer                                    destBuffer,
--        platform.VkDeviceSize                       destOffset,
--        platform.VkDeviceSize                       dataSize,
-+        VkDeviceSize                                destOffset,
-+        VkDeviceSize                                dataSize,
-         const u32*                                  pData) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     destBufferObject := GetBuffer(destBuffer)
-@@ -4051,8 +3884,8 @@ cmd void vkCmdUpdateBuffer(
- cmd void vkCmdFillBuffer(
-         VkCmdBuffer                                 cmdBuffer,
-         VkBuffer                                    destBuffer,
--        platform.VkDeviceSize                       destOffset,
--        platform.VkDeviceSize                       fillSize,
-+        VkDeviceSize                                destOffset,
-+        VkDeviceSize                                fillSize,
-         u32                                         data) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     destBufferObject := GetBuffer(destBuffer)
-@@ -4090,8 +3923,7 @@ cmd void vkCmdClearDepthStencilImage(
-         VkCmdBuffer                                 cmdBuffer,
-         VkImage                                     image,
-         VkImageLayout                               imageLayout,
--        f32                                         depth,
--        u32                                         stencil,
-+        const VkClearDepthStencilValue*             pDepthStencil,
-         u32                                         rangeCount,
-         const VkImageSubresourceRange*              pRanges) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-@@ -4131,10 +3963,9 @@ cmd void vkCmdClearColorAttachment(
- @threadSafety("app")
- cmd void vkCmdClearDepthStencilAttachment(
-         VkCmdBuffer                                 cmdBuffer,
--        VkImageAspectFlags                          imageAspectMask,
-+        VkImageAspectFlags                          aspectMask,
-         VkImageLayout                               imageLayout,
--        f32                                         depth,
--        u32                                         stencil,
-+        const VkClearDepthStencilValue*             pDepthStencil,
-         u32                                         rectCount,
-         const VkRect3D*                             pRects) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-@@ -4238,7 +4069,7 @@ cmd void vkCmdPipelineBarrier(
-         VkCmdBuffer                                 cmdBuffer,
-         VkPipelineStageFlags                        srcStageMask,
-         VkPipelineStageFlags                        destStageMask,
--        platform.VkBool32                           byRegion,
-+        VkBool32                                    byRegion,
-         u32                                         memBarrierCount,
-         const void* const*                          ppMemBarriers) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-@@ -4300,7 +4131,7 @@ cmd void vkCmdWriteTimestamp(
-         VkCmdBuffer                                 cmdBuffer,
-         VkTimestampType                             timestampType,
-         VkBuffer                                    destBuffer,
--        platform.VkDeviceSize                       destOffset) {
-+        VkDeviceSize                                destOffset) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     destBufferObject := GetBuffer(destBuffer)
-     assert(cmdBufferObject.device == destBufferObject.device)
-@@ -4313,8 +4144,8 @@ cmd void vkCmdCopyQueryPoolResults(
-         u32                                         startQuery,
-         u32                                         queryCount,
-         VkBuffer                                    destBuffer,
--        platform.VkDeviceSize                       destOffset,
--        platform.VkDeviceSize                       destStride,
-+        VkDeviceSize                                destOffset,
-+        VkDeviceSize                                destStride,
-         VkQueryResultFlags                          flags) {
-     cmdBufferObject := GetCmdBuffer(cmdBuffer)
-     queryPoolObject := GetQueryPool(queryPool)
-@@ -4407,7 +4238,6 @@ StateObject State
-     map!(VkBufferView,               ref!BufferViewObject)               BufferViews
-     map!(VkImage,                    ref!ImageObject)                    Images
-     map!(VkImageView,                ref!ImageViewObject)                ImageViews
--    map!(VkAttachmentView,           ref!AttachmentViewObject)           AttachmentViews
-     map!(VkShaderModule,             ref!ShaderModuleObject)             ShaderModules
-     map!(VkShader,                   ref!ShaderObject)                   Shaders
-     map!(VkPipeline,                 ref!PipelineObject)                 Pipelines
-@@ -4416,10 +4246,6 @@ StateObject State
-     map!(VkDescriptorSet,            ref!DescriptorSetObject)            DescriptorSets
-     map!(VkDescriptorSetLayout,      ref!DescriptorSetLayoutObject)      DescriptorSetLayouts
-     map!(VkDescriptorPool,           ref!DescriptorPoolObject)           DescriptorPools
--    map!(VkDynamicViewportState,     ref!DynamicViewportStateObject)     DynamicViewportStates
--    map!(VkDynamicRasterState,       ref!DynamicRasterStateObject)       DynamicRasterStates
--    map!(VkDynamicColorBlendState,   ref!DynamicColorBlendStateObject)   DynamicColorBlendStates
--    map!(VkDynamicDepthStencilState, ref!DynamicDepthStencilStateObject) DynamicDepthStencilStates
-     map!(VkFence,                    ref!FenceObject)                    Fences
-     map!(VkSemaphore,                ref!SemaphoreObject)                Semaphores
-     map!(VkEvent,                    ref!EventObject)                    Events
-@@ -4454,15 +4280,15 @@ StateObject State
- 
- @internal class DeviceMemoryObject {
-     VkDevice                         device
--    platform.VkDeviceSize            allocationSize
--    map!(u64, platform.VkDeviceSize) boundObjects
-+    VkDeviceSize                     allocationSize
-+    map!(u64, VkDeviceSize         ) boundObjects
-     map!(VkCmdBuffer, VkCmdBuffer)   boundCommandBuffers
- }
- 
- @internal class BufferObject {
-     VkDevice              device
-     VkDeviceMemory        mem
--    platform.VkDeviceSize memOffset
-+    VkDeviceSize          memOffset
- }
- 
- @internal class BufferViewObject {
-@@ -4473,7 +4299,7 @@ StateObject State
- @internal class ImageObject {
-     VkDevice              device
-     VkDeviceMemory        mem
--    platform.VkDeviceSize memOffset
-+    VkDeviceSize          memOffset
- }
- 
- @internal class ImageViewObject {
-@@ -4481,11 +4307,6 @@ StateObject State
-     VkImage       image
- }
- 
--@internal class AttachmentViewObject {
--    VkDevice      device
--    VkImage       image
--}
--
- @internal class ShaderObject {
-     VkDevice      device
- }
-@@ -4518,22 +4339,6 @@ StateObject State
-     VkDevice      device
- }
- 
--@internal class DynamicViewportStateObject {
--    VkDevice      device
--}
--
--@internal class DynamicRasterStateObject {
--    VkDevice      device
--}
--
--@internal class DynamicColorBlendStateObject {
--    VkDevice      device
--}
--
--@internal class DynamicDepthStencilStateObject {
--    VkDevice      device
--}
--
- @internal class FenceObject {
-     VkDevice      device
-     bool          signaled
-@@ -4617,11 +4422,6 @@ macro ref!ImageViewObject GetImageView(VkImageView imageView) {
-     return State.ImageViews[imageView]
- }
- 
--macro ref!AttachmentViewObject GetAttachmentView(VkAttachmentView attachmentView) {
--    assert(attachmentView in State.AttachmentViews)
--    return State.AttachmentViews[attachmentView]
--}
--
- macro ref!ShaderObject GetShader(VkShader shader) {
-     assert(shader in State.Shaders)
-     return State.Shaders[shader]
-@@ -4662,26 +4462,6 @@ macro ref!DescriptorPoolObject GetDescriptorPool(VkDescriptorPool descriptorPool
-     return State.DescriptorPools[descriptorPool]
- }
- 
--macro ref!DynamicViewportStateObject GetDynamicViewportState(VkDynamicViewportState dynamicViewportState) {
--    assert(dynamicViewportState in State.DynamicViewportStates)
--    return State.DynamicViewportStates[dynamicViewportState]
--}
--
--macro ref!DynamicRasterStateObject GetDynamicRasterState(VkDynamicRasterState dynamicRasterState) {
--    assert(dynamicRasterState in State.DynamicRasterStates)
--    return State.DynamicRasterStates[dynamicRasterState]
--}
--
--macro ref!DynamicColorBlendStateObject GetDynamicColorBlendState(VkDynamicColorBlendState dynamicColorBlendState) {
--    assert(dynamicColorBlendState in State.DynamicColorBlendStates)
--    return State.DynamicColorBlendStates[dynamicColorBlendState]
--}
--
--macro ref!DynamicDepthStencilStateObject GetDynamicDepthStencilState(VkDynamicDepthStencilState dynamicDepthStencilState) {
--    assert(dynamicDepthStencilState in State.DynamicDepthStencilStates)
--    return State.DynamicDepthStencilStates[dynamicDepthStencilState]
--}
--
- macro ref!FenceObject GetFence(VkFence fence) {
-     assert(fence in State.Fences)
-     return State.Fences[fence]
-diff --git a/vulkan/include/hardware/hwvulkan.h b/vulkan/include/hardware/hwvulkan.h
-index 91dd41e..e973f46 100644
---- a/vulkan/include/hardware/hwvulkan.h
-+++ b/vulkan/include/hardware/hwvulkan.h
-@@ -61,7 +61,8 @@ typedef union {
- typedef struct hwvulkan_device_t {
-     struct hw_device_t common;
- 
--    PFN_vkGetGlobalExtensionProperties GetGlobalExtensionProperties;
-+    PFN_vkEnumerateInstanceExtensionProperties
-+        EnumerateInstanceExtensionProperties;
-     PFN_vkCreateInstance CreateInstance;
-     PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
- } hwvulkan_device_t;
-diff --git a/vulkan/include/vulkan/vk_platform.h b/vulkan/include/vulkan/vk_platform.h
-index 7ba8d77..969e532 100644
---- a/vulkan/include/vulkan/vk_platform.h
-+++ b/vulkan/include/vulkan/vk_platform.h
-@@ -67,22 +67,6 @@ extern "C"
-     #endif
- #endif // !defined(VK_NO_STDINT_H)
- 
--typedef uint64_t   VkDeviceSize;
--typedef uint32_t   VkBool32;
--
--typedef uint32_t   VkSampleMask;
--typedef uint32_t   VkFlags;
--
--#if (UINTPTR_MAX >= UINT64_MAX)
--    #define VK_UINTPTRLEAST64_MAX UINTPTR_MAX
--
--    typedef uintptr_t VkUintPtrLeast64;
--#else
--    #define VK_UINTPTRLEAST64_MAX UINT64_MAX
--
--    typedef uint64_t  VkUintPtrLeast64;
--#endif
--
- #ifdef __cplusplus
- } // extern "C"
- #endif // __cplusplus
-diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
-index 9877233..03bcefe 100644
---- a/vulkan/include/vulkan/vulkan.h
-+++ b/vulkan/include/vulkan/vulkan.h
-@@ -41,14 +41,21 @@ extern "C" {
-     ((major << 22) | (minor << 12) | patch)
- 
- // Vulkan API version supported by this file
--#define VK_API_VERSION VK_MAKE_VERSION(0, 138, 2)
-+#define VK_API_VERSION VK_MAKE_VERSION(0, 170, 2)
-+
-+
-+#if defined(__cplusplus) && (_MSC_VER >= 1800 || __cplusplus >= 201103L)
-+    #define VK_NULL_HANDLE nullptr
-+#else
-+    #define VK_NULL_HANDLE 0
-+#endif
- 
- 
- #define VK_DEFINE_HANDLE(obj) typedef struct obj##_T* obj;
- 
- 
- #if defined(__cplusplus)
--    #if (_MSC_VER >= 1800 || __cplusplus >= 201103L)
-+    #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
-@@ -56,13 +63,18 @@ extern "C" {
-         // 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) { } \
--            obj(uint64_t x) : handle(x) { } \
-+            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; } \
-@@ -76,20 +88,10 @@ extern "C" {
-         
- 
- 
--#define VK_LOD_CLAMP_NONE                 MAX_FLOAT
--#define VK_LAST_MIP_LEVEL                 UINT32_MAX
--#define VK_LAST_ARRAY_SLICE               UINT32_MAX
--#define VK_WHOLE_SIZE                     UINT64_MAX
--#define VK_ATTACHMENT_UNUSED              UINT32_MAX
--#define VK_TRUE                           1
--#define VK_FALSE                          0
--#define VK_NULL_HANDLE                    0
--#define VK_MAX_PHYSICAL_DEVICE_NAME       256
--#define VK_UUID_LENGTH                    16
--#define VK_MAX_MEMORY_TYPES               32
--#define VK_MAX_MEMORY_HEAPS               16
--#define VK_MAX_EXTENSION_NAME             256
--#define VK_MAX_DESCRIPTION                256
-+typedef uint32_t VkBool32;
-+typedef uint32_t VkFlags;
-+typedef uint64_t VkDeviceSize;
-+typedef uint32_t VkSampleMask;
- 
- VK_DEFINE_HANDLE(VkInstance)
- VK_DEFINE_HANDLE(VkPhysicalDevice)
-@@ -105,7 +107,6 @@ VK_DEFINE_NONDISP_HANDLE(VkEvent)
- VK_DEFINE_NONDISP_HANDLE(VkQueryPool)
- VK_DEFINE_NONDISP_HANDLE(VkBufferView)
- VK_DEFINE_NONDISP_HANDLE(VkImageView)
--VK_DEFINE_NONDISP_HANDLE(VkAttachmentView)
- VK_DEFINE_NONDISP_HANDLE(VkShaderModule)
- VK_DEFINE_NONDISP_HANDLE(VkShader)
- VK_DEFINE_NONDISP_HANDLE(VkPipelineCache)
-@@ -116,13 +117,25 @@ VK_DEFINE_NONDISP_HANDLE(VkDescriptorSetLayout)
- VK_DEFINE_NONDISP_HANDLE(VkSampler)
- VK_DEFINE_NONDISP_HANDLE(VkDescriptorPool)
- VK_DEFINE_NONDISP_HANDLE(VkDescriptorSet)
--VK_DEFINE_NONDISP_HANDLE(VkDynamicViewportState)
--VK_DEFINE_NONDISP_HANDLE(VkDynamicRasterState)
--VK_DEFINE_NONDISP_HANDLE(VkDynamicColorBlendState)
--VK_DEFINE_NONDISP_HANDLE(VkDynamicDepthStencilState)
- VK_DEFINE_NONDISP_HANDLE(VkFramebuffer)
- VK_DEFINE_NONDISP_HANDLE(VkCmdPool)
- 
-+#define VK_LOD_CLAMP_NONE                 1000.0f
-+#define VK_REMAINING_MIP_LEVELS           (~0U)
-+#define VK_REMAINING_ARRAY_LAYERS         (~0U)
-+#define VK_WHOLE_SIZE                     (~0ULL)
-+#define VK_ATTACHMENT_UNUSED              (~0U)
-+#define VK_TRUE                           1
-+#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_MEMORY_TYPES               32
-+#define VK_MAX_MEMORY_HEAPS               16
-+#define VK_MAX_EXTENSION_NAME             256
-+#define VK_MAX_DESCRIPTION                256
-+
- 
- typedef enum {
-     VK_SUCCESS = 0,
-@@ -132,41 +145,17 @@ typedef enum {
-     VK_EVENT_SET = 4,
-     VK_EVENT_RESET = 5,
-     VK_INCOMPLETE = 6,
--    VK_ERROR_UNKNOWN = -1,
--    VK_ERROR_UNAVAILABLE = -2,
-+    VK_ERROR_OUT_OF_HOST_MEMORY = -1,
-+    VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
-     VK_ERROR_INITIALIZATION_FAILED = -3,
--    VK_ERROR_OUT_OF_HOST_MEMORY = -4,
--    VK_ERROR_OUT_OF_DEVICE_MEMORY = -5,
--    VK_ERROR_DEVICE_ALREADY_CREATED = -6,
--    VK_ERROR_DEVICE_LOST = -7,
--    VK_ERROR_INVALID_POINTER = -8,
--    VK_ERROR_INVALID_VALUE = -9,
--    VK_ERROR_INVALID_HANDLE = -10,
--    VK_ERROR_INVALID_ORDINAL = -11,
--    VK_ERROR_INVALID_MEMORY_SIZE = -12,
--    VK_ERROR_INVALID_EXTENSION = -13,
--    VK_ERROR_INVALID_FLAGS = -14,
--    VK_ERROR_INVALID_ALIGNMENT = -15,
--    VK_ERROR_INVALID_FORMAT = -16,
--    VK_ERROR_INVALID_IMAGE = -17,
--    VK_ERROR_INVALID_DESCRIPTOR_SET_DATA = -18,
--    VK_ERROR_INVALID_QUEUE_TYPE = -19,
--    VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION = -20,
--    VK_ERROR_BAD_SHADER_CODE = -21,
--    VK_ERROR_BAD_PIPELINE_DATA = -22,
--    VK_ERROR_NOT_MAPPABLE = -23,
--    VK_ERROR_MEMORY_MAP_FAILED = -24,
--    VK_ERROR_MEMORY_UNMAP_FAILED = -25,
--    VK_ERROR_INCOMPATIBLE_DEVICE = -26,
--    VK_ERROR_INCOMPATIBLE_DRIVER = -27,
--    VK_ERROR_INCOMPLETE_COMMAND_BUFFER = -28,
--    VK_ERROR_BUILDING_COMMAND_BUFFER = -29,
--    VK_ERROR_MEMORY_NOT_BOUND = -30,
--    VK_ERROR_INCOMPATIBLE_QUEUE = -31,
--    VK_ERROR_INVALID_LAYER = -32,
--    VK_RESULT_BEGIN_RANGE = VK_ERROR_INVALID_LAYER,
-+    VK_ERROR_DEVICE_LOST = -4,
-+    VK_ERROR_MEMORY_MAP_FAILED = -5,
-+    VK_ERROR_LAYER_NOT_PRESENT = -6,
-+    VK_ERROR_EXTENSION_NOT_PRESENT = -7,
-+    VK_ERROR_INCOMPATIBLE_DRIVER = -8,
-+    VK_RESULT_BEGIN_RANGE = VK_ERROR_INCOMPATIBLE_DRIVER,
-     VK_RESULT_END_RANGE = VK_INCOMPLETE,
--    VK_RESULT_NUM = (VK_INCOMPLETE - VK_ERROR_INVALID_LAYER + 1),
-+    VK_RESULT_NUM = (VK_INCOMPLETE - VK_ERROR_INCOMPATIBLE_DRIVER + 1),
-     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
- } VkResult;
- 
-@@ -175,55 +164,52 @@ typedef enum {
-     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_ATTACHMENT_VIEW_CREATE_INFO = 4,
--    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 5,
--    VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 6,
--    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 7,
--    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 8,
--    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 9,
--    VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO = 10,
--    VK_STRUCTURE_TYPE_DYNAMIC_RASTER_STATE_CREATE_INFO = 11,
--    VK_STRUCTURE_TYPE_DYNAMIC_COLOR_BLEND_STATE_CREATE_INFO = 12,
--    VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_STENCIL_STATE_CREATE_INFO = 13,
--    VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 14,
--    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 15,
--    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 16,
--    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 17,
--    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 18,
--    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 19,
--    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 20,
--    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 21,
--    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 22,
--    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 23,
--    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 24,
--    VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 25,
--    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 26,
--    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 27,
--    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 28,
--    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 29,
--    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 30,
--    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 31,
--    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 32,
--    VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 33,
--    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 34,
--    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 35,
--    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 36,
--    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 37,
--    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 38,
--    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 39,
--    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 40,
--    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 41,
--    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 42,
--    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 43,
--    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 44,
--    VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 45,
--    VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 46,
--    VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 47,
--    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 48,
--    VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 49,
-+    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_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_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_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
--    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO,
--    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
-+    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_MAX_ENUM = 0x7FFFFFFF
- } VkStructureType;
- 
-@@ -330,7 +316,7 @@ typedef enum {
-     VK_FORMAT_R11G11B10_UFLOAT = 87,
-     VK_FORMAT_R9G9B9E5_UFLOAT = 88,
-     VK_FORMAT_D16_UNORM = 89,
--    VK_FORMAT_D24_UNORM = 90,
-+    VK_FORMAT_D24_UNORM_X8 = 90,
-     VK_FORMAT_D32_SFLOAT = 91,
-     VK_FORMAT_S8_UINT = 92,
-     VK_FORMAT_D16_UNORM_S8_UINT = 93,
-@@ -481,13 +467,20 @@ typedef enum {
- } VkSharingMode;
- 
- typedef enum {
--    VK_BUFFER_VIEW_TYPE_RAW = 0,
--    VK_BUFFER_VIEW_TYPE_FORMATTED = 1,
--    VK_BUFFER_VIEW_TYPE_BEGIN_RANGE = VK_BUFFER_VIEW_TYPE_RAW,
--    VK_BUFFER_VIEW_TYPE_END_RANGE = VK_BUFFER_VIEW_TYPE_FORMATTED,
--    VK_BUFFER_VIEW_TYPE_NUM = (VK_BUFFER_VIEW_TYPE_FORMATTED - VK_BUFFER_VIEW_TYPE_RAW + 1),
--    VK_BUFFER_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
--} VkBufferViewType;
-+    VK_IMAGE_LAYOUT_UNDEFINED = 0,
-+    VK_IMAGE_LAYOUT_GENERAL = 1,
-+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
-+    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_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_MAX_ENUM = 0x7FFFFFFF
-+} VkImageLayout;
- 
- typedef enum {
-     VK_IMAGE_VIEW_TYPE_1D = 0,
-@@ -678,6 +671,22 @@ typedef enum {
- } VkBlendOp;
- 
- typedef enum {
-+    VK_DYNAMIC_STATE_VIEWPORT = 0,
-+    VK_DYNAMIC_STATE_SCISSOR = 1,
-+    VK_DYNAMIC_STATE_LINE_WIDTH = 2,
-+    VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
-+    VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
-+    VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
-+    VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
-+    VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
-+    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_MAX_ENUM = 0x7FFFFFFF
-+} VkDynamicState;
-+
-+typedef enum {
-     VK_TEX_FILTER_NEAREST = 0,
-     VK_TEX_FILTER_LINEAR = 1,
-     VK_TEX_FILTER_BEGIN_RANGE = VK_TEX_FILTER_NEAREST,
-@@ -697,16 +706,16 @@ typedef enum {
- } VkTexMipmapMode;
- 
- typedef enum {
--    VK_TEX_ADDRESS_WRAP = 0,
--    VK_TEX_ADDRESS_MIRROR = 1,
--    VK_TEX_ADDRESS_CLAMP = 2,
--    VK_TEX_ADDRESS_MIRROR_ONCE = 3,
--    VK_TEX_ADDRESS_CLAMP_BORDER = 4,
--    VK_TEX_ADDRESS_BEGIN_RANGE = VK_TEX_ADDRESS_WRAP,
--    VK_TEX_ADDRESS_END_RANGE = VK_TEX_ADDRESS_CLAMP_BORDER,
--    VK_TEX_ADDRESS_NUM = (VK_TEX_ADDRESS_CLAMP_BORDER - VK_TEX_ADDRESS_WRAP + 1),
-+    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_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
--} VkTexAddress;
-+} VkTexAddressMode;
- 
- typedef enum {
-     VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
-@@ -758,21 +767,6 @@ typedef enum {
- } VkDescriptorSetUsage;
- 
- typedef enum {
--    VK_IMAGE_LAYOUT_UNDEFINED = 0,
--    VK_IMAGE_LAYOUT_GENERAL = 1,
--    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
--    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_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
--    VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL,
--    VK_IMAGE_LAYOUT_NUM = (VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL - VK_IMAGE_LAYOUT_UNDEFINED + 1),
--    VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
--} VkImageLayout;
--
--typedef enum {
-     VK_ATTACHMENT_LOAD_OP_LOAD = 0,
-     VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
-     VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
-@@ -848,24 +842,44 @@ 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_CONVERSION_BIT = 0x00000400,
-+    VK_FORMAT_FEATURE_BLIT_SOURCE_BIT = 0x00000400,
-+    VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT = 0x00000800,
- } VkFormatFeatureFlagBits;
- typedef VkFlags VkFormatFeatureFlags;
- 
- typedef enum {
--    VK_IMAGE_USAGE_GENERAL = 0,
-     VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT = 0x00000001,
-     VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002,
-     VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
-     VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
-     VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
--    VK_IMAGE_USAGE_DEPTH_STENCIL_BIT = 0x00000020,
-+    VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
-     VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
-     VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
- } VkImageUsageFlagBits;
- typedef VkFlags VkImageUsageFlags;
- 
- typedef enum {
-+    VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
-+    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
-+    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
-+    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
-+    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
-+} VkImageCreateFlagBits;
-+typedef VkFlags VkImageCreateFlags;
-+
-+typedef enum {
-+    VK_SAMPLE_COUNT_1_BIT = 0x00000001,
-+    VK_SAMPLE_COUNT_2_BIT = 0x00000002,
-+    VK_SAMPLE_COUNT_4_BIT = 0x00000004,
-+    VK_SAMPLE_COUNT_8_BIT = 0x00000008,
-+    VK_SAMPLE_COUNT_16_BIT = 0x00000010,
-+    VK_SAMPLE_COUNT_32_BIT = 0x00000020,
-+    VK_SAMPLE_COUNT_64_BIT = 0x00000040,
-+} VkSampleCountFlagBits;
-+typedef VkFlags VkSampleCountFlags;
-+
-+typedef enum {
-     VK_QUEUE_GRAPHICS_BIT = 0x00000001,
-     VK_QUEUE_COMPUTE_BIT = 0x00000002,
-     VK_QUEUE_DMA_BIT = 0x00000004,
-@@ -885,14 +899,9 @@ typedef enum {
- typedef VkFlags VkMemoryPropertyFlags;
- 
- typedef enum {
--    VK_MEMORY_HEAP_HOST_LOCAL = 0x00000001,
-+    VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001,
- } VkMemoryHeapFlagBits;
- typedef VkFlags VkMemoryHeapFlags;
--
--typedef enum {
--    VK_DEVICE_CREATE_VALIDATION_BIT = 0x00000001,
--} VkDeviceCreateFlagBits;
--typedef VkFlags VkDeviceCreateFlags;
- typedef VkFlags VkMemoryMapFlags;
- 
- typedef enum {
-@@ -939,7 +948,6 @@ typedef enum {
- typedef VkFlags VkQueryResultFlags;
- 
- typedef enum {
--    VK_BUFFER_USAGE_GENERAL = 0,
-     VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001,
-     VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002,
-     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
-@@ -953,27 +961,25 @@ typedef enum {
- typedef VkFlags VkBufferUsageFlags;
- 
- typedef enum {
--    VK_BUFFER_CREATE_SPARSE_BIT = 0x00000001,
-+    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_IMAGE_CREATE_SPARSE_BIT = 0x00000001,
--    VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
--    VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
--    VK_IMAGE_CREATE_INVARIANT_DATA_BIT = 0x00000008,
--    VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000010,
--    VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000020,
--} VkImageCreateFlagBits;
--typedef VkFlags VkImageCreateFlags;
-+    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 {
--    VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
--    VK_ATTACHMENT_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
--} VkAttachmentViewCreateFlagBits;
--typedef VkFlags VkAttachmentViewCreateFlags;
-+    VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
-+    VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
-+} VkImageViewCreateFlagBits;
-+typedef VkFlags VkImageViewCreateFlags;
- typedef VkFlags VkShaderModuleCreateFlags;
- typedef VkFlags VkShaderCreateFlags;
- 
-@@ -1004,6 +1010,11 @@ typedef enum {
- typedef VkFlags VkShaderStageFlags;
- 
- 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;
-@@ -1022,10 +1033,9 @@ typedef enum {
-     VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
-     VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
-     VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
--    VK_PIPELINE_STAGE_TRANSITION_BIT = 0x00002000,
--    VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
-+    VK_PIPELINE_STAGE_HOST_BIT = 0x00002000,
-     VK_PIPELINE_STAGE_ALL_GRAPHICS = 0x000007FF,
--    VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00003FFF,
-+    VK_PIPELINE_STAGE_ALL_GPU_COMMANDS = 0x00001FFF,
- } VkPipelineStageFlagBits;
- typedef VkFlags VkPipelineStageFlags;
- 
-@@ -1059,7 +1069,7 @@ typedef enum {
- typedef VkFlags VkCmdPoolCreateFlags;
- 
- typedef enum {
--    VK_CMD_POOL_RESET_RELEASE_RESOURCES = 0x00000001,
-+    VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
- } VkCmdPoolResetFlagBits;
- typedef VkFlags VkCmdPoolResetFlags;
- typedef VkFlags VkCmdBufferCreateFlags;
-@@ -1074,33 +1084,22 @@ typedef enum {
- typedef VkFlags VkCmdBufferOptimizeFlags;
- 
- typedef enum {
--    VK_CMD_BUFFER_RESET_RELEASE_RESOURCES = 0x00000001,
-+    VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
- } VkCmdBufferResetFlagBits;
- typedef VkFlags VkCmdBufferResetFlags;
- 
- 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;
-+    VK_STENCIL_FACE_NONE = 0,
-+    VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
-+    VK_STENCIL_FACE_BACK_BIT = 0x00000002,
-+} VkStencilFaceFlagBits;
-+typedef VkFlags VkStencilFaceFlags;
- 
- typedef enum {
-     VK_QUERY_CONTROL_CONSERVATIVE_BIT = 0x00000001,
- } VkQueryControlFlagBits;
- typedef VkFlags VkQueryControlFlags;
- 
--typedef struct {
--    VkStructureType                             sType;
--    const void*                                 pNext;
--    const char*                                 pAppName;
--    uint32_t                                    appVersion;
--    const char*                                 pEngineName;
--    uint32_t                                    engineVersion;
--    uint32_t                                    apiVersion;
--} VkApplicationInfo;
--
- typedef void* (VKAPI *PFN_vkAllocFunction)(
-     void*                           pUserData,
-     size_t                          size,
-@@ -1111,6 +1110,18 @@ typedef void (VKAPI *PFN_vkFreeFunction)(
-     void*                           pUserData,
-     void*                           pMem);
- 
-+typedef void (VKAPI *PFN_vkVoidFunction)(void);
-+
-+typedef struct {
-+    VkStructureType                             sType;
-+    const void*                                 pNext;
-+    const char*                                 pAppName;
-+    uint32_t                                    appVersion;
-+    const char*                                 pEngineName;
-+    uint32_t                                    engineVersion;
-+    uint32_t                                    apiVersion;
-+} VkApplicationInfo;
-+
- typedef struct {
-     void*                                       pUserData;
-     PFN_vkAllocFunction                         pfnAlloc;
-@@ -1138,7 +1149,7 @@ typedef struct {
-     VkBool32                                    sampleRateShading;
-     VkBool32                                    dualSourceBlend;
-     VkBool32                                    logicOp;
--    VkBool32                                    instancedDrawIndirect;
-+    VkBool32                                    multiDrawIndirect;
-     VkBool32                                    depthClip;
-     VkBool32                                    depthBiasClamp;
-     VkBool32                                    fillModeNonSolid;
-@@ -1148,6 +1159,7 @@ typedef struct {
-     VkBool32                                    textureCompressionETC2;
-     VkBool32                                    textureCompressionASTC_LDR;
-     VkBool32                                    textureCompressionBC;
-+    VkBool32                                    occlusionQueryNonConservative;
-     VkBool32                                    pipelineStatisticsQuery;
-     VkBool32                                    vertexSideEffects;
-     VkBool32                                    tessellationSideEffects;
-@@ -1155,11 +1167,9 @@ typedef struct {
-     VkBool32                                    fragmentSideEffects;
-     VkBool32                                    shaderTessellationPointSize;
-     VkBool32                                    shaderGeometryPointSize;
--    VkBool32                                    shaderTextureGatherExtended;
-+    VkBool32                                    shaderImageGatherExtended;
-     VkBool32                                    shaderStorageImageExtendedFormats;
-     VkBool32                                    shaderStorageImageMultisample;
--    VkBool32                                    shaderStorageBufferArrayConstantIndexing;
--    VkBool32                                    shaderStorageImageArrayConstantIndexing;
-     VkBool32                                    shaderUniformBufferArrayDynamicIndexing;
-     VkBool32                                    shaderSampledImageArrayDynamicIndexing;
-     VkBool32                                    shaderStorageBufferArrayDynamicIndexing;
-@@ -1168,11 +1178,11 @@ typedef struct {
-     VkBool32                                    shaderCullDistance;
-     VkBool32                                    shaderFloat64;
-     VkBool32                                    shaderInt64;
--    VkBool32                                    shaderFloat16;
-     VkBool32                                    shaderInt16;
-     VkBool32                                    shaderResourceResidency;
-     VkBool32                                    shaderResourceMinLOD;
--    VkBool32                                    sparse;
-+    VkBool32                                    alphaToOne;
-+    VkBool32                                    sparseBinding;
-     VkBool32                                    sparseResidencyBuffer;
-     VkBool32                                    sparseResidencyImage2D;
-     VkBool32                                    sparseResidencyImage3D;
-@@ -1180,23 +1190,27 @@ typedef struct {
-     VkBool32                                    sparseResidency4Samples;
-     VkBool32                                    sparseResidency8Samples;
-     VkBool32                                    sparseResidency16Samples;
--    VkBool32                                    sparseResidencyStandard2DBlockShape;
--    VkBool32                                    sparseResidencyStandard2DMSBlockShape;
--    VkBool32                                    sparseResidencyStandard3DBlockShape;
--    VkBool32                                    sparseResidencyAlignedMipSize;
--    VkBool32                                    sparseResidencyNonResident;
--    VkBool32                                    sparseResidencyNonResidentStrict;
-     VkBool32                                    sparseResidencyAliased;
- } VkPhysicalDeviceFeatures;
- 
- typedef struct {
-     VkFormatFeatureFlags                        linearTilingFeatures;
-     VkFormatFeatureFlags                        optimalTilingFeatures;
-+    VkFormatFeatureFlags                        bufferFeatures;
- } VkFormatProperties;
- 
- typedef struct {
--    uint64_t                                    maxResourceSize;
--    uint32_t                                    maxSamples;
-+    int32_t                                     width;
-+    int32_t                                     height;
-+    int32_t                                     depth;
-+} VkExtent3D;
-+
-+typedef struct {
-+    VkExtent3D                                  maxExtent;
-+    uint32_t                                    maxMipLevels;
-+    uint32_t                                    maxArraySize;
-+    VkSampleCountFlags                          sampleCounts;
-+    VkDeviceSize                                maxResourceSize;
- } VkImageFormatProperties;
- 
- typedef struct {
-@@ -1205,12 +1219,14 @@ typedef struct {
-     uint32_t                                    maxImageDimension3D;
-     uint32_t                                    maxImageDimensionCube;
-     uint32_t                                    maxImageArrayLayers;
-+    VkSampleCountFlags                          sampleCounts;
-     uint32_t                                    maxTexelBufferSize;
-     uint32_t                                    maxUniformBufferSize;
-     uint32_t                                    maxStorageBufferSize;
-     uint32_t                                    maxPushConstantsSize;
-     uint32_t                                    maxMemoryAllocationCount;
-     VkDeviceSize                                bufferImageGranularity;
-+    VkDeviceSize                                sparseAddressSpaceSize;
-     uint32_t                                    maxBoundDescriptorSets;
-     uint32_t                                    maxDescriptorSets;
-     uint32_t                                    maxPerStageDescriptorSamplers;
-@@ -1220,10 +1236,13 @@ typedef struct {
-     uint32_t                                    maxPerStageDescriptorStorageImages;
-     uint32_t                                    maxDescriptorSetSamplers;
-     uint32_t                                    maxDescriptorSetUniformBuffers;
-+    uint32_t                                    maxDescriptorSetUniformBuffersDynamic;
-     uint32_t                                    maxDescriptorSetStorageBuffers;
-+    uint32_t                                    maxDescriptorSetStorageBuffersDynamic;
-     uint32_t                                    maxDescriptorSetSampledImages;
-     uint32_t                                    maxDescriptorSetStorageImages;
-     uint32_t                                    maxVertexInputAttributes;
-+    uint32_t                                    maxVertexInputBindings;
-     uint32_t                                    maxVertexInputAttributeOffset;
-     uint32_t                                    maxVertexInputBindingStride;
-     uint32_t                                    maxVertexOutputComponents;
-@@ -1257,7 +1276,6 @@ typedef struct {
-     float                                       maxSamplerLodBias;
-     float                                       maxSamplerAnisotropy;
-     uint32_t                                    maxViewports;
--    uint32_t                                    maxDynamicViewportStates;
-     uint32_t                                    maxViewportDimensions[2];
-     float                                       viewportBoundsRange[2];
-     uint32_t                                    viewportSubPixelBits;
-@@ -1295,6 +1313,15 @@ typedef struct {
- } VkPhysicalDeviceLimits;
- 
- typedef struct {
-+    VkBool32                                    residencyStandard2DBlockShape;
-+    VkBool32                                    residencyStandard2DMSBlockShape;
-+    VkBool32                                    residencyStandard3DBlockShape;
-+    VkBool32                                    residencyAlignedMipSize;
-+    VkBool32                                    residencyNonResident;
-+    VkBool32                                    residencyNonResidentStrict;
-+} VkPhysicalDeviceSparseProperties;
-+
-+typedef struct {
-     uint32_t                                    apiVersion;
-     uint32_t                                    driverVersion;
-     uint32_t                                    vendorId;
-@@ -1302,13 +1329,15 @@ typedef struct {
-     VkPhysicalDeviceType                        deviceType;
-     char                                        deviceName[VK_MAX_PHYSICAL_DEVICE_NAME];
-     uint8_t                                     pipelineCacheUUID[VK_UUID_LENGTH];
-+    VkPhysicalDeviceLimits                      limits;
-+    VkPhysicalDeviceSparseProperties            sparseProperties;
- } VkPhysicalDeviceProperties;
- 
- typedef struct {
-     VkQueueFlags                                queueFlags;
-     uint32_t                                    queueCount;
-     VkBool32                                    supportsTimestamps;
--} VkPhysicalDeviceQueueProperties;
-+} VkQueueFamilyProperties;
- 
- typedef struct {
-     VkMemoryPropertyFlags                       propertyFlags;
-@@ -1327,8 +1356,9 @@ typedef struct {
-     VkMemoryHeap                                memoryHeaps[VK_MAX_MEMORY_HEAPS];
- } VkPhysicalDeviceMemoryProperties;
- 
--typedef void (VKAPI *PFN_vkVoidFunction)(void);
- typedef struct {
-+    VkStructureType                             sType;
-+    const void*                                 pNext;
-     uint32_t                                    queueFamilyIndex;
-     uint32_t                                    queueCount;
- } VkDeviceQueueCreateInfo;
-@@ -1343,7 +1373,6 @@ typedef struct {
-     uint32_t                                    extensionCount;
-     const char*const*                           ppEnabledExtensionNames;
-     const VkPhysicalDeviceFeatures*             pEnabledFeatures;
--    VkDeviceCreateFlags                         flags;
- } VkDeviceCreateInfo;
- 
- typedef struct {
-@@ -1380,12 +1409,6 @@ typedef struct {
- } VkMemoryRequirements;
- 
- typedef struct {
--    int32_t                                     width;
--    int32_t                                     height;
--    int32_t                                     depth;
--} VkExtent3D;
--
--typedef struct {
-     VkImageAspect                               aspect;
-     VkExtent3D                                  imageGranularity;
-     VkSparseImageFormatFlags                    flags;
-@@ -1410,7 +1433,7 @@ typedef struct {
- typedef struct {
-     VkImageAspect                               aspect;
-     uint32_t                                    mipLevel;
--    uint32_t                                    arraySlice;
-+    uint32_t                                    arrayLayer;
- } VkImageSubresource;
- 
- typedef struct {
-@@ -1469,7 +1492,6 @@ typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
-     VkBuffer                                    buffer;
--    VkBufferViewType                            viewType;
-     VkFormat                                    format;
-     VkDeviceSize                                offset;
-     VkDeviceSize                                range;
-@@ -1490,6 +1512,7 @@ typedef struct {
-     VkSharingMode                               sharingMode;
-     uint32_t                                    queueFamilyCount;
-     const uint32_t*                             pQueueFamilyIndices;
-+    VkImageLayout                               initialLayout;
- } VkImageCreateInfo;
- 
- typedef struct {
-@@ -1507,10 +1530,10 @@ typedef struct {
- } VkChannelMapping;
- 
- typedef struct {
--    VkImageAspect                               aspect;
-+    VkImageAspectFlags                          aspectMask;
-     uint32_t                                    baseMipLevel;
-     uint32_t                                    mipLevels;
--    uint32_t                                    baseArraySlice;
-+    uint32_t                                    baseArrayLayer;
-     uint32_t                                    arraySize;
- } VkImageSubresourceRange;
- 
-@@ -1522,22 +1545,12 @@ typedef struct {
-     VkFormat                                    format;
-     VkChannelMapping                            channels;
-     VkImageSubresourceRange                     subresourceRange;
-+    VkImageViewCreateFlags                      flags;
- } VkImageViewCreateInfo;
- 
- typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
--    VkImage                                     image;
--    VkFormat                                    format;
--    uint32_t                                    mipLevel;
--    uint32_t                                    baseArraySlice;
--    uint32_t                                    arraySize;
--    VkAttachmentViewCreateFlags                 flags;
--} VkAttachmentViewCreateInfo;
--
--typedef struct {
--    VkStructureType                             sType;
--    const void*                                 pNext;
-     size_t                                      codeSize;
-     const void*                                 pCode;
-     VkShaderModuleCreateFlags                   flags;
-@@ -1549,6 +1562,7 @@ typedef struct {
-     VkShaderModule                              module;
-     const char*                                 pName;
-     VkShaderCreateFlags                         flags;
-+    VkShaderStage                               stage;
- } VkShaderCreateInfo;
- 
- typedef struct {
-@@ -1616,9 +1630,36 @@ typedef struct {
- } VkPipelineTessellationStateCreateInfo;
- 
- typedef struct {
-+    float                                       originX;
-+    float                                       originY;
-+    float                                       width;
-+    float                                       height;
-+    float                                       minDepth;
-+    float                                       maxDepth;
-+} VkViewport;
-+
-+typedef struct {
-+    int32_t                                     x;
-+    int32_t                                     y;
-+} VkOffset2D;
-+
-+typedef struct {
-+    int32_t                                     width;
-+    int32_t                                     height;
-+} VkExtent2D;
-+
-+typedef struct {
-+    VkOffset2D                                  offset;
-+    VkExtent2D                                  extent;
-+} VkRect2D;
-+
-+typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
-     uint32_t                                    viewportCount;
-+    const VkViewport*                           pViewports;
-+    uint32_t                                    scissorCount;
-+    const VkRect2D*                             pScissors;
- } VkPipelineViewportStateCreateInfo;
- 
- typedef struct {
-@@ -1629,6 +1670,11 @@ typedef struct {
-     VkFillMode                                  fillMode;
-     VkCullMode                                  cullMode;
-     VkFrontFace                                 frontFace;
-+    VkBool32                                    depthBiasEnable;
-+    float                                       depthBias;
-+    float                                       depthBiasClamp;
-+    float                                       slopeScaledDepthBias;
-+    float                                       lineWidth;
- } VkPipelineRasterStateCreateInfo;
- 
- typedef struct {
-@@ -1637,7 +1683,7 @@ typedef struct {
-     uint32_t                                    rasterSamples;
-     VkBool32                                    sampleShadingEnable;
-     float                                       minSampleShading;
--    VkSampleMask                                sampleMask;
-+    const VkSampleMask*                         pSampleMask;
- } VkPipelineMultisampleStateCreateInfo;
- 
- typedef struct {
-@@ -1645,6 +1691,9 @@ typedef struct {
-     VkStencilOp                                 stencilPassOp;
-     VkStencilOp                                 stencilDepthFailOp;
-     VkCompareOp                                 stencilCompareOp;
-+    uint32_t                                    stencilCompareMask;
-+    uint32_t                                    stencilWriteMask;
-+    uint32_t                                    stencilReference;
- } VkStencilOpState;
- 
- typedef struct {
-@@ -1653,10 +1702,12 @@ typedef struct {
-     VkBool32                                    depthTestEnable;
-     VkBool32                                    depthWriteEnable;
-     VkCompareOp                                 depthCompareOp;
--    VkBool32                                    depthBoundsEnable;
-+    VkBool32                                    depthBoundsTestEnable;
-     VkBool32                                    stencilTestEnable;
-     VkStencilOpState                            front;
-     VkStencilOpState                            back;
-+    float                                       minDepthBounds;
-+    float                                       maxDepthBounds;
- } VkPipelineDepthStencilStateCreateInfo;
- 
- typedef struct {
-@@ -1674,15 +1725,24 @@ typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
-     VkBool32                                    alphaToCoverageEnable;
-+    VkBool32                                    alphaToOneEnable;
-     VkBool32                                    logicOpEnable;
-     VkLogicOp                                   logicOp;
-     uint32_t                                    attachmentCount;
-     const VkPipelineColorBlendAttachmentState*  pAttachments;
-+    float                                       blendConst[4];
- } VkPipelineColorBlendStateCreateInfo;
- 
- typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
-+    uint32_t                                    dynamicStateCount;
-+    const VkDynamicState*                       pDynamicStates;
-+} VkPipelineDynamicStateCreateInfo;
-+
-+typedef struct {
-+    VkStructureType                             sType;
-+    const void*                                 pNext;
-     uint32_t                                    stageCount;
-     const VkPipelineShaderStageCreateInfo*      pStages;
-     const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
-@@ -1693,6 +1753,7 @@ typedef struct {
-     const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
-     const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
-     const VkPipelineColorBlendStateCreateInfo*  pColorBlendState;
-+    const VkPipelineDynamicStateCreateInfo*     pDynamicState;
-     VkPipelineCreateFlags                       flags;
-     VkPipelineLayout                            layout;
-     VkRenderPass                                renderPass;
-@@ -1704,7 +1765,7 @@ typedef struct {
- typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
--    VkPipelineShaderStageCreateInfo             cs;
-+    VkPipelineShaderStageCreateInfo             stage;
-     VkPipelineCreateFlags                       flags;
-     VkPipelineLayout                            layout;
-     VkPipeline                                  basePipelineHandle;
-@@ -1732,9 +1793,9 @@ typedef struct {
-     VkTexFilter                                 magFilter;
-     VkTexFilter                                 minFilter;
-     VkTexMipmapMode                             mipMode;
--    VkTexAddress                                addressU;
--    VkTexAddress                                addressV;
--    VkTexAddress                                addressW;
-+    VkTexAddressMode                            addressModeU;
-+    VkTexAddressMode                            addressModeV;
-+    VkTexAddressMode                            addressModeW;
-     float                                       mipLodBias;
-     float                                       maxAnisotropy;
-     VkBool32                                    compareEnable;
-@@ -1742,6 +1803,7 @@ typedef struct {
-     float                                       minLod;
-     float                                       maxLod;
-     VkBorderColor                               borderColor;
-+    VkBool32                                    unnormalizedCoordinates;
- } VkSamplerCreateInfo;
- 
- typedef struct {
-@@ -1766,16 +1828,24 @@ typedef struct {
- typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
-+    VkDescriptorPoolUsage                       poolUsage;
-+    uint32_t                                    maxSets;
-     uint32_t                                    count;
-     const VkDescriptorTypeCount*                pTypeCount;
- } VkDescriptorPoolCreateInfo;
- 
- typedef struct {
-+    VkBuffer                                    buffer;
-+    VkDeviceSize                                offset;
-+    VkDeviceSize                                range;
-+} VkDescriptorBufferInfo;
-+
-+typedef struct {
-     VkBufferView                                bufferView;
-     VkSampler                                   sampler;
-     VkImageView                                 imageView;
--    VkAttachmentView                            attachmentView;
-     VkImageLayout                               imageLayout;
-+    VkDescriptorBufferInfo                      bufferInfo;
- } VkDescriptorInfo;
- 
- typedef struct {
-@@ -1802,74 +1872,11 @@ typedef struct {
- } VkCopyDescriptorSet;
- 
- typedef struct {
--    float                                       originX;
--    float                                       originY;
--    float                                       width;
--    float                                       height;
--    float                                       minDepth;
--    float                                       maxDepth;
--} VkViewport;
--
--typedef struct {
--    int32_t                                     x;
--    int32_t                                     y;
--} VkOffset2D;
--
--typedef struct {
--    int32_t                                     width;
--    int32_t                                     height;
--} VkExtent2D;
--
--typedef struct {
--    VkOffset2D                                  offset;
--    VkExtent2D                                  extent;
--} VkRect2D;
--
--typedef struct {
--    VkStructureType                             sType;
--    const void*                                 pNext;
--    uint32_t                                    viewportAndScissorCount;
--    const VkViewport*                           pViewports;
--    const VkRect2D*                             pScissors;
--} VkDynamicViewportStateCreateInfo;
--
--typedef struct {
--    VkStructureType                             sType;
--    const void*                                 pNext;
--    float                                       depthBias;
--    float                                       depthBiasClamp;
--    float                                       slopeScaledDepthBias;
--    float                                       lineWidth;
--} VkDynamicRasterStateCreateInfo;
--
--typedef struct {
--    VkStructureType                             sType;
--    const void*                                 pNext;
--    float                                       blendConst[4];
--} VkDynamicColorBlendStateCreateInfo;
--
--typedef struct {
--    VkStructureType                             sType;
--    const void*                                 pNext;
--    float                                       minDepthBounds;
--    float                                       maxDepthBounds;
--    uint32_t                                    stencilReadMask;
--    uint32_t                                    stencilWriteMask;
--    uint32_t                                    stencilFrontRef;
--    uint32_t                                    stencilBackRef;
--} VkDynamicDepthStencilStateCreateInfo;
--
--typedef struct {
--    VkAttachmentView                            view;
--    VkImageLayout                               layout;
--} VkAttachmentBindInfo;
--
--typedef struct {
-     VkStructureType                             sType;
-     const void*                                 pNext;
-     VkRenderPass                                renderPass;
-     uint32_t                                    attachmentCount;
--    const VkAttachmentBindInfo*                 pAttachments;
-+    const VkImageView*                          pAttachments;
-     uint32_t                                    width;
-     uint32_t                                    height;
-     uint32_t                                    layers;
-@@ -1886,6 +1893,7 @@ typedef struct {
-     VkAttachmentStoreOp                         stencilStoreOp;
-     VkImageLayout                               initialLayout;
-     VkImageLayout                               finalLayout;
-+    VkAttachmentDescriptionFlags                flags;
- } VkAttachmentDescription;
- 
- typedef struct {
-@@ -1899,13 +1907,13 @@ typedef struct {
-     VkPipelineBindPoint                         pipelineBindPoint;
-     VkSubpassDescriptionFlags                   flags;
-     uint32_t                                    inputCount;
--    const VkAttachmentReference*                inputAttachments;
-+    const VkAttachmentReference*                pInputAttachments;
-     uint32_t                                    colorCount;
--    const VkAttachmentReference*                colorAttachments;
--    const VkAttachmentReference*                resolveAttachments;
-+    const VkAttachmentReference*                pColorAttachments;
-+    const VkAttachmentReference*                pResolveAttachments;
-     VkAttachmentReference                       depthStencilAttachment;
-     uint32_t                                    preserveCount;
--    const VkAttachmentReference*                preserveAttachments;
-+    const VkAttachmentReference*                pPreserveAttachments;
- } VkSubpassDescription;
- 
- typedef struct {
-@@ -1951,6 +1959,7 @@ typedef struct {
-     const void*                                 pNext;
-     VkCmdBufferOptimizeFlags                    flags;
-     VkRenderPass                                renderPass;
-+    uint32_t                                    subpass;
-     VkFramebuffer                               framebuffer;
- } VkCmdBufferBeginInfo;
- 
-@@ -1961,18 +1970,25 @@ typedef struct {
- } VkBufferCopy;
- 
- typedef struct {
--    VkImageSubresource                          srcSubresource;
-+    VkImageAspect                               aspect;
-+    uint32_t                                    mipLevel;
-+    uint32_t                                    arrayLayer;
-+    uint32_t                                    arraySize;
-+} VkImageSubresourceCopy;
-+
-+typedef struct {
-+    VkImageSubresourceCopy                      srcSubresource;
-     VkOffset3D                                  srcOffset;
--    VkImageSubresource                          destSubresource;
-+    VkImageSubresourceCopy                      destSubresource;
-     VkOffset3D                                  destOffset;
-     VkExtent3D                                  extent;
- } VkImageCopy;
- 
- typedef struct {
--    VkImageSubresource                          srcSubresource;
-+    VkImageSubresourceCopy                      srcSubresource;
-     VkOffset3D                                  srcOffset;
-     VkExtent3D                                  srcExtent;
--    VkImageSubresource                          destSubresource;
-+    VkImageSubresourceCopy                      destSubresource;
-     VkOffset3D                                  destOffset;
-     VkExtent3D                                  destExtent;
- } VkImageBlit;
-@@ -1981,38 +1997,38 @@ typedef struct {
-     VkDeviceSize                                bufferOffset;
-     uint32_t                                    bufferRowLength;
-     uint32_t                                    bufferImageHeight;
--    VkImageSubresource                          imageSubresource;
-+    VkImageSubresourceCopy                      imageSubresource;
-     VkOffset3D                                  imageOffset;
-     VkExtent3D                                  imageExtent;
- } VkBufferImageCopy;
- 
- typedef union {
--    float                                       f32[4];
--    int32_t                                     s32[4];
--    uint32_t                                    u32[4];
-+    float                                       float32[4];
-+    int32_t                                     int32[4];
-+    uint32_t                                    uint32[4];
- } VkClearColorValue;
- 
- typedef struct {
-+    float                                       depth;
-+    uint32_t                                    stencil;
-+} VkClearDepthStencilValue;
-+
-+typedef struct {
-     VkOffset3D                                  offset;
-     VkExtent3D                                  extent;
- } VkRect3D;
- 
- typedef struct {
--    VkImageSubresource                          srcSubresource;
-+    VkImageSubresourceCopy                      srcSubresource;
-     VkOffset3D                                  srcOffset;
--    VkImageSubresource                          destSubresource;
-+    VkImageSubresourceCopy                      destSubresource;
-     VkOffset3D                                  destOffset;
-     VkExtent3D                                  extent;
- } VkImageResolve;
- 
--typedef struct {
--    float                                       depth;
--    uint32_t                                    stencil;
--} VkClearDepthStencilValue;
--
- typedef union {
-     VkClearColorValue                           color;
--    VkClearDepthStencilValue                    ds;
-+    VkClearDepthStencilValue                    depthStencil;
- } VkClearValue;
- 
- typedef struct {
-@@ -2021,8 +2037,8 @@ typedef struct {
-     VkRenderPass                                renderPass;
-     VkFramebuffer                               framebuffer;
-     VkRect2D                                    renderArea;
--    uint32_t                                    attachmentCount;
--    const VkClearValue*                         pAttachmentClearValues;
-+    uint32_t                                    clearValueCount;
-+    const VkClearValue*                         pClearValues;
- } VkRenderPassBeginInfo;
- 
- typedef struct {
-@@ -2080,32 +2096,30 @@ typedef struct {
- 
- 
- typedef VkResult (VKAPI *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance);
--typedef VkResult (VKAPI *PFN_vkDestroyInstance)(VkInstance instance);
-+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, VkImageFormatProperties* pImageFormatProperties);
--typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceLimits)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceLimits* pLimits);
-+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_vkGetPhysicalDeviceQueueCount)(VkPhysicalDevice physicalDevice, uint32_t* pCount);
--typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceQueueProperties)(VkPhysicalDevice physicalDevice, uint32_t count, VkPhysicalDeviceQueueProperties* pQueueProperties);
-+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
- typedef VkResult (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 VkResult (VKAPI *PFN_vkDestroyDevice)(VkDevice device);
--typedef VkResult (VKAPI *PFN_vkGetGlobalExtensionProperties)(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
--typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
--typedef VkResult (VKAPI *PFN_vkGetGlobalLayerProperties)(uint32_t* pCount, VkLayerProperties* pProperties);
--typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
-+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_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);
- typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem);
--typedef VkResult (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory mem);
-+typedef void (VKAPI *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory mem);
- typedef VkResult (VKAPI *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
--typedef VkResult (VKAPI *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory mem);
-+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);
-@@ -2119,88 +2133,83 @@ typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuf
- 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 VkResult (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence);
-+typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence);
- 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 VkResult (VKAPI *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore);
-+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 VkResult (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event);
-+typedef void (VKAPI *PFN_vkDestroyEvent)(VkDevice device, VkEvent event);
- 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 VkResult (VKAPI *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool);
-+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_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer);
--typedef VkResult (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer);
-+typedef void (VKAPI *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer);
- typedef VkResult (VKAPI *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView);
--typedef VkResult (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView);
-+typedef void (VKAPI *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView);
- typedef VkResult (VKAPI *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage);
--typedef VkResult (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image);
-+typedef void (VKAPI *PFN_vkDestroyImage)(VkDevice device, VkImage image);
- typedef VkResult (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 VkResult (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView);
--typedef VkResult (VKAPI *PFN_vkCreateAttachmentView)(VkDevice device, const VkAttachmentViewCreateInfo* pCreateInfo, VkAttachmentView* pView);
--typedef VkResult (VKAPI *PFN_vkDestroyAttachmentView)(VkDevice device, VkAttachmentView attachmentView);
-+typedef void (VKAPI *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView);
- typedef VkResult (VKAPI *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule);
--typedef VkResult (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule);
-+typedef void (VKAPI *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule);
- typedef VkResult (VKAPI *PFN_vkCreateShader)(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader);
--typedef VkResult (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader);
-+typedef void (VKAPI *PFN_vkDestroyShader)(VkDevice device, VkShader shader);
- typedef VkResult (VKAPI *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, VkPipelineCache* pPipelineCache);
--typedef VkResult (VKAPI *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache);
-+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_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 VkResult (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline);
-+typedef void (VKAPI *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline);
- typedef VkResult (VKAPI *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout);
--typedef VkResult (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout);
-+typedef void (VKAPI *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout);
- typedef VkResult (VKAPI *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler);
--typedef VkResult (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler);
-+typedef void (VKAPI *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler);
- typedef VkResult (VKAPI *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout);
--typedef VkResult (VKAPI *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout);
--typedef VkResult (VKAPI *PFN_vkCreateDescriptorPool)(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
--typedef VkResult (VKAPI *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool);
-+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, uint32_t* pCount);
-+typedef VkResult (VKAPI *PFN_vkAllocDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets);
- typedef VkResult (VKAPI *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
--typedef VkResult (VKAPI *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
--typedef VkResult (VKAPI *PFN_vkCreateDynamicViewportState)(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState);
--typedef VkResult (VKAPI *PFN_vkDestroyDynamicViewportState)(VkDevice device, VkDynamicViewportState dynamicViewportState);
--typedef VkResult (VKAPI *PFN_vkCreateDynamicRasterState)(VkDevice device, const VkDynamicRasterStateCreateInfo* pCreateInfo, VkDynamicRasterState* pState);
--typedef VkResult (VKAPI *PFN_vkDestroyDynamicRasterState)(VkDevice device, VkDynamicRasterState dynamicRasterState);
--typedef VkResult (VKAPI *PFN_vkCreateDynamicColorBlendState)(VkDevice device, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, VkDynamicColorBlendState* pState);
--typedef VkResult (VKAPI *PFN_vkDestroyDynamicColorBlendState)(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState);
--typedef VkResult (VKAPI *PFN_vkCreateDynamicDepthStencilState)(VkDevice device, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, VkDynamicDepthStencilState* pState);
--typedef VkResult (VKAPI *PFN_vkDestroyDynamicDepthStencilState)(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState);
-+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 VkResult (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer);
-+typedef void (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer);
- typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
--typedef VkResult (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass);
-+typedef void (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass);
- typedef VkResult (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
- typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool);
--typedef VkResult (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool);
-+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 VkResult (VKAPI *PFN_vkDestroyCommandBuffer)(VkDevice device, VkCmdBuffer commandBuffer);
-+typedef void (VKAPI *PFN_vkDestroyCommandBuffer)(VkDevice device, VkCmdBuffer commandBuffer);
- 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_vkCmdBindDynamicViewportState)(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState);
--typedef void (VKAPI *PFN_vkCmdBindDynamicRasterState)(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState);
--typedef void (VKAPI *PFN_vkCmdBindDynamicColorBlendState)(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState);
--typedef void (VKAPI *PFN_vkCmdBindDynamicDepthStencilState)(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState);
-+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_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);
-+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_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 firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount);
--typedef void (VKAPI *PFN_vkCmdDrawIndexed)(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount);
-+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_vkCmdDispatch)(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
-@@ -2213,9 +2222,9 @@ typedef void (VKAPI *PFN_vkCmdCopyImageToBuffer)(VkCmdBuffer cmdBuffer, VkImage
- 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_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, float depth, uint32_t stencil, 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 imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, 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_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);
-@@ -2237,7 +2246,7 @@ VkResult VKAPI vkCreateInstance(
-     const VkInstanceCreateInfo*                 pCreateInfo,
-     VkInstance*                                 pInstance);
- 
--VkResult VKAPI vkDestroyInstance(
-+void VKAPI vkDestroyInstance(
-     VkInstance                                  instance);
- 
- VkResult VKAPI vkEnumeratePhysicalDevices(
-@@ -2260,24 +2269,17 @@ VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
-     VkImageType                                 type,
-     VkImageTiling                               tiling,
-     VkImageUsageFlags                           usage,
-+    VkImageCreateFlags                          flags,
-     VkImageFormatProperties*                    pImageFormatProperties);
- 
--VkResult VKAPI vkGetPhysicalDeviceLimits(
--    VkPhysicalDevice                            physicalDevice,
--    VkPhysicalDeviceLimits*                     pLimits);
--
- VkResult VKAPI vkGetPhysicalDeviceProperties(
-     VkPhysicalDevice                            physicalDevice,
-     VkPhysicalDeviceProperties*                 pProperties);
- 
--VkResult VKAPI vkGetPhysicalDeviceQueueCount(
-+VkResult VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
-     VkPhysicalDevice                            physicalDevice,
--    uint32_t*                                   pCount);
--
--VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
--    VkPhysicalDevice                            physicalDevice,
--    uint32_t                                    count,
--    VkPhysicalDeviceQueueProperties*            pQueueProperties);
-+    uint32_t*                                   pCount,
-+    VkQueueFamilyProperties*                    pQueueFamilyProperties);
- 
- VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
-     VkPhysicalDevice                            physicalDevice,
-@@ -2296,25 +2298,25 @@ VkResult VKAPI vkCreateDevice(
-     const VkDeviceCreateInfo*                   pCreateInfo,
-     VkDevice*                                   pDevice);
- 
--VkResult VKAPI vkDestroyDevice(
-+void VKAPI vkDestroyDevice(
-     VkDevice                                    device);
- 
--VkResult VKAPI vkGetGlobalExtensionProperties(
-+VkResult VKAPI vkEnumerateInstanceExtensionProperties(
-     const char*                                 pLayerName,
-     uint32_t*                                   pCount,
-     VkExtensionProperties*                      pProperties);
- 
--VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
-+VkResult VKAPI vkEnumerateDeviceExtensionProperties(
-     VkPhysicalDevice                            physicalDevice,
-     const char*                                 pLayerName,
-     uint32_t*                                   pCount,
-     VkExtensionProperties*                      pProperties);
- 
--VkResult VKAPI vkGetGlobalLayerProperties(
-+VkResult VKAPI vkEnumerateInstanceLayerProperties(
-     uint32_t*                                   pCount,
-     VkLayerProperties*                          pProperties);
- 
--VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
-+VkResult VKAPI vkEnumerateDeviceLayerProperties(
-     VkPhysicalDevice                            physicalDevice,
-     uint32_t*                                   pCount,
-     VkLayerProperties*                          pProperties);
-@@ -2342,7 +2344,7 @@ VkResult VKAPI vkAllocMemory(
-     const VkMemoryAllocInfo*                    pAllocInfo,
-     VkDeviceMemory*                             pMem);
- 
--VkResult VKAPI vkFreeMemory(
-+void VKAPI vkFreeMemory(
-     VkDevice                                    device,
-     VkDeviceMemory                              mem);
- 
-@@ -2354,7 +2356,7 @@ VkResult VKAPI vkMapMemory(
-     VkMemoryMapFlags                            flags,
-     void**                                      ppData);
- 
--VkResult VKAPI vkUnmapMemory(
-+void VKAPI vkUnmapMemory(
-     VkDevice                                    device,
-     VkDeviceMemory                              mem);
- 
-@@ -2434,7 +2436,7 @@ VkResult VKAPI vkCreateFence(
-     const VkFenceCreateInfo*                    pCreateInfo,
-     VkFence*                                    pFence);
- 
--VkResult VKAPI vkDestroyFence(
-+void VKAPI vkDestroyFence(
-     VkDevice                                    device,
-     VkFence                                     fence);
- 
-@@ -2459,7 +2461,7 @@ VkResult VKAPI vkCreateSemaphore(
-     const VkSemaphoreCreateInfo*                pCreateInfo,
-     VkSemaphore*                                pSemaphore);
- 
--VkResult VKAPI vkDestroySemaphore(
-+void VKAPI vkDestroySemaphore(
-     VkDevice                                    device,
-     VkSemaphore                                 semaphore);
- 
-@@ -2476,7 +2478,7 @@ VkResult VKAPI vkCreateEvent(
-     const VkEventCreateInfo*                    pCreateInfo,
-     VkEvent*                                    pEvent);
- 
--VkResult VKAPI vkDestroyEvent(
-+void VKAPI vkDestroyEvent(
-     VkDevice                                    device,
-     VkEvent                                     event);
- 
-@@ -2497,7 +2499,7 @@ VkResult VKAPI vkCreateQueryPool(
-     const VkQueryPoolCreateInfo*                pCreateInfo,
-     VkQueryPool*                                pQueryPool);
- 
--VkResult VKAPI vkDestroyQueryPool(
-+void VKAPI vkDestroyQueryPool(
-     VkDevice                                    device,
-     VkQueryPool                                 queryPool);
- 
-@@ -2515,7 +2517,7 @@ VkResult VKAPI vkCreateBuffer(
-     const VkBufferCreateInfo*                   pCreateInfo,
-     VkBuffer*                                   pBuffer);
- 
--VkResult VKAPI vkDestroyBuffer(
-+void VKAPI vkDestroyBuffer(
-     VkDevice                                    device,
-     VkBuffer                                    buffer);
- 
-@@ -2524,7 +2526,7 @@ VkResult VKAPI vkCreateBufferView(
-     const VkBufferViewCreateInfo*               pCreateInfo,
-     VkBufferView*                               pView);
- 
--VkResult VKAPI vkDestroyBufferView(
-+void VKAPI vkDestroyBufferView(
-     VkDevice                                    device,
-     VkBufferView                                bufferView);
- 
-@@ -2533,7 +2535,7 @@ VkResult VKAPI vkCreateImage(
-     const VkImageCreateInfo*                    pCreateInfo,
-     VkImage*                                    pImage);
- 
--VkResult VKAPI vkDestroyImage(
-+void VKAPI vkDestroyImage(
-     VkDevice                                    device,
-     VkImage                                     image);
- 
-@@ -2548,25 +2550,16 @@ VkResult VKAPI vkCreateImageView(
-     const VkImageViewCreateInfo*                pCreateInfo,
-     VkImageView*                                pView);
- 
--VkResult VKAPI vkDestroyImageView(
-+void VKAPI vkDestroyImageView(
-     VkDevice                                    device,
-     VkImageView                                 imageView);
- 
--VkResult VKAPI vkCreateAttachmentView(
--    VkDevice                                    device,
--    const VkAttachmentViewCreateInfo*           pCreateInfo,
--    VkAttachmentView*                           pView);
--
--VkResult VKAPI vkDestroyAttachmentView(
--    VkDevice                                    device,
--    VkAttachmentView                            attachmentView);
--
- VkResult VKAPI vkCreateShaderModule(
-     VkDevice                                    device,
-     const VkShaderModuleCreateInfo*             pCreateInfo,
-     VkShaderModule*                             pShaderModule);
- 
--VkResult VKAPI vkDestroyShaderModule(
-+void VKAPI vkDestroyShaderModule(
-     VkDevice                                    device,
-     VkShaderModule                              shaderModule);
- 
-@@ -2575,7 +2568,7 @@ VkResult VKAPI vkCreateShader(
-     const VkShaderCreateInfo*                   pCreateInfo,
-     VkShader*                                   pShader);
- 
--VkResult VKAPI vkDestroyShader(
-+void VKAPI vkDestroyShader(
-     VkDevice                                    device,
-     VkShader                                    shader);
- 
-@@ -2584,7 +2577,7 @@ VkResult VKAPI vkCreatePipelineCache(
-     const VkPipelineCacheCreateInfo*            pCreateInfo,
-     VkPipelineCache*                            pPipelineCache);
- 
--VkResult VKAPI vkDestroyPipelineCache(
-+void VKAPI vkDestroyPipelineCache(
-     VkDevice                                    device,
-     VkPipelineCache                             pipelineCache);
- 
-@@ -2617,7 +2610,7 @@ VkResult VKAPI vkCreateComputePipelines(
-     const VkComputePipelineCreateInfo*          pCreateInfos,
-     VkPipeline*                                 pPipelines);
- 
--VkResult VKAPI vkDestroyPipeline(
-+void VKAPI vkDestroyPipeline(
-     VkDevice                                    device,
-     VkPipeline                                  pipeline);
- 
-@@ -2626,7 +2619,7 @@ VkResult VKAPI vkCreatePipelineLayout(
-     const VkPipelineLayoutCreateInfo*           pCreateInfo,
-     VkPipelineLayout*                           pPipelineLayout);
- 
--VkResult VKAPI vkDestroyPipelineLayout(
-+void VKAPI vkDestroyPipelineLayout(
-     VkDevice                                    device,
-     VkPipelineLayout                            pipelineLayout);
- 
-@@ -2635,7 +2628,7 @@ VkResult VKAPI vkCreateSampler(
-     const VkSamplerCreateInfo*                  pCreateInfo,
-     VkSampler*                                  pSampler);
- 
--VkResult VKAPI vkDestroySampler(
-+void VKAPI vkDestroySampler(
-     VkDevice                                    device,
-     VkSampler                                   sampler);
- 
-@@ -2644,18 +2637,16 @@ VkResult VKAPI vkCreateDescriptorSetLayout(
-     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
-     VkDescriptorSetLayout*                      pSetLayout);
- 
--VkResult VKAPI vkDestroyDescriptorSetLayout(
-+void VKAPI vkDestroyDescriptorSetLayout(
-     VkDevice                                    device,
-     VkDescriptorSetLayout                       descriptorSetLayout);
- 
- VkResult VKAPI vkCreateDescriptorPool(
-     VkDevice                                    device,
--    VkDescriptorPoolUsage                       poolUsage,
--    uint32_t                                    maxSets,
-     const VkDescriptorPoolCreateInfo*           pCreateInfo,
-     VkDescriptorPool*                           pDescriptorPool);
- 
--VkResult VKAPI vkDestroyDescriptorPool(
-+void VKAPI vkDestroyDescriptorPool(
-     VkDevice                                    device,
-     VkDescriptorPool                            descriptorPool);
- 
-@@ -2669,8 +2660,7 @@ VkResult VKAPI vkAllocDescriptorSets(
-     VkDescriptorSetUsage                        setUsage,
-     uint32_t                                    count,
-     const VkDescriptorSetLayout*                pSetLayouts,
--    VkDescriptorSet*                            pDescriptorSets,
--    uint32_t*                                   pCount);
-+    VkDescriptorSet*                            pDescriptorSets);
- 
- VkResult VKAPI vkFreeDescriptorSets(
-     VkDevice                                    device,
-@@ -2678,55 +2668,19 @@ VkResult VKAPI vkFreeDescriptorSets(
-     uint32_t                                    count,
-     const VkDescriptorSet*                      pDescriptorSets);
- 
--VkResult VKAPI vkUpdateDescriptorSets(
-+void VKAPI vkUpdateDescriptorSets(
-     VkDevice                                    device,
-     uint32_t                                    writeCount,
-     const VkWriteDescriptorSet*                 pDescriptorWrites,
-     uint32_t                                    copyCount,
-     const VkCopyDescriptorSet*                  pDescriptorCopies);
- 
--VkResult VKAPI vkCreateDynamicViewportState(
--    VkDevice                                    device,
--    const VkDynamicViewportStateCreateInfo*     pCreateInfo,
--    VkDynamicViewportState*                     pState);
--
--VkResult VKAPI vkDestroyDynamicViewportState(
--    VkDevice                                    device,
--    VkDynamicViewportState                      dynamicViewportState);
--
--VkResult VKAPI vkCreateDynamicRasterState(
--    VkDevice                                    device,
--    const VkDynamicRasterStateCreateInfo*       pCreateInfo,
--    VkDynamicRasterState*                       pState);
--
--VkResult VKAPI vkDestroyDynamicRasterState(
--    VkDevice                                    device,
--    VkDynamicRasterState                        dynamicRasterState);
--
--VkResult VKAPI vkCreateDynamicColorBlendState(
--    VkDevice                                    device,
--    const VkDynamicColorBlendStateCreateInfo*   pCreateInfo,
--    VkDynamicColorBlendState*                   pState);
--
--VkResult VKAPI vkDestroyDynamicColorBlendState(
--    VkDevice                                    device,
--    VkDynamicColorBlendState                    dynamicColorBlendState);
--
--VkResult VKAPI vkCreateDynamicDepthStencilState(
--    VkDevice                                    device,
--    const VkDynamicDepthStencilStateCreateInfo* pCreateInfo,
--    VkDynamicDepthStencilState*                 pState);
--
--VkResult VKAPI vkDestroyDynamicDepthStencilState(
--    VkDevice                                    device,
--    VkDynamicDepthStencilState                  dynamicDepthStencilState);
--
- VkResult VKAPI vkCreateFramebuffer(
-     VkDevice                                    device,
-     const VkFramebufferCreateInfo*              pCreateInfo,
-     VkFramebuffer*                              pFramebuffer);
- 
--VkResult VKAPI vkDestroyFramebuffer(
-+void VKAPI vkDestroyFramebuffer(
-     VkDevice                                    device,
-     VkFramebuffer                               framebuffer);
- 
-@@ -2735,7 +2689,7 @@ VkResult VKAPI vkCreateRenderPass(
-     const VkRenderPassCreateInfo*               pCreateInfo,
-     VkRenderPass*                               pRenderPass);
- 
--VkResult VKAPI vkDestroyRenderPass(
-+void VKAPI vkDestroyRenderPass(
-     VkDevice                                    device,
-     VkRenderPass                                renderPass);
- 
-@@ -2749,7 +2703,7 @@ VkResult VKAPI vkCreateCommandPool(
-     const VkCmdPoolCreateInfo*                  pCreateInfo,
-     VkCmdPool*                                  pCmdPool);
- 
--VkResult VKAPI vkDestroyCommandPool(
-+void VKAPI vkDestroyCommandPool(
-     VkDevice                                    device,
-     VkCmdPool                                   cmdPool);
- 
-@@ -2763,7 +2717,7 @@ VkResult VKAPI vkCreateCommandBuffer(
-     const VkCmdBufferCreateInfo*                pCreateInfo,
-     VkCmdBuffer*                                pCmdBuffer);
- 
--VkResult VKAPI vkDestroyCommandBuffer(
-+void VKAPI vkDestroyCommandBuffer(
-     VkDevice                                    device,
-     VkCmdBuffer                                 commandBuffer);
- 
-@@ -2783,21 +2737,49 @@ void VKAPI vkCmdBindPipeline(
-     VkPipelineBindPoint                         pipelineBindPoint,
-     VkPipeline                                  pipeline);
- 
--void VKAPI vkCmdBindDynamicViewportState(
-+void VKAPI vkCmdSetViewport(
-+    VkCmdBuffer                                 cmdBuffer,
-+    uint32_t                                    viewportCount,
-+    const VkViewport*                           pViewports);
-+
-+void VKAPI vkCmdSetScissor(
-+    VkCmdBuffer                                 cmdBuffer,
-+    uint32_t                                    scissorCount,
-+    const VkRect2D*                             pScissors);
-+
-+void VKAPI vkCmdSetLineWidth(
-+    VkCmdBuffer                                 cmdBuffer,
-+    float                                       lineWidth);
-+
-+void VKAPI vkCmdSetDepthBias(
-     VkCmdBuffer                                 cmdBuffer,
--    VkDynamicViewportState                      dynamicViewportState);
-+    float                                       depthBias,
-+    float                                       depthBiasClamp,
-+    float                                       slopeScaledDepthBias);
- 
--void VKAPI vkCmdBindDynamicRasterState(
-+void VKAPI vkCmdSetBlendConstants(
-     VkCmdBuffer                                 cmdBuffer,
--    VkDynamicRasterState                        dynamicRasterState);
-+    const float                                 blendConst[4]);
- 
--void VKAPI vkCmdBindDynamicColorBlendState(
-+void VKAPI vkCmdSetDepthBounds(
-     VkCmdBuffer                                 cmdBuffer,
--    VkDynamicColorBlendState                    dynamicColorBlendState);
-+    float                                       minDepthBounds,
-+    float                                       maxDepthBounds);
- 
--void VKAPI vkCmdBindDynamicDepthStencilState(
-+void VKAPI vkCmdSetStencilCompareMask(
-     VkCmdBuffer                                 cmdBuffer,
--    VkDynamicDepthStencilState                  dynamicDepthStencilState);
-+    VkStencilFaceFlags                          faceMask,
-+    uint32_t                                    stencilCompareMask);
-+
-+void VKAPI vkCmdSetStencilWriteMask(
-+    VkCmdBuffer                                 cmdBuffer,
-+    VkStencilFaceFlags                          faceMask,
-+    uint32_t                                    stencilWriteMask);
-+
-+void VKAPI vkCmdSetStencilReference(
-+    VkCmdBuffer                                 cmdBuffer,
-+    VkStencilFaceFlags                          faceMask,
-+    uint32_t                                    stencilReference);
- 
- void VKAPI vkCmdBindDescriptorSets(
-     VkCmdBuffer                                 cmdBuffer,
-@@ -2824,18 +2806,18 @@ void VKAPI vkCmdBindVertexBuffers(
- 
- void VKAPI vkCmdDraw(
-     VkCmdBuffer                                 cmdBuffer,
--    uint32_t                                    firstVertex,
-     uint32_t                                    vertexCount,
--    uint32_t                                    firstInstance,
--    uint32_t                                    instanceCount);
-+    uint32_t                                    instanceCount,
-+    uint32_t                                    firstVertex,
-+    uint32_t                                    firstInstance);
- 
- void VKAPI vkCmdDrawIndexed(
-     VkCmdBuffer                                 cmdBuffer,
--    uint32_t                                    firstIndex,
-     uint32_t                                    indexCount,
-+    uint32_t                                    instanceCount,
-+    uint32_t                                    firstIndex,
-     int32_t                                     vertexOffset,
--    uint32_t                                    firstInstance,
--    uint32_t                                    instanceCount);
-+    uint32_t                                    firstInstance);
- 
- void VKAPI vkCmdDrawIndirect(
-     VkCmdBuffer                                 cmdBuffer,
-@@ -2930,8 +2912,7 @@ void VKAPI vkCmdClearDepthStencilImage(
-     VkCmdBuffer                                 cmdBuffer,
-     VkImage                                     image,
-     VkImageLayout                               imageLayout,
--    float                                       depth,
--    uint32_t                                    stencil,
-+    const VkClearDepthStencilValue*             pDepthStencil,
-     uint32_t                                    rangeCount,
-     const VkImageSubresourceRange*              pRanges);
- 
-@@ -2945,10 +2926,9 @@ void VKAPI vkCmdClearColorAttachment(
- 
- void VKAPI vkCmdClearDepthStencilAttachment(
-     VkCmdBuffer                                 cmdBuffer,
--    VkImageAspectFlags                          imageAspectMask,
-+    VkImageAspectFlags                          aspectMask,
-     VkImageLayout                               imageLayout,
--    float                                       depth,
--    uint32_t                                    stencil,
-+    const VkClearDepthStencilValue*             pDepthStencil,
-     uint32_t                                    rectCount,
-     const VkRect3D*                             pRects);
- 
-diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
-index cd5dd99..2f7583d 100644
---- a/vulkan/libvulkan/entry.cpp
-+++ b/vulkan/libvulkan/entry.cpp
-@@ -47,8 +47,8 @@ VkResult vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* p
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyInstance(VkInstance instance) {
--    return GetVtbl(instance).DestroyInstance(instance);
-+void vkDestroyInstance(VkInstance instance) {
-+    GetVtbl(instance).DestroyInstance(instance);
- }
- 
- __attribute__((visibility("default")))
-@@ -72,13 +72,8 @@ VkResult vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysic
- }
- 
- __attribute__((visibility("default")))
--VkResult vkGetPhysicalDeviceQueueCount(VkPhysicalDevice physicalDevice, uint32_t* pCount) {
--    return GetVtbl(physicalDevice).GetPhysicalDeviceQueueCount(physicalDevice, pCount);
--}
--
--__attribute__((visibility("default")))
--VkResult vkGetPhysicalDeviceQueueProperties(VkPhysicalDevice physicalDevice, uint32_t count, VkPhysicalDeviceQueueProperties* pQueueProperties) {
--    return GetVtbl(physicalDevice).GetPhysicalDeviceQueueProperties(physicalDevice, count, pQueueProperties);
-+VkResult vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties) {
-+    return GetVtbl(physicalDevice).GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueFamilyProperties);
- }
- 
- __attribute__((visibility("default")))
-@@ -97,13 +92,8 @@ VkResult vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, Vk
- }
- 
- __attribute__((visibility("default")))
--VkResult vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties) {
--    return GetVtbl(physicalDevice).GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
--}
--
--__attribute__((visibility("default")))
--VkResult vkGetPhysicalDeviceLimits(VkPhysicalDevice physicalDevice, VkPhysicalDeviceLimits* pLimits) {
--    return GetVtbl(physicalDevice).GetPhysicalDeviceLimits(physicalDevice, pLimits);
-+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")))
-@@ -112,28 +102,28 @@ VkResult vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInf
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyDevice(VkDevice device) {
--    return vulkan::DestroyDevice(device);
-+void vkDestroyDevice(VkDevice device) {
-+    vulkan::DestroyDevice(device);
- }
- 
- __attribute__((visibility("default")))
--VkResult vkGetGlobalLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
--    return vulkan::GetGlobalLayerProperties(pCount, pProperties);
-+VkResult vkEnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
-+    return vulkan::EnumerateInstanceLayerProperties(pCount, pProperties);
- }
- 
- __attribute__((visibility("default")))
--VkResult vkGetGlobalExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
--    return vulkan::GetGlobalExtensionProperties(pLayerName, pCount, pProperties);
-+VkResult vkEnumerateInstanceExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
-+    return vulkan::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties);
- }
- 
- __attribute__((visibility("default")))
--VkResult vkGetPhysicalDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
--    return GetVtbl(physicalDevice).GetPhysicalDeviceLayerProperties(physicalDevice, pCount, pProperties);
-+VkResult vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
-+    return GetVtbl(physicalDevice).EnumerateDeviceLayerProperties(physicalDevice, pCount, pProperties);
- }
- 
- __attribute__((visibility("default")))
--VkResult vkGetPhysicalDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
--    return GetVtbl(physicalDevice).GetPhysicalDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
-+VkResult vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
-+    return GetVtbl(physicalDevice).EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
- }
- 
- __attribute__((visibility("default")))
-@@ -162,8 +152,8 @@ VkResult vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkD
- }
- 
- __attribute__((visibility("default")))
--VkResult vkFreeMemory(VkDevice device, VkDeviceMemory mem) {
--    return GetVtbl(device).FreeMemory(device, mem);
-+void vkFreeMemory(VkDevice device, VkDeviceMemory mem) {
-+    GetVtbl(device).FreeMemory(device, mem);
- }
- 
- __attribute__((visibility("default")))
-@@ -172,8 +162,8 @@ VkResult vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, V
- }
- 
- __attribute__((visibility("default")))
--VkResult vkUnmapMemory(VkDevice device, VkDeviceMemory mem) {
--    return GetVtbl(device).UnmapMemory(device, mem);
-+void vkUnmapMemory(VkDevice device, VkDeviceMemory mem) {
-+    GetVtbl(device).UnmapMemory(device, mem);
- }
- 
- __attribute__((visibility("default")))
-@@ -242,8 +232,8 @@ VkResult vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, Vk
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyFence(VkDevice device, VkFence fence) {
--    return GetVtbl(device).DestroyFence(device, fence);
-+void vkDestroyFence(VkDevice device, VkFence fence) {
-+    GetVtbl(device).DestroyFence(device, fence);
- }
- 
- __attribute__((visibility("default")))
-@@ -267,8 +257,8 @@ VkResult vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreate
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroySemaphore(VkDevice device, VkSemaphore semaphore) {
--    return GetVtbl(device).DestroySemaphore(device, semaphore);
-+void vkDestroySemaphore(VkDevice device, VkSemaphore semaphore) {
-+    GetVtbl(device).DestroySemaphore(device, semaphore);
- }
- 
- __attribute__((visibility("default")))
-@@ -287,8 +277,8 @@ VkResult vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, Vk
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyEvent(VkDevice device, VkEvent event) {
--    return GetVtbl(device).DestroyEvent(device, event);
-+void vkDestroyEvent(VkDevice device, VkEvent event) {
-+    GetVtbl(device).DestroyEvent(device, event);
- }
- 
- __attribute__((visibility("default")))
-@@ -312,8 +302,8 @@ VkResult vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreate
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
--    return GetVtbl(device).DestroyQueryPool(device, queryPool);
-+void vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
-+    GetVtbl(device).DestroyQueryPool(device, queryPool);
- }
- 
- __attribute__((visibility("default")))
-@@ -327,8 +317,8 @@ VkResult vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo,
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyBuffer(VkDevice device, VkBuffer buffer) {
--    return GetVtbl(device).DestroyBuffer(device, buffer);
-+void vkDestroyBuffer(VkDevice device, VkBuffer buffer) {
-+    GetVtbl(device).DestroyBuffer(device, buffer);
- }
- 
- __attribute__((visibility("default")))
-@@ -337,8 +327,8 @@ VkResult vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCrea
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyBufferView(VkDevice device, VkBufferView bufferView) {
--    return GetVtbl(device).DestroyBufferView(device, bufferView);
-+void vkDestroyBufferView(VkDevice device, VkBufferView bufferView) {
-+    GetVtbl(device).DestroyBufferView(device, bufferView);
- }
- 
- __attribute__((visibility("default")))
-@@ -347,8 +337,8 @@ VkResult vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, Vk
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyImage(VkDevice device, VkImage image) {
--    return GetVtbl(device).DestroyImage(device, image);
-+void vkDestroyImage(VkDevice device, VkImage image) {
-+    GetVtbl(device).DestroyImage(device, image);
- }
- 
- __attribute__((visibility("default")))
-@@ -362,18 +352,8 @@ VkResult vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreate
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyImageView(VkDevice device, VkImageView imageView) {
--    return GetVtbl(device).DestroyImageView(device, imageView);
--}
--
--__attribute__((visibility("default")))
--VkResult vkCreateAttachmentView(VkDevice device, const VkAttachmentViewCreateInfo* pCreateInfo, VkAttachmentView* pView) {
--    return GetVtbl(device).CreateAttachmentView(device, pCreateInfo, pView);
--}
--
--__attribute__((visibility("default")))
--VkResult vkDestroyAttachmentView(VkDevice device, VkAttachmentView attachmentView) {
--    return GetVtbl(device).DestroyAttachmentView(device, attachmentView);
-+void vkDestroyImageView(VkDevice device, VkImageView imageView) {
-+    GetVtbl(device).DestroyImageView(device, imageView);
- }
- 
- __attribute__((visibility("default")))
-@@ -382,8 +362,8 @@ VkResult vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* p
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
--    return GetVtbl(device).DestroyShaderModule(device, shaderModule);
-+void vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
-+    GetVtbl(device).DestroyShaderModule(device, shaderModule);
- }
- 
- __attribute__((visibility("default")))
-@@ -392,8 +372,8 @@ VkResult vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo,
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyShader(VkDevice device, VkShader shader) {
--    return GetVtbl(device).DestroyShader(device, shader);
-+void vkDestroyShader(VkDevice device, VkShader shader) {
-+    GetVtbl(device).DestroyShader(device, shader);
- }
- 
- __attribute__((visibility("default")))
-@@ -402,8 +382,8 @@ VkResult vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo*
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
--    return GetVtbl(device).DestroyPipelineCache(device, pipelineCache);
-+void vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
-+    GetVtbl(device).DestroyPipelineCache(device, pipelineCache);
- }
- 
- __attribute__((visibility("default")))
-@@ -432,8 +412,8 @@ VkResult vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyPipeline(VkDevice device, VkPipeline pipeline) {
--    return GetVtbl(device).DestroyPipeline(device, pipeline);
-+void vkDestroyPipeline(VkDevice device, VkPipeline pipeline) {
-+    GetVtbl(device).DestroyPipeline(device, pipeline);
- }
- 
- __attribute__((visibility("default")))
-@@ -442,8 +422,8 @@ VkResult vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInf
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
--    return GetVtbl(device).DestroyPipelineLayout(device, pipelineLayout);
-+void vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
-+    GetVtbl(device).DestroyPipelineLayout(device, pipelineLayout);
- }
- 
- __attribute__((visibility("default")))
-@@ -452,8 +432,8 @@ VkResult vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroySampler(VkDevice device, VkSampler sampler) {
--    return GetVtbl(device).DestroySampler(device, sampler);
-+void vkDestroySampler(VkDevice device, VkSampler sampler) {
-+    GetVtbl(device).DestroySampler(device, sampler);
- }
- 
- __attribute__((visibility("default")))
-@@ -462,18 +442,18 @@ VkResult vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayou
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
--    return GetVtbl(device).DestroyDescriptorSetLayout(device, descriptorSetLayout);
-+void vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
-+    GetVtbl(device).DestroyDescriptorSetLayout(device, descriptorSetLayout);
- }
- 
- __attribute__((visibility("default")))
--VkResult vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool) {
--    return GetVtbl(device).CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
-+VkResult vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool) {
-+    return GetVtbl(device).CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
--    return GetVtbl(device).DestroyDescriptorPool(device, descriptorPool);
-+void vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
-+    GetVtbl(device).DestroyDescriptorPool(device, descriptorPool);
- }
- 
- __attribute__((visibility("default")))
-@@ -482,8 +462,8 @@ VkResult vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
- }
- 
- __attribute__((visibility("default")))
--VkResult vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount) {
--    return GetVtbl(device).AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
-+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);
- }
- 
- __attribute__((visibility("default")))
-@@ -492,48 +472,8 @@ VkResult vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool,
- }
- 
- __attribute__((visibility("default")))
--VkResult vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
--    return GetVtbl(device).UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
--}
--
--__attribute__((visibility("default")))
--VkResult vkCreateDynamicViewportState(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState) {
--    return GetVtbl(device).CreateDynamicViewportState(device, pCreateInfo, pState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkDestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState) {
--    return GetVtbl(device).DestroyDynamicViewportState(device, dynamicViewportState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkCreateDynamicRasterState(VkDevice device, const VkDynamicRasterStateCreateInfo* pCreateInfo, VkDynamicRasterState* pState) {
--    return GetVtbl(device).CreateDynamicRasterState(device, pCreateInfo, pState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkDestroyDynamicRasterState(VkDevice device, VkDynamicRasterState dynamicRasterState) {
--    return GetVtbl(device).DestroyDynamicRasterState(device, dynamicRasterState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, VkDynamicColorBlendState* pState) {
--    return GetVtbl(device).CreateDynamicColorBlendState(device, pCreateInfo, pState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkDestroyDynamicColorBlendState(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState) {
--    return GetVtbl(device).DestroyDynamicColorBlendState(device, dynamicColorBlendState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, VkDynamicDepthStencilState* pState) {
--    return GetVtbl(device).CreateDynamicDepthStencilState(device, pCreateInfo, pState);
--}
--
--__attribute__((visibility("default")))
--VkResult vkDestroyDynamicDepthStencilState(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState) {
--    return GetVtbl(device).DestroyDynamicDepthStencilState(device, dynamicDepthStencilState);
-+void vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
-+    GetVtbl(device).UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
- }
- 
- __attribute__((visibility("default")))
-@@ -542,8 +482,8 @@ VkResult vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCr
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
--    return GetVtbl(device).DestroyFramebuffer(device, framebuffer);
-+void vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
-+    GetVtbl(device).DestroyFramebuffer(device, framebuffer);
- }
- 
- __attribute__((visibility("default")))
-@@ -552,8 +492,8 @@ VkResult vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCrea
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
--    return GetVtbl(device).DestroyRenderPass(device, renderPass);
-+void vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
-+    GetVtbl(device).DestroyRenderPass(device, renderPass);
- }
- 
- __attribute__((visibility("default")))
-@@ -567,8 +507,8 @@ VkResult vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreate
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
--    return GetVtbl(device).DestroyCommandPool(device, cmdPool);
-+void vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
-+    GetVtbl(device).DestroyCommandPool(device, cmdPool);
- }
- 
- __attribute__((visibility("default")))
-@@ -582,8 +522,8 @@ VkResult vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCr
- }
- 
- __attribute__((visibility("default")))
--VkResult vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer commandBuffer) {
--    return GetVtbl(device).DestroyCommandBuffer(device, commandBuffer);
-+void vkDestroyCommandBuffer(VkDevice device, VkCmdBuffer commandBuffer) {
-+    GetVtbl(device).DestroyCommandBuffer(device, commandBuffer);
- }
- 
- __attribute__((visibility("default")))
-@@ -607,23 +547,48 @@ void vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPo
- }
- 
- __attribute__((visibility("default")))
--void vkCmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState) {
--    GetVtbl(cmdBuffer).CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
-+void vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
-+    GetVtbl(cmdBuffer).CmdSetViewport(cmdBuffer, viewportCount, pViewports);
-+}
-+
-+__attribute__((visibility("default")))
-+void vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
-+    GetVtbl(cmdBuffer).CmdSetScissor(cmdBuffer, scissorCount, pScissors);
-+}
-+
-+__attribute__((visibility("default")))
-+void vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth) {
-+    GetVtbl(cmdBuffer).CmdSetLineWidth(cmdBuffer, lineWidth);
-+}
-+
-+__attribute__((visibility("default")))
-+void vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias) {
-+    GetVtbl(cmdBuffer).CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
-+}
-+
-+__attribute__((visibility("default")))
-+void vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4]) {
-+    GetVtbl(cmdBuffer).CmdSetBlendConstants(cmdBuffer, blendConst);
-+}
-+
-+__attribute__((visibility("default")))
-+void vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds) {
-+    GetVtbl(cmdBuffer).CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
- }
- 
- __attribute__((visibility("default")))
--void vkCmdBindDynamicRasterState(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState) {
--    GetVtbl(cmdBuffer).CmdBindDynamicRasterState(cmdBuffer, dynamicRasterState);
-+void vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
-+    GetVtbl(cmdBuffer).CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
- }
- 
- __attribute__((visibility("default")))
--void vkCmdBindDynamicColorBlendState(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState) {
--    GetVtbl(cmdBuffer).CmdBindDynamicColorBlendState(cmdBuffer, dynamicColorBlendState);
-+void vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
-+    GetVtbl(cmdBuffer).CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
- }
- 
- __attribute__((visibility("default")))
--void vkCmdBindDynamicDepthStencilState(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState) {
--    GetVtbl(cmdBuffer).CmdBindDynamicDepthStencilState(cmdBuffer, dynamicDepthStencilState);
-+void vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
-+    GetVtbl(cmdBuffer).CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
- }
- 
- __attribute__((visibility("default")))
-@@ -642,13 +607,13 @@ void vkCmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32
- }
- 
- __attribute__((visibility("default")))
--void vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount) {
--    GetVtbl(cmdBuffer).CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
-+void vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
-+    GetVtbl(cmdBuffer).CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
- }
- 
- __attribute__((visibility("default")))
--void vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount) {
--    GetVtbl(cmdBuffer).CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
-+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);
- }
- 
- __attribute__((visibility("default")))
-@@ -712,8 +677,8 @@ void vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout im
- }
- 
- __attribute__((visibility("default")))
--void vkCmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
--    GetVtbl(cmdBuffer).CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
-+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);
- }
- 
- __attribute__((visibility("default")))
-@@ -722,8 +687,8 @@ void vkCmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment,
- }
- 
- __attribute__((visibility("default")))
--void vkCmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects) {
--    GetVtbl(cmdBuffer).CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
-+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);
- }
- 
- __attribute__((visibility("default")))
-diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
-index ceb76b9..5247950 100644
---- a/vulkan/libvulkan/get_proc_addr.cpp
-+++ b/vulkan/libvulkan/get_proc_addr.cpp
-@@ -51,18 +51,16 @@ const NameProcEntry kInstanceProcTbl[] = {
-     // clang-format off
-     {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDevice)},
-     {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyInstance)},
-+    {"vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceExtensionProperties)},
-+    {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties)},
-     {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(vkEnumeratePhysicalDevices)},
-     {"vkGetInstanceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetInstanceProcAddr)},
--    {"vkGetPhysicalDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceExtensionProperties)},
-     {"vkGetPhysicalDeviceFeatures", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceFeatures)},
-     {"vkGetPhysicalDeviceFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceFormatProperties)},
-     {"vkGetPhysicalDeviceImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceImageFormatProperties)},
--    {"vkGetPhysicalDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceLayerProperties)},
--    {"vkGetPhysicalDeviceLimits", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceLimits)},
-     {"vkGetPhysicalDeviceMemoryProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceMemoryProperties)},
-     {"vkGetPhysicalDeviceProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceProperties)},
--    {"vkGetPhysicalDeviceQueueCount", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceQueueCount)},
--    {"vkGetPhysicalDeviceQueueProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceQueueProperties)},
-+    {"vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceQueueFamilyProperties)},
-     {"vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSparseImageFormatProperties)},
-     // clang-format on
- };
-@@ -77,10 +75,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginQuery)},
-     {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginRenderPass)},
-     {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDescriptorSets)},
--    {"vkCmdBindDynamicColorBlendState", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDynamicColorBlendState)},
--    {"vkCmdBindDynamicDepthStencilState", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDynamicDepthStencilState)},
--    {"vkCmdBindDynamicRasterState", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDynamicRasterState)},
--    {"vkCmdBindDynamicViewportState", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDynamicViewportState)},
-     {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindIndexBuffer)},
-     {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindPipeline)},
-     {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindVertexBuffers)},
-@@ -110,11 +104,19 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetEvent)},
-     {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetQueryPool)},
-     {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResolveImage)},
-+    {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetBlendConstants)},
-+    {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBias)},
-+    {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBounds)},
-     {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetEvent)},
-+    {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetLineWidth)},
-+    {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetScissor)},
-+    {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilCompareMask)},
-+    {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilReference)},
-+    {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilWriteMask)},
-+    {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetViewport)},
-     {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdUpdateBuffer)},
-     {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWaitEvents)},
-     {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
--    {"vkCreateAttachmentView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateAttachmentView)},
-     {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
-     {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
-     {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandBuffer)},
-@@ -122,10 +124,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
-     {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
-     {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorSetLayout)},
--    {"vkCreateDynamicColorBlendState", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDynamicColorBlendState)},
--    {"vkCreateDynamicDepthStencilState", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDynamicDepthStencilState)},
--    {"vkCreateDynamicRasterState", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDynamicRasterState)},
--    {"vkCreateDynamicViewportState", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDynamicViewportState)},
-     {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCreateEvent)},
-     {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFence)},
-     {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFramebuffer)},
-@@ -140,7 +138,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
-     {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
-     {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
--    {"vkDestroyAttachmentView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyAttachmentView)},
-     {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
-     {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
-     {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandBuffer)},
-@@ -148,10 +145,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
-     {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
-     {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDevice)},
--    {"vkDestroyDynamicColorBlendState", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDynamicColorBlendState)},
--    {"vkDestroyDynamicDepthStencilState", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDynamicDepthStencilState)},
--    {"vkDestroyDynamicRasterState", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDynamicRasterState)},
--    {"vkDestroyDynamicViewportState", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDynamicViewportState)},
-     {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyEvent)},
-     {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFence)},
-     {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFramebuffer)},
-@@ -210,18 +203,16 @@ const NameOffsetEntry kInstanceOffsetTbl[] = {
-     // clang-format off
-     {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
-     {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
-+    {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
-+    {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
-     {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
-     {"vkGetInstanceProcAddr", offsetof(InstanceVtbl, GetInstanceProcAddr)},
--    {"vkGetPhysicalDeviceExtensionProperties", offsetof(InstanceVtbl, GetPhysicalDeviceExtensionProperties)},
-     {"vkGetPhysicalDeviceFeatures", offsetof(InstanceVtbl, GetPhysicalDeviceFeatures)},
-     {"vkGetPhysicalDeviceFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceFormatProperties)},
-     {"vkGetPhysicalDeviceImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceImageFormatProperties)},
--    {"vkGetPhysicalDeviceLayerProperties", offsetof(InstanceVtbl, GetPhysicalDeviceLayerProperties)},
--    {"vkGetPhysicalDeviceLimits", offsetof(InstanceVtbl, GetPhysicalDeviceLimits)},
-     {"vkGetPhysicalDeviceMemoryProperties", offsetof(InstanceVtbl, GetPhysicalDeviceMemoryProperties)},
-     {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
--    {"vkGetPhysicalDeviceQueueCount", offsetof(InstanceVtbl, GetPhysicalDeviceQueueCount)},
--    {"vkGetPhysicalDeviceQueueProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueProperties)},
-+    {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
-     {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
-     // clang-format on
- };
-@@ -236,10 +227,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
-     {"vkCmdBeginQuery", offsetof(DeviceVtbl, CmdBeginQuery)},
-     {"vkCmdBeginRenderPass", offsetof(DeviceVtbl, CmdBeginRenderPass)},
-     {"vkCmdBindDescriptorSets", offsetof(DeviceVtbl, CmdBindDescriptorSets)},
--    {"vkCmdBindDynamicColorBlendState", offsetof(DeviceVtbl, CmdBindDynamicColorBlendState)},
--    {"vkCmdBindDynamicDepthStencilState", offsetof(DeviceVtbl, CmdBindDynamicDepthStencilState)},
--    {"vkCmdBindDynamicRasterState", offsetof(DeviceVtbl, CmdBindDynamicRasterState)},
--    {"vkCmdBindDynamicViewportState", offsetof(DeviceVtbl, CmdBindDynamicViewportState)},
-     {"vkCmdBindIndexBuffer", offsetof(DeviceVtbl, CmdBindIndexBuffer)},
-     {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
-     {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
-@@ -269,11 +256,19 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
-     {"vkCmdResetEvent", offsetof(DeviceVtbl, CmdResetEvent)},
-     {"vkCmdResetQueryPool", offsetof(DeviceVtbl, CmdResetQueryPool)},
-     {"vkCmdResolveImage", offsetof(DeviceVtbl, CmdResolveImage)},
-+    {"vkCmdSetBlendConstants", offsetof(DeviceVtbl, CmdSetBlendConstants)},
-+    {"vkCmdSetDepthBias", offsetof(DeviceVtbl, CmdSetDepthBias)},
-+    {"vkCmdSetDepthBounds", offsetof(DeviceVtbl, CmdSetDepthBounds)},
-     {"vkCmdSetEvent", offsetof(DeviceVtbl, CmdSetEvent)},
-+    {"vkCmdSetLineWidth", offsetof(DeviceVtbl, CmdSetLineWidth)},
-+    {"vkCmdSetScissor", offsetof(DeviceVtbl, CmdSetScissor)},
-+    {"vkCmdSetStencilCompareMask", offsetof(DeviceVtbl, CmdSetStencilCompareMask)},
-+    {"vkCmdSetStencilReference", offsetof(DeviceVtbl, CmdSetStencilReference)},
-+    {"vkCmdSetStencilWriteMask", offsetof(DeviceVtbl, CmdSetStencilWriteMask)},
-+    {"vkCmdSetViewport", offsetof(DeviceVtbl, CmdSetViewport)},
-     {"vkCmdUpdateBuffer", offsetof(DeviceVtbl, CmdUpdateBuffer)},
-     {"vkCmdWaitEvents", offsetof(DeviceVtbl, CmdWaitEvents)},
-     {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
--    {"vkCreateAttachmentView", offsetof(DeviceVtbl, CreateAttachmentView)},
-     {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
-     {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
-     {"vkCreateCommandBuffer", offsetof(DeviceVtbl, CreateCommandBuffer)},
-@@ -281,10 +276,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
-     {"vkCreateComputePipelines", offsetof(DeviceVtbl, CreateComputePipelines)},
-     {"vkCreateDescriptorPool", offsetof(DeviceVtbl, CreateDescriptorPool)},
-     {"vkCreateDescriptorSetLayout", offsetof(DeviceVtbl, CreateDescriptorSetLayout)},
--    {"vkCreateDynamicColorBlendState", offsetof(DeviceVtbl, CreateDynamicColorBlendState)},
--    {"vkCreateDynamicDepthStencilState", offsetof(DeviceVtbl, CreateDynamicDepthStencilState)},
--    {"vkCreateDynamicRasterState", offsetof(DeviceVtbl, CreateDynamicRasterState)},
--    {"vkCreateDynamicViewportState", offsetof(DeviceVtbl, CreateDynamicViewportState)},
-     {"vkCreateEvent", offsetof(DeviceVtbl, CreateEvent)},
-     {"vkCreateFence", offsetof(DeviceVtbl, CreateFence)},
-     {"vkCreateFramebuffer", offsetof(DeviceVtbl, CreateFramebuffer)},
-@@ -299,7 +290,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
-     {"vkCreateSemaphore", offsetof(DeviceVtbl, CreateSemaphore)},
-     {"vkCreateShader", offsetof(DeviceVtbl, CreateShader)},
-     {"vkCreateShaderModule", offsetof(DeviceVtbl, CreateShaderModule)},
--    {"vkDestroyAttachmentView", offsetof(DeviceVtbl, DestroyAttachmentView)},
-     {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
-     {"vkDestroyBufferView", offsetof(DeviceVtbl, DestroyBufferView)},
-     {"vkDestroyCommandBuffer", offsetof(DeviceVtbl, DestroyCommandBuffer)},
-@@ -307,10 +297,6 @@ const NameOffsetEntry kDeviceOffsetTbl[] = {
-     {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
-     {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
-     {"vkDestroyDevice", offsetof(DeviceVtbl, DestroyDevice)},
--    {"vkDestroyDynamicColorBlendState", offsetof(DeviceVtbl, DestroyDynamicColorBlendState)},
--    {"vkDestroyDynamicDepthStencilState", offsetof(DeviceVtbl, DestroyDynamicDepthStencilState)},
--    {"vkDestroyDynamicRasterState", offsetof(DeviceVtbl, DestroyDynamicRasterState)},
--    {"vkDestroyDynamicViewportState", offsetof(DeviceVtbl, DestroyDynamicViewportState)},
-     {"vkDestroyEvent", offsetof(DeviceVtbl, DestroyEvent)},
-     {"vkDestroyFence", offsetof(DeviceVtbl, DestroyFence)},
-     {"vkDestroyFramebuffer", offsetof(DeviceVtbl, DestroyFramebuffer)},
-@@ -453,7 +439,6 @@ PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
-         const_cast<unsigned char*>(base) + entry->offset);
- }
- 
--// TODO: remove need for instance_next
- bool LoadInstanceVtbl(VkInstance instance,
-                       VkInstance instance_next,
-                       PFN_vkGetInstanceProcAddr get_proc_addr,
-@@ -484,14 +469,9 @@ bool LoadInstanceVtbl(VkInstance instance,
-         ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceProperties");
-         success = false;
-     }
--    vtbl.GetPhysicalDeviceQueueCount = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueCount>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueCount"));
--    if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueCount)) {
--        ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueCount");
--        success = false;
--    }
--    vtbl.GetPhysicalDeviceQueueProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueProperties"));
--    if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueProperties)) {
--        ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueProperties");
-+    vtbl.GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
-+    if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueFamilyProperties)) {
-+        ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueFamilyProperties");
-         success = false;
-     }
-     vtbl.GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceMemoryProperties"));
-@@ -514,24 +494,19 @@ bool LoadInstanceVtbl(VkInstance instance,
-         ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceImageFormatProperties");
-         success = false;
-     }
--    vtbl.GetPhysicalDeviceLimits = reinterpret_cast<PFN_vkGetPhysicalDeviceLimits>(get_proc_addr(instance, "vkGetPhysicalDeviceLimits"));
--    if (UNLIKELY(!vtbl.GetPhysicalDeviceLimits)) {
--        ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceLimits");
--        success = false;
--    }
-     vtbl.CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(get_proc_addr(instance, "vkCreateDevice"));
-     if (UNLIKELY(!vtbl.CreateDevice)) {
-         ALOGE("missing instance proc: %s", "vkCreateDevice");
-         success = false;
-     }
--    vtbl.GetPhysicalDeviceLayerProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceLayerProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceLayerProperties"));
--    if (UNLIKELY(!vtbl.GetPhysicalDeviceLayerProperties)) {
--        ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceLayerProperties");
-+    vtbl.EnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(get_proc_addr(instance, "vkEnumerateDeviceLayerProperties"));
-+    if (UNLIKELY(!vtbl.EnumerateDeviceLayerProperties)) {
-+        ALOGE("missing instance proc: %s", "vkEnumerateDeviceLayerProperties");
-         success = false;
-     }
--    vtbl.GetPhysicalDeviceExtensionProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceExtensionProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceExtensionProperties"));
--    if (UNLIKELY(!vtbl.GetPhysicalDeviceExtensionProperties)) {
--        ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceExtensionProperties");
-+    vtbl.EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(get_proc_addr(instance, "vkEnumerateDeviceExtensionProperties"));
-+    if (UNLIKELY(!vtbl.EnumerateDeviceExtensionProperties)) {
-+        ALOGE("missing instance proc: %s", "vkEnumerateDeviceExtensionProperties");
-         success = false;
-     }
-     vtbl.GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
-@@ -784,16 +759,6 @@ bool LoadDeviceVtbl(VkDevice device,
-         ALOGE("missing device proc: %s", "vkDestroyImageView");
-         success = false;
-     }
--    vtbl.CreateAttachmentView = reinterpret_cast<PFN_vkCreateAttachmentView>(get_proc_addr(device, "vkCreateAttachmentView"));
--    if (UNLIKELY(!vtbl.CreateAttachmentView)) {
--        ALOGE("missing device proc: %s", "vkCreateAttachmentView");
--        success = false;
--    }
--    vtbl.DestroyAttachmentView = reinterpret_cast<PFN_vkDestroyAttachmentView>(get_proc_addr(device, "vkDestroyAttachmentView"));
--    if (UNLIKELY(!vtbl.DestroyAttachmentView)) {
--        ALOGE("missing device proc: %s", "vkDestroyAttachmentView");
--        success = false;
--    }
-     vtbl.CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(get_proc_addr(device, "vkCreateShaderModule"));
-     if (UNLIKELY(!vtbl.CreateShaderModule)) {
-         ALOGE("missing device proc: %s", "vkCreateShaderModule");
-@@ -914,46 +879,6 @@ bool LoadDeviceVtbl(VkDevice device,
-         ALOGE("missing device proc: %s", "vkUpdateDescriptorSets");
-         success = false;
-     }
--    vtbl.CreateDynamicViewportState = reinterpret_cast<PFN_vkCreateDynamicViewportState>(get_proc_addr(device, "vkCreateDynamicViewportState"));
--    if (UNLIKELY(!vtbl.CreateDynamicViewportState)) {
--        ALOGE("missing device proc: %s", "vkCreateDynamicViewportState");
--        success = false;
--    }
--    vtbl.DestroyDynamicViewportState = reinterpret_cast<PFN_vkDestroyDynamicViewportState>(get_proc_addr(device, "vkDestroyDynamicViewportState"));
--    if (UNLIKELY(!vtbl.DestroyDynamicViewportState)) {
--        ALOGE("missing device proc: %s", "vkDestroyDynamicViewportState");
--        success = false;
--    }
--    vtbl.CreateDynamicRasterState = reinterpret_cast<PFN_vkCreateDynamicRasterState>(get_proc_addr(device, "vkCreateDynamicRasterState"));
--    if (UNLIKELY(!vtbl.CreateDynamicRasterState)) {
--        ALOGE("missing device proc: %s", "vkCreateDynamicRasterState");
--        success = false;
--    }
--    vtbl.DestroyDynamicRasterState = reinterpret_cast<PFN_vkDestroyDynamicRasterState>(get_proc_addr(device, "vkDestroyDynamicRasterState"));
--    if (UNLIKELY(!vtbl.DestroyDynamicRasterState)) {
--        ALOGE("missing device proc: %s", "vkDestroyDynamicRasterState");
--        success = false;
--    }
--    vtbl.CreateDynamicColorBlendState = reinterpret_cast<PFN_vkCreateDynamicColorBlendState>(get_proc_addr(device, "vkCreateDynamicColorBlendState"));
--    if (UNLIKELY(!vtbl.CreateDynamicColorBlendState)) {
--        ALOGE("missing device proc: %s", "vkCreateDynamicColorBlendState");
--        success = false;
--    }
--    vtbl.DestroyDynamicColorBlendState = reinterpret_cast<PFN_vkDestroyDynamicColorBlendState>(get_proc_addr(device, "vkDestroyDynamicColorBlendState"));
--    if (UNLIKELY(!vtbl.DestroyDynamicColorBlendState)) {
--        ALOGE("missing device proc: %s", "vkDestroyDynamicColorBlendState");
--        success = false;
--    }
--    vtbl.CreateDynamicDepthStencilState = reinterpret_cast<PFN_vkCreateDynamicDepthStencilState>(get_proc_addr(device, "vkCreateDynamicDepthStencilState"));
--    if (UNLIKELY(!vtbl.CreateDynamicDepthStencilState)) {
--        ALOGE("missing device proc: %s", "vkCreateDynamicDepthStencilState");
--        success = false;
--    }
--    vtbl.DestroyDynamicDepthStencilState = reinterpret_cast<PFN_vkDestroyDynamicDepthStencilState>(get_proc_addr(device, "vkDestroyDynamicDepthStencilState"));
--    if (UNLIKELY(!vtbl.DestroyDynamicDepthStencilState)) {
--        ALOGE("missing device proc: %s", "vkDestroyDynamicDepthStencilState");
--        success = false;
--    }
-     vtbl.CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(get_proc_addr(device, "vkCreateFramebuffer"));
-     if (UNLIKELY(!vtbl.CreateFramebuffer)) {
-         ALOGE("missing device proc: %s", "vkCreateFramebuffer");
-@@ -1024,24 +949,49 @@ bool LoadDeviceVtbl(VkDevice device,
-         ALOGE("missing device proc: %s", "vkCmdBindPipeline");
-         success = false;
-     }
--    vtbl.CmdBindDynamicViewportState = reinterpret_cast<PFN_vkCmdBindDynamicViewportState>(get_proc_addr(device, "vkCmdBindDynamicViewportState"));
--    if (UNLIKELY(!vtbl.CmdBindDynamicViewportState)) {
--        ALOGE("missing device proc: %s", "vkCmdBindDynamicViewportState");
-+    vtbl.CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(get_proc_addr(device, "vkCmdSetViewport"));
-+    if (UNLIKELY(!vtbl.CmdSetViewport)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetViewport");
-+        success = false;
-+    }
-+    vtbl.CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(get_proc_addr(device, "vkCmdSetScissor"));
-+    if (UNLIKELY(!vtbl.CmdSetScissor)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetScissor");
-+        success = false;
-+    }
-+    vtbl.CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(get_proc_addr(device, "vkCmdSetLineWidth"));
-+    if (UNLIKELY(!vtbl.CmdSetLineWidth)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetLineWidth");
-+        success = false;
-+    }
-+    vtbl.CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(get_proc_addr(device, "vkCmdSetDepthBias"));
-+    if (UNLIKELY(!vtbl.CmdSetDepthBias)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetDepthBias");
-+        success = false;
-+    }
-+    vtbl.CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(get_proc_addr(device, "vkCmdSetBlendConstants"));
-+    if (UNLIKELY(!vtbl.CmdSetBlendConstants)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetBlendConstants");
-+        success = false;
-+    }
-+    vtbl.CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(get_proc_addr(device, "vkCmdSetDepthBounds"));
-+    if (UNLIKELY(!vtbl.CmdSetDepthBounds)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetDepthBounds");
-         success = false;
-     }
--    vtbl.CmdBindDynamicRasterState = reinterpret_cast<PFN_vkCmdBindDynamicRasterState>(get_proc_addr(device, "vkCmdBindDynamicRasterState"));
--    if (UNLIKELY(!vtbl.CmdBindDynamicRasterState)) {
--        ALOGE("missing device proc: %s", "vkCmdBindDynamicRasterState");
-+    vtbl.CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(get_proc_addr(device, "vkCmdSetStencilCompareMask"));
-+    if (UNLIKELY(!vtbl.CmdSetStencilCompareMask)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetStencilCompareMask");
-         success = false;
-     }
--    vtbl.CmdBindDynamicColorBlendState = reinterpret_cast<PFN_vkCmdBindDynamicColorBlendState>(get_proc_addr(device, "vkCmdBindDynamicColorBlendState"));
--    if (UNLIKELY(!vtbl.CmdBindDynamicColorBlendState)) {
--        ALOGE("missing device proc: %s", "vkCmdBindDynamicColorBlendState");
-+    vtbl.CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(get_proc_addr(device, "vkCmdSetStencilWriteMask"));
-+    if (UNLIKELY(!vtbl.CmdSetStencilWriteMask)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetStencilWriteMask");
-         success = false;
-     }
--    vtbl.CmdBindDynamicDepthStencilState = reinterpret_cast<PFN_vkCmdBindDynamicDepthStencilState>(get_proc_addr(device, "vkCmdBindDynamicDepthStencilState"));
--    if (UNLIKELY(!vtbl.CmdBindDynamicDepthStencilState)) {
--        ALOGE("missing device proc: %s", "vkCmdBindDynamicDepthStencilState");
-+    vtbl.CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(get_proc_addr(device, "vkCmdSetStencilReference"));
-+    if (UNLIKELY(!vtbl.CmdSetStencilReference)) {
-+        ALOGE("missing device proc: %s", "vkCmdSetStencilReference");
-         success = false;
-     }
-     vtbl.CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(get_proc_addr(device, "vkCmdBindDescriptorSets"));
-diff --git a/vulkan/libvulkan/loader.cpp b/vulkan/libvulkan/loader.cpp
-index 97ceb4a..f608c57 100644
---- a/vulkan/libvulkan/loader.cpp
-+++ b/vulkan/libvulkan/loader.cpp
-@@ -257,12 +257,12 @@ void FindLayersInDirectory(
-             }
- 
-             // Get Layers in so
--            PFN_vkGetGlobalLayerProperties get_layer_properties =
--                reinterpret_cast<PFN_vkGetGlobalLayerProperties>(
--                    dlsym(layer_handle, "vkGetGlobalLayerProperties"));
-+            PFN_vkEnumerateInstanceLayerProperties get_layer_properties =
-+                reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>(
-+                    dlsym(layer_handle, "vkEnumerateInstanceLayerProperties"));
-             if (!get_layer_properties) {
-                 ALOGE(
--                    "%s failed to find vkGetGlobalLayerProperties with "
-+                    "%s failed to find vkEnumerateInstanceLayerProperties with "
-                     "error %s; Skipping",
-                     entry->d_name, dlerror());
-                 dlclose(layer_handle);
-@@ -353,7 +353,7 @@ void LogDebugMessageCallback(VkFlags message_flags,
- // "Bottom" functions. These are called at the end of the instance dispatch
- // chain.
- 
--VkResult DestroyInstanceBottom(VkInstance instance) {
-+void DestroyInstanceBottom(VkInstance instance) {
-     // 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 &&
-@@ -372,7 +372,6 @@ VkResult DestroyInstanceBottom(VkInstance instance) {
-     const VkAllocCallbacks* alloc = instance->alloc;
-     instance->~VkInstance_T();
-     alloc->pfnFree(alloc->pUserData, instance);
--    return VK_SUCCESS;
- }
- 
- VkResult CreateInstanceBottom(const VkInstanceCreateInfo* create_info,
-@@ -484,16 +483,11 @@ VkResult GetPhysicalDeviceImageFormatPropertiesBottom(
-     VkImageType type,
-     VkImageTiling tiling,
-     VkImageUsageFlags usage,
-+    VkImageCreateFlags flags,
-     VkImageFormatProperties* properties) {
-     return GetVtbl(pdev)
-         ->instance->drv.vtbl.GetPhysicalDeviceImageFormatProperties(
--            pdev, format, type, tiling, usage, properties);
--}
--
--VkResult GetPhysicalDeviceLimitsBottom(VkPhysicalDevice pdev,
--                                       VkPhysicalDeviceLimits* limits) {
--    return GetVtbl(pdev)
--        ->instance->drv.vtbl.GetPhysicalDeviceLimits(pdev, limits);
-+            pdev, format, type, tiling, usage, flags, properties);
- }
- 
- VkResult GetPhysicalDevicePropertiesBottom(
-@@ -503,18 +497,13 @@ VkResult GetPhysicalDevicePropertiesBottom(
-         ->instance->drv.vtbl.GetPhysicalDeviceProperties(pdev, properties);
- }
- 
--VkResult GetPhysicalDeviceQueueCountBottom(VkPhysicalDevice pdev,
--                                           uint32_t* count) {
--    return GetVtbl(pdev)
--        ->instance->drv.vtbl.GetPhysicalDeviceQueueCount(pdev, count);
--}
--
--VkResult GetPhysicalDeviceQueuePropertiesBottom(
-+VkResult GetPhysicalDeviceQueueFamilyPropertiesBottom(
-     VkPhysicalDevice pdev,
--    uint32_t count,
--    VkPhysicalDeviceQueueProperties* properties) {
--    return GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceQueueProperties(
--        pdev, count, properties);
-+    uint32_t* pCount,
-+    VkQueueFamilyProperties* properties) {
-+    return GetVtbl(pdev)
-+        ->instance->drv.vtbl.GetPhysicalDeviceQueueFamilyProperties(
-+            pdev, pCount, properties);
- }
- 
- VkResult GetPhysicalDeviceMemoryPropertiesBottom(
-@@ -618,21 +607,20 @@ VkResult CreateDeviceBottom(VkPhysicalDevice pdev,
-     return VK_SUCCESS;
- }
- 
--VkResult GetPhysicalDeviceExtensionPropertiesBottom(
-+VkResult EnumerateDeviceExtensionPropertiesBottom(
-     VkPhysicalDevice pdev,
-     const char* layer_name,
-     uint32_t* properties_count,
-     VkExtensionProperties* properties) {
-     // TODO: what are we supposed to do with layer_name here?
--    return GetVtbl(pdev)
--        ->instance->drv.vtbl.GetPhysicalDeviceExtensionProperties(
--            pdev, layer_name, properties_count, properties);
-+    return GetVtbl(pdev)->instance->drv.vtbl.EnumerateDeviceExtensionProperties(
-+        pdev, layer_name, properties_count, properties);
- }
- 
--VkResult GetPhysicalDeviceLayerPropertiesBottom(VkPhysicalDevice pdev,
--                                                uint32_t* properties_count,
--                                                VkLayerProperties* properties) {
--    return GetVtbl(pdev)->instance->drv.vtbl.GetPhysicalDeviceLayerProperties(
-+VkResult EnumerateDeviceLayerPropertiesBottom(VkPhysicalDevice pdev,
-+                                              uint32_t* properties_count,
-+                                              VkLayerProperties* properties) {
-+    return GetVtbl(pdev)->instance->drv.vtbl.EnumerateDeviceLayerProperties(
-         pdev, properties_count, properties);
- }
- 
-@@ -663,14 +651,12 @@ const InstanceVtbl kBottomInstanceFunctions = {
-     .GetPhysicalDeviceFeatures = GetPhysicalDeviceFeaturesBottom,
-     .GetPhysicalDeviceFormatProperties = GetPhysicalDeviceFormatPropertiesBottom,
-     .GetPhysicalDeviceImageFormatProperties = GetPhysicalDeviceImageFormatPropertiesBottom,
--    .GetPhysicalDeviceLimits = GetPhysicalDeviceLimitsBottom,
-     .GetPhysicalDeviceProperties = GetPhysicalDevicePropertiesBottom,
--    .GetPhysicalDeviceQueueCount = GetPhysicalDeviceQueueCountBottom,
--    .GetPhysicalDeviceQueueProperties = GetPhysicalDeviceQueuePropertiesBottom,
-+    .GetPhysicalDeviceQueueFamilyProperties = GetPhysicalDeviceQueueFamilyPropertiesBottom,
-     .GetPhysicalDeviceMemoryProperties = GetPhysicalDeviceMemoryPropertiesBottom,
-     .CreateDevice = CreateDeviceBottom,
--    .GetPhysicalDeviceExtensionProperties = GetPhysicalDeviceExtensionPropertiesBottom,
--    .GetPhysicalDeviceLayerProperties = GetPhysicalDeviceLayerPropertiesBottom,
-+    .EnumerateDeviceExtensionProperties = EnumerateDeviceExtensionPropertiesBottom,
-+    .EnumerateDeviceLayerProperties = EnumerateDeviceLayerPropertiesBottom,
-     .GetPhysicalDeviceSparseImageFormatProperties = GetPhysicalDeviceSparseImageFormatPropertiesBottom,
-     .GetPhysicalDeviceSurfaceSupportKHR = GetPhysicalDeviceSurfaceSupportKHR,
-     // clang-format on
-@@ -701,30 +687,27 @@ PFN_vkVoidFunction GetInstanceProcAddrBottom(VkInstance, const char* name) {
- 
- namespace vulkan {
- 
--VkResult GetGlobalExtensionProperties(const char* /*layer_name*/,
--                                      uint32_t* count,
--                                      VkExtensionProperties* /*properties*/) {
--    if (!count)
--        return VK_ERROR_INVALID_POINTER;
-+VkResult EnumerateInstanceExtensionProperties(
-+    const char* /*layer_name*/,
-+    uint32_t* count,
-+    VkExtensionProperties* /*properties*/) {
-     if (!EnsureInitialized())
--        return VK_ERROR_UNAVAILABLE;
-+        return VK_ERROR_INITIALIZATION_FAILED;
- 
-     // TODO: not yet implemented
--    ALOGW("vkGetGlobalExtensionProperties not implemented");
-+    ALOGW("vkEnumerateInstanceExtensionProperties not implemented");
- 
-     *count = 0;
-     return VK_SUCCESS;
- }
- 
--VkResult GetGlobalLayerProperties(uint32_t* count,
--                                  VkLayerProperties* /*properties*/) {
--    if (!count)
--        return VK_ERROR_INVALID_POINTER;
-+VkResult EnumerateInstanceLayerProperties(uint32_t* count,
-+                                          VkLayerProperties* /*properties*/) {
-     if (!EnsureInitialized())
--        return VK_ERROR_UNAVAILABLE;
-+        return VK_ERROR_INITIALIZATION_FAILED;
- 
-     // TODO: not yet implemented
--    ALOGW("vkGetGlobalLayerProperties not implemented");
-+    ALOGW("vkEnumerateInstanceLayerProperties not implemented");
- 
-     *count = 0;
-     return VK_SUCCESS;
-@@ -735,7 +718,7 @@ VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
-     VkResult result;
- 
-     if (!EnsureInitialized())
--        return VK_ERROR_UNAVAILABLE;
-+        return VK_ERROR_INITIALIZATION_FAILED;
- 
-     VkInstanceCreateInfo local_create_info = *create_info;
-     if (!local_create_info.pAllocCb)
-diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
-index 5933eb2..ef3d1f1 100644
---- a/vulkan/libvulkan/loader.h
-+++ b/vulkan/libvulkan/loader.h
-@@ -43,14 +43,12 @@ struct InstanceVtbl {
-     PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
-     PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
-     PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
--    PFN_vkGetPhysicalDeviceLimits GetPhysicalDeviceLimits;
-     PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
--    PFN_vkGetPhysicalDeviceQueueCount GetPhysicalDeviceQueueCount;
--    PFN_vkGetPhysicalDeviceQueueProperties GetPhysicalDeviceQueueProperties;
-+    PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
-     PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
-     PFN_vkCreateDevice CreateDevice;
--    PFN_vkGetPhysicalDeviceExtensionProperties GetPhysicalDeviceExtensionProperties;
--    PFN_vkGetPhysicalDeviceLayerProperties GetPhysicalDeviceLayerProperties;
-+    PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
-+    PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties;
-     PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
- 
-     // Layers and loader only, not implemented by drivers
-@@ -101,8 +99,6 @@ struct DeviceVtbl {
-     PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
-     PFN_vkCreateImageView CreateImageView;
-     PFN_vkDestroyImageView DestroyImageView;
--    PFN_vkCreateAttachmentView CreateAttachmentView;
--    PFN_vkDestroyAttachmentView DestroyAttachmentView;
-     PFN_vkCreateShaderModule CreateShaderModule;
-     PFN_vkDestroyShaderModule DestroyShaderModule;
-     PFN_vkCreateShader CreateShader;
-@@ -127,14 +123,6 @@ struct DeviceVtbl {
-     PFN_vkAllocDescriptorSets AllocDescriptorSets;
-     PFN_vkFreeDescriptorSets FreeDescriptorSets;
-     PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
--    PFN_vkCreateDynamicViewportState CreateDynamicViewportState;
--    PFN_vkDestroyDynamicViewportState DestroyDynamicViewportState;
--    PFN_vkCreateDynamicRasterState CreateDynamicRasterState;
--    PFN_vkDestroyDynamicRasterState DestroyDynamicRasterState;
--    PFN_vkCreateDynamicColorBlendState CreateDynamicColorBlendState;
--    PFN_vkDestroyDynamicColorBlendState DestroyDynamicColorBlendState;
--    PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState;
--    PFN_vkDestroyDynamicDepthStencilState DestroyDynamicDepthStencilState;
-     PFN_vkCreateFramebuffer CreateFramebuffer;
-     PFN_vkDestroyFramebuffer DestroyFramebuffer;
-     PFN_vkCreateRenderPass CreateRenderPass;
-@@ -158,10 +146,15 @@ struct DeviceVtbl {
-     PFN_vkEndCommandBuffer EndCommandBuffer;
-     PFN_vkResetCommandBuffer ResetCommandBuffer;
-     PFN_vkCmdBindPipeline CmdBindPipeline;
--    PFN_vkCmdBindDynamicViewportState CmdBindDynamicViewportState;
--    PFN_vkCmdBindDynamicRasterState CmdBindDynamicRasterState;
--    PFN_vkCmdBindDynamicColorBlendState CmdBindDynamicColorBlendState;
--    PFN_vkCmdBindDynamicDepthStencilState CmdBindDynamicDepthStencilState;
-+    PFN_vkCmdSetViewport CmdSetViewport;
-+    PFN_vkCmdSetScissor CmdSetScissor;
-+    PFN_vkCmdSetLineWidth CmdSetLineWidth;
-+    PFN_vkCmdSetDepthBias CmdSetDepthBias;
-+    PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
-+    PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
-+    PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
-+    PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
-+    PFN_vkCmdSetStencilReference CmdSetStencilReference;
-     PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
-     PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
-     PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
-@@ -216,11 +209,12 @@ struct DeviceVtbl {
- // -----------------------------------------------------------------------------
- // loader.cpp
- 
--VkResult GetGlobalExtensionProperties(const char* layer_name,
--                                      uint32_t* count,
--                                      VkExtensionProperties* properties);
--VkResult GetGlobalLayerProperties(uint32_t* count,
--                                  VkLayerProperties* properties);
-+VkResult EnumerateInstanceExtensionProperties(
-+    const char* layer_name,
-+    uint32_t* count,
-+    VkExtensionProperties* properties);
-+VkResult EnumerateInstanceLayerProperties(uint32_t* count,
-+                                          VkLayerProperties* properties);
- VkResult CreateInstance(const VkInstanceCreateInfo* create_info,
-                         VkInstance* instance);
- PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name);
-diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
-index af3d585..6320192 100644
---- a/vulkan/libvulkan/swapchain.cpp
-+++ b/vulkan/libvulkan/swapchain.cpp
-@@ -27,6 +27,11 @@
- 
- using namespace vulkan;
- 
-+// TODO(jessehall): Currently we don't have a good error code for when a native
-+// window operation fails. Just returning INITIALIZATION_FAILED for now. Later
-+// versions (post SDK 0.9) of the API/extension have a better error code.
-+// When updating to that version, audit all error returns.
-+
- namespace {
- 
- // ----------------------------------------------------------------------------
-@@ -118,8 +123,11 @@ VkResult GetPhysicalDeviceSurfaceSupportKHR(
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wold-style-cast"
- #pragma clang diagnostic ignored "-Wsign-conversion"
--    if (surface_desc->sType != VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_WINDOW_KHR)
--        return VK_ERROR_INVALID_VALUE;
-+    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
- 
-     const VkSurfaceDescriptionWindowKHR* window_desc =
-@@ -170,7 +178,7 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
-     } 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_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
- 
-     int width, height;
-@@ -180,7 +188,7 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
-               strerror(-err), err);
-         if (disconnect)
-             native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
--        return VK_ERROR_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
-     err = window->query(window, NATIVE_WINDOW_DEFAULT_HEIGHT, &height);
-     if (err != 0) {
-@@ -188,7 +196,7 @@ VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
-               strerror(-err), err);
-         if (disconnect)
-             native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
--        return VK_ERROR_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
- 
-     if (disconnect)
-@@ -311,7 +319,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
-         // errors and translate them to valid Vulkan result codes?
-         ALOGE("native_window_api_connect() failed: %s (%d)", strerror(-err),
-               err);
--        return VK_ERROR_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
- 
-     err = native_window_set_buffers_dimensions(window.get(),
-@@ -324,7 +332,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
-               create_info->imageExtent.width, create_info->imageExtent.height,
-               strerror(-err), err);
-         native_window_api_disconnect(window.get(), NATIVE_WINDOW_API_EGL);
--        return VK_ERROR_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
- 
-     uint32_t min_undequeued_buffers;
-@@ -335,7 +343,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
-         // 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_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
-     uint32_t num_images =
-         (create_info->minImageCount - 1) + min_undequeued_buffers;
-@@ -346,7 +354,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
-         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_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
- 
-     // TODO(jessehall): Do we need to call modify native_window_set_usage()
-@@ -401,7 +409,7 @@ VkResult CreateSwapchainKHR(VkDevice device,
-             // TODO(jessehall): Improve error reporting. Can we enumerate
-             // possible errors and translate them to valid Vulkan result codes?
-             ALOGE("dequeueBuffer[%u] failed: %s (%d)", i, strerror(-err), err);
--            result = VK_ERROR_UNKNOWN;
-+            result = VK_ERROR_INITIALIZATION_FAILED;
-             break;
-         }
-         img.buffer = InitSharedPtr(device, buffer);
-@@ -517,7 +525,7 @@ VkResult AcquireNextImageKHR(VkDevice device,
-         // TODO(jessehall): Improve error reporting. Can we enumerate possible
-         // errors and translate them to valid Vulkan result codes?
-         ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), err);
--        return VK_ERROR_UNKNOWN;
-+        return VK_ERROR_INITIALIZATION_FAILED;
-     }
- 
-     uint32_t idx;
-@@ -582,20 +590,10 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
-         Swapchain& swapchain =
-             *SwapchainFromHandle(present_info->swapchains[sc]);
-         uint32_t image_idx = present_info->imageIndices[sc];
-+        Swapchain::Image& img = swapchain.images[image_idx];
-         VkResult result;
-         int err;
- 
--        if (image_idx >= swapchain.num_images ||
--            !swapchain.images[image_idx].dequeued) {
--            ALOGE(
--                "invalid image index or image not acquired: swapchain=%u "
--                "index=%u",
--                sc, image_idx);
--            final_result = VK_ERROR_INVALID_VALUE;
--            continue;
--        }
--        Swapchain::Image& img = swapchain.images[image_idx];
--
-         int fence = -1;
-         result = driver_vtbl.QueueSignalNativeFenceANDROID(queue, &fence);
-         if (result != VK_SUCCESS) {
-@@ -616,7 +614,7 @@ VkResult QueuePresentKHR(VkQueue queue, VkPresentInfoKHR* present_info) {
-             // I guess?
-             ALOGE("queueBuffer failed: %s (%d)", strerror(-err), err);
-             if (final_result == VK_SUCCESS)
--                final_result = VK_ERROR_UNKNOWN;
-+                final_result = VK_ERROR_INITIALIZATION_FAILED;
-             continue;
-         }
- 
-diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
-index 8f65156..a7b66dd 100644
---- a/vulkan/nulldrv/null_driver.cpp
-+++ b/vulkan/nulldrv/null_driver.cpp
-@@ -66,16 +66,11 @@ namespace {
- // constants but also want implicit conversions to integral types.
- namespace HandleType {
- enum Enum {
--    kAttachmentView,
-     kBufferView,
-     kCmdPool,
-     kDescriptorPool,
-     kDescriptorSet,
-     kDescriptorSetLayout,
--    kDynamicColorBlendState,
--    kDynamicDepthStencilState,
--    kDynamicRasterState,
--    kDynamicViewportState,
-     kEvent,
-     kFence,
-     kFramebuffer,
-@@ -170,7 +165,8 @@ hwvulkan_device_t nulldrv_device = {
-             .module = &HAL_MODULE_INFO_SYM.common,
-             .close = CloseDevice,
-         },
--    .GetGlobalExtensionProperties = GetGlobalExtensionProperties,
-+    .EnumerateInstanceExtensionProperties =
-+        EnumerateInstanceExtensionProperties,
-     .CreateInstance = CreateInstance,
-     .GetInstanceProcAddr = GetInstanceProcAddr};
- 
-@@ -221,9 +217,9 @@ typename T::HandleType GetHandleToObject(const T* obj) {
- // -----------------------------------------------------------------------------
- // Global
- 
--VkResult GetGlobalExtensionProperties(const char*,
--                                      uint32_t* count,
--                                      VkExtensionProperties*) {
-+VkResult EnumerateInstanceExtensionProperties(const char*,
-+                                              uint32_t* count,
-+                                              VkExtensionProperties*) {
-     *count = 0;
-     return VK_SUCCESS;
- }
-@@ -271,8 +267,8 @@ VkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
-                                      VkPhysicalDeviceProperties* properties) {
-     properties->apiVersion = VK_API_VERSION;
-     properties->driverVersion = VK_MAKE_VERSION(0, 0, 1);
--    properties->vendorId = 0xC0DE;
--    properties->deviceId = 0xCAFE;
-+    properties->vendorId = 0;
-+    properties->deviceId = 0;
-     properties->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER;
-     strcpy(properties->deviceName, "Android Vulkan Null Driver");
-     memset(properties->pipelineCacheUUID, 0,
-@@ -280,6 +276,22 @@ VkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
-     return VK_SUCCESS;
- }
- 
-+VkResult 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->supportsTimestamps = VK_FALSE;
-+    }
-+    *count = 1;
-+    return VK_SUCCESS;
-+}
-+
- VkResult GetPhysicalDeviceMemoryProperties(
-     VkPhysicalDevice,
-     VkPhysicalDeviceMemoryProperties* properties) {
-@@ -289,7 +301,7 @@ VkResult GetPhysicalDeviceMemoryProperties(
-     properties->memoryTypes[0].heapIndex = 0;
-     properties->memoryHeapCount = 1;
-     properties->memoryHeaps[0].size = kMaxDeviceMemory;
--    properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL;
-+    properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL_BIT;
-     return VK_SUCCESS;
- }
- 
-@@ -470,7 +482,7 @@ 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_ERROR_UNAVAILABLE;
-+        return VK_UNSUPPORTED;
-     }
- 
-     VkDeviceSize size =
-@@ -512,13 +524,6 @@ VkResult DestroyImage(VkDevice device, VkImage image_handle) {
- // -----------------------------------------------------------------------------
- // No-op types
- 
--VkResult CreateAttachmentView(VkDevice device,
--                              const VkAttachmentViewCreateInfo*,
--                              VkAttachmentView* view) {
--    *view = AllocHandle(device, HandleType::kAttachmentView);
--    return VK_SUCCESS;
--}
--
- VkResult CreateBufferView(VkDevice device,
-                           const VkBufferViewCreateInfo*,
-                           VkBufferView* view) {
-@@ -534,8 +539,6 @@ VkResult CreateCommandPool(VkDevice device,
- }
- 
- VkResult CreateDescriptorPool(VkDevice device,
--                              VkDescriptorPoolUsage,
--                              uint32_t,
-                               const VkDescriptorPoolCreateInfo*,
-                               VkDescriptorPool* pool) {
-     *pool = AllocHandle(device, HandleType::kDescriptorPool);
-@@ -562,35 +565,6 @@ VkResult CreateDescriptorSetLayout(VkDevice device,
-     return VK_SUCCESS;
- }
- 
--VkResult CreateDynamicColorBlendState(VkDevice device,
--                                      const VkDynamicColorBlendStateCreateInfo*,
--                                      VkDynamicColorBlendState* state) {
--    *state = AllocHandle(device, HandleType::kDynamicColorBlendState);
--    return VK_SUCCESS;
--}
--
--VkResult CreateDynamicDepthStencilState(
--    VkDevice device,
--    const VkDynamicDepthStencilStateCreateInfo*,
--    VkDynamicDepthStencilState* state) {
--    *state = AllocHandle(device, HandleType::kDynamicDepthStencilState);
--    return VK_SUCCESS;
--}
--
--VkResult CreateDynamicRasterState(VkDevice device,
--                                  const VkDynamicRasterStateCreateInfo*,
--                                  VkDynamicRasterState* state) {
--    *state = AllocHandle(device, HandleType::kDynamicRasterState);
--    return VK_SUCCESS;
--}
--
--VkResult CreateDynamicViewportState(VkDevice device,
--                                    const VkDynamicViewportStateCreateInfo*,
--                                    VkDynamicViewportState* state) {
--    *state = AllocHandle(device, HandleType::kDynamicViewportState);
--    return VK_SUCCESS;
--}
--
- VkResult CreateEvent(VkDevice device,
-                      const VkEventCreateInfo*,
-                      VkEvent* event) {
-@@ -712,16 +686,6 @@ VkResult QueueSignalNativeFenceANDROID(VkQueue, int* fence) {
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wunused-parameter"
- 
--VkResult GetPhysicalDeviceQueueCount(VkPhysicalDevice physicalDevice, uint32_t* pCount) {
--    ALOGV("TODO: vk%s", __FUNCTION__);
--    return VK_SUCCESS;
--}
--
--VkResult GetPhysicalDeviceQueueProperties(VkPhysicalDevice physicalDevice, uint32_t count, VkPhysicalDeviceQueueProperties* pQueueProperties) {
--    ALOGV("TODO: vk%s", __FUNCTION__);
--    return VK_SUCCESS;
--}
--
- VkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
-     ALOGV("TODO: vk%s", __FUNCTION__);
-     return VK_SUCCESS;
-@@ -742,17 +706,17 @@ VkResult GetPhysicalDeviceLimits(VkPhysicalDevice physicalDevice, VkPhysicalDevi
-     return VK_SUCCESS;
- }
- 
--VkResult GetGlobalLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
-+VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
-     ALOGV("TODO: vk%s", __FUNCTION__);
-     return VK_SUCCESS;
- }
- 
--VkResult GetPhysicalDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
-+VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
-     ALOGV("TODO: vk%s", __FUNCTION__);
-     return VK_SUCCESS;
- }
- 
--VkResult GetPhysicalDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
-+VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
-     ALOGV("TODO: vk%s", __FUNCTION__);
-     return VK_SUCCESS;
- }
-@@ -894,10 +858,6 @@ VkResult DestroyImageView(VkDevice device, VkImageView imageView) {
-     return VK_SUCCESS;
- }
- 
--VkResult DestroyAttachmentView(VkDevice device, VkAttachmentView attachmentView) {
--    return VK_SUCCESS;
--}
--
- VkResult DestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
-     return VK_SUCCESS;
- }
-@@ -960,22 +920,6 @@ VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, ui
-     return VK_SUCCESS;
- }
- 
--VkResult DestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState) {
--    return VK_SUCCESS;
--}
--
--VkResult DestroyDynamicRasterState(VkDevice device, VkDynamicRasterState dynamicRasterState) {
--    return VK_SUCCESS;
--}
--
--VkResult DestroyDynamicColorBlendState(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState) {
--    return VK_SUCCESS;
--}
--
--VkResult DestroyDynamicDepthStencilState(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState) {
--    return VK_SUCCESS;
--}
--
- VkResult DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
-     return VK_SUCCESS;
- }
-@@ -1014,16 +958,31 @@ VkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags)
- void CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
- }
- 
--void CmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState) {
-+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 CmdBindDynamicRasterState(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState) {
-+void CmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
- }
- 
--void CmdBindDynamicColorBlendState(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState) {
-+void CmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
- }
- 
--void CmdBindDynamicDepthStencilState(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState) {
-+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) {
-@@ -1077,13 +1036,13 @@ void CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize dest
- 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, float depth, uint32_t stencil, 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 imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects) {
-+void CmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, 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 6bfbda5..9c26f0e 100644
---- a/vulkan/nulldrv/null_driver.h
-+++ b/vulkan/nulldrv/null_driver.h
-@@ -31,8 +31,7 @@ VkResult DestroyInstance(VkInstance instance);
- VkResult EnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
- PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
- VkResult GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
--VkResult GetPhysicalDeviceQueueCount(VkPhysicalDevice physicalDevice, uint32_t* pCount);
--VkResult GetPhysicalDeviceQueueProperties(VkPhysicalDevice physicalDevice, uint32_t count, VkPhysicalDeviceQueueProperties* pQueueProperties);
-+VkResult GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties);
- VkResult GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
- PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
- VkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
-@@ -41,10 +40,10 @@ VkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice,
- VkResult GetPhysicalDeviceLimits(VkPhysicalDevice physicalDevice, VkPhysicalDeviceLimits* pLimits);
- VkResult CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
- VkResult DestroyDevice(VkDevice device);
--VkResult GetGlobalExtensionProperties(const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
--VkResult GetGlobalLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties);
--VkResult GetPhysicalDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties);
--VkResult GetPhysicalDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
-+VkResult EnumerateInstanceExtensionProperties(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 EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties);
- VkResult 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);
-@@ -91,8 +90,6 @@ VkResult DestroyImage(VkDevice device, VkImage image);
- VkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
- VkResult CreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView);
- VkResult DestroyImageView(VkDevice device, VkImageView imageView);
--VkResult CreateAttachmentView(VkDevice device, const VkAttachmentViewCreateInfo* pCreateInfo, VkAttachmentView* pView);
--VkResult DestroyAttachmentView(VkDevice device, VkAttachmentView attachmentView);
- VkResult CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, VkShaderModule* pShaderModule);
- VkResult DestroyShaderModule(VkDevice device, VkShaderModule shaderModule);
- VkResult CreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader);
-@@ -111,20 +108,12 @@ VkResult CreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo,
- VkResult DestroySampler(VkDevice device, VkSampler sampler);
- VkResult CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout);
- VkResult DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout);
--VkResult CreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
-+VkResult CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool);
- VkResult 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, uint32_t* pCount);
- VkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets);
- VkResult UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies);
--VkResult CreateDynamicViewportState(VkDevice device, const VkDynamicViewportStateCreateInfo* pCreateInfo, VkDynamicViewportState* pState);
--VkResult DestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState);
--VkResult CreateDynamicRasterState(VkDevice device, const VkDynamicRasterStateCreateInfo* pCreateInfo, VkDynamicRasterState* pState);
--VkResult DestroyDynamicRasterState(VkDevice device, VkDynamicRasterState dynamicRasterState);
--VkResult CreateDynamicColorBlendState(VkDevice device, const VkDynamicColorBlendStateCreateInfo* pCreateInfo, VkDynamicColorBlendState* pState);
--VkResult DestroyDynamicColorBlendState(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState);
--VkResult CreateDynamicDepthStencilState(VkDevice device, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, VkDynamicDepthStencilState* pState);
--VkResult DestroyDynamicDepthStencilState(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState);
- VkResult CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer);
- VkResult DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer);
- VkResult CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
-@@ -139,10 +128,15 @@ VkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* p
- VkResult EndCommandBuffer(VkCmdBuffer cmdBuffer);
- VkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags);
- void CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
--void CmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState);
--void CmdBindDynamicRasterState(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState);
--void CmdBindDynamicColorBlendState(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState);
--void CmdBindDynamicDepthStencilState(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState);
-+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);
-@@ -160,9 +154,9 @@ void CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout
- 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, float depth, uint32_t stencil, 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 imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects);
-+void CmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags aspectMask, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, 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 56ee49a..879ad32 100644
---- a/vulkan/nulldrv/null_driver_gen.cpp
-+++ b/vulkan/nulldrv/null_driver_gen.cpp
-@@ -46,18 +46,16 @@ const NameProcEntry kInstanceProcTbl[] = {
-     // clang-format off
-     {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(CreateDevice)},
-     {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(DestroyInstance)},
-+    {"vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceExtensionProperties)},
-+    {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceLayerProperties)},
-     {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDevices)},
-     {"vkGetInstanceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(GetInstanceProcAddr)},
--    {"vkGetPhysicalDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceExtensionProperties)},
-     {"vkGetPhysicalDeviceFeatures", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFeatures)},
-     {"vkGetPhysicalDeviceFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFormatProperties)},
-     {"vkGetPhysicalDeviceImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceImageFormatProperties)},
--    {"vkGetPhysicalDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceLayerProperties)},
--    {"vkGetPhysicalDeviceLimits", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceLimits)},
-     {"vkGetPhysicalDeviceMemoryProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMemoryProperties)},
-     {"vkGetPhysicalDeviceProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceProperties)},
--    {"vkGetPhysicalDeviceQueueCount", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueCount)},
--    {"vkGetPhysicalDeviceQueueProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueProperties)},
-+    {"vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueFamilyProperties)},
-     {"vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSparseImageFormatProperties)},
-     // clang-format on
- };
-@@ -72,10 +70,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(CmdBeginQuery)},
-     {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(CmdBeginRenderPass)},
-     {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(CmdBindDescriptorSets)},
--    {"vkCmdBindDynamicColorBlendState", reinterpret_cast<PFN_vkVoidFunction>(CmdBindDynamicColorBlendState)},
--    {"vkCmdBindDynamicDepthStencilState", reinterpret_cast<PFN_vkVoidFunction>(CmdBindDynamicDepthStencilState)},
--    {"vkCmdBindDynamicRasterState", reinterpret_cast<PFN_vkVoidFunction>(CmdBindDynamicRasterState)},
--    {"vkCmdBindDynamicViewportState", reinterpret_cast<PFN_vkVoidFunction>(CmdBindDynamicViewportState)},
-     {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdBindIndexBuffer)},
-     {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(CmdBindPipeline)},
-     {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(CmdBindVertexBuffers)},
-@@ -105,11 +99,19 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(CmdResetEvent)},
-     {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(CmdResetQueryPool)},
-     {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(CmdResolveImage)},
-+    {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(CmdSetBlendConstants)},
-+    {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(CmdSetDepthBias)},
-+    {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(CmdSetDepthBounds)},
-     {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(CmdSetEvent)},
-+    {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(CmdSetLineWidth)},
-+    {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(CmdSetScissor)},
-+    {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(CmdSetStencilCompareMask)},
-+    {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(CmdSetStencilReference)},
-+    {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(CmdSetStencilWriteMask)},
-+    {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(CmdSetViewport)},
-     {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdUpdateBuffer)},
-     {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(CmdWaitEvents)},
-     {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(CmdWriteTimestamp)},
--    {"vkCreateAttachmentView", reinterpret_cast<PFN_vkVoidFunction>(CreateAttachmentView)},
-     {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(CreateBuffer)},
-     {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(CreateBufferView)},
-     {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(CreateCommandBuffer)},
-@@ -117,10 +119,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(CreateComputePipelines)},
-     {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(CreateDescriptorPool)},
-     {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(CreateDescriptorSetLayout)},
--    {"vkCreateDynamicColorBlendState", reinterpret_cast<PFN_vkVoidFunction>(CreateDynamicColorBlendState)},
--    {"vkCreateDynamicDepthStencilState", reinterpret_cast<PFN_vkVoidFunction>(CreateDynamicDepthStencilState)},
--    {"vkCreateDynamicRasterState", reinterpret_cast<PFN_vkVoidFunction>(CreateDynamicRasterState)},
--    {"vkCreateDynamicViewportState", reinterpret_cast<PFN_vkVoidFunction>(CreateDynamicViewportState)},
-     {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(CreateEvent)},
-     {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(CreateFence)},
-     {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(CreateFramebuffer)},
-@@ -135,7 +133,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(CreateSemaphore)},
-     {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(CreateShader)},
-     {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(CreateShaderModule)},
--    {"vkDestroyAttachmentView", reinterpret_cast<PFN_vkVoidFunction>(DestroyAttachmentView)},
-     {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(DestroyBuffer)},
-     {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(DestroyBufferView)},
-     {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(DestroyCommandBuffer)},
-@@ -143,10 +140,6 @@ const NameProcEntry kDeviceProcTbl[] = {
-     {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(DestroyDescriptorPool)},
-     {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(DestroyDescriptorSetLayout)},
-     {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(DestroyDevice)},
--    {"vkDestroyDynamicColorBlendState", reinterpret_cast<PFN_vkVoidFunction>(DestroyDynamicColorBlendState)},
--    {"vkDestroyDynamicDepthStencilState", reinterpret_cast<PFN_vkVoidFunction>(DestroyDynamicDepthStencilState)},
--    {"vkDestroyDynamicRasterState", reinterpret_cast<PFN_vkVoidFunction>(DestroyDynamicRasterState)},
--    {"vkDestroyDynamicViewportState", reinterpret_cast<PFN_vkVoidFunction>(DestroyDynamicViewportState)},
-     {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(DestroyEvent)},
-     {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(DestroyFence)},
-     {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(DestroyFramebuffer)},
-diff --git a/vulkan/tools/Android.mk b/vulkan/tools/Android.mk
-index 9ea5f14..31d6089 100644
---- a/vulkan/tools/Android.mk
-+++ b/vulkan/tools/Android.mk
-@@ -17,6 +17,7 @@ include $(CLEAR_VARS)
- 
- LOCAL_CLANG := true
- LOCAL_CFLAGS := -std=c99 -fvisibility=hidden -fstrict-aliasing
-+LOCAL_CFLAGS += -DLOG_TAG=\"vkinfo\"
- LOCAL_CFLAGS += -Weverything -Werror -Wno-padded -Wno-undef -Wno-switch-enum
- LOCAL_CPPFLAGS := -std=c++1y \
- 	-Wno-c++98-compat-pedantic \
-diff --git a/vulkan/tools/vkinfo.cpp b/vulkan/tools/vkinfo.cpp
-index e1eb129..583e607 100644
---- a/vulkan/tools/vkinfo.cpp
-+++ b/vulkan/tools/vkinfo.cpp
-@@ -38,38 +38,14 @@ namespace {
-         case VK_EVENT_SET: result_str = "VK_EVENT_SET"; break;
-         case VK_EVENT_RESET: result_str = "VK_EVENT_RESET"; break;
-         case VK_INCOMPLETE: result_str = "VK_INCOMPLETE"; break;
--        case VK_ERROR_UNKNOWN: result_str = "VK_ERROR_UNKNOWN"; break;
--        case VK_ERROR_UNAVAILABLE: result_str = "VK_ERROR_UNAVAILABLE"; break;
--        case VK_ERROR_INITIALIZATION_FAILED: result_str = "VK_ERROR_INITIALIZATION_FAILED"; break;
-         case VK_ERROR_OUT_OF_HOST_MEMORY: result_str = "VK_ERROR_OUT_OF_HOST_MEMORY"; break;
-         case VK_ERROR_OUT_OF_DEVICE_MEMORY: result_str = "VK_ERROR_OUT_OF_DEVICE_MEMORY"; break;
--        case VK_ERROR_DEVICE_ALREADY_CREATED: result_str = "VK_ERROR_DEVICE_ALREADY_CREATED"; break;
-+        case VK_ERROR_INITIALIZATION_FAILED: result_str = "VK_ERROR_INITIALIZATION_FAILED"; break;
-         case VK_ERROR_DEVICE_LOST: result_str = "VK_ERROR_DEVICE_LOST"; break;
--        case VK_ERROR_INVALID_POINTER: result_str = "VK_ERROR_INVALID_POINTER"; break;
--        case VK_ERROR_INVALID_VALUE: result_str = "VK_ERROR_INVALID_VALUE"; break;
--        case VK_ERROR_INVALID_HANDLE: result_str = "VK_ERROR_INVALID_HANDLE"; break;
--        case VK_ERROR_INVALID_ORDINAL: result_str = "VK_ERROR_INVALID_ORDINAL"; break;
--        case VK_ERROR_INVALID_MEMORY_SIZE: result_str = "VK_ERROR_INVALID_MEMORY_SIZE"; break;
--        case VK_ERROR_INVALID_EXTENSION: result_str = "VK_ERROR_INVALID_EXTENSION"; break;
--        case VK_ERROR_INVALID_FLAGS: result_str = "VK_ERROR_INVALID_FLAGS"; break;
--        case VK_ERROR_INVALID_ALIGNMENT: result_str = "VK_ERROR_INVALID_ALIGNMENT"; break;
--        case VK_ERROR_INVALID_FORMAT: result_str = "VK_ERROR_INVALID_FORMAT"; break;
--        case VK_ERROR_INVALID_IMAGE: result_str = "VK_ERROR_INVALID_IMAGE"; break;
--        case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA: result_str = "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA"; break;
--        case VK_ERROR_INVALID_QUEUE_TYPE: result_str = "VK_ERROR_INVALID_QUEUE_TYPE"; break;
--        case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION: result_str = "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION"; break;
--        case VK_ERROR_BAD_SHADER_CODE: result_str = "VK_ERROR_BAD_SHADER_CODE"; break;
--        case VK_ERROR_BAD_PIPELINE_DATA: result_str = "VK_ERROR_BAD_PIPELINE_DATA"; break;
--        case VK_ERROR_NOT_MAPPABLE: result_str = "VK_ERROR_NOT_MAPPABLE"; break;
-         case VK_ERROR_MEMORY_MAP_FAILED: result_str = "VK_ERROR_MEMORY_MAP_FAILED"; break;
--        case VK_ERROR_MEMORY_UNMAP_FAILED: result_str = "VK_ERROR_MEMORY_UNMAP_FAILED"; break;
--        case VK_ERROR_INCOMPATIBLE_DEVICE: result_str = "VK_ERROR_INCOMPATIBLE_DEVICE"; break;
-+        case VK_ERROR_LAYER_NOT_PRESENT: result_str = "VK_ERROR_LAYER_NOT_PRESENT"; break;
-+        case VK_ERROR_EXTENSION_NOT_PRESENT: result_str = "VK_ERROR_EXTENSION_NOT_PRESENT"; break;
-         case VK_ERROR_INCOMPATIBLE_DRIVER: result_str = "VK_ERROR_INCOMPATIBLE_DRIVER"; break;
--        case VK_ERROR_INCOMPLETE_COMMAND_BUFFER: result_str = "VK_ERROR_INCOMPLETE_COMMAND_BUFFER"; break;
--        case VK_ERROR_BUILDING_COMMAND_BUFFER: result_str = "VK_ERROR_BUILDING_COMMAND_BUFFER"; break;
--        case VK_ERROR_MEMORY_NOT_BOUND: result_str = "VK_ERROR_MEMORY_NOT_BOUND"; break;
--        case VK_ERROR_INCOMPATIBLE_QUEUE: result_str = "VK_ERROR_INCOMPATIBLE_QUEUE"; break;
--        case VK_ERROR_INVALID_LAYER: result_str = "VK_ERROR_INVALID_LAYER"; break;
-         default: result_str = "<unknown VkResult>"; break;
-             // clang-format on
-     }
-@@ -94,6 +70,21 @@ const char* VkPhysicalDeviceTypeStr(VkPhysicalDeviceType type) {
-     }
- }
- 
-+const char* VkQueueFlagBitStr(VkQueueFlagBits bit) {
-+    switch (bit) {
-+        case VK_QUEUE_GRAPHICS_BIT:
-+            return "GRAPHICS";
-+        case VK_QUEUE_COMPUTE_BIT:
-+            return "COMPUTE";
-+        case VK_QUEUE_DMA_BIT:
-+            return "DMA";
-+        case VK_QUEUE_SPARSE_MEMMGR_BIT:
-+            return "SPARSE";
-+        case VK_QUEUE_EXTENDED_BIT:
-+            return "EXT";
-+    }
-+}
-+
- void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
-     VkResult result;
-     std::ostringstream strbuf;
-@@ -113,8 +104,8 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
-     if (result != VK_SUCCESS)
-         die("vkGetPhysicalDeviceMemoryProperties", result);
-     for (uint32_t heap = 0; heap < mem_props.memoryHeapCount; heap++) {
--        if ((mem_props.memoryHeaps[heap].flags & VK_MEMORY_HEAP_HOST_LOCAL) !=
--            0)
-+        if ((mem_props.memoryHeaps[heap].flags &
-+             VK_MEMORY_HEAP_HOST_LOCAL_BIT) != 0)
-             strbuf << "HOST_LOCAL";
-         printf("     Heap %u: 0x%" PRIx64 " %s\n", heap,
-                mem_props.memoryHeaps[heap].size, strbuf.str().c_str());
-@@ -137,10 +128,37 @@ void DumpPhysicalDevice(uint32_t idx, VkPhysicalDevice pdev) {
-                 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());
-+            printf("       Type %u: %s\n", type, strbuf.str().c_str());
-             strbuf.str(std::string());
-         }
-     }
-+
-+    uint32_t num_queue_families;
-+    result = vkGetPhysicalDeviceQueueFamilyProperties(pdev, &num_queue_families,
-+                                                      nullptr);
-+    if (result != VK_SUCCESS)
-+        die("vkGetPhysicalDeviceQueueFamilyProperties (count)", result);
-+    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);
-+    for (uint32_t family = 0; family < num_queue_families; family++) {
-+        const VkQueueFamilyProperties& qprops = queue_family_properties[family];
-+        const char* sep = "";
-+        int bit, queue_flags = static_cast<int>(qprops.queueFlags);
-+        while ((bit = __builtin_ffs(queue_flags)) != 0) {
-+            VkQueueFlagBits flag = VkQueueFlagBits(1 << (bit - 1));
-+            strbuf << sep << VkQueueFlagBitStr(flag);
-+            queue_flags &= ~flag;
-+            sep = "+";
-+        }
-+        printf("     Queue Family %u: %2ux %s timestamps:%s\n", family,
-+               qprops.queueCount, strbuf.str().c_str(),
-+               qprops.supportsTimestamps ? "YES" : "NO");
-+        strbuf.str(std::string());
-+    }
- }
- 
- }  // namespace
-@@ -184,9 +202,7 @@ int main(int /*argc*/, char const* /*argv*/ []) {
-     for (uint32_t i = 0; i < physical_devices.size(); i++)
-         DumpPhysicalDevice(i, physical_devices[i]);
- 
--    result = vkDestroyInstance(instance);
--    if (result != VK_SUCCESS)
--        die("vkDestroyInstance", result);
-+    vkDestroyInstance(instance);
- 
-     return 0;
- }
--- 
-2.6.0.rc2.230.g3dd15c0
-