vulkan: Update from version 0.189.0 to 0.190.0

Change-Id: I0ac3f2797b65ef49cca90e76a47f1e6ca3a341a3
(cherry picked from commit 888efcf06fdbfa02587ffbfaa8fe6ca8e1b6e58a)
diff --git a/vulkan/api/platform.api b/vulkan/api/platform.api
index 889ac2c..980722d 100644
--- a/vulkan/api/platform.api
+++ b/vulkan/api/platform.api
@@ -23,13 +23,15 @@
 
 type u64 size_t
 
-// VK_USE_PLATFORM_X11_KHR
+// VK_USE_PLATFORM_XLIB_KHR
 @internal class Display {}
 @internal class Window {}
+@internal type u64 VisualID
 
 // VK_USE_PLATFORM_XCB_KHR
 @internal class xcb_connection_t {}
 @internal type u32 xcb_window_t
+@internal type u32 xcb_visualid_t
 
 // VK_USE_PLATFORM_WAYLAND_KHR
 @internal class wl_display {}
diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
index 5d0a7f8..0c6a3cc 100644
--- a/vulkan/api/vulkan.api
+++ b/vulkan/api/vulkan.api
@@ -27,7 +27,7 @@
 
 // API version (major.minor.patch)
 define VERSION_MAJOR 0
-define VERSION_MINOR 189
+define VERSION_MINOR 190
 define VERSION_PATCH 0
 
 // API limits
@@ -45,35 +45,35 @@
 // API keyword, but needs special handling by some templates
 define NULL_HANDLE 0
 
-@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION                     19
+@extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_REVISION                     20
 @extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER             1
 @extension("VK_EXT_KHR_surface") define VK_EXT_KHR_SURFACE_EXTENSION_NAME               "VK_EXT_KHR_surface"
 
-@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION                 59
+@extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_REVISION                 62
 @extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER         2
 @extension("VK_EXT_KHR_swapchain") define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME           "VK_EXT_KHR_swapchain"
 
-@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION                     16
+@extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_REVISION                     17
 @extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER             3
 @extension("VK_EXT_KHR_display") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME               "VK_EXT_KHR_display"
 
-@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION           14
+@extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_REVISION           6
 @extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER   4
 @extension("VK_EXT_KHR_display_swapchain") define VK_EXT_KHR_DISPLAY_EXTENSION_NAME     "VK_EXT_KHR_display_swapchain"
 
-@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_REVISION             1
-@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NUMBER               4
-@extension("VK_EXT_KHR_x11_surface") define VK_EXT_KHR_X11_SURFACE_NAME                 "VK_EXT_KHR_x11_surface"
+@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_REVISION           3
+@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_NUMBER             5
+@extension("VK_EXT_KHR_xlib_surface") define VK_EXT_KHR_XLIB_SURFACE_NAME               "VK_EXT_KHR_xlib_surface"
 
-@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION             1
+@extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_REVISION             3
 @extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NUMBER               6
 @extension("VK_EXT_KHR_xcb_surface") define VK_EXT_KHR_XCB_SURFACE_NAME                 "VK_EXT_KHR_xcb_surface"
 
-@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION     1
+@extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_REVISION     2
 @extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NUMBER       7
 @extension("VK_EXT_KHR_wayland_surface") define VK_EXT_KHR_WAYLAND_SURFACE_NAME         "VK_EXT_KHR_wayland_surface"
 
-@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION             1
+@extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_REVISION             2
 @extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NUMBER               8
 @extension("VK_EXT_KHR_mir_surface") define VK_EXT_KHR_MIR_SURFACE_NAME                 "VK_EXT_KHR_mir_surface"
 
@@ -81,7 +81,7 @@
 @extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NUMBER       8
 @extension("VK_EXT_KHR_android_surface") define VK_EXT_KHR_ANDROID_SURFACE_NAME         "VK_EXT_KHR_android_surface"
 
-@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION         1
+@extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_REVISION         2
 @extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NUMBER           9
 @extension("VK_EXT_KHR_win32_surface") define VK_EXT_KHR_WIN32_SURFACE_NAME             "VK_EXT_KHR_win32_surface"
 
@@ -620,13 +620,14 @@
     VK_STRUCTURE_TYPE_SUBMIT_INFO                               = 48,
     VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO                = 49,
     VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO                  = 50,
+    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO                          = 51,
 
     //@extension("VK_EXT_KHR_swapchain")
     VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR                 = 0xc0000801,
 
     //@extension("VK_EXT_KHR_display")
     VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR              = 0xc0000c00,
-    VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLAN_KHR      = 0xc0000c01,
+    VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR           = 0xc0000c01,
 
     //@extension("VK_EXT_KHR_display_swapchain")
     VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR         = 0xc0001000,
@@ -663,6 +664,9 @@
     VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
     VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
 
+    //@extension("VK_EXT_KHR_surface")
+    VK_ERROR_SURFACE_LOST_KHR                               = 0xC0000400,
+
     //@extension("VK_EXT_KHR_swapchain")
     VK_ERROR_OUT_OF_DATE_KHR                                = 0xC0000804,
 
@@ -810,8 +814,8 @@
 
 /// Descriptor pool reset flags
 type VkFlags VkDescriptorPoolResetFlags
-bitfield VkDescriptorPoolResetFlagBits {
-}
+//bitfield VkDescriptorPoolResetFlagBits {
+//}
 
 /// Image usage flags
 type VkFlags VkImageUsageFlags
@@ -868,8 +872,8 @@
 
 /// Semaphore creation flags
 type VkFlags VkSemaphoreCreateFlags
-bitfield VkSemaphoreCreateFlagBits {
-}
+//bitfield VkSemaphoreCreateFlagBits {
+//}
 
 /// Format capability flags
 type VkFlags VkFormatFeatureFlags
@@ -906,18 +910,18 @@
 
 /// Shader module creation flags
 type VkFlags VkShaderModuleCreateFlags
-bitfield VkShaderModuleCreateFlagBits {
-}
+//bitfield VkShaderModuleCreateFlagBits {
+//}
 
 /// Shader creation flags
 type VkFlags VkShaderCreateFlags
-bitfield VkShaderCreateFlagBits {
-}
+//bitfield VkShaderCreateFlagBits {
+//}
 
 /// Event creation flags
 type VkFlags VkEventCreateFlags
-bitfield VkEventCreateFlagBits {
-}
+//bitfield VkEventCreateFlagBits {
+//}
 
 /// Command buffer usage flags
 type VkFlags VkCmdBufferUsageFlags
@@ -945,8 +949,8 @@
 
 /// Memory mapping flags
 type VkFlags VkMemoryMapFlags
-bitfield VkMemoryMapFlagBits {
-}
+//bitfield VkMemoryMapFlagBits {
+//}
 
 /// Bitfield of image aspects
 type VkFlags VkImageAspectFlags
@@ -1040,6 +1044,111 @@
     VK_STENCIL_FACE_BACK_BIT                                = 0x00000002,   /// Back face
 }
 
+/// Instance creation flags
+type VkFlags VkInstanceCreateFlags
+//bitfield VkInstanceCreateFlagBits {
+//}
+
+/// Device creation flags
+type VkFlags VkDeviceCreateFlags
+//bitfield VkDeviceCreateFlagBits {
+//}
+
+/// Device queue creation flags
+type VkFlags VkDeviceQueueCreateFlags
+//bitfield VkDeviceQueueCreateFlagBits {
+//}
+
+/// Query pool creation flags
+type VkFlags VkQueryPoolCreateFlags
+//bitfield VkQueryPoolCreateFlagBits {
+//}
+
+/// Buffer view creation flags
+type VkFlags VkBufferViewCreateFlags
+//bitfield VkBufferViewCreateFlagBits {
+//}
+
+/// Pipeline cache creation flags
+type VkFlags VkPipelineCacheCreateFlags
+//bitfield VkPipelineCacheCreateFlagBits {
+//}
+
+/// Pipeline shader stage creation flags
+type VkFlags VkPipelineShaderStageCreateFlags
+//bitfield VkPipelineShaderStageCreateFlagBits {
+//}
+
+/// Descriptor set layout creation flags
+type VkFlags VkDescriptorSetLayoutCreateFlags
+//bitfield VkDescriptorSetLayoutCreateFlagBits {
+//}
+
+/// Pipeline vertex input state creation flags
+type VkFlags VkPipelineVertexInputStateCreateFlags
+//bitfield VkPipelineVertexInputStateCreateFlagBits {
+//}
+
+/// Pipeline input assembly state creation flags
+type VkFlags VkPipelineInputAssemblyStateCreateFlags
+//bitfield VkPipelineInputAssemblyStateCreateFlagBits {
+//}
+
+/// Tessellation state creation flags
+type VkFlags VkPipelineTessellationStateCreateFlags
+//bitfield VkPipelineTessellationStateCreateFlagBits {
+//}
+
+/// Viewport state creation flags
+type VkFlags VkPipelineViewportStateCreateFlags
+//bitfield VkPipelineViewportStateCreateFlagBits {
+//}
+
+/// Raster state creation flags
+type VkFlags VkPipelineRasterStateCreateFlags
+//bitfield VkPipelineRasterStateCreateFlagBits {
+//}
+
+/// Multisample state creation flags
+type VkFlags VkPipelineMultisampleStateCreateFlags
+//bitfield VkPipelineMultisampleStateCreateFlagBits {
+//}
+
+/// Color blend state creation flags
+type VkFlags VkPipelineColorBlendStateCreateFlags
+//bitfield VkPipelineColorBlendStateCreateFlagBits {
+//}
+
+/// Depth/stencil state creation flags
+type VkFlags VkPipelineDepthStencilStateCreateFlags
+//bitfield VkPipelineDepthStencilStateCreateFlagBits {
+//}
+
+/// Dynamic state creation flags
+type VkFlags VkPipelineDynamicStateCreateFlags
+//bitfield VkPipelineDynamicStateCreateFlagBits {
+//}
+
+/// Pipeline layout creation flags
+type VkFlags VkPipelineLayoutCreateFlags
+//bitfield VkPipelineLayoutCreateFlagBits {
+//}
+
+/// Sampler creation flags
+type VkFlags VkSamplerCreateFlags
+//bitfield VkSamplerCreateFlagBits {
+//}
+
+/// Render pass creation flags
+type VkFlags VkRenderPassCreateFlags
+//bitfield VkRenderPassCreateFlagBits {
+//}
+
+/// Framebuffer creation flags
+type VkFlags VkFramebufferCreateFlags
+//bitfield VkFramebufferCreateFlagBits {
+//}
+
 @extension("VK_EXT_KHR_swapchain")
 type VkFlags VkSurfaceTransformFlagsKHR
 @extension("VK_EXT_KHR_swapchain")
