Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions loader/generated/vk_loader_extensions.c
Original file line number Diff line number Diff line change
Expand Up @@ -1627,7 +1627,7 @@ void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {
// ---- VK_KHR_swapchain extension commands
if (dev->driver_extensions.khr_swapchain_enabled)
dispatch->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpda(dev->icd_device, "vkCreateSwapchainKHR");
if (dev->driver_extensions.khr_swapchain_enabled)
if (dev->driver_extensions.khr_swapchain_enabled || dev->driver_extensions.khr_device_group_enabled)
dispatch->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModesKHR");

// ---- VK_KHR_display_swapchain extension commands
Expand Down Expand Up @@ -1660,7 +1660,7 @@ void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {
#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 || dev->driver_extensions.version_1_1_enabled))
if (dev->driver_extensions.ext_full_screen_exclusive_enabled)
dispatch->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModes2EXT");
#endif // VK_USE_PLATFORM_WIN32_KHR
}
Expand Down Expand Up @@ -13648,7 +13648,7 @@ PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *de
}
if (!strcmp(name, "GetDeviceGroupSurfacePresentModesKHR")) {
*found_name = true;
return dev->driver_extensions.khr_swapchain_enabled ?
return dev->driver_extensions.khr_swapchain_enabled || dev->driver_extensions.khr_device_group_enabled ?
(PFN_vkVoidFunction)terminator_GetDeviceGroupSurfacePresentModesKHR : NULL;
}
// ---- VK_KHR_display_swapchain extension commands
Expand Down Expand Up @@ -13713,7 +13713,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 || dev->driver_extensions.version_1_1_enabled)) ?
return dev->driver_extensions.ext_full_screen_exclusive_enabled ?
(PFN_vkVoidFunction)terminator_GetDeviceGroupSurfacePresentModes2EXT : NULL;
}
#endif // VK_USE_PLATFORM_WIN32_KHR
Expand Down
33 changes: 9 additions & 24 deletions scripts/generators/loader_extension_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,16 +249,6 @@ def print_vk_layer_dispatch_table(self, out):
self.OutputLayerInstanceDispatchTable(out)
self.OutputLayerDeviceDispatchTable(out)

# Convert an XML dependency expression to a C expression, taking a callback to replace extension names
# See https://registry.khronos.org/vulkan/specs/1.4/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 DescribeBlock(self, command, current_block, out, custom_commands_string = ' commands', indent = ' '):
effective_version_name = APISpecific.getEffectiveVersionName(self.targetApiName, command.version)
if command.extensions != current_block and effective_version_name != current_block:
Expand Down Expand Up @@ -664,14 +654,11 @@ def InitDeviceFunctionTerminatorDispatchTable(self, out):
out.append(f'#if defined({command.protect})\n')

current_block = self.DescribeBlock(command, current_block, out)
if command.name == 'vkGetDeviceGroupSurfacePresentModes2EXT': # command.extensions[0].depends in [x for x in self.vk.commands.values() if x.device]:
# Hardcode the dependency expression as vulkan_object.py doesn't expose this information
dep_expr = self.ConvertDependencyExpression('VK_KHR_device_group,VK_VERSION_1_1', lambda ext_name: f'dev->driver_extensions.{ext_name[3:].lower()}_enabled')
out.append(f' if (dev->driver_extensions.{command.extensions[0][3:].lower()}_enabled && ({dep_expr}))\n')
out.append(f' dispatch->{command.name[2:]} = (PFN_{(command.name)})gpda(dev->icd_device, "{(command.name)}");\n')
else:
out.append(f' if (dev->driver_extensions.{command.extensions[0][3:].lower()}_enabled)\n')
out.append(f' dispatch->{command.name[2:]} = (PFN_{(command.name)})gpda(dev->icd_device, "{(command.name)}");\n')
enable_extension_expressions = []
for ext in command.extensions:
enable_extension_expressions.append(f'dev->driver_extensions.{ext[3:].lower()}_enabled')
out.append(f' if ({" || ".join(enable_extension_expressions)})\n')
out.append(f' dispatch->{command.name[2:]} = (PFN_{(command.name)})gpda(dev->icd_device, "{(command.name)}");\n')

if command.protect is not None:
out.append(f'#endif // {command.protect}\n')
Expand Down Expand Up @@ -1304,12 +1291,10 @@ def DeviceExtensionGetTerminator(self, out):

out.append(f' if (!strcmp(name, "{command.name[2:]}")) {{\n')
out.append(' *found_name = true;\n')
if command.name == 'vkGetDeviceGroupSurfacePresentModes2EXT': # command.extensions[0].depends in [x for x in self.vk.commands.values() if x.device]:
# Hardcode the dependency expression as vulkan_object.py doesn't expose this information
dep_expr = self.ConvertDependencyExpression('VK_KHR_device_group,VK_VERSION_1_1', lambda ext_name: f'dev->driver_extensions.{ext_name[3:].lower()}_enabled')
out.append(f' return (dev->driver_extensions.{command.extensions[0][3:].lower()}_enabled && ({dep_expr})) ?\n')
else:
out.append(f' return dev->driver_extensions.{command.extensions[0][3:].lower()}_enabled ?\n')
enable_extension_expressions = []
for ext in command.extensions:
enable_extension_expressions.append(f'dev->driver_extensions.{ext[3:].lower()}_enabled')
out.append(f' return {" || ".join(enable_extension_expressions)} ?\n')
out.append(f' (PFN_vkVoidFunction)terminator_{(command.name[2:])} : NULL;\n')
out.append(' }\n')

Expand Down