Additional changes to Vulkan 1.1 API updates

This commit includes the following:

- Make new/Vulkan 1.1 core commands be optional in codegen.  Before this
  change, the loader crashed when starting with a 1.0 app, and using a 1.0 ICD.
  That's because the loader couldn't find "required" 1.1 entrypoints.  This
  change makes those entrypoints "optional" with a new annotation in the api
  file.

- Changes from internal reviews, including a fix for the algorithm of
  EnumeratePhysicalDeviceGroups.

Test: Run with a 1.0 app with a 1.0 driver and make sure the loader works
Change-Id: I55914b680a1601cb9f3f2cc0257091a0a34ae7f2
diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
index 1cb02c4..2bbe5e6 100644
--- a/vulkan/api/vulkan.api
+++ b/vulkan/api/vulkan.api
@@ -37,7 +37,7 @@
 define VK_MAX_DESCRIPTION_SIZE          256
 define VK_MAX_MEMORY_TYPES              32
 define VK_MAX_MEMORY_HEAPS              16    /// The maximum number of unique memory heaps, each of which supporting 1 or more memory types.
-//@version 1.1
+@vulkan1_1
 define VK_MAX_DEVICE_GROUP_SIZE         32
 define VK_LUID_SIZE                     8
 define VK_QUEUE_FAMILY_EXTERNAL         -2
@@ -491,7 +491,7 @@
 @nonDispatchHandle type u64 VkRenderPass
 @nonDispatchHandle type u64 VkPipelineCache
 
-//@version 1.1
+@vulkan1_1
 @nonDispatchHandle type u64 VkSamplerYcbcrConversion
 @nonDispatchHandle type u64 VkDescriptorUpdateTemplate
 
@@ -536,7 +536,7 @@
     VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL                    = 0x00000007,   /// Optimal layout when image is used only as destination of transfer operations
     VK_IMAGE_LAYOUT_PREINITIALIZED                          = 0x00000008,   /// Initial layout used when the data is populated by the CPU
 
-    //@version 1.1
+    //@vulkan1_1
     VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000,
     VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001,
 
@@ -1023,7 +1023,7 @@
     VK_FORMAT_ASTC_12x12_UNORM_BLOCK                        = 183,
     VK_FORMAT_ASTC_12x12_SRGB_BLOCK                         = 184,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_FORMAT_G8B8G8R8_422_UNORM                            = 1000156000,
     VK_FORMAT_B8G8R8G8_422_UNORM                            = 1000156001,
     VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM                     = 1000156002,
@@ -1158,7 +1158,7 @@
     VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO               = 47,
     VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO                 = 48,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES       = 1000094000,
     VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO                   = 1000157000,
     VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO                    = 1000157001,
@@ -1554,7 +1554,7 @@
     VK_ERROR_FORMAT_NOT_SUPPORTED                           = 0xFFFFFFF5, // -11
     VK_ERROR_FRAGMENTED_POOL                                = 0xFFFFFFF4, // -12
 
-    //@version 1.1
+    //@vulkan1_1
     VK_ERROR_OUT_OF_POOL_MEMORY                             = 0xC4642878, // -1000069000
     VK_ERROR_INVALID_EXTERNAL_HANDLE                        = 0xC4641CBD, // -1000072003
 
@@ -1630,7 +1630,7 @@
     VK_OBJECT_TYPE_FRAMEBUFFER                              = 24,
     VK_OBJECT_TYPE_COMMAND_POOL                             = 25,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION                 = 1000156000,
     VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE               = 1000085000,
 
@@ -1662,7 +1662,7 @@
 }
 
 
-//@version 1.1 enums
+//@vulkan1_1 enums
 
 enum VkPointClippingBehavior {
     VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES              = 0,
@@ -1711,7 +1711,6 @@
 
 @extension("VK_KHR_surface") // 1
 enum VkColorSpaceKHR {
-    VK_COLORSPACE_SRGB_NONLINEAR_KHR                        = 0x00000000,
     VK_COLOR_SPACE_SRGB_NONLINEAR_KHR                       = 0x00000000,
 
     //@extension("VK_EXT_swapchain_colorspace") // 105
@@ -1923,7 +1922,7 @@
     VK_QUEUE_TRANSFER_BIT                                   = 0x00000004,    /// Queue supports transfer operations
     VK_QUEUE_SPARSE_BINDING_BIT                             = 0x00000008,    /// Queue supports sparse resource memory management operations
 
-    //@version 1.1
+    //@vulkan1_1
     VK_QUEUE_PROTECTED_BIT                                  = 0x00000010,
 }
 
@@ -1936,7 +1935,7 @@
     VK_MEMORY_PROPERTY_HOST_CACHED_BIT                      = 0x00000008,
     VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT                 = 0x00000010,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_MEMORY_PROPERTY_PROTECTED_BIT                        = 0x00000020,
 }
 