@@ -1055,6 +1164,16 @@
     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR                    = 0x00000100,
 }
 
+@extension("VK_EXT_KHR_swapchain")
+type VkFlags VkCompositeAlphaFlagsKHR
+@extension("VK_EXT_KHR_swapchain")
+bitfield VkCompositeAlphaFlagBitsKHR {
+    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR                       = 0x00000001,
+    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR               = 0x00000002,
+    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR              = 0x00000004,
+    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR                      = 0x00000008,
+}
+
 @extension("VK_EXT_KHR_display")
 type VkFlags VkDisplayPlaneAlphaFlagsKHR
 @extension("VK_EXT_KHR_display")
@@ -1175,6 +1294,7 @@
 class VkDeviceQueueCreateInfo {
     VkStructureType                             sStype                    /// Should be VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
     const void*                                 pNext                     /// Pointer to next structure
+    VkDeviceQueueCreateFlags                    flags
     u32                                         queueFamilyIndex
     u32                                         queuePriorityCount
     const f32*                                  pQueuePriorities
@@ -1183,6 +1303,7 @@
 class VkDeviceCreateInfo {
     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
     const void*                                 pNext                      /// Pointer to next structure
+    VkDeviceCreateFlags                         flags
     u32                                         requestedQueueRecordCount
     const VkDeviceQueueCreateInfo*              pRequestedQueues
     u32                                         enabledLayerNameCount
@@ -1195,6 +1316,7 @@
 class VkInstanceCreateInfo {
     VkStructureType                             sType                      /// Should be VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
     const void*                                 pNext                      /// Pointer to next structure
+    VkInstanceCreateFlags                       flags
     const VkApplicationInfo*                    pAppInfo
     u32                                         enabledLayerNameCount
     const char* const*                          ppEnabledLayerNames        /// Ordered list of layer names to be enabled
@@ -1314,9 +1436,9 @@
 class VkBufferCreateInfo {
     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
     const void*                                 pNext                      /// Pointer to next structure.
+    VkBufferCreateFlags                         flags                      /// Buffer creation flags
     VkDeviceSize                                size                       /// Specified in bytes
     VkBufferUsageFlags                          usage                      /// Buffer usage flags
-    VkBufferCreateFlags                         flags                      /// Buffer creation flags
     VkSharingMode                               sharingMode
     u32                                         queueFamilyIndexCount
     const u32*                                  pQueueFamilyIndices
@@ -1325,6 +1447,7 @@
 class VkBufferViewCreateInfo {
     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
     const void*                                 pNext                      /// Pointer to next structure.
+    VkBufferViewCreateFlags                     flags
     VkBuffer                                    buffer
     VkFormat                                    format                     /// Optionally specifies format of elements
     VkDeviceSize                                offset                     /// Specified in bytes
@@ -1380,6 +1503,7 @@
 class VkImageCreateInfo {
     VkStructureType                             sType                      /// Must be VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
     const void*                                 pNext                      /// Pointer to next structure.
+    VkImageCreateFlags                          flags                      /// Image creation flags
     VkImageType                                 imageType
     VkFormat                                    format
     VkExtent3D                                  extent
@@ -1388,7 +1512,6 @@
     u32                                         samples
     VkImageTiling                               tiling
     VkImageUsageFlags                           usage                      /// Image usage flags
-    VkImageCreateFlags                          flags                      /// Image creation flags
     VkSharingMode                               sharingMode                /// Cross-queue-family sharing mode
     u32                                         queueFamilyIndexCount      /// Number of queue families to share across
     const u32*                                  pQueueFamilyIndices        /// Array of queue family indices to share across
@@ -1405,12 +1528,12 @@
 class VkImageViewCreateInfo {
     VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
     const void*                                 pNext                  /// Pointer to next structure
+    VkImageViewCreateFlags                      flags
     VkImage                                     image
     VkImageViewType                             viewType
     VkFormat                                    format
     VkChannelMapping                            channels
     VkImageSubresourceRange                     subresourceRange
-    VkImageViewCreateFlags                      flags
 }
 
 class VkBufferCopy {
@@ -1419,7 +1542,7 @@
     VkDeviceSize                                copySize               /// Specified in bytes
 }
 
-class VkSparseMemoryBindInfo {
+class VkSparseMemoryBind {
     VkDeviceSize                                rangeOffset           /// Specified in bytes
     VkDeviceSize                                rangeSize             /// Specified in bytes
     VkDeviceSize                                memOffset             /// Specified in bytes
@@ -1427,7 +1550,7 @@
     VkSparseMemoryBindFlags                     flags
 }
 
-class VkSparseImageMemoryBindInfo {
+class VkSparseImageMemoryBind {
     VkImageSubresource                          subresource
     VkOffset3D                                  offset
     VkExtent3D                                  extent
@@ -1436,6 +1559,39 @@
     VkSparseMemoryBindFlags                     flags
 }
 
+class VkSparseBufferMemoryBindInfo {
+    VkBuffer                                    buffer
+    u32                                         bindCount
+    const VkSparseMemoryBind*                   pBinds
+}
+
+class VkSparseImageOpaqueMemoryBindInfo {
+    VkImage                                     image
+    u32                                         bindCount
+    const VkSparseMemoryBind*                   pBinds
+}
+
+class VkSparseImageMemoryBindInfo {
+    VkImage                                     image
+    u32                                         bindCount
+    const VkSparseMemoryBind*                   pBinds
+}
+
+class VkBindSparseInfo {
+    VkStructureType                             sType                 /// Must be VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
+    const void*                                 pNext
+    u32                                         waitSemaphoreCount
+    const VkSemaphore*                          pWaitSemaphores
+    u32                                         numBufferBinds
+    const VkSparseBufferMemoryBindInfo*         pBufferBinds
+    u32                                         numImageOpaqueBinds
+    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds
+    u32                                         numImageBinds
+    const VkSparseImageMemoryBindInfo*          pImageBinds
+    u32                                         signalSemaphoreCount
+    const VkSemaphore*                          pSignalSemaphores
+}
+
 class VkImageSubresourceCopy {
     VkImageAspectFlags                          aspect
     u32                                         mipLevel
@@ -1480,17 +1636,17 @@
 class VkShaderModuleCreateInfo {
     VkStructureType                             sType                  /// Must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
     const void*                                 pNext                  /// Pointer to next structure
+    VkShaderModuleCreateFlags                   flags                  /// Reserved
     platform.size_t                             codeSize               /// Specified in bytes
     const u32*                                  pCode                  /// Binary code of size codeSize
-    VkShaderModuleCreateFlags                   flags                  /// Reserved
 }
 
 class VkShaderCreateInfo {
     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_SHADER_CREATE_INFO
     const void*                                 pNext              /// Pointer to next structure
+    VkShaderCreateFlags                         flags              /// Reserved
     VkShaderModule                              module             /// Module containing entry point
     const char*                                 pName              /// Null-terminated entry point name
-    VkShaderCreateFlags                         flags              /// Reserved
     VkShaderStageFlagBits                       stage
 }
 
@@ -1504,6 +1660,7 @@
 class VkDescriptorSetLayoutCreateInfo {
     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
     const void*                                 pNext              /// Pointer to next structure
+    VkDescriptorSetLayoutCreateFlags            flags
     u32                                         bindingCount       /// Number of bindings in the descriptor set layout
     const VkDescriptorSetLayoutBinding*         pBindings          /// Array of descriptor set layout bindings
 }
@@ -1546,6 +1703,7 @@
 class VkPipelineShaderStageCreateInfo {
     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
     const void*                                 pNext              /// Pointer to next structure
+    VkPipelineShaderStageCreateFlags            flags
     VkShader                                    shader
     const VkSpecializationInfo*                 pSpecializationInfo
 }
@@ -1553,8 +1711,8 @@
 class VkComputePipelineCreateInfo {
     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
     const void*                                 pNext              /// Pointer to next structure
-    VkPipelineShaderStageCreateInfo             stage
     VkPipelineCreateFlags                       flags              /// Pipeline creation flags
+    VkPipelineShaderStageCreateInfo             stage
     VkPipelineLayout                            layout             /// Interface layout of the pipeline
     VkPipeline                                  basePipelineHandle /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
     s32                                         basePipelineIndex  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
@@ -1576,6 +1734,7 @@
 class VkPipelineVertexInputStateCreateInfo {
     VkStructureType                             sType                           /// Should be VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
     const void*                                 pNext                           /// Pointer to next structure
+    VkPipelineVertexInputStateCreateFlags       flags
     u32                                         vertexBindingDescriptionCount   /// number of bindings
     const VkVertexInputBindingDescription*      pVertexBindingDescriptions
     u32                                         vertexAttributeDescriptionCount /// number of attributes
@@ -1585,6 +1744,7 @@
 class VkPipelineInputAssemblyStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineInputAssemblyStateCreateFlags     flags
     VkPrimitiveTopology                         topology
     VkBool32                                    primitiveRestartEnable
 }
@@ -1592,12 +1752,14 @@
 class VkPipelineTessellationStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineTessellationStateCreateFlags      flags
     u32                                         patchControlPoints
 }
 
 class VkPipelineViewportStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineViewportStateCreateFlags          flags
     u32                                         viewportCount
     const VkViewport*                           pViewports
     u32                                         scissorCount
@@ -1607,6 +1769,7 @@
 class VkPipelineRasterStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineRasterStateCreateFlags            flags
     VkBool32                                    depthClampEnable
     VkBool32                                    rasterizerDiscardEnable
     VkFillMode                                  fillMode                   /// optional (GL45)
@@ -1622,6 +1785,7 @@
 class VkPipelineMultisampleStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineMultisampleStateCreateFlags       flags
     u32                                         rasterSamples              /// Number of samples used for rasterization
     VkBool32                                    sampleShadingEnable        /// optional (GL45)
     f32                                         minSampleShading           /// optional (GL45)
@@ -1644,6 +1808,7 @@
 class VkPipelineColorBlendStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineColorBlendStateCreateFlags        flags
     VkBool32                                    logicOpEnable
     VkLogicOp                                   logicOp
     u32                                         attachmentCount    /// # of pAttachments
@@ -1664,6 +1829,7 @@
 class VkPipelineDepthStencilStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineDepthStencilStateCreateFlags      flags
     VkBool32                                    depthTestEnable
     VkBool32                                    depthWriteEnable
     VkCompareOp                                 depthCompareOp
@@ -1678,15 +1844,17 @@
 class VkPipelineDynamicStateCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkPipelineDynamicStateCreateFlags           flags
     u32                                         dynamicStateCount
     const VkDynamicState*                       pDynamicStates
 }
 
 class VkGraphicsPipelineCreateInfo {
-    VkStructureType                                 sType      /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
-    const void*                                     pNext      /// Pointer to next structure
+    VkStructureType                                 sType               /// Must be VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+    const void*                                     pNext               /// Pointer to next structure
+    VkPipelineCreateFlags                           flags               /// Pipeline creation flags
     u32                                             stageCount
-    const VkPipelineShaderStageCreateInfo*          pStages    /// One entry for each active shader stage
+    const VkPipelineShaderStageCreateInfo*          pStages             /// One entry for each active shader stage
     const VkPipelineVertexInputStateCreateInfo*     pVertexInputState
     const VkPipelineInputAssemblyStateCreateInfo*   pInputAssemblyState
     const VkPipelineTessellationStateCreateInfo*    pTessellationState
@@ -1696,17 +1864,17 @@
     const VkPipelineDepthStencilStateCreateInfo*    pDepthStencilState
     const VkPipelineColorBlendStateCreateInfo*      pColorBlendState
     const VkPipelineDynamicStateCreateInfo*         pDynamicState
-    VkPipelineCreateFlags                           flags              /// Pipeline creation flags
-    VkPipelineLayout                                layout             /// Interface layout of the pipeline
+    VkPipelineLayout                                layout              /// Interface layout of the pipeline
     VkRenderPass                                    renderPass
     u32                                             subpass
-    VkPipeline                                      basePipelineHandle /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
-    s32                                             basePipelineIndex  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
+    VkPipeline                                      basePipelineHandle  /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is nonzero, it specifies the handle of the base pipeline this is a derivative of
+    s32                                             basePipelineIndex   /// If VK_PIPELINE_CREATE_DERIVATIVE_BIT is set and this value is not -1, it specifies an index into pCreateInfos of the base pipeline this is a derivative of
 }
 
 class VkPipelineCacheCreateInfo {
     VkStructureType                             sType        /// Must be VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
     const void*                                 pNext        /// Pointer to next structure
+    VkPipelineCacheCreateFlags                  flags
     platform.size_t                             initialSize  /// Size of initial data to populate cache, in bytes
     const void*                                 initialData  /// Initial data to populate cache
     platform.size_t                             maxSize      /// Maximum size cache can grow to, in bytes. If zero, then the cache may grow without bound.
@@ -1721,6 +1889,7 @@
 class VkPipelineLayoutCreateInfo {
     VkStructureType                             sType                   /// Must be VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
     const void*                                 pNext                   /// Pointer to next structure
+    VkPipelineLayoutCreateFlags                 flags
     u32                                         setLayoutCount          /// Number of descriptor sets interfaced by the pipeline
     const VkDescriptorSetLayout*                pSetLayouts             /// Array of <setCount> number of descriptor set layout objects defining the layout of the
     u32                                         pushConstantRangeCount  /// Number of push-constant ranges used by the pipeline
@@ -1730,6 +1899,7 @@
 class VkSamplerCreateInfo {
     VkStructureType                             sType          /// Must be VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
     const void*                                 pNext          /// Pointer to next structure
+    VkSamplerCreateFlags                        flags
     VkFilter                                    magFilter      /// Filter mode for magnification
     VkFilter                                    minFilter      /// Filter mode for minifiation
     VkSamplerMipmapMode                         mipmapMode     /// Mipmap selection mode
@@ -1749,8 +1919,8 @@
 class VkCmdPoolCreateInfo {
     VkStructureType                             sType            /// Must be VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO
     const void*                                 pNext            /// Pointer to next structure
-    u32                                         queueFamilyIndex
     VkCmdPoolCreateFlags                        flags            /// Command pool creation flags
+    u32                                         queueFamilyIndex
 }
 
 class VkCmdBufferAllocInfo {
@@ -1809,6 +1979,7 @@
 class VkAttachmentDescription {
     VkStructureType                             sType           /// Must be VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION
     const void*                                 pNext           /// Pointer to next structure
+    VkAttachmentDescriptionFlags                flags
     VkFormat                                    format
     u32                                         samples
     VkAttachmentLoadOp                          loadOp          /// Load op for color or depth data
@@ -1817,7 +1988,6 @@
     VkAttachmentStoreOp                         stencilStoreOp  /// Store op for stencil data
     VkImageLayout                               initialLayout
     VkImageLayout                               finalLayout
-    VkAttachmentDescriptionFlags                flags
 }
 
 class VkAttachmentReference {
@@ -1828,8 +1998,8 @@
 class VkSubpassDescription {
     VkStructureType                             sType              /// Must be VK_STRUCTURE_SUBPASS_DESCRIPTION
     const void*                                 pNext              /// Pointer to next structure
-    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
     VkSubpassDescriptionFlags                   flags
+    VkPipelineBindPoint                         pipelineBindPoint  /// Must be VK_PIPELINE_BIND_POINT_GRAPHICS for now
     u32                                         inputAttachmentCount
     const VkAttachmentReference*                pInputAttachments
     u32                                         colorAttachmentCount
@@ -1855,6 +2025,7 @@
 class VkRenderPassCreateInfo {
     VkStructureType                             sType      /// Must be VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
     const void*                                 pNext      /// Pointer to next structure
+    VkRenderPassCreateFlags                     flags
     u32                                         attachmentCount
     const VkAttachmentDescription*              pAttachments
     u32                                         subpassCount
@@ -2071,6 +2242,7 @@
 class VkQueryPoolCreateInfo {
     VkStructureType                             sType              /// Must be VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
     const void*                                 pNext              /// Pointer to next structure
+    VkQueryPoolCreateFlags                      flags
     VkQueryType                                 queryType
     u32                                         slots
     VkQueryPipelineStatisticFlags               pipelineStatistics /// Optional
@@ -2079,6 +2251,7 @@
 class VkFramebufferCreateInfo {
     VkStructureType                             sType  /// Must be VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
     const void*                                 pNext  /// Pointer to next structure
+    VkFramebufferCreateFlags                    flags
     VkRenderPass                                renderPass
     u32                                         attachmentCount
     const VkImageView*                          pAttachments
@@ -2117,6 +2290,7 @@
     VkExtent2D                                  maxImageExtent
     VkSurfaceTransformFlagsKHR                  supportedTransforms
     VkSurfaceTransformKHR                       currentTransform
+    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha
     u32                                         maxImageArraySize
     VkImageUsageFlags                           supportedUsageFlags
 }
@@ -2138,6 +2312,7 @@
     VkExtent2D                                  imageExtent
     VkImageUsageFlags                           imageUsageFlags
     VkSurfaceTransformKHR                       preTransform
+    VkCompositeAlphaFlagBitsKHR                 compositeAlpha
     u32                                         imageArraySize
     VkSharingMode                               sharingMode
     u32                                         queueFamilyIndexCount
@@ -2163,41 +2338,37 @@
     VkExtent2D                                  physicalDimensions
     VkExtent2D                                  physicalResolution
     VkSurfaceTransformFlagsKHR                  supportedTransforms
-    u32                                         planeCount
     VkBool32                                    planeReorderPossible
+    VkBool32                                    persistentContent
 }
 
 @extension("VK_EXT_KHR_display")
-class VkDisplayTimingKHR {
-    u32                                         pixelClock
+class VkDisplayModeParametersKHR {
     VkExtent2D                                  visibleRegion
-    VkExtent2D                                  totalRegion
-    VkExtent2D                                  physicalDimensions
-    u32                                         hSyncStart
-    u32                                         hSyncEnd
-    u32                                         vSyncStart
-    u32                                         vSyncEnd
-    VkBool32                                    interlaced
-    VkBool32                                    doublescan
-    VkBool32                                    hSyncPos
-    VkBool32                                    vSyncPos
+    u32                                         refreshRate
 }
 
 @extension("VK_EXT_KHR_display")
 class VkDisplayModePropertiesKHR {
     VkDisplayModeKHR                            displayMode
-    VkDisplayTimingKHR                          timing
+    VkDisplayModeParametersKHR                  parameters
 }
 
 @extension("VK_EXT_KHR_display")
 class VkDisplayModeCreateInfoKHR {
     VkStructureType                             sType
     const void*                                 pNext
-    VkDisplayTimingKHR                          timing
+    VkDisplayModeParametersKHR                  parameters
 }
 
 @extension("VK_EXT_KHR_display")
 class VkDisplayPlanePropertiesKHR {
+    VkDisplayKHR                                currentDisplay
+    u32                                         currentStackIndex
+}
+
+@extension("VK_EXT_KHR_display")
+class VkDisplayPlaneCapabilitiesKHR {
     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha
     VkOffset2D                                  minSrcPosition
     VkOffset2D                                  maxSrcPosition
@@ -2210,7 +2381,7 @@
 }
 
 @extension("VK_EXT_KHR_display")
-class VkSurfaceDescriptionDisplayPlaneKHR {
+class VkDisplaySurfaceCreateInfoKHR {
     VkStructureType                             sType
     const void*                                 pNext
     VkDisplayModeKHR                            displayMode
@@ -2235,6 +2406,7 @@
     const void*                                 pNext
     VkRect2D                                    srcRect
     VkRect2D                                    dstRect
+    VkBool32                                    persistent
 }
 
 
@@ -2801,37 +2973,12 @@
     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
 }
 
-cmd VkResult vkQueueBindSparseBufferMemory(
+cmd VkResult vkQueueBindSparse(
         VkQueue                                     queue,
-        VkBuffer                                    buffer,
         u32                                         bindInfoCount,
-        const VkSparseMemoryBindInfo*               pBindInfo) {
+        const VkBindSparseInfo*                     pBindInfo,
+        VkFence                                     fence) {
     queueObject := GetQueue(queue)
-    bufferObject := GetBuffer(buffer)
-    assert(bufferObject.device == queueObject.device)
-
-    return ?
-}
-
-cmd VkResult vkQueueBindSparseImageOpaqueMemory(
-        VkQueue                                     queue,
-        VkImage                                     image,
-        u32                                         bindInfoCount,
-        const VkSparseMemoryBindInfo*               pBindInfo) {
-    queueObject := GetQueue(queue)
-    imageObject := GetImage(image)
-    assert(imageObject.device == queueObject.device)
-
-    return ?
-}
-
-cmd VkResult vkQueueBindSparseImageMemory(
-        VkQueue                                     queue,
-        VkImage                                     image,
-        u32                                         bindInfoCount,
-        const VkSparseImageMemoryBindInfo*          pBindInfo) {
-    queueObject := GetQueue(queue)
-    imageObject := GetImage(image)
 
     return ?
 }
@@ -4490,7 +4637,7 @@
 }
 
 @extension("VK_EXT_KHR_surface")
-cmd VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(
+cmd VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
         VkPhysicalDevice                            physicalDevice,
         u32                                         queueFamilyIndex,
         VkSurfaceKHR                                surface) {
@@ -4640,6 +4787,24 @@
 }
 
 @extension("VK_EXT_KHR_display")
+cmd VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32*                                    pPropertyCount,
+        VkDisplayPlanePropertiesKHR*            pProperties) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+    return ?
+}
+
+@extension("VK_EXT_KHR_display")
+cmd VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32*                                    pPropertyCount,
+        VkDisplayKHR*                           pProperties) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+    return ?
+}
+
+@extension("VK_EXT_KHR_display")
 cmd VkResult vkGetDisplayModePropertiesKHR(
         VkPhysicalDevice                        physicalDevice,
         VkDisplayKHR                            display,
@@ -4660,38 +4825,63 @@
 }
 
 @extension("VK_EXT_KHR_display")
-cmd VkResult vkGetDisplayPlanePropertiesKHR(
+cmd VkResult vkGetDisplayPlaneCapabilitiesKHR(
         VkPhysicalDevice                        physicalDevice,
-        VkDisplayKHR                            display,
-        VkDisplayModeKHR                        mode,
+        VkDisplayModeCreateInfoKHR              mode,
         u32                                     planeIndex,
-        VkDisplayPlanePropertiesKHR*            pProperties) {
+        VkDisplayPlaneCapabilitiesKHR*          pCapabilities) {
     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
     return ?
 }
 
-@extension("VK_EXT_KHR_x11_surface")
-cmd VkResult vkCreateX11SurfaceKHR(
+@extension("VK_EXT_KHR_display")
+cmd VkResult vkCreateDisplayPlaneSurfaceKHR(
+        VkInstance                              instance,
+        const VkDisplaySurfaceCreateInfoKHR*    pCreateInfo,
+        VkSurfaceKHR*                           pSurface) {
+    return ?
+}
+
+@extension("VK_EXT_KHR_xlib_surface")
+cmd VkResult vkCreateXlibSurfaceKHR(
         VkInstance                              instance,
         platform.Display*                       dpy,
-        platform.Window                         root,
         platform.Window                         window,
         VkSurfaceKHR*                           pSurface) {
     instanceObject := GetInstance(instance)
     return ?
 }
 
+@extension("VK_EXT_KHR_xlib_surface")
+cmd VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32                                     queueFamilyIndex,
+        platform.Display*                       dpy,
+        platform.VisualID                       visualId) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+    return ?
+}
+
 @extension("VK_EXT_KHR_xcb_surface")
 cmd VkResult vkCreateXCBSurfaceKHR(
         VkInstance                              instance,
         platform.xcb_connection_t*              connection,
-        platform.xcb_window_t                   root,
         platform.xcb_window_t                   window,
         VkSurfaceKHR*                           pSurface) {
     instanceObject := GetInstance(instance)
     return ?
 }
 
+@extension("VK_EXT_KHR_xlib_surface")
+cmd VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32                                     queueFamilyIndex,
+        platform.xcb_connection_t*              connection,
+        platform.xcb_visualid_t                 visual_id) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+    return ?
+}
+
 @extension("VK_EXT_KHR_wayland_surface")
 cmd VkResult vkCreateWaylandSurfaceKHR(
         VkInstance                              instance,
@@ -4702,6 +4892,15 @@
     return ?
 }
 
+@extension("VK_EXT_KHR_wayland_surface")
+cmd VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32                                     queueFamilyIndex,
+        platform.wl_display*                    display) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+    return ?
+}
+
 @extension("VK_EXT_KHR_mir_surface")
 cmd VkResult vkCreateMirSurfaceKHR(
         VkInstance                              instance,
@@ -4712,6 +4911,15 @@
     return ?
 }
 
+@extension("VK_EXT_KHR_mir_surface")
+cmd VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32                                     queueFamilyIndex,
+        platform.MirConnection*                 connection) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)
+    return ?
+}
+
 @extension("VK_EXT_KHR_android_surface")
 cmd VkResult vkCreateAndroidSurfaceKHR(
         VkInstance                              instance,
@@ -4731,6 +4939,14 @@
     return ?
 }
 
+@extension("VK_EXT_KHR_win32_surface")
+cmd VkResult vkGetPhysicalDeviceWin32PresentationSupportKHR(
+        VkPhysicalDevice                        physicalDevice,
+        u32                                     queueFamilyIndex) {
+    physicalDeviceObject := GetPhysicalDevice(physicalDevice)    
+    return ?
+}
+
 
 ////////////////
 // Validation //
diff --git a/vulkan/include/vulkan/vk_platform.h b/vulkan/include/vulkan/vk_platform.h
index 14dc553..8d51524 100644
--- a/vulkan/include/vulkan/vk_platform.h
+++ b/vulkan/include/vulkan/vk_platform.h
@@ -91,7 +91,7 @@
 #include <windows.h>
 #endif
 
-#ifdef VK_USE_PLATFORM_X11_KHR
+#ifdef VK_USE_PLATFORM_XLIB_KHR
 #include <X11/Xlib.h>
 #endif
 
diff --git a/vulkan/include/vulkan/vulkan.h b/vulkan/include/vulkan/vulkan.h
index dc977e5..dcc5301 100644
--- a/vulkan/include/vulkan/vulkan.h
+++ b/vulkan/include/vulkan/vulkan.h
@@ -1,5 +1,5 @@
-#ifndef __vulkan_h_
-#define __vulkan_h_ 1
+#ifndef __vulkanext_h_
+#define __vulkanext_h_ 1
 
 #ifdef __cplusplus
 extern "C" {
@@ -41,7 +41,7 @@
     ((major << 22) | (minor << 12) | patch)
 
 // Vulkan API version supported by this file
-#define VK_API_VERSION VK_MAKE_VERSION(0, 189, 0)
+#define VK_API_VERSION VK_MAKE_VERSION(0, 190, 0)
 
 
 #define VK_NULL_HANDLE 0
@@ -59,8 +59,8 @@
 
 
 
-typedef uint32_t VkBool32;
 typedef uint32_t VkFlags;
+typedef uint32_t VkBool32;
 typedef uint64_t VkDeviceSize;
 typedef uint32_t VkSampleMask;
 
@@ -182,9 +182,10 @@
     VK_STRUCTURE_TYPE_SUBMIT_INFO = 48,
     VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 49,
     VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 50,
+    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 51,
     VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
-    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO,
-    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
+    VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO,
+    VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_BIND_SPARSE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
 } VkStructureType;
 
@@ -763,6 +764,7 @@
     VK_RENDER_PASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
 } VkRenderPassContents;
 
+typedef VkFlags VkInstanceCreateFlags;
 
 typedef enum {
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
@@ -833,6 +835,8 @@
     VK_MEMORY_HEAP_HOST_LOCAL_BIT = 0x00000001,
 } VkMemoryHeapFlagBits;
 typedef VkFlags VkMemoryHeapFlags;
+typedef VkFlags VkDeviceCreateFlags;
+typedef VkFlags VkDeviceQueueCreateFlags;
 typedef VkFlags VkMemoryMapFlags;
 
 typedef enum {
@@ -860,6 +864,7 @@
 typedef VkFlags VkFenceCreateFlags;
 typedef VkFlags VkSemaphoreCreateFlags;
 typedef VkFlags VkEventCreateFlags;
+typedef VkFlags VkQueryPoolCreateFlags;
 
 typedef enum {
     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
@@ -886,6 +891,13 @@
 typedef VkFlags VkQueryResultFlags;
 
 typedef enum {
+    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
+    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
+    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
+} VkBufferCreateFlagBits;
+typedef VkFlags VkBufferCreateFlags;
+
+typedef enum {
     VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000001,
     VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000002,
     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
@@ -897,20 +909,14 @@
     VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
 } VkBufferUsageFlagBits;
 typedef VkFlags VkBufferUsageFlags;
-
-typedef enum {
-    VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
-    VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
-    VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
-} VkBufferCreateFlagBits;
-typedef VkFlags VkBufferCreateFlags;
-typedef VkFlags VkImageAspectFlags;
+typedef VkFlags VkBufferViewCreateFlags;
 
 typedef enum {
     VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
     VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
 } VkImageViewCreateFlagBits;
 typedef VkFlags VkImageViewCreateFlags;
+typedef VkFlags VkImageAspectFlags;
 typedef VkFlags VkShaderModuleCreateFlags;
 typedef VkFlags VkShaderCreateFlags;
 
@@ -923,6 +929,23 @@
     VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
     VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
 } VkShaderStageFlagBits;
+typedef VkFlags VkPipelineCacheCreateFlags;
+
+typedef enum {
+    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
+    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
+    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
+} VkPipelineCreateFlagBits;
+typedef VkFlags VkPipelineCreateFlags;
+typedef VkFlags VkPipelineShaderStageCreateFlags;
+typedef VkFlags VkPipelineVertexInputStateCreateFlags;
+typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
+typedef VkFlags VkPipelineTesselationStateCreateFlags;
+typedef VkFlags VkPipelineViewportStateCreateFlags;
+typedef VkFlags VkPipelineRasterStateCreateFlags;
+typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+typedef VkFlags VkPipelineColorBlendStateCreateFlags;
 
 typedef enum {
     VK_CHANNEL_R_BIT = 0x00000001,
@@ -931,20 +954,19 @@
     VK_CHANNEL_A_BIT = 0x00000008,
 } VkChannelFlagBits;
 typedef VkFlags VkChannelFlags;
-
-typedef enum {
-    VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
-    VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
-    VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
-} VkPipelineCreateFlagBits;
-typedef VkFlags VkPipelineCreateFlags;
+typedef VkFlags VkPipelineDynamicStateCreateFlags;
+typedef VkFlags VkPipelineLayoutCreateFlags;
 typedef VkFlags VkShaderStageFlags;
+typedef VkFlags VkSamplerCreateFlags;
+typedef VkFlags VkDescriptorSetLayoutCreateFlags;
 
 typedef enum {
     VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
 } VkDescriptorPoolCreateFlagBits;
 typedef VkFlags VkDescriptorPoolCreateFlags;
 typedef VkFlags VkDescriptorPoolResetFlags;
+typedef VkFlags VkFramebufferCreateFlags;
+typedef VkFlags VkRenderPassCreateFlags;
 
 typedef enum {
     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
@@ -1074,6 +1096,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkInstanceCreateFlags                       flags;
     const VkApplicationInfo*                    pAppInfo;
     uint32_t                                    enabledLayerNameCount;
     const char*const*                           ppEnabledLayerNames;
@@ -1314,6 +1337,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkDeviceQueueCreateFlags                    flags;
     uint32_t                                    queueFamilyIndex;
     uint32_t                                    queuePriorityCount;
     const float*                                pQueuePriorities;
@@ -1322,6 +1346,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkDeviceCreateFlags                         flags;
     uint32_t                                    requestedQueueCount;
     const VkDeviceQueueCreateInfo*              pRequestedQueues;
     uint32_t                                    enabledLayerNameCount;
@@ -1395,7 +1420,19 @@
     VkDeviceSize                                memOffset;
     VkDeviceMemory                              mem;
     VkSparseMemoryBindFlags                     flags;
-} VkSparseMemoryBindInfo;
+} VkSparseMemoryBind;
+
+typedef struct {
+    VkBuffer                                    buffer;
+    uint32_t                                    bindCount;
+    const VkSparseMemoryBind*                   pBinds;
+} VkSparseBufferMemoryBindInfo;
+
+typedef struct {
+    VkImage                                     image;
+    uint32_t                                    bindCount;
+    const VkSparseMemoryBind*                   pBinds;
+} VkSparseImageOpaqueMemoryBindInfo;
 
 typedef struct {
     VkImageAspectFlagBits                       aspect;
@@ -1416,11 +1453,32 @@
     VkDeviceSize                                memOffset;
     VkDeviceMemory                              mem;
     VkSparseMemoryBindFlags                     flags;
+} VkSparseImageMemoryBind;
+
+typedef struct {
+    VkImage                                     image;
+    uint32_t                                    bindCount;
+    const VkSparseImageMemoryBind*              pBinds;
 } VkSparseImageMemoryBindInfo;
 
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    uint32_t                                    waitSemaphoreCount;
+    const VkSemaphore*                          pWaitSemaphores;
+    uint32_t                                    bufferBindCount;
+    const VkSparseBufferMemoryBindInfo*         pBufferBinds;
+    uint32_t                                    imageOpaqueBindCount;
+    const VkSparseImageOpaqueMemoryBindInfo*    pImageOpaqueBinds;
+    uint32_t                                    imageBindCount;
+    const VkSparseImageMemoryBindInfo*          pImageBinds;
+    uint32_t                                    signalSemaphoreCount;
+    const VkSemaphore*                          pSignalSemaphores;
+} VkBindSparseInfo;
+
+typedef struct {
+    VkStructureType                             sType;
+    const void*                                 pNext;
     VkFenceCreateFlags                          flags;
 } VkFenceCreateInfo;
 
@@ -1439,6 +1497,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkQueryPoolCreateFlags                      flags;
     VkQueryType                                 queryType;
     uint32_t                                    slots;
     VkQueryPipelineStatisticFlags               pipelineStatistics;
@@ -1447,9 +1506,9 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkBufferCreateFlags                         flags;
     VkDeviceSize                                size;
     VkBufferUsageFlags                          usage;
-    VkBufferCreateFlags                         flags;
     VkSharingMode                               sharingMode;
     uint32_t                                    queueFamilyIndexCount;
     const uint32_t*                             pQueueFamilyIndices;
@@ -1458,6 +1517,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkBufferViewCreateFlags                     flags;
     VkBuffer                                    buffer;
     VkFormat                                    format;
     VkDeviceSize                                offset;
@@ -1467,6 +1527,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkImageCreateFlags                          flags;
     VkImageType                                 imageType;
     VkFormat                                    format;
     VkExtent3D                                  extent;
@@ -1475,7 +1536,6 @@
     uint32_t                                    samples;
     VkImageTiling                               tiling;
     VkImageUsageFlags                           usage;
-    VkImageCreateFlags                          flags;
     VkSharingMode                               sharingMode;
     uint32_t                                    queueFamilyIndexCount;
     const uint32_t*                             pQueueFamilyIndices;
@@ -1507,34 +1567,35 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkImageViewCreateFlags                      flags;
     VkImage                                     image;
     VkImageViewType                             viewType;
     VkFormat                                    format;
     VkChannelMapping                            channels;
     VkImageSubresourceRange                     subresourceRange;
-    VkImageViewCreateFlags                      flags;
 } VkImageViewCreateInfo;
 
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkShaderModuleCreateFlags                   flags;
     size_t                                      codeSize;
     const uint32_t*                             pCode;
-    VkShaderModuleCreateFlags                   flags;
 } VkShaderModuleCreateInfo;
 
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkShaderCreateFlags                         flags;
     VkShaderModule                              module;
     const char*                                 pName;
-    VkShaderCreateFlags                         flags;
     VkShaderStageFlagBits                       stage;
 } VkShaderCreateInfo;
 
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineCacheCreateFlags                  flags;
     size_t                                      initialSize;
     const void*                                 initialData;
     size_t                                      maxSize;
