scripts: Update known-good for 1.1.106 header

Changes:
- Integrate upstream script changes: We have to plumb-through the new
conventions object to continue using the makeCParamDecl utility function
- Add GGP to available platforms
- Add handling for extension dependencies: Previously, the codegen for
loader trampolines could not handle an extension command that depends on
more than one extension being present. This removes that limitation
- Add checks for device extensions: This adds a check for two functions
at device creation time:
  * VK_KHR_device_group
  * VK_EXT_full_screen_exclusive
The loader needs to know about these extensions for proper handling
of the vkGetDeviceGroupSurfacePresentModes2EXT terminator
- Update known-good file

Updated:
- `loader/loader.c`
- `loader/loader.h`
- `scripts/common_codegen.py`
- `scripts/dispatch_table_helper_generator.py`
- `scripts/helper_file_generator.py`
- `scripts/known_good.json`
- `scripts/loader_extension_generator.py`
- `scripts/loader_genvk.py`

Change-Id: I9f0828a8eee0e8e95b479e1b8feb31acaa10040d
diff --git a/loader/loader.c b/loader/loader.c
index cc4eb41..e1e4a9d 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -6141,12 +6141,24 @@
             dev->extensions.khr_swapchain_enabled = true;
         } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME)) {
             dev->extensions.khr_display_swapchain_enabled = true;
+        } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_DEVICE_GROUP_EXTENSION_NAME)) {
+            dev->extensions.khr_device_group_enabled = true;
         } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) {
             dev->extensions.ext_debug_marker_enabled = true;
+        } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], "VK_EXT_full_screen_exclusive")) {
+            dev->extensions.ext_full_screen_exclusive_enabled = true;
         }
     }
     dev->extensions.ext_debug_utils_enabled = icd_term->this_instance->enabled_known_extensions.ext_debug_utils;
 
