build: Update to header 1.3.293
authorMike Schuchardt <mikes@lunarg.com>
Fri, 16 Aug 2024 15:50:27 +0000 (08:50 -0700)
committerMike Schuchardt <mikes@lunarg.com>
Fri, 16 Aug 2024 19:17:58 +0000 (12:17 -0700)
loader_extension_generator.py needed a tweak to handle boolean logic in
the vk.xml extension dependency attributes.  Now that the dependency is
encoded in vk.xml we don't need to manually turn on device_group for
drivers >= 1.1. We DO need to track the driver api version since the xml
expressions references it.

CMakeLists.txt
loader/generated/vk_loader_extensions.c
loader/loader.c
loader/loader.rc
loader/loader_common.h
scripts/known_good.json
scripts/loader_extension_generator.py

index 19f1db9b5bbd33e9a3127347cb8a4e362b6bcec9..8b80411043eef656e1c27a160ac8ddff0db3ae03 100644 (file)
@@ -18,7 +18,7 @@
 # ~~~
 cmake_minimum_required(VERSION 3.17.2)
 
-project(VULKAN_LOADER VERSION 1.3.292 LANGUAGES C)
+project(VULKAN_LOADER VERSION 1.3.293 LANGUAGES C)
 
 option(CODE_COVERAGE "Enable Code Coverage" OFF)
 if (CODE_COVERAGE)
index 9d6d77923a66c5bae1db7df09f238b6aaa3adbf4..4eae34746f36377523b18e919d08efa1fe7d4ee1 100644 (file)
@@ -1500,7 +1500,7 @@ void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {
        dispatch->CmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)gpda(dev->icd_device, "vkCmdInsertDebugUtilsLabelEXT");
 #if defined(VK_USE_PLATFORM_WIN32_KHR)
     // ---- VK_EXT_full_screen_exclusive extension commands
-    if (dev->driver_extensions.ext_full_screen_exclusive_enabled && dev->driver_extensions.khr_device_group_enabled)
+    if (dev->driver_extensions.ext_full_screen_exclusive_enabled && (dev->driver_extensions.khr_device_group_enabled || dev->driver_extensions.version_1_1_enabled))
        dispatch->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModes2EXT");
 #endif // VK_USE_PLATFORM_WIN32_KHR
 }
@@ -11975,7 +11975,7 @@ PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *de
     // ---- VK_EXT_full_screen_exclusive extension commands
     if (!strcmp(name, "GetDeviceGroupSurfacePresentModes2EXT")) {
         *found_name = true;
-        return dev->driver_extensions.ext_full_screen_exclusive_enabled && dev->driver_extensions.khr_device_group_enabled ?
+        return (dev->driver_extensions.ext_full_screen_exclusive_enabled && (dev->driver_extensions.khr_device_group_enabled || dev->driver_extensions.version_1_1_enabled)) ?
             (PFN_vkVoidFunction)terminator_GetDeviceGroupSurfacePresentModes2EXT : NULL;
     }
 #endif // VK_USE_PLATFORM_WIN32_KHR