@@ -1556,6 +1617,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineShaderStageCreateFlags            flags;
     VkShader                                    shader;
     const VkSpecializationInfo*                 pSpecializationInfo;
 } VkPipelineShaderStageCreateInfo;
@@ -1576,6 +1638,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineVertexInputStateCreateFlags       flags;
     uint32_t                                    vertexBindingDescriptionCount;
     const VkVertexInputBindingDescription*      pVertexBindingDescriptions;
     uint32_t                                    vertexAttributeDescriptionCount;
@@ -1585,6 +1648,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineInputAssemblyStateCreateFlags     flags;
     VkPrimitiveTopology                         topology;
     VkBool32                                    primitiveRestartEnable;
 } VkPipelineInputAssemblyStateCreateInfo;
@@ -1592,6 +1656,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineTesselationStateCreateFlags       flags;
     uint32_t                                    patchControlPoints;
 } VkPipelineTessellationStateCreateInfo;
 
@@ -1622,6 +1687,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineViewportStateCreateFlags          flags;
     uint32_t                                    viewportCount;
     const VkViewport*                           pViewports;
     uint32_t                                    scissorCount;
@@ -1631,6 +1697,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineRasterStateCreateFlags            flags;
     VkBool32                                    depthClampEnable;
     VkBool32                                    rasterizerDiscardEnable;
     VkFillMode                                  fillMode;
