# ~~~
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)
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
}
// ---- 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
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;
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,
#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"
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;
"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",
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'
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'
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'