@@ -1945,7 +1944,7 @@
 bitfield VkMemoryHeapFlagBits {
     VK_MEMORY_HEAP_DEVICE_LOCAL_BIT                         = 0x00000001,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_MEMORY_HEAP_MULTI_INSTANCE_BIT                       = 0x00000002,
 
     //@extension("VK_KHR_device_group_creation") // 71
@@ -2002,7 +2001,7 @@
     VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT                   = 0x00000002,    /// Buffer should support sparse backing with partial residency
     VK_BUFFER_CREATE_SPARSE_ALIASED_BIT                     = 0x00000004,    /// Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
 
-    //@version 1.1
+    //@vulkan1_1
     VK_BUFFER_CREATE_PROTECTED_BIT                          = 0x00000008,
 }
 
@@ -2053,14 +2052,14 @@
     VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT                      = 0x00000008,    /// Allows image views to have different format than the base image
     VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT                     = 0x00000010,    /// Allows creating image views with cube type from the created image
 
-    //@version 1.1
-    VK_IMAGE_CREATE_ALIAS_BIT                               = 0x00000400,
-    VK_IMAGE_CREATE_BIND_SFR_BIT                            = 0x00000040,
+    //@vulkan1_1
     VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT                 = 0x00000020,
+    VK_IMAGE_CREATE_BIND_SFR_BIT                            = 0x00000040,
     VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT         = 0x00000080,
     VK_IMAGE_CREATE_EXTENDED_USAGE_BIT                      = 0x00000100,
-    VK_IMAGE_CREATE_PROTECTED_BIT                           = 0x00000800,
     VK_IMAGE_CREATE_DISJOINT_BIT                            = 0x00000200,
+    VK_IMAGE_CREATE_ALIAS_BIT                               = 0x00000400,
+    VK_IMAGE_CREATE_PROTECTED_BIT                           = 0x00000800,
 
     //@extension("VK_KHR_maintenance1") // 70
     VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR             = 0x00000020,
@@ -2068,9 +2067,6 @@
     //@extension("VK_KHR_device_group") // 61
     VK_IMAGE_CREATE_BIND_SFR_BIT_KHR                        = 0x00000040,
 
-    //@extension("VK_EXT_sample_locations") // 144
-    VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
-
     //@extension("VK_KHR_maintenance2") // 118
     VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR     = 0x00000080,
     VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR                  = 0x00000100,
@@ -2080,6 +2076,9 @@
 
     //@extension("VK_KHR_bind_memory2") // 158
     VK_IMAGE_CREATE_ALIAS_BIT_KHR                           = 0x00000400,
+
+    //@extension("VK_EXT_sample_locations") // 144
+    VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
 }
 
 /// Image view creation flags
@@ -2094,7 +2093,7 @@
     VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT                = 0x00000002,
     VK_PIPELINE_CREATE_DERIVATIVE_BIT                       = 0x00000004,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT     = 0x00000008,
     VK_PIPELINE_CREATE_DISPATCH_BASE                        = 0x00000010,
 
@@ -2140,7 +2139,7 @@
     VK_FORMAT_FEATURE_BLIT_DST_BIT                          = 0x00000800,    /// Format can be used as the destination image of blits with vkCommandBlitImage
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT       = 0x00001000,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_FORMAT_FEATURE_TRANSFER_SRC_BIT                      = 0x00004000,
     VK_FORMAT_FEATURE_TRANSFER_DST_BIT                      = 0x00008000,
     VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT                                                   = 0x00020000,
@@ -2233,7 +2232,7 @@
     VK_IMAGE_ASPECT_STENCIL_BIT                             = 0x00000004,
     VK_IMAGE_ASPECT_METADATA_BIT                            = 0x00000008,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_IMAGE_ASPECT_PLANE_0_BIT                             = 0x00000010,
     VK_IMAGE_ASPECT_PLANE_1_BIT                             = 0x00000020,
     VK_IMAGE_ASPECT_PLANE_2_BIT                             = 0x00000040,