@@ -1646,6 +1713,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineMultisampleStateCreateFlags       flags;
     uint32_t                                    rasterSamples;
     VkBool32                                    sampleShadingEnable;
     float                                       minSampleShading;
@@ -1667,6 +1735,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineDepthStencilStateCreateFlags      flags;
     VkBool32                                    depthTestEnable;
     VkBool32                                    depthWriteEnable;
     VkCompareOp                                 depthCompareOp;
@@ -1692,6 +1761,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineColorBlendStateCreateFlags        flags;
     VkBool32                                    logicOpEnable;
     VkLogicOp                                   logicOp;
     uint32_t                                    attachmentCount;
@@ -1702,6 +1772,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineDynamicStateCreateFlags           flags;
     uint32_t                                    dynamicStateCount;
     const VkDynamicState*                       pDynamicStates;
 } VkPipelineDynamicStateCreateInfo;
@@ -1709,6 +1780,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineCreateFlags                       flags;
     uint32_t                                    stageCount;
     const VkPipelineShaderStageCreateInfo*      pStages;
     const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
@@ -1720,7 +1792,6 @@
     const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
     const VkPipelineColorBlendStateCreateInfo*  pColorBlendState;
     const VkPipelineDynamicStateCreateInfo*     pDynamicState;
