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/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;