+    if (!dev->extensions.khr_device_group_enabled) {
+        VkPhysicalDeviceProperties properties;
+        icd_term->dispatch.GetPhysicalDeviceProperties(phys_dev_term->phys_dev, &properties);
+        if (properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)) {
+            dev->extensions.khr_device_group_enabled = true;
+        }
+    }
+
     res = fpCreateDevice(phys_dev_term->phys_dev, &localCreateInfo, pAllocator, &dev->icd_device);
     if (res != VK_SUCCESS) {
         loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
diff --git a/loader/loader.h b/loader/loader.h
index 19a9c20..2d3990a 100644
--- a/loader/loader.h
+++ b/loader/loader.h
@@ -209,8 +209,10 @@
     struct {
         bool khr_swapchain_enabled;
         bool khr_display_swapchain_enabled;
+        bool khr_device_group_enabled;
         bool ext_debug_marker_enabled;
         bool ext_debug_utils_enabled;
+        bool ext_full_screen_exclusive_enabled;
     } extensions;
 
     struct loader_device *next;
diff --git a/scripts/common_codegen.py b/scripts/common_codegen.py
index 47bb632..8954532 100644
--- a/scripts/common_codegen.py
+++ b/scripts/common_codegen.py
@@ -50,6 +50,7 @@
 platform_dict = {
     'android' : 'VK_USE_PLATFORM_ANDROID_KHR',
     'fuchsia' : 'VK_USE_PLATFORM_FUCHSIA',
+    'ggp': 'VK_USE_PLATFORM_GGP',
     'ios' : 'VK_USE_PLATFORM_IOS_MVK',
     'macos' : 'VK_USE_PLATFORM_MACOS_MVK',
     'metal' : 'VK_USE_PLATFORM_METAL_EXT',
diff --git a/scripts/dispatch_table_helper_generator.py b/scripts/dispatch_table_helper_generator.py
index 2ef9663..c8a6636 100644
--- a/scripts/dispatch_table_helper_generator.py
+++ b/scripts/dispatch_table_helper_generator.py
@@ -29,6 +29,7 @@
 # DispatchTableHelperOutputGeneratorOptions - subclass of GeneratorOptions.
 class DispatchTableHelperOutputGeneratorOptions(GeneratorOptions):
     def __init__(self,
+                 conventions = None,
                  filename = None,
                  directory = '.',
                  apiname = None,
@@ -47,7 +48,7 @@
                  apientryp = '',
                  alignFuncParam = 0,
                  expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
+        GeneratorOptions.__init__(self, conventions, filename, directory, apiname, profile,
                                   versions, emitversions, defaultExtensions,
                                   addExtensions, removeExtensions, emitExtensions, sortProcedure)
         self.prefixText      = prefixText
diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py
index 9d7ecdb..bfdcab3 100644
--- a/scripts/helper_file_generator.py
+++ b/scripts/helper_file_generator.py
@@ -31,6 +31,7 @@
 # HelperFileOutputGeneratorOptions - subclass of GeneratorOptions.
 class HelperFileOutputGeneratorOptions(GeneratorOptions):
     def __init__(self,
+                 conventions = None,
                  filename = None,
                  directory = '.',
                  apiname = None,
@@ -53,7 +54,7 @@
                  library_name = '',
                  expandEnumerants = True,
                  helper_file_type = ''):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
+        GeneratorOptions.__init__(self, conventions, filename, directory, apiname, profile,
                                   versions, emitversions, defaultExtensions,
                                   addExtensions, removeExtensions, emitExtensions, sortProcedure)
         self.prefixText       = prefixText
diff --git a/scripts/known_good.json b/scripts/known_good.json
index c7f9e94..94851f3 100644
--- a/scripts/known_good.json
+++ b/scripts/known_good.json
@@ -6,7 +6,7 @@
       "sub_dir" : "Vulkan-Headers",
       "build_dir" : "Vulkan-Headers/build",
       "install_dir" : "Vulkan-Headers/build/install",
-      "commit" : "v1.1.102"
+      "commit" : "v1.1.106"
     }
   ],
   "install_names" : {
diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py
index 3b8aaac..9f82114 100644
--- a/scripts/loader_extension_generator.py
+++ b/scripts/loader_extension_generator.py
@@ -60,7 +60,8 @@
                          'vkDebugMarkerSetObjectTagEXT',
                          'vkDebugMarkerSetObjectNameEXT',
                          'vkSetDebugUtilsObjectNameEXT',
-                         'vkSetDebugUtilsObjectTagEXT']
+                         'vkSetDebugUtilsObjectTagEXT',
+                         'vkGetDeviceGroupSurfacePresentModes2EXT']
 
 ALIASED_CMDS = {
     'vkEnumeratePhysicalDeviceGroupsKHR':                   'vkEnumeratePhysicalDeviceGroups',
@@ -84,6 +85,7 @@
 # LoaderExtensionGeneratorOptions - subclass of GeneratorOptions.
 class LoaderExtensionGeneratorOptions(GeneratorOptions):
     def __init__(self,
+                 conventions = None,
                  filename = None,
                  directory = '.',
                  apiname = None,
@@ -106,7 +108,7 @@
                  indentFuncPointer = False,
                  alignFuncParam = 0,
                  expandEnumerants = True):
-        GeneratorOptions.__init__(self, filename, directory, apiname, profile,
+        GeneratorOptions.__init__(self, conventions, filename, directory, apiname, profile,
                                   versions, emitversions, defaultExtensions,
                                   addExtensions, removeExtensions, emitExtensions, sortProcedure)
         self.prefixText      = prefixText
@@ -134,7 +136,7 @@
         self.core_commands = []               # List of CommandData records for core Vulkan commands
         self.ext_commands = []                # List of CommandData records for extension Vulkan commands
         self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'cdecl'])
-        self.CommandData = namedtuple('CommandData', ['name', 'ext_name', 'ext_type', 'protect', 'return_type', 'handle_type', 'params', 'cdecl'])
+        self.CommandData = namedtuple('CommandData', ['name', 'ext_name', 'ext_type', 'require', 'protect', 'return_type', 'handle_type', 'params', 'cdecl'])
         self.instanceExtensions = []
         self.ExtensionData = namedtuple('ExtensionData', ['name', 'type', 'protect', 'define', 'num_commands'])
 
@@ -306,6 +308,12 @@
         if (return_type is not None and return_type.text == 'void'):
            return_type = None
 
+        require = None
+        if name == 'vkGetDeviceGroupSurfacePresentModes2EXT':
+            require_node = self.registry.tree.find("./extensions/extension[@name='{}']/require/command[@name='{}']/..".format(extension_name, name))
+            if 'extension' in require_node.attrib:
+                require = require_node.attrib['extension']
+
         cmd_params = []
 
         # Generate a list of commands for use in printing the necessary