-    VkPipelineCreateFlags                       flags;
     VkPipelineLayout                            layout;
     VkRenderPass                                renderPass;
     uint32_t                                    subpass;
@@ -1731,8 +1802,8 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
-    VkPipelineShaderStageCreateInfo             stage;
     VkPipelineCreateFlags                       flags;
+    VkPipelineShaderStageCreateInfo             stage;
     VkPipelineLayout                            layout;
     VkPipeline                                  basePipelineHandle;
     int32_t                                     basePipelineIndex;
@@ -1747,6 +1818,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkPipelineLayoutCreateFlags                 flags;
     uint32_t                                    setLayoutCount;
     const VkDescriptorSetLayout*                pSetLayouts;
     uint32_t                                    pushConstantRangeCount;
@@ -1756,6 +1828,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkSamplerCreateFlags                        flags;
     VkFilter                                    magFilter;
     VkFilter                                    minFilter;
     VkSamplerMipmapMode                         mipmapMode;
@@ -1782,6 +1855,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkDescriptorSetLayoutCreateFlags            flags;
     uint32_t                                    bindingCount;
     const VkDescriptorSetLayoutBinding*         pBindings;
 } VkDescriptorSetLayoutCreateInfo;
@@ -1848,6 +1922,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkFramebufferCreateFlags                    flags;
     VkRenderPass                                renderPass;
     uint32_t                                    attachmentCount;
     const VkImageView*                          pAttachments;