@@ -2304,7 +2303,7 @@
     VK_COMMAND_POOL_CREATE_TRANSIENT_BIT                    = 0x00000001,  /// Command buffers have a short lifetime
     VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT         = 0x00000002,  /// Command buffers may release their memory individually
 
-    //@version 1.1
+    //@vulkan1_1
     VK_COMMAND_POOL_CREATE_PROTECTED_BIT                    = 0x00000004,
 }
 
@@ -2349,7 +2348,7 @@
 
 /// Device queue creation flags
 type VkFlags VkDeviceQueueCreateFlags
-//@version 1.1
+@vulkan1_1
 bitfield VkDeviceQueueCreateFlagBits {
     VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT                    = 0x00000001,
 }
@@ -2451,7 +2450,7 @@
 bitfield VkDependencyFlagBits {
     VK_DEPENDENCY_BY_REGION_BIT                             = 0x00000001,
 
-    //@version 1.1
+    //@vulkan1_1
     VK_DEPENDENCY_DEVICE_GROUP_BIT                          = 0x00000004,
     VK_DEPENDENCY_VIEW_LOCAL_BIT                            = 0x00000002,
 
@@ -2471,7 +2470,7 @@
     VK_CULL_MODE_FRONT_AND_BACK                             = 0x00000003,
 }
 
-//@version 1.1 flags
+//@vulkan1_1 flags
 
 /// Subgroup feature flags
 type VkFlags VkSubgroupFeatureFlags