@@ -332,6 +340,7 @@
                 self.core_commands.append(
                     self.CommandData(name=name, ext_name=extension_name,
                                      ext_type='device',
+                                     require=require,
                                      protect=self.featureExtraProtect,
                                      return_type = return_type,
                                      handle_type = handle_type,
@@ -342,6 +351,7 @@
                 self.ext_commands.append(
                     self.CommandData(name=name, ext_name=extension_name,
                                      ext_type=extension_type,
+                                     require=require,
                                      protect=self.featureExtraProtect,
                                      return_type = return_type,
                                      handle_type = handle_type,
@@ -354,6 +364,7 @@
                 self.core_commands.append(
                     self.CommandData(name=name, ext_name=extension_name,
                                      ext_type='instance',
+                                     require=require,
                                      protect=self.featureExtraProtect,
                                      return_type = return_type,
                                      handle_type = handle_type,
@@ -365,6 +376,7 @@
                 self.ext_commands.append(
                     self.CommandData(name=name, ext_name=extension_name,
                                      ext_type=extension_type,
+                                     require=require,
                                      protect=self.featureExtraProtect,
                                      return_type = return_type,
                                      handle_type = handle_type,
@@ -1442,7 +1454,10 @@
                         term_func += '\n    // ---- Core %s commands\n' % ext_cmd.ext_name[11:]
                     else:
                         term_func += '\n    // ---- %s extension commands\n' % ext_cmd.ext_name
-                        term_func += '    if (dev->extensions.%s_enabled) {\n' % ext_cmd.ext_name[3:].lower()
+                        if ext_cmd.require:
+                            term_func += '    if (dev->extensions.%s_enabled && dev->extensions.%s_enabled) {\n' % (ext_cmd.ext_name[3:].lower(), ext_cmd.require[3:].lower())
+                        else:
+                            term_func += '    if (dev->extensions.%s_enabled) {\n' % ext_cmd.ext_name[3:].lower()
                         is_extension = True
                     cur_extension_name = ext_cmd.ext_name
 
diff --git a/scripts/loader_genvk.py b/scripts/loader_genvk.py
index ec6f94e..605258a 100644
--- a/scripts/loader_genvk.py
+++ b/scripts/loader_genvk.py
@@ -111,11 +111,15 @@
     # Defaults for generating re-inclusion protection wrappers (or not)
     protectFeature = protect
 
+    # An API style conventions object
+    conventions = VulkanConventions()
+
     # Loader Generators
     # Options for dispatch table helper generator
     genOpts['vk_dispatch_table_helper.h'] = [
           DispatchTableHelperOutputGenerator,
           DispatchTableHelperOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_dispatch_table_helper.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -138,6 +142,7 @@
     genOpts['vk_layer_dispatch_table.h'] = [
           LoaderExtensionOutputGenerator,
           LoaderExtensionGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_layer_dispatch_table.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -160,6 +165,7 @@
     genOpts['vk_loader_extensions.h'] = [
           LoaderExtensionOutputGenerator,
           LoaderExtensionGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_loader_extensions.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -182,6 +188,7 @@
     genOpts['vk_loader_extensions.c'] = [
           LoaderExtensionOutputGenerator,
           LoaderExtensionGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_loader_extensions.c',
             directory         = directory,
             apiname           = 'vulkan',
@@ -204,6 +211,7 @@
     genOpts['vk_enum_string_helper.h'] = [
           HelperFileOutputGenerator,
           HelperFileOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_enum_string_helper.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -227,6 +235,7 @@
     genOpts['vk_safe_struct.h'] = [
           HelperFileOutputGenerator,
           HelperFileOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_safe_struct.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -250,6 +259,7 @@
     genOpts['vk_safe_struct.cpp'] = [
           HelperFileOutputGenerator,
           HelperFileOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_safe_struct.cpp',
             directory         = directory,
             apiname           = 'vulkan',
@@ -273,6 +283,7 @@
     genOpts['vk_object_types.h'] = [
           HelperFileOutputGenerator,
           HelperFileOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_object_types.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -296,6 +307,7 @@
     genOpts['vk_extension_helper.h'] = [
           HelperFileOutputGenerator,
           HelperFileOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_extension_helper.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -319,6 +331,7 @@
     genOpts['vk_typemap_helper.h'] = [
           HelperFileOutputGenerator,
           HelperFileOutputGeneratorOptions(
+            conventions       = conventions,
             filename          = 'vk_typemap_helper.h',
             directory         = directory,
             apiname           = 'vulkan',
@@ -452,6 +465,7 @@
     from dispatch_table_helper_generator import DispatchTableHelperOutputGenerator, DispatchTableHelperOutputGeneratorOptions
     from helper_file_generator import HelperFileOutputGenerator, HelperFileOutputGeneratorOptions
     from loader_extension_generator import LoaderExtensionOutputGenerator, LoaderExtensionGeneratorOptions
+    from vkconventions import VulkanConventions
 
     # This splits arguments which are space-separated lists
     args.feature = [name for arg in args.feature for name in arg.split()]