@@ -1859,6 +1934,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkAttachmentDescriptionFlags                flags;
     VkFormat                                    format;
     uint32_t                                    samples;
     VkAttachmentLoadOp                          loadOp;
@@ -1867,7 +1943,6 @@
     VkAttachmentStoreOp                         stencilStoreOp;
     VkImageLayout                               initialLayout;
     VkImageLayout                               finalLayout;
-    VkAttachmentDescriptionFlags                flags;
 } VkAttachmentDescription;
 
 typedef struct {
@@ -1878,8 +1953,8 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
-    VkPipelineBindPoint                         pipelineBindPoint;
     VkSubpassDescriptionFlags                   flags;
+    VkPipelineBindPoint                         pipelineBindPoint;
     uint32_t                                    inputAttachmentCount;
     const VkAttachmentReference*                pInputAttachments;
     uint32_t                                    colorAttachmentCount;
@@ -1905,6 +1980,7 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
+    VkRenderPassCreateFlags                     flags;
     uint32_t                                    attachmentCount;
     const VkAttachmentDescription*              pAttachments;
     uint32_t                                    subpassCount;
@@ -1916,8 +1992,8 @@
 typedef struct {
     VkStructureType                             sType;
     const void*                                 pNext;
-    uint32_t                                    queueFamilyIndex;
     VkCmdPoolCreateFlags                        flags;
+    uint32_t                                    queueFamilyIndex;
 } VkCmdPoolCreateInfo;
 
 typedef struct {
@@ -2110,9 +2186,7 @@
 typedef void (VKAPI *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
 typedef void (VKAPI *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
 typedef void (VKAPI *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
-typedef VkResult (VKAPI *PFN_vkQueueBindSparseBufferMemory)(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo);
-typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageOpaqueMemory)(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo);
-typedef VkResult (VKAPI *PFN_vkQueueBindSparseImageMemory)(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo);
+typedef VkResult (VKAPI *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
 typedef VkResult (VKAPI *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* pAllocator, VkFence* pFence);
 typedef void (VKAPI *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocCallbacks* pAllocator);
 typedef VkResult (VKAPI *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
@@ -2396,23 +2470,11 @@
     uint32_t*                                   pPropertyCount,
     VkSparseImageFormatProperties*              pProperties);
 
-VkResult VKAPI vkQueueBindSparseBufferMemory(
+VkResult VKAPI vkQueueBindSparse(
     VkQueue                                     queue,
-    VkBuffer                                    buffer,
     uint32_t                                    bindInfoCount,
-    const VkSparseMemoryBindInfo*               pBindInfo);
-
-VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
-    VkQueue                                     queue,
-    VkImage                                     image,
-    uint32_t                                    bindInfoCount,
-    const VkSparseMemoryBindInfo*               pBindInfo);
-
-VkResult VKAPI vkQueueBindSparseImageMemory(
-    VkQueue                                     queue,
-    VkImage                                     image,
-    uint32_t                                    bindInfoCount,
-    const VkSparseImageMemoryBindInfo*          pBindInfo);
+    const VkBindSparseInfo*                     pBindInfo,
+    VkFence                                     fence);
 
 VkResult VKAPI vkCreateFence(
     VkDevice                                    device,
@@ -3033,19 +3095,20 @@
 #define vk_ext_khr_surface 1
 VK_DEFINE_NONDISP_HANDLE(VkSurfaceKHR)
 
-#define VK_EXT_KHR_SURFACE_REVISION       19
+#define VK_EXT_KHR_SURFACE_REVISION       20
 #define VK_EXT_KHR_SURFACE_EXTENSION_NUMBER 1
 #define VK_EXT_KHR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_surface"
+#define VK_ERROR_SURFACE_LOST_KHR         ((VkResult)(int)0xc0000400)
 
 typedef void (VKAPI *PFN_vkDestroySurfaceKHR)(VkInstance  instance, VkSurfaceKHR  surface);
-typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface);
 
 #ifdef VK_PROTOTYPES
 void VKAPI vkDestroySurfaceKHR(
     VkInstance                                   instance,
     VkSurfaceKHR                                 surface);
 
-VkBool32 VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
+VkResult VKAPI vkGetPhysicalDeviceSurfaceSupportKHR(
     VkPhysicalDevice                            physicalDevice,
     uint32_t                                    queueFamilyIndex,
     VkSurfaceKHR                                surface);
@@ -3054,7 +3117,7 @@
 #define vk_ext_khr_swapchain 1
 VK_DEFINE_NONDISP_HANDLE(VkSwapchainKHR)
 
-#define VK_EXT_KHR_SWAPCHAIN_REVISION     59
+#define VK_EXT_KHR_SWAPCHAIN_REVISION     62
 #define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NUMBER 2
 #define VK_EXT_KHR_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_swapchain"
 #define VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000800)
@@ -3113,6 +3176,14 @@
 } VkSurfaceTransformFlagBitsKHR;
 typedef VkFlags VkSurfaceTransformFlagsKHR;
 
+typedef enum {
+    VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
+    VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
+    VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
+    VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
+} VkCompositeAlphaFlagBitsKHR;
+typedef VkFlags VkCompositeAlphaFlagsKHR;
+
 typedef struct {
     uint32_t                                    minImageCount;
     uint32_t                                    maxImageCount;
@@ -3121,6 +3192,7 @@
     VkExtent2D                                  maxImageExtent;
     VkSurfaceTransformFlagsKHR                  supportedTransforms;
     VkSurfaceTransformKHR                       currentTransform;
+    VkCompositeAlphaFlagsKHR                    supportedCompositeAlpha;
     uint32_t                                    maxImageArraySize;
     VkImageUsageFlags                           supportedUsageFlags;
 } VkSurfacePropertiesKHR;
@@ -3140,6 +3212,7 @@
     VkExtent2D                                  imageExtent;
     VkImageUsageFlags                           imageUsageFlags;
     VkSurfaceTransformKHR                       preTransform;
+    VkCompositeAlphaFlagBitsKHR                 compositeAlpha;
     uint32_t                                    imageArraySize;
     VkSharingMode                               sharingMode;
     uint32_t                                    queueFamilyIndexCount;
@@ -3217,11 +3290,11 @@
 VK_DEFINE_NONDISP_HANDLE(VkDisplayKHR)
 VK_DEFINE_NONDISP_HANDLE(VkDisplayModeKHR)
 
-#define VK_EXT_KHR_DISPLAY_REVISION       16
+#define VK_EXT_KHR_DISPLAY_REVISION       17
 #define VK_EXT_KHR_DISPLAY_EXTENSION_NUMBER 3
 #define VK_EXT_KHR_DISPLAY_EXTENSION_NAME "VK_EXT_KHR_display"
 #define VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c00)
-#define VK_STRUCTURE_TYPE_SURFACE_DESCRIPTION_DISPLAY_PLANE_KHR ((VkStructureType)(int)0xc0000c01)
+#define VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR ((VkStructureType)(int)0xc0000c01)
 
 
 typedef enum {
@@ -3237,37 +3310,32 @@
     VkExtent2D                                  physicalDimensions;
     VkExtent2D                                  physicalResolution;
     VkSurfaceTransformFlagsKHR                  supportedTransforms;
-    uint32_t                                    planeCount;
     VkBool32                                    planeReorderPossible;
+    VkBool32                                    persistentContent;
 } VkDisplayPropertiesKHR;
 
 typedef struct {
-    uint32_t                                    pixelClock;
     VkExtent2D                                  visibleRegion;
-    VkExtent2D                                  totalRegion;
-    VkExtent2D                                  physicalDimensions;
-    uint32_t                                    hSyncStart;
-    uint32_t                                    hSyncEnd;
-    uint32_t                                    vSyncStart;
-    uint32_t                                    vSyncEnd;
-    VkBool32                                    interlaced;
-    VkBool32                                    doublescan;
-    VkBool32                                    hSyncPos;
-    VkBool32                                    vSyncPos;
-} VkDisplayTimingKHR;
+    uint32_t                                    refreshRate;
+} VkDisplayModeParametersKHR;
 
 typedef struct {
     VkDisplayModeKHR                            displayMode;
-    VkDisplayTimingKHR                          timing;
+    VkDisplayModeParametersKHR                  parameters;
 } VkDisplayModePropertiesKHR;
 
 typedef struct {
     VkStructureType                             sType;
     const void*                                   pNext;
-    VkDisplayTimingKHR                          timing;
+    VkDisplayModeParametersKHR                  parameters;
 } VkDisplayModeCreateInfoKHR;
 
 typedef struct {
+    VkDisplayKHR                                currentDisplay;
+    uint32_t                                    currentStackIndex;
+} VkDisplayPlanePropertiesKHR;
+
+typedef struct {
     VkDisplayPlaneAlphaFlagsKHR                 supportedAlpha;
     VkOffset2D                                  minSrcPosition;
     VkOffset2D                                  maxSrcPosition;
@@ -3277,7 +3345,7 @@
     VkOffset2D                                  maxDstPosition;
     VkExtent2D                                  minDstExtent;
     VkExtent2D                                  maxDstExtent;
-} VkDisplayPlanePropertiesKHR;
+} VkDisplayPlaneCapabilitiesKHR;
 
 typedef struct {
     VkStructureType                             sType;
@@ -3289,13 +3357,16 @@
     float                                       globalAlpha;
     VkDisplayPlaneAlphaFlagsKHR                 alphaMode;
     VkExtent2D                                  imageSize;
-} VkSurfaceDescriptionDisplayPlaneKHR;
+} VkDisplaySurfaceCreateInfoKHR;
 
 
 typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VkResult (VKAPI *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayKHR* pProperties);
 typedef VkResult (VKAPI *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
 typedef VkResult (VKAPI *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, VkDisplayModeKHR* pMode);
-typedef VkResult (VKAPI *PFN_vkGetDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlanePropertiesKHR* pProperties);
+typedef VkResult (VKAPI *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeCreateInfoKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
+typedef VkResult (VKAPI *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, VkSurfaceKHR* pSurface);
 
 #ifdef VK_PROTOTYPES
 VkResult VKAPI vkGetPhysicalDeviceDisplayPropertiesKHR(
@@ -3303,6 +3374,16 @@
     uint32_t*                                   pPropertyCount,
     VkDisplayPropertiesKHR*                     pProperties);
 
+VkResult VKAPI vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayPlanePropertiesKHR*                pProperties);
+
+VkResult VKAPI vkGetDisplayPlaneSupportedDisplaysKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t*                                   pPropertyCount,
+    VkDisplayKHR*                               pProperties);
+
 VkResult VKAPI vkGetDisplayModePropertiesKHR(
     VkPhysicalDevice                            physicalDevice,
     VkDisplayKHR                                display,
@@ -3315,16 +3396,20 @@
     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
     VkDisplayModeKHR*                           pMode);
 