@@ -2603,15 +2602,15 @@
 type VkFlags VkSwapchainCreateFlagsKHR
 @extension("VK_KHR_swapchain") // 2
 bitfield VkSwapchainCreateFlagBitsKHR {
-    //@version 1.1
+    //@vulkan1_1
     VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHR                    = 0x00000001,
     VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR                   = 0x00000002,
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 type VkFlags VkDeviceGroupPresentModeFlagsKHR
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 bitfield VkDeviceGroupPresentModeFlagBitsKHR {
     VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR              = 0x00000001,
@@ -3994,7 +3993,7 @@
     u32                                         z
 }
 
-//@version 1.1 structures
+//@vulkan1_1 structures
 
 class VkPhysicalDeviceSubgroupProperties {
     VkStructureType                             sType
@@ -4535,7 +4534,7 @@
     VkResult*                                   pResults
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 class VkImageSwapchainCreateInfoKHR {
     VkStructureType                             sType
@@ -4543,7 +4542,7 @@
     VkSwapchainKHR                              swapchain
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 class VkBindImageMemorySwapchainInfoKHR {
     VkStructureType                             sType
@@ -4552,7 +4551,7 @@
     u32                                         imageIndex
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 class VkAcquireNextImageInfoKHR {
     VkStructureType                             sType
@@ -4564,7 +4563,7 @@
     u32                                         deviceMask
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 class VkDeviceGroupPresentCapabilitiesKHR {
     VkStructureType                             sType
@@ -4573,7 +4572,7 @@
     VkDeviceGroupPresentModeFlagsKHR            modes
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 class VkDeviceGroupPresentInfoKHR {
     VkStructureType                             sType
@@ -4583,7 +4582,7 @@
     VkDeviceGroupPresentModeFlagBitsKHR         mode
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 class VkDeviceGroupSwapchainCreateInfoKHR {
     VkStructureType                             sType
@@ -8259,13 +8258,15 @@
     }
 }
 
-//@version 1.1 functions
+//@vulkan1_1 functions
 
+@vulkan1_1
 cmd VkResult vkEnumerateInstanceVersion(
         u32*                                            pApiVersion) {
     return ?
 }
 
+@vulkan1_1
 cmd VkResult vkBindBufferMemory2(
         VkDevice                                        device,
         u32                                             bindInfoCount,
@@ -8273,6 +8274,7 @@
     return ?
 }
 
+@vulkan1_1
 cmd VkResult vkBindImageMemory2(
         VkDevice                                        device,
         u32                                             bindInfoCount,
@@ -8280,6 +8282,7 @@
     return ?
 }
 
+@vulkan1_1
 cmd void vkGetDeviceGroupPeerMemoryFeatures(
         VkDevice                                    device,
         u32                                         heapIndex,
@@ -8288,11 +8291,13 @@
         VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures) {
 }
 
+@vulkan1_1
 cmd void vkCmdSetDeviceMask(
         VkCommandBuffer                             commandBuffer,
         u32                                         deviceMask) {
 }
 
+@vulkan1_1
 cmd void vkCmdDispatchBase(
         VkCommandBuffer                             commandBuffer,
         u32                                         baseGroupX,
@@ -8304,6 +8309,7 @@
 }
 
 @threadSafety("system")
+@vulkan1_1
 cmd VkResult vkEnumeratePhysicalDeviceGroups(
         VkInstance                                  instance,
         u32*                                        pPhysicalDeviceGroupCount,
@@ -8325,18 +8331,21 @@
     return ?
 }
 
+@vulkan1_1
 cmd void vkGetImageMemoryRequirements2(
         VkDevice                                    device,
         const VkImageMemoryRequirementsInfo2*       pInfo,
         VkMemoryRequirements2*                      pMemoryRequirements) {
 }
 
+@vulkan1_1
 cmd void vkGetBufferMemoryRequirements2(
         VkDevice                                    device,
         const VkBufferMemoryRequirementsInfo2*      pInfo,
         VkMemoryRequirements2*                      pMemoryRequirements) {
 }
 
+@vulkan1_1
 cmd void vkGetImageSparseMemoryRequirements2(
         VkDevice                                        device,
         const VkImageSparseMemoryRequirementsInfo2*     pInfo,
@@ -8344,22 +8353,26 @@
         VkSparseImageMemoryRequirements2*               pSparseMemoryRequirements) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceFeatures2(
         VkPhysicalDevice                            physicalDevice,
         VkPhysicalDeviceFeatures2*                  pFeatures) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceProperties2(
         VkPhysicalDevice                            physicalDevice,
         VkPhysicalDeviceProperties2*                pProperties) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceFormatProperties2(
         VkPhysicalDevice                            physicalDevice,
         VkFormat                                    format,
         VkFormatProperties2*                        pFormatProperties) {
 }
 
+@vulkan1_1
 cmd VkResult vkGetPhysicalDeviceImageFormatProperties2(
         VkPhysicalDevice                            physicalDevice,
         const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
@@ -8367,17 +8380,20 @@
     return ?
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceQueueFamilyProperties2(
         VkPhysicalDevice                            physicalDevice,
         u32*                                        pQueueFamilyPropertyCount,
         VkQueueFamilyProperties2*                   pQueueFamilyProperties) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceMemoryProperties2(
         VkPhysicalDevice                            physicalDevice,
         VkPhysicalDeviceMemoryProperties2*          pMemoryProperties) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceSparseImageFormatProperties2(
         VkPhysicalDevice                                    physicalDevice,
         const VkPhysicalDeviceSparseImageFormatInfo2*       pFormatInfo,
@@ -8385,6 +8401,7 @@
         VkSparseImageFormatProperties2*                     pProperties) {
 }
 
+@vulkan1_1
 cmd void vkTrimCommandPool(
         VkDevice                                    device,
         VkCommandPool                               commandPool,
@@ -8392,6 +8409,7 @@
 }
 
 
+@vulkan1_1
 cmd void vkGetDeviceQueue2(
         VkDevice                                    device,
         const VkDeviceQueueInfo2*                   pQueueInfo,
@@ -8406,6 +8424,7 @@
     }
 }
 
+@vulkan1_1
 cmd VkResult vkCreateSamplerYcbcrConversion(
         VkDevice                                        device,
         const VkSamplerYcbcrConversionCreateInfo*       pCreateInfo,
@@ -8414,12 +8433,14 @@
     return ?
 }
 
+@vulkan1_1
 cmd void vkDestroySamplerYcbcrConversion(
         VkDevice                                        device,
         VkSamplerYcbcrConversion                        ycbcrConversion,
         const VkAllocationCallbacks*                    pAllocator) {
 }
 
+@vulkan1_1
 cmd VkResult vkCreateDescriptorUpdateTemplate(
         VkDevice                                    device,
         const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
@@ -8428,12 +8449,14 @@
     return ?
 }
 
+@vulkan1_1
 cmd void vkDestroyDescriptorUpdateTemplate(
         VkDevice                                    device,
         VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
         const VkAllocationCallbacks*                pAllocator) {
 }
 
+@vulkan1_1
 cmd void vkUpdateDescriptorSetWithTemplate(
         VkDevice                                    device,
         VkDescriptorSet                             descriptorSet,
@@ -8441,24 +8464,28 @@
         const void*                                 pData) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceExternalBufferProperties(
         VkPhysicalDevice                                physicalDevice,
         const VkPhysicalDeviceExternalBufferInfo*       pExternalBufferInfo,
         VkExternalBufferProperties*                     pExternalBufferProperties) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceExternalFenceProperties(
         VkPhysicalDevice                            physicalDevice,
         const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
         VkExternalFenceProperties*                  pExternalFenceProperties) {
 }
 
+@vulkan1_1
 cmd void vkGetPhysicalDeviceExternalSemaphoreProperties(
         VkPhysicalDevice                                physicalDevice,
         const VkPhysicalDeviceExternalSemaphoreInfo*    pExternalSemaphoreInfo,
         VkExternalSemaphoreProperties*                  pExternalSemaphoreProperties) {
 }
 
+@vulkan1_1
 cmd void vkGetDescriptorSetLayoutSupport(
         VkDevice                                    device,
         const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
@@ -8620,7 +8647,7 @@
     return ?
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 cmd VkResult vkGetDeviceGroupPresentCapabilitiesKHR(
         VkDevice                                    device,
@@ -8628,7 +8655,7 @@
     return ?
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 cmd VkResult vkGetDeviceGroupSurfacePresentModesKHR(
         VkDevice                                    device,
@@ -8637,7 +8664,7 @@
     return ?
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 cmd VkResult vkGetPhysicalDevicePresentRectanglesKHR(
         VkPhysicalDevice                            physicalDevice,
@@ -8647,7 +8674,7 @@
     return ?
 }
 
-//@version 1.1
+@vulkan1_1
 @extension("VK_KHR_swapchain") // 2
 cmd VkResult vkAcquireNextImage2KHR(
         VkDevice                                    device,
diff --git a/vulkan/libvulkan/api_gen.cpp b/vulkan/libvulkan/api_gen.cpp
index 7bc04a8..2aa1d5a 100644
--- a/vulkan/libvulkan/api_gen.cpp
+++ b/vulkan/libvulkan/api_gen.cpp
@@ -152,23 +152,23 @@
     INIT_PROC(true, instance, CreateDevice);
     INIT_PROC(true, instance, EnumerateDeviceExtensionProperties);
     INIT_PROC(true, instance, GetPhysicalDeviceSparseImageFormatProperties);
-    INIT_PROC(true, instance, EnumeratePhysicalDeviceGroups);
-    INIT_PROC(true, instance, GetPhysicalDeviceFeatures2);
-    INIT_PROC(true, instance, GetPhysicalDeviceProperties2);
-    INIT_PROC(true, instance, GetPhysicalDeviceFormatProperties2);
-    INIT_PROC(true, instance, GetPhysicalDeviceImageFormatProperties2);
-    INIT_PROC(true, instance, GetPhysicalDeviceQueueFamilyProperties2);
-    INIT_PROC(true, instance, GetPhysicalDeviceMemoryProperties2);
-    INIT_PROC(true, instance, GetPhysicalDeviceSparseImageFormatProperties2);
-    INIT_PROC(true, instance, GetPhysicalDeviceExternalBufferProperties);
-    INIT_PROC(true, instance, GetPhysicalDeviceExternalFenceProperties);
-    INIT_PROC(true, instance, GetPhysicalDeviceExternalSemaphoreProperties);
+    INIT_PROC(false, instance, EnumeratePhysicalDeviceGroups);
+    INIT_PROC(false, instance, GetPhysicalDeviceFeatures2);
+    INIT_PROC(false, instance, GetPhysicalDeviceProperties2);
+    INIT_PROC(false, instance, GetPhysicalDeviceFormatProperties2);
+    INIT_PROC(false, instance, GetPhysicalDeviceImageFormatProperties2);
+    INIT_PROC(false, instance, GetPhysicalDeviceQueueFamilyProperties2);
+    INIT_PROC(false, instance, GetPhysicalDeviceMemoryProperties2);
+    INIT_PROC(false, instance, GetPhysicalDeviceSparseImageFormatProperties2);
+    INIT_PROC(false, instance, GetPhysicalDeviceExternalBufferProperties);
+    INIT_PROC(false, instance, GetPhysicalDeviceExternalFenceProperties);
+    INIT_PROC(false, instance, GetPhysicalDeviceExternalSemaphoreProperties);
     INIT_PROC_EXT(KHR_surface, true, instance, DestroySurfaceKHR);
     INIT_PROC_EXT(KHR_surface, true, instance, GetPhysicalDeviceSurfaceSupportKHR);
     INIT_PROC_EXT(KHR_surface, true, instance, GetPhysicalDeviceSurfaceCapabilitiesKHR);
     INIT_PROC_EXT(KHR_surface, true, instance, GetPhysicalDeviceSurfaceFormatsKHR);
     INIT_PROC_EXT(KHR_surface, true, instance, GetPhysicalDeviceSurfacePresentModesKHR);
-    INIT_PROC_EXT(KHR_swapchain, true, instance, GetPhysicalDevicePresentRectanglesKHR);
+    INIT_PROC_EXT(KHR_swapchain, false, instance, GetPhysicalDevicePresentRectanglesKHR);
     INIT_PROC_EXT(KHR_android_surface, true, instance, CreateAndroidSurfaceKHR);
     // clang-format on
 
@@ -304,30 +304,30 @@
     INIT_PROC(true, dev, CmdNextSubpass);
     INIT_PROC(true, dev, CmdEndRenderPass);
     INIT_PROC(true, dev, CmdExecuteCommands);
-    INIT_PROC(true, dev, BindBufferMemory2);
-    INIT_PROC(true, dev, BindImageMemory2);
-    INIT_PROC(true, dev, GetDeviceGroupPeerMemoryFeatures);
-    INIT_PROC(true, dev, CmdSetDeviceMask);
-    INIT_PROC(true, dev, CmdDispatchBase);
-    INIT_PROC(true, dev, GetImageMemoryRequirements2);
-    INIT_PROC(true, dev, GetBufferMemoryRequirements2);
-    INIT_PROC(true, dev, GetImageSparseMemoryRequirements2);
-    INIT_PROC(true, dev, TrimCommandPool);
-    INIT_PROC(true, dev, GetDeviceQueue2);
-    INIT_PROC(true, dev, CreateSamplerYcbcrConversion);
-    INIT_PROC(true, dev, DestroySamplerYcbcrConversion);
-    INIT_PROC(true, dev, CreateDescriptorUpdateTemplate);
-    INIT_PROC(true, dev, DestroyDescriptorUpdateTemplate);
-    INIT_PROC(true, dev, UpdateDescriptorSetWithTemplate);
-    INIT_PROC(true, dev, GetDescriptorSetLayoutSupport);
+    INIT_PROC(false, dev, BindBufferMemory2);
+    INIT_PROC(false, dev, BindImageMemory2);
+    INIT_PROC(false, dev, GetDeviceGroupPeerMemoryFeatures);
+    INIT_PROC(false, dev, CmdSetDeviceMask);
+    INIT_PROC(false, dev, CmdDispatchBase);
+    INIT_PROC(false, dev, GetImageMemoryRequirements2);
+    INIT_PROC(false, dev, GetBufferMemoryRequirements2);
+    INIT_PROC(false, dev, GetImageSparseMemoryRequirements2);
+    INIT_PROC(false, dev, TrimCommandPool);
+    INIT_PROC(false, dev, GetDeviceQueue2);
+    INIT_PROC(false, dev, CreateSamplerYcbcrConversion);
+    INIT_PROC(false, dev, DestroySamplerYcbcrConversion);
+    INIT_PROC(false, dev, CreateDescriptorUpdateTemplate);
+    INIT_PROC(false, dev, DestroyDescriptorUpdateTemplate);
+    INIT_PROC(false, dev, UpdateDescriptorSetWithTemplate);
+    INIT_PROC(false, dev, GetDescriptorSetLayoutSupport);
     INIT_PROC_EXT(KHR_swapchain, true, dev, CreateSwapchainKHR);
     INIT_PROC_EXT(KHR_swapchain, true, dev, DestroySwapchainKHR);
     INIT_PROC_EXT(KHR_swapchain, true, dev, GetSwapchainImagesKHR);
     INIT_PROC_EXT(KHR_swapchain, true, dev, AcquireNextImageKHR);
     INIT_PROC_EXT(KHR_swapchain, true, dev, QueuePresentKHR);
-    INIT_PROC_EXT(KHR_swapchain, true, dev, GetDeviceGroupPresentCapabilitiesKHR);
-    INIT_PROC_EXT(KHR_swapchain, true, dev, GetDeviceGroupSurfacePresentModesKHR);
-    INIT_PROC_EXT(KHR_swapchain, true, dev, AcquireNextImage2KHR);
+    INIT_PROC_EXT(KHR_swapchain, false, dev, GetDeviceGroupPresentCapabilitiesKHR);
+    INIT_PROC_EXT(KHR_swapchain, false, dev, GetDeviceGroupSurfacePresentModesKHR);
+    INIT_PROC_EXT(KHR_swapchain, false, dev, AcquireNextImage2KHR);
     // clang-format on
 
     return success;
diff --git a/vulkan/libvulkan/code-generator.tmpl b/vulkan/libvulkan/code-generator.tmpl
index e13ec0e..3b48e08 100644
--- a/vulkan/libvulkan/code-generator.tmpl
+++ b/vulkan/libvulkan/code-generator.tmpl
@@ -419,7 +419,7 @@
     INIT_PROC(§
   {{end}}
 
-  {{if GetAnnotation $ "optional"}}false{{else}}true{{end}}, §
+  {{if GetAnnotation $ "optional"}}false{{else if GetAnnotation $ "vulkan1_1"}}false{{else}}true{{end}}, §
 
   {{if (Macro "IsInstanceDispatched" $)}}
     instance, §
@@ -734,9 +734,6 @@
     {{else if eq $.Name "vkCreateDevice"}}true
     {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true
     {{else if eq $.Name "vkEnumeratePhysicalDeviceGroups"}}true
-    {{else if eq $.Name "vkGetDeviceGroupPresentCapabilitiesKHR"}}true
-    {{else if eq $.Name "vkGetDeviceGroupSurfacePresentModesKHR"}}true
-    {{else if eq $.Name "vkGetPhysicalDevicePresentRectanglesKHR"}}true
     {{else if eq $.Name "vkGetDeviceQueue"}}true
     {{else if eq $.Name "vkGetDeviceQueue2"}}true
     {{else if eq $.Name "vkAllocateCommandBuffers"}}true
@@ -976,9 +973,6 @@
     {{/* We cache physical devices in loader.cpp */}}
     {{else if eq $.Name "vkEnumeratePhysicalDevices"}}true
     {{else if eq $.Name "vkEnumeratePhysicalDeviceGroups"}}true
-    {{else if eq $.Name "vkGetDeviceGroupPresentCapabilitiesKHR"}}true
-    {{else if eq $.Name "vkGetDeviceGroupSurfacePresentModesKHR"}}true
-    {{else if eq $.Name "vkGetPhysicalDevicePresentRectanglesKHR"}}true
 
     {{else if eq $.Name "vkGetInstanceProcAddr"}}true
     {{else if eq $.Name "vkGetDeviceProcAddr"}}true
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp
index dfe6793..ade0bde 100644
--- a/vulkan/libvulkan/driver.cpp
+++ b/vulkan/libvulkan/driver.cpp
@@ -1053,9 +1053,13 @@
         instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) &&
         *pPhysicalDeviceGroupCount && pPhysicalDeviceGroupProperties) {
-        for (uint32_t i = 0;
-             i < pPhysicalDeviceGroupProperties->physicalDeviceCount; i++)
-            SetData(pPhysicalDeviceGroupProperties->physicalDevices[i], data);
+        for (uint32_t i = 0; i < *pPhysicalDeviceGroupCount; i++) {
+            for (uint32_t j = 0;
+                 j < pPhysicalDeviceGroupProperties->physicalDeviceCount; j++) {
+                SetData(pPhysicalDeviceGroupProperties->physicalDevices[j],
+                        data);
+            }
+        }
     }
 
     return result;
diff --git a/vulkan/libvulkan/driver_gen.cpp b/vulkan/libvulkan/driver_gen.cpp
index 5dde133..c6e8a7a 100644
--- a/vulkan/libvulkan/driver_gen.cpp
+++ b/vulkan/libvulkan/driver_gen.cpp
@@ -492,8 +492,7 @@
     INIT_PROC(true, instance, GetPhysicalDeviceProperties);
     INIT_PROC(true, instance, CreateDevice);
     INIT_PROC(true, instance, EnumerateDeviceExtensionProperties);
-    INIT_PROC(true, instance, EnumeratePhysicalDeviceGroups);
-    INIT_PROC_EXT(KHR_swapchain, true, instance, GetPhysicalDevicePresentRectanglesKHR);
+    INIT_PROC(false, instance, EnumeratePhysicalDeviceGroups);
     INIT_PROC_EXT(EXT_debug_report, true, instance, CreateDebugReportCallbackEXT);
     INIT_PROC_EXT(EXT_debug_report, true, instance, DestroyDebugReportCallbackEXT);
     INIT_PROC_EXT(EXT_debug_report, true, instance, DebugReportMessageEXT);
@@ -516,9 +515,7 @@
     INIT_PROC(true, dev, CreateImage);
     INIT_PROC(true, dev, DestroyImage);
     INIT_PROC(true, dev, AllocateCommandBuffers);
-    INIT_PROC(true, dev, GetDeviceQueue2);
-    INIT_PROC_EXT(KHR_swapchain, true, dev, GetDeviceGroupPresentCapabilitiesKHR);
-    INIT_PROC_EXT(KHR_swapchain, true, dev, GetDeviceGroupSurfacePresentModesKHR);
+    INIT_PROC(false, dev, GetDeviceQueue2);
     INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsageANDROID);
     INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage2ANDROID);
     INIT_PROC_EXT(ANDROID_native_buffer, true, dev, AcquireImageANDROID);
diff --git a/vulkan/libvulkan/driver_gen.h b/vulkan/libvulkan/driver_gen.h
index e7e3b99..646662f 100644
--- a/vulkan/libvulkan/driver_gen.h
+++ b/vulkan/libvulkan/driver_gen.h
@@ -68,7 +68,6 @@
     PFN_vkCreateDevice CreateDevice;
     PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
     PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
-    PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR;
     PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
     PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
     PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
@@ -85,8 +84,6 @@
     PFN_vkDestroyImage DestroyImage;
     PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
     PFN_vkGetDeviceQueue2 GetDeviceQueue2;
-    PFN_vkGetDeviceGroupPresentCapabilitiesKHR GetDeviceGroupPresentCapabilitiesKHR;
-    PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR;
     PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID;
     PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID;
     PFN_vkAcquireImageANDROID AcquireImageANDROID;
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp
index d5e7c43..03e6ee0 100644
--- a/vulkan/libvulkan/swapchain.cpp
+++ b/vulkan/libvulkan/swapchain.cpp
@@ -775,13 +775,8 @@
 
 VKAPI_ATTR
 VkResult GetDeviceGroupPresentCapabilitiesKHR(
-    VkDevice device,
+    VkDevice,
     VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) {
-    ALOGV("vkGetDeviceGroupPresentCapabilitiesKHR: device=0x%" PRIx64
-          "pDeviceGroupPresentCapabilities=0x%" PRIx64,
-          reinterpret_cast<uint64_t>(device),
-          reinterpret_cast<uint64_t>(pDeviceGroupPresentCapabilities));
-
     ALOGV_IF(pDeviceGroupPresentCapabilities->sType !=
                  VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
              "vkGetDeviceGroupPresentCapabilitiesKHR: invalid "
@@ -801,30 +796,18 @@
 
 VKAPI_ATTR
 VkResult GetDeviceGroupSurfacePresentModesKHR(
-    VkDevice device,
-    VkSurfaceKHR surface,
+    VkDevice,
+    VkSurfaceKHR,
     VkDeviceGroupPresentModeFlagsKHR* pModes) {
-    ALOGV("vkGetDeviceGroupSurfacePresentModesKHR: device=0x%" PRIx64
-          "surface=0x%" PRIx64 "pModes=0x%" PRIx64,
-          reinterpret_cast<uint64_t>(device),
-          reinterpret_cast<uint64_t>(surface),
-          reinterpret_cast<uint64_t>(pModes));
-
     *pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR;
     return VK_SUCCESS;
 }
 
 VKAPI_ATTR
-VkResult GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice,
+VkResult GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice,
                                                VkSurfaceKHR surface,
                                                uint32_t* pRectCount,
                                                VkRect2D* pRects) {
-    ALOGV("GetPhysicalDevicePresentRectanglesKHR: physicalDevice=0x%" PRIx64
-          "surface=0x%" PRIx64 "pRectCount=%d pRects=0x%" PRIx64,
-          reinterpret_cast<uint64_t>(physicalDevice),
-          reinterpret_cast<uint64_t>(surface), *pRectCount,
-          reinterpret_cast<uint64_t>(pRects));
-
     if (!pRects) {
         *pRectCount = 1;
     } else {