index 715f7531e977f832340299b5e96fec93f8884e6c..531146a958e854deab96691394f0a9eb0055206a 100644 (file)
@@ -5938,8 +5938,10 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice(VkPhysicalDevice physical
             dev->driver_extensions.khr_device_group_enabled = true;
         } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME)) {
             dev->driver_extensions.ext_debug_marker_enabled = true;
-        } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], "VK_EXT_full_screen_exclusive")) {
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+        } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME)) {
             dev->driver_extensions.ext_full_screen_exclusive_enabled = true;
+#endif
         } else if (!strcmp(localCreateInfo.ppEnabledExtensionNames[i], VK_KHR_MAINTENANCE_5_EXTENSION_NAME) &&
                    maintenance5_feature_enabled) {
             dev->should_ignore_device_commands_from_newer_version = true;
@@ -5950,10 +5952,14 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice(VkPhysicalDevice physical
 
     VkPhysicalDeviceProperties properties;
     icd_term->dispatch.GetPhysicalDeviceProperties(phys_dev_term->phys_dev, &properties);
-    if (!dev->driver_extensions.khr_device_group_enabled) {
-        if (properties.apiVersion >= VK_API_VERSION_1_1) {
-            dev->driver_extensions.khr_device_group_enabled = true;
-        }
+    if (properties.apiVersion >= VK_API_VERSION_1_1) {
+        dev->driver_extensions.version_1_1_enabled = true;
+    }
+    if (properties.apiVersion >= VK_API_VERSION_1_2) {
+        dev->driver_extensions.version_1_2_enabled = true;
+    }
+    if (properties.apiVersion >= VK_API_VERSION_1_3) {
+        dev->driver_extensions.version_1_3_enabled = true;
     }
 
     loader_log(icd_term->this_instance, VULKAN_LOADER_LAYER_BIT | VULKAN_LOADER_DRIVER_BIT, 0,
index cdd124060523bc0083f722880ff99f5cdbab27a8..b8a28d32be63c299db316fa37aadcea1584f1e6c 100644 (file)
@@ -22,8 +22,8 @@
 #include "winres.h"
 
 // All set through CMake
-#define VER_FILE_VERSION 1, 3, 292, 0
-#define VER_FILE_DESCRIPTION_STR "1.3.292.Dev Build"
+#define VER_FILE_VERSION 1, 3, 293, 0
+#define VER_FILE_DESCRIPTION_STR "1.3.293.Dev Build"
 #define VER_FILE_VERSION_STR "Vulkan Loader - Dev Build"
 #define VER_COPYRIGHT_STR "Copyright (C) 2015-2024"
 
index 1097d51c48ad640597c46a5c21b64a7ab3cf934c..07e1fe7df024c521793d290bdf03ef06084ed9ec 100644 (file)
@@ -239,6 +239,9 @@ struct loader_device {
         bool ext_debug_marker_enabled;
         bool ext_debug_utils_enabled;
         bool ext_full_screen_exclusive_enabled;
+        bool version_1_1_enabled;
+        bool version_1_2_enabled;
+        bool version_1_3_enabled;
     } driver_extensions;
 
     struct loader_device *next;
index 11feded74aab9475e8d99fd373c25381f2df5dcd..5c5b01eb28d1bb367f73df0e401852aa92571803 100644 (file)
@@ -7,7 +7,7 @@
             "sub_dir": "Vulkan-Headers",
             "build_dir": "Vulkan-Headers/build",
             "install_dir": "Vulkan-Headers/build/install",
-            "commit": "v1.3.292"
+            "commit": "v1.3.293"
         },
         {
             "name": "googletest",
index 1df98f4000a0b1438b6906b7a87c13cfac93709a..9fae8faa1051c8dc5823d52cf50f4c108efa4f14 100644 (file)
@@ -474,6 +474,16 @@ class LoaderExtensionOutputGenerator(OutputGenerator):
                 name = noneStr(elem.text)
         return (type, name)
 
+    # Convert an XML dependency expression to a C expression, taking a callback to replace extension names
+    # See https://registry.khronos.org/vulkan/specs/1.3/registry.html#depends-expressions
+    @staticmethod
+    def ConvertDependencyExpression(expr, replace_func):
+        # '(' and ')' can pass through unchanged
+        expr = re.sub(',', ' || ', expr)
+        expr = re.sub(r'\+', ' && ', expr)
+        expr = re.sub(r'\w+', lambda match: replace_func(match.group()), expr)
+        return expr
+
     def OutputPrototypesInHeader(self):
         protos = ''
         protos += '// Structures defined externally, but used here\n'
@@ -1562,7 +1572,8 @@ class LoaderExtensionOutputGenerator(OutputGenerator):
                 term_func += f'    if (!strcmp(name, "{ext_cmd.name[2:]}")) {{\n'
                 term_func += f'        *found_name = true;\n'
                 if ext_cmd.require:
-                    term_func += f'        return dev->driver_extensions.{ext_cmd.ext_name[3:].lower()}_enabled && dev->driver_extensions.{ext_cmd.require[3:].lower()}_enabled ?\n'
+                    dep_expr = self.ConvertDependencyExpression(ext_cmd.require, lambda ext_name: f'dev->driver_extensions.{ext_name[3:].lower()}_enabled')
+                    term_func += f'        return (dev->driver_extensions.{ext_cmd.ext_name[3:].lower()}_enabled && ({dep_expr})) ?\n'
                 else:
                     term_func += f'        return dev->driver_extensions.{ext_cmd.ext_name[3:].lower()}_enabled ?\n'
                 term_func += f'            (PFN_vkVoidFunction)terminator_{(ext_cmd.name[2:])} : NULL;\n'
@@ -1662,7 +1673,8 @@ class LoaderExtensionOutputGenerator(OutputGenerator):
 
 
                 if ext_cmd.require:
-                    term_func += f'    if (dev->driver_extensions.{ext_cmd.ext_name[3:].lower()}_enabled && dev->driver_extensions.{ext_cmd.require[3:].lower()}_enabled)\n'
+                    dep_expr = self.ConvertDependencyExpression(ext_cmd.require, lambda ext_name: f'dev->driver_extensions.{ext_name[3:].lower()}_enabled')
+                    term_func += f'    if (dev->driver_extensions.{ext_cmd.ext_name[3:].lower()}_enabled && ({dep_expr}))\n'
                     term_func += f'       dispatch->{ext_cmd.name[2:]} = (PFN_{(ext_cmd.name)})gpda(dev->icd_device, "{(ext_cmd.name)}");\n'
                 else:
                     term_func += f'    if (dev->driver_extensions.{ext_cmd.ext_name[3:].lower()}_enabled)\n'