-VkResult VKAPI vkGetDisplayPlanePropertiesKHR(
+VkResult VKAPI vkGetDisplayPlaneCapabilitiesKHR(
     VkPhysicalDevice                            physicalDevice,
-    VkDisplayKHR                                display,
-    VkDisplayModeKHR                            mode,
+    VkDisplayModeCreateInfoKHR                  mode,
     uint32_t                                    planeIndex,
-    VkDisplayPlanePropertiesKHR*                pProperties);
+    VkDisplayPlaneCapabilitiesKHR*              pCapabilities);
+
+VkResult VKAPI vkCreateDisplayPlaneSurfaceKHR(
+    VkInstance                                  instance,
+    const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
+    VkSurfaceKHR*                               pSurface);
 #endif
 
 #define vk_ext_khr_display_swapchain 1
-#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_REVISION 4
+#define VK_EXT_KHR_DISPLAY_SWAPCHAIN_REVISION 6
 #define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NUMBER 4
 #define VK_EXT_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_EXT_KHR_display_swapchain"
 #define VK_STRUCTURE_TYPE_DISPLAY_SWAPCHAIN_CREATE_INFO_KHR ((VkStructureType)(int)0xc0001000)
@@ -3342,47 +3427,60 @@
     const void*                                   pNext;
     VkRect2D                                    srcRect;
     VkRect2D                                    dstRect;
+    VkBool32                                    persistent;
 } VkDisplayPresentInfoKHR;
 
 
 
-#ifdef VK_USE_PLATFORM_X11_KHR
-#define vk_ext_khr_x11_surface 1
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+#define vk_ext_khr_xlib_surface 1
 #include <X11/Xlib.h>
 
-#define VK_EXT_KHR_X11_SURFACE_REVISION   1
-#define VK_EXT_KHR_X11_SURFACE_EXTENSION_NUMBER 5
-#define VK_EXT_KHR_X11_SURFACE_EXTENSION_NAME "VK_EXT_KHR_x11_surface"
+#define VK_EXT_KHR_XLIB_SURFACE_REVISION  3
+#define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NUMBER 5
+#define VK_EXT_KHR_XLIB_SURFACE_EXTENSION_NAME "vk_ext_khr_xlib_surface"
 
-typedef VkResult (VKAPI *PFN_vkCreateX11SurfaceKHR)(VkInstance instance, Display* dpy, Window root, Window window, VkSurfaceKHR* pSurface);
+typedef VkResult (VKAPI *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, Display* dpy, Window window, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualId);
 
 #ifdef VK_PROTOTYPES
-VkResult VKAPI vkCreateX11SurfaceKHR(
+VkResult VKAPI vkCreateXlibSurfaceKHR(
     VkInstance                                  instance,
     Display*                                    dpy,
-    Window                                      root,
     Window                                      window,
     VkSurfaceKHR*                               pSurface);
+
+VkBool32 VKAPI vkGetPhysicalDeviceXlibPresentationSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    queueFamilyIndex,
+    Display*                                    dpy,
+    VisualID                                    visualId);
 #endif
-#endif /* VK_USE_PLATFORM_X11_KHR */
+#endif /* VK_USE_PLATFORM_XLIB_KHR */
 
 #ifdef VK_USE_PLATFORM_XCB_KHR
 #define vk_ext_khr_xcb_surface 1
 #include <xcb/xcb.h>
 
-#define VK_EXT_KHR_XCB_SURFACE_REVISION   1
+#define VK_EXT_KHR_XCB_SURFACE_REVISION   3
 #define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NUMBER 6
 #define VK_EXT_KHR_XCB_SURFACE_EXTENSION_NAME "VK_EXT_KHR_xcb_surface"
 
-typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t root, xcb_window_t window, VkSurfaceKHR* pSurface);
+typedef VkResult (VKAPI *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, xcb_connection_t* connection, xcb_window_t window, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
 
 #ifdef VK_PROTOTYPES
 VkResult VKAPI vkCreateXcbSurfaceKHR(
     VkInstance                                  instance,
     xcb_connection_t*                           connection,
-    xcb_window_t                                root,
     xcb_window_t                                window,
     VkSurfaceKHR*                               pSurface);
+
+VkBool32 VKAPI vkGetPhysicalDeviceXcbPresentationSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    queueFamilyIndex,
+    xcb_connection_t*                           connection,
+    xcb_visualid_t                              visual_id);
 #endif
 #endif /* VK_USE_PLATFORM_XCB_KHR */
 
@@ -3390,11 +3488,12 @@
 #define vk_ext_khr_wayland_surface 1
 #include <wayland-client.h>
 
-#define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 1
+#define VK_EXT_KHR_WAYLAND_SURFACE_REVISION 2
 #define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NUMBER 7
 #define VK_EXT_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_EXT_KHR_wayland_surface"
 
 typedef VkResult (VKAPI *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, struct wl_display* display, struct wl_surface* surface, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
 
 #ifdef VK_PROTOTYPES
 VkResult VKAPI vkCreateWaylandSurfaceKHR(
@@ -3402,6 +3501,11 @@
     struct wl_display*                          display,
     struct wl_surface*                          surface,
     VkSurfaceKHR*                               pSurface);
+
+VkBool32 VKAPI vkGetPhysicalDeviceWaylandPresentationSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    queueFamilyIndex,
+    struct wl_display*                          display);
 #endif
 #endif /* VK_USE_PLATFORM_WAYLAND_KHR */
 
@@ -3409,11 +3513,12 @@
 #define vk_ext_khr_mir_surface 1
 #include <mir_toolkit/client_types.h>
 
-#define VK_EXT_KHR_MIR_SURFACE_REVISION   1
+#define VK_EXT_KHR_MIR_SURFACE_REVISION   2
 #define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NUMBER 8
 #define VK_EXT_KHR_MIR_SURFACE_EXTENSION_NAME "VK_EXT_KHR_mir_surface"
 
 typedef VkResult (VKAPI *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, MirConnection* connection, MirSurface* mirSurface, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
 
 #ifdef VK_PROTOTYPES
 VkResult VKAPI vkCreateMirSurfaceKHR(
@@ -3421,6 +3526,11 @@
     MirConnection*                              connection,
     MirSurface*                                 mirSurface,
     VkSurfaceKHR*                               pSurface);
+
+VkBool32 VKAPI vkGetPhysicalDeviceMirPresentationSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    queueFamilyIndex,
+    MirConnection*                              connection);
 #endif
 #endif /* VK_USE_PLATFORM_MIR_KHR */
 
@@ -3448,11 +3558,12 @@
 #define vk_ext_khr_win32_surface 1
 #include <windows.h>
 
-#define VK_EXT_KHR_WIN32_SURFACE_REVISION 1
+#define VK_EXT_KHR_WIN32_SURFACE_REVISION 2
 #define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NUMBER 10
 #define VK_EXT_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_EXT_KHR_win32_surface"
 
 typedef VkResult (VKAPI *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, HINSTANCE hinstance, HWND hwnd, VkSurfaceKHR* pSurface);
+typedef VkBool32 (VKAPI *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
 
 #ifdef VK_PROTOTYPES
 VkResult VKAPI vkCreateWin32SurfaceKHR(
@@ -3460,6 +3571,10 @@
     HINSTANCE                                   hinstance,
     HWND                                        hwnd,
     VkSurfaceKHR*                               pSurface);
+
+VkBool32 VKAPI vkGetPhysicalDeviceWin32PresentationSupportKHR(
+    VkPhysicalDevice                            physicalDevice,
+    uint32_t                                    queueFamilyIndex);
 #endif
 #endif /* VK_USE_PLATFORM_WIN32_KHR */
 
diff --git a/vulkan/libvulkan/entry.cpp b/vulkan/libvulkan/entry.cpp
index 386acbf..1360862 100644
--- a/vulkan/libvulkan/entry.cpp
+++ b/vulkan/libvulkan/entry.cpp
@@ -212,18 +212,8 @@
 }
 
 __attribute__((visibility("default")))
-VkResult vkQueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo) {
-    return GetVtbl(queue).QueueBindSparseBufferMemory(queue, buffer, bindInfoCount, pBindInfo);
-}
-
-__attribute__((visibility("default")))
-VkResult vkQueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseMemoryBindInfo* pBindInfo) {
-    return GetVtbl(queue).QueueBindSparseImageOpaqueMemory(queue, image, bindInfoCount, pBindInfo);
-}
-
-__attribute__((visibility("default")))
-VkResult vkQueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t bindInfoCount, const VkSparseImageMemoryBindInfo* pBindInfo) {
-    return GetVtbl(queue).QueueBindSparseImageMemory(queue, image, bindInfoCount, pBindInfo);
+VkResult vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) {
+    return GetVtbl(queue).QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
 }
 
 __attribute__((visibility("default")))
@@ -752,7 +742,7 @@
 }
 
 __attribute__((visibility("default")))
-VkBool32 vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface) {
+VkResult vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface) {
     return GetVtbl(physicalDevice).GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface);
 }
 
diff --git a/vulkan/libvulkan/get_proc_addr.cpp b/vulkan/libvulkan/get_proc_addr.cpp
index 68a77d5..a0987e2 100644
--- a/vulkan/libvulkan/get_proc_addr.cpp
+++ b/vulkan/libvulkan/get_proc_addr.cpp
@@ -188,9 +188,7 @@
     {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
     {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
     {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(vkMergePipelineCaches)},
-    {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseBufferMemory)},
-    {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
-    {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
+    {"vkQueueBindSparse", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparse)},
     {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
     {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
     {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
@@ -347,9 +345,7 @@
     {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
     {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
     {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
-    {"vkQueueBindSparseBufferMemory", offsetof(DeviceVtbl, QueueBindSparseBufferMemory)},
-    {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
-    {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
+    {"vkQueueBindSparse", offsetof(DeviceVtbl, QueueBindSparse)},
     {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
     {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
     {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
@@ -591,19 +587,9 @@
         ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
         success = false;
     }
-    vtbl.QueueBindSparseBufferMemory = reinterpret_cast<PFN_vkQueueBindSparseBufferMemory>(get_proc_addr(device, "vkQueueBindSparseBufferMemory"));
-    if (UNLIKELY(!vtbl.QueueBindSparseBufferMemory)) {
-        ALOGE("missing device proc: %s", "vkQueueBindSparseBufferMemory");
-        success = false;
-    }
-    vtbl.QueueBindSparseImageOpaqueMemory = reinterpret_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(get_proc_addr(device, "vkQueueBindSparseImageOpaqueMemory"));
-    if (UNLIKELY(!vtbl.QueueBindSparseImageOpaqueMemory)) {
-        ALOGE("missing device proc: %s", "vkQueueBindSparseImageOpaqueMemory");
-        success = false;
-    }
-    vtbl.QueueBindSparseImageMemory = reinterpret_cast<PFN_vkQueueBindSparseImageMemory>(get_proc_addr(device, "vkQueueBindSparseImageMemory"));
-    if (UNLIKELY(!vtbl.QueueBindSparseImageMemory)) {
-        ALOGE("missing device proc: %s", "vkQueueBindSparseImageMemory");
+    vtbl.QueueBindSparse = reinterpret_cast<PFN_vkQueueBindSparse>(get_proc_addr(device, "vkQueueBindSparse"));
+    if (UNLIKELY(!vtbl.QueueBindSparse)) {
+        ALOGE("missing device proc: %s", "vkQueueBindSparse");
         success = false;
     }
     vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
diff --git a/vulkan/libvulkan/get_proc_addr.cpp.tmpl b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
index c6ec0d1..217647f 100644
--- a/vulkan/libvulkan/get_proc_addr.cpp.tmpl
+++ b/vulkan/libvulkan/get_proc_addr.cpp.tmpl
@@ -279,7 +279,7 @@
   {{$ext := index $.Arguments 0}}
   {{     if eq $ext "VK_EXT_KHR_display"}}true
   {{else if eq $ext "VK_EXT_KHR_display_swapchain"}}true
-  {{else if eq $ext "VK_EXT_KHR_x11_surface"}}true
+  {{else if eq $ext "VK_EXT_KHR_xlib_surface"}}true
   {{else if eq $ext "VK_EXT_KHR_xcb_surface"}}true
   {{else if eq $ext "VK_EXT_KHR_wayland_surface"}}true
   {{else if eq $ext "VK_EXT_KHR_mir_surface"}}true
diff --git a/vulkan/libvulkan/loader.h b/vulkan/libvulkan/loader.h
index e166887..5c176db 100644
--- a/vulkan/libvulkan/loader.h
+++ b/vulkan/libvulkan/loader.h
@@ -136,9 +136,7 @@
 
     PFN_vkQueueSubmit QueueSubmit;
     PFN_vkQueueWaitIdle QueueWaitIdle;
-    PFN_vkQueueBindSparseBufferMemory QueueBindSparseBufferMemory;
-    PFN_vkQueueBindSparseImageOpaqueMemory QueueBindSparseImageOpaqueMemory;
-    PFN_vkQueueBindSparseImageMemory QueueBindSparseImageMemory;
+    PFN_vkQueueBindSparse QueueBindSparse;
 
     PFN_vkBeginCommandBuffer BeginCommandBuffer;
     PFN_vkEndCommandBuffer EndCommandBuffer;
@@ -268,7 +266,7 @@
                                  ANativeWindow* window,
                                  VkSurfaceKHR* surface);
 void DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface);
-VkBool32 GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
+VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice pdev,
                                             uint32_t queue_family,
                                             VkSurfaceKHR surface);
 VkResult GetSurfacePropertiesKHR(VkDevice device,
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
index f6ab081..88619186 100644
--- a/vulkan/libvulkan/swapchain.cpp
+++ b/vulkan/libvulkan/swapchain.cpp
@@ -175,10 +175,10 @@
     FreeMem(instance, surface);
 }
 
-VkBool32 GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
+VkResult GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice /*pdev*/,
                                             uint32_t /*queue_family*/,
                                             VkSurfaceKHR /*surface*/) {
-    return VK_TRUE;
+    return VK_SUCCESS;
 }
 
 VkResult GetSurfacePropertiesKHR(VkDevice /*device*/,
diff --git a/vulkan/nulldrv/null_driver.cpp b/vulkan/nulldrv/null_driver.cpp
index 9c56982..d6a879e 100644
--- a/vulkan/nulldrv/null_driver.cpp
+++ b/vulkan/nulldrv/null_driver.cpp
@@ -815,17 +815,7 @@
     ALOGV("TODO: vk%s", __FUNCTION__);
 }
 
-VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
-    ALOGV("TODO: vk%s", __FUNCTION__);
-    return VK_SUCCESS;
-}
-
-VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
-    ALOGV("TODO: vk%s", __FUNCTION__);
-    return VK_SUCCESS;
-}
-
-VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) {
+VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) {
     ALOGV("TODO: vk%s", __FUNCTION__);
     return VK_SUCCESS;
 }
diff --git a/vulkan/nulldrv/null_driver.h b/vulkan/nulldrv/null_driver.h
index dd6dc6b..70283c4 100644
--- a/vulkan/nulldrv/null_driver.h
+++ b/vulkan/nulldrv/null_driver.h
@@ -60,9 +60,7 @@
 void GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
 void GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
 void GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties);
-VkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
-VkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo);
-VkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo);
+VkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
 VkResult CreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocCallbacks* allocator, VkFence* pFence);
 void DestroyFence(VkDevice device, VkFence fence, const VkAllocCallbacks* allocator);
 VkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
diff --git a/vulkan/nulldrv/null_driver_gen.cpp b/vulkan/nulldrv/null_driver_gen.cpp
index a026bbf..f836a70 100644
--- a/vulkan/nulldrv/null_driver_gen.cpp
+++ b/vulkan/nulldrv/null_driver_gen.cpp
@@ -178,9 +178,7 @@
     {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkInvalidateMappedMemoryRanges>(InvalidateMappedMemoryRanges))},
     {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkMapMemory>(MapMemory))},
     {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkMergePipelineCaches>(MergePipelineCaches))},
-    {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseBufferMemory>(QueueBindSparseBufferMemory))},
-    {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseImageMemory>(QueueBindSparseImageMemory))},
-    {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(QueueBindSparseImageOpaqueMemory))},
+    {"vkQueueBindSparse", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueBindSparse>(QueueBindSparse))},
     {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueSubmit>(QueueSubmit))},
     {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkQueueWaitIdle>(QueueWaitIdle))},
     {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(static_cast<PFN_vkResetCommandBuffer>(ResetCommandBuffer))},