Skip to content

Commit db9bade

Browse files
Refactor codegen scripts to use vulkan_object.py
Requires hardcoding a few things to make it work, most notably: * Missing Extension Requires Depends information * Missing aliases for handles On the whole, the codegen outputs *almost* identical files from before, making the refactor not able to introduce issues into the output. Changes include: * Adding the android surface to the list of 'known' instance extensions * Removing duplicated if branches in vk_object_types.h * Updating copyright and Author lists * Test code now has an up to date layer dipsatch table. Functional changes to the codegen scripts are: * generate_source.py can now generate files in multiple directories, as well as verify them. * clang-format is applied to generated files * single files can be generated using the --target command line option
1 parent ccd77b6 commit db9bade

10 files changed

+1553
-2053
lines changed

loader/generated/vk_layer_dispatch_table.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
// See loader_extension_generator.py for modifications
33

44
/*
5-
* Copyright (c) 2015-2022 The Khronos Group Inc.
6-
* Copyright (c) 2015-2022 Valve Corporation
7-
* Copyright (c) 2015-2022 LunarG, Inc.
5+
* Copyright (c) 2015-2025 The Khronos Group Inc.
6+
* Copyright (c) 2015-2025 Valve Corporation
7+
* Copyright (c) 2015-2025 LunarG, Inc.
88
* Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
99
* Copyright (c) 2023-2023 RasterGrid Kft.
1010
*
@@ -22,6 +22,7 @@
2222
*
2323
* Author: Mark Lobodzinski <mark@lunarg.com>
2424
* Author: Mark Young <marky@lunarg.com>
25+
* Author: Charles Giessen <charles@lunarg.com>
2526
*/
2627

2728
// clang-format off
@@ -858,7 +859,11 @@ typedef struct VkLayerDispatchTable_ {
858859
PFN_vkCmdCopyAccelerationStructureNV CmdCopyAccelerationStructureNV;
859860
PFN_vkCmdTraceRaysNV CmdTraceRaysNV;
860861
PFN_vkCreateRayTracingPipelinesNV CreateRayTracingPipelinesNV;
862+
863+
// ---- VK_KHR_ray_tracing_pipeline extension commands
861864
PFN_vkGetRayTracingShaderGroupHandlesKHR GetRayTracingShaderGroupHandlesKHR;
865+
866+
// ---- VK_NV_ray_tracing extension commands
862867
PFN_vkGetRayTracingShaderGroupHandlesNV GetRayTracingShaderGroupHandlesNV;
863868
PFN_vkGetAccelerationStructureHandleNV GetAccelerationStructureHandleNV;
864869
PFN_vkCmdWriteAccelerationStructuresPropertiesNV CmdWriteAccelerationStructuresPropertiesNV;

loader/generated/vk_loader_extensions.c

+32-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
// See loader_extension_generator.py for modifications
33

44
/*
5-
* Copyright (c) 2015-2022 The Khronos Group Inc.
6-
* Copyright (c) 2015-2022 Valve Corporation
7-
* Copyright (c) 2015-2022 LunarG, Inc.
5+
* Copyright (c) 2015-2025 The Khronos Group Inc.
6+
* Copyright (c) 2015-2025 Valve Corporation
7+
* Copyright (c) 2015-2025 LunarG, Inc.
88
* Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
99
* Copyright (c) 2023-2023 RasterGrid Kft.
1010
*
@@ -22,6 +22,7 @@
2222
*
2323
* Author: Mark Lobodzinski <mark@lunarg.com>
2424
* Author: Mark Young <marky@lunarg.com>
25+
* Author: Charles Giessen <charles@lunarg.com>
2526
*/
2627

2728
// clang-format off
@@ -896,7 +897,11 @@ VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct lo
896897
table->CmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)gdpa(dev, "vkCmdCopyAccelerationStructureNV");
897898
table->CmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)gdpa(dev, "vkCmdTraceRaysNV");
898899
table->CreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)gdpa(dev, "vkCreateRayTracingPipelinesNV");
900+
901+
// ---- VK_KHR_ray_tracing_pipeline extension commands
899902
table->GetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)gdpa(dev, "vkGetRayTracingShaderGroupHandlesKHR");
903+
904+
// ---- VK_NV_ray_tracing extension commands
900905
table->GetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)gdpa(dev, "vkGetRayTracingShaderGroupHandlesNV");
901906
table->GetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)gdpa(dev, "vkGetAccelerationStructureHandleNV");
902907
table->CmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)gdpa(dev, "vkCmdWriteAccelerationStructuresPropertiesNV");
@@ -1540,19 +1545,23 @@ VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayer
15401545
void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {
15411546
struct loader_device_terminator_dispatch* dispatch = &dev->loader_dispatch.extension_terminator_dispatch;
15421547
PFN_vkGetDeviceProcAddr gpda = (PFN_vkGetDeviceProcAddr)dev->phys_dev_term->this_icd_term->dispatch.GetDeviceProcAddr;
1548+
15431549
// ---- VK_KHR_swapchain extension commands
15441550
if (dev->driver_extensions.khr_swapchain_enabled)
15451551
dispatch->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)gpda(dev->icd_device, "vkCreateSwapchainKHR");
15461552
if (dev->driver_extensions.khr_swapchain_enabled)
15471553
dispatch->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModesKHR");
1554+
15481555
// ---- VK_KHR_display_swapchain extension commands
15491556
if (dev->driver_extensions.khr_display_swapchain_enabled)
15501557
dispatch->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)gpda(dev->icd_device, "vkCreateSharedSwapchainsKHR");
1558+
15511559
// ---- VK_EXT_debug_marker extension commands
15521560
if (dev->driver_extensions.ext_debug_marker_enabled)
15531561
dispatch->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)gpda(dev->icd_device, "vkDebugMarkerSetObjectTagEXT");
15541562
if (dev->driver_extensions.ext_debug_marker_enabled)
15551563
dispatch->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)gpda(dev->icd_device, "vkDebugMarkerSetObjectNameEXT");
1564+
15561565
// ---- VK_EXT_debug_utils extension commands
15571566
if (dev->driver_extensions.ext_debug_utils_enabled)
15581567
dispatch->SetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)gpda(dev->icd_device, "vkSetDebugUtilsObjectNameEXT");
@@ -1571,6 +1580,7 @@ void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {
15711580
if (dev->driver_extensions.ext_debug_utils_enabled)
15721581
dispatch->CmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)gpda(dev->icd_device, "vkCmdInsertDebugUtilsLabelEXT");
15731582
#if defined(VK_USE_PLATFORM_WIN32_KHR)
1583+
15741584
// ---- VK_EXT_full_screen_exclusive extension commands
15751585
if (dev->driver_extensions.ext_full_screen_exclusive_enabled && (dev->driver_extensions.khr_device_group_enabled || dev->driver_extensions.version_1_1_enabled))
15761586
dispatch->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)gpda(dev->icd_device, "vkGetDeviceGroupSurfacePresentModes2EXT");
@@ -1579,13 +1589,15 @@ void init_extension_device_proc_terminator_dispatch(struct loader_device *dev) {
15791589

15801590
// These are prototypes for functions that need their trampoline called in all circumstances.
15811591
// They are used in loader_lookup_device_dispatch_table but are defined afterwards.
1592+
15821593
// ---- VK_EXT_debug_marker extension commands
15831594
VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
15841595
VkDevice device,
15851596
const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
15861597
VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
15871598
VkDevice device,
15881599
const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
1600+
15891601
// ---- VK_EXT_debug_utils extension commands
15901602
VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
15911603
VkDevice device,
@@ -2778,7 +2790,11 @@ VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDis
27782790
if (!strcmp(name, "CmdCopyAccelerationStructureNV")) return (void *)table->CmdCopyAccelerationStructureNV;
27792791
if (!strcmp(name, "CmdTraceRaysNV")) return (void *)table->CmdTraceRaysNV;
27802792
if (!strcmp(name, "CreateRayTracingPipelinesNV")) return (void *)table->CreateRayTracingPipelinesNV;
2793+
2794+
// ---- VK_KHR_ray_tracing_pipeline extension commands
27812795
if (!strcmp(name, "GetRayTracingShaderGroupHandlesKHR")) return (void *)table->GetRayTracingShaderGroupHandlesKHR;
2796+
2797+
// ---- VK_NV_ray_tracing extension commands
27822798
if (!strcmp(name, "GetRayTracingShaderGroupHandlesNV")) return (void *)table->GetRayTracingShaderGroupHandlesNV;
27832799
if (!strcmp(name, "GetAccelerationStructureHandleNV")) return (void *)table->GetAccelerationStructureHandleNV;
27842800
if (!strcmp(name, "CmdWriteAccelerationStructuresPropertiesNV")) return (void *)table->CmdWriteAccelerationStructuresPropertiesNV;
@@ -6709,6 +6725,9 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
67096725
return disp->CreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
67106726
}
67116727

6728+
6729+
// ---- VK_KHR_ray_tracing_pipeline extension trampoline/terminators
6730+
67126731
VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR(
67136732
VkDevice device,
67146733
VkPipeline pipeline,
@@ -6726,6 +6745,9 @@ VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesKHR(
67266745
return disp->GetRayTracingShaderGroupHandlesKHR(device, pipeline, firstGroup, groupCount, dataSize, pData);
67276746
}
67286747

6748+
6749+
// ---- VK_NV_ray_tracing extension trampoline/terminators
6750+
67296751
VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
67306752
VkDevice device,
67316753
VkPipeline pipeline,
@@ -11463,10 +11485,14 @@ bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *na
1146311485
*addr = (void *)CreateRayTracingPipelinesNV;
1146411486
return true;
1146511487
}
11488+
11489+
// ---- VK_KHR_ray_tracing_pipeline extension commands
1146611490
if (!strcmp("vkGetRayTracingShaderGroupHandlesKHR", name)) {
1146711491
*addr = (void *)GetRayTracingShaderGroupHandlesKHR;
1146811492
return true;
1146911493
}
11494+
11495+
// ---- VK_NV_ray_tracing extension commands
1147011496
if (!strcmp("vkGetRayTracingShaderGroupHandlesNV", name)) {
1147111497
*addr = (void *)GetRayTracingShaderGroupHandlesNV;
1147211498
return true;
@@ -13002,6 +13028,9 @@ const char *const LOADER_INSTANCE_EXTENSIONS[] = {
1300213028
#if defined(VK_USE_PLATFORM_WAYLAND_KHR)
1300313029
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
1300413030
#endif // VK_USE_PLATFORM_WAYLAND_KHR
13031+
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
13032+
VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
13033+
#endif // VK_USE_PLATFORM_ANDROID_KHR
1300513034
#if defined(VK_USE_PLATFORM_WIN32_KHR)
1300613035
VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
1300713036
#endif // VK_USE_PLATFORM_WIN32_KHR

loader/generated/vk_loader_extensions.h

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
// See loader_extension_generator.py for modifications
33

44
/*
5-
* Copyright (c) 2015-2022 The Khronos Group Inc.
6-
* Copyright (c) 2015-2022 Valve Corporation
7-
* Copyright (c) 2015-2022 LunarG, Inc.
5+
* Copyright (c) 2015-2025 The Khronos Group Inc.
6+
* Copyright (c) 2015-2025 Valve Corporation
7+
* Copyright (c) 2015-2025 LunarG, Inc.
88
* Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
99
* Copyright (c) 2023-2023 RasterGrid Kft.
1010
*
@@ -22,6 +22,7 @@
2222
*
2323
* Author: Mark Lobodzinski <mark@lunarg.com>
2424
* Author: Mark Young <marky@lunarg.com>
25+
* Author: Charles Giessen <charles@lunarg.com>
2526
*/
2627

2728
// clang-format off
@@ -502,14 +503,18 @@ struct loader_instance_extension_enables {
502503
// Functions that required a terminator need to have a separate dispatch table which contains their corresponding
503504
// device function. This is used in the terminators themselves.
504505
struct loader_device_terminator_dispatch {
506+
505507
// ---- VK_KHR_swapchain extension commands
506508
PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
507509
PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR;
510+
508511
// ---- VK_KHR_display_swapchain extension commands
509512
PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
513+
510514
// ---- VK_EXT_debug_marker extension commands
511515
PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT;
512516
PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT;
517+
513518
// ---- VK_EXT_debug_utils extension commands
514519
PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
515520
PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT;
@@ -520,6 +525,7 @@ struct loader_device_terminator_dispatch {
520525
PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT;
521526
PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT;
522527
#if defined(VK_USE_PLATFORM_WIN32_KHR)
528+
523529
// ---- VK_EXT_full_screen_exclusive extension commands
524530
PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT;
525531
#endif // VK_USE_PLATFORM_WIN32_KHR

loader/generated/vk_object_types.h

+4-11
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
/***************************************************************************
77
*
8-
* Copyright (c) 2015-2017 The Khronos Group Inc.
9-
* Copyright (c) 2015-2017 Valve Corporation
10-
* Copyright (c) 2015-2017 LunarG, Inc.
8+
* Copyright (c) 2015-2025 The Khronos Group Inc.
9+
* Copyright (c) 2015-2025 Valve Corporation
10+
* Copyright (c) 2015-2025 LunarG, Inc.
1111
* Copyright (c) 2015-2017 Google Inc.
1212
*
1313
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -27,6 +27,7 @@
2727
* Author: Tobin Ehlis <tobine@google.com>
2828
* Author: Chris Forbes <chrisforbes@google.com>
2929
* Author: John Zulauf<jzulauf@lunarg.com>
30+
* Author: Charles Giessen<charles@lunarg.com>
3031
*
3132
****************************************************************************/
3233

@@ -346,12 +347,8 @@ static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObj
346347
return VK_OBJECT_TYPE_CU_MODULE_NVX;
347348
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT) {
348349
return VK_OBJECT_TYPE_CU_FUNCTION_NVX;
349-
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT) {
350-
return VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR;
351350
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT) {
352351
return VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR;
353-
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT) {
354-
return VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR;
355352
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT) {
356353
return VK_OBJECT_TYPE_VALIDATION_CACHE_EXT;
357354
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT) {
@@ -440,12 +437,8 @@ static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(Vk
440437
return VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT;
441438
} else if (core_report_obj == VK_OBJECT_TYPE_CU_FUNCTION_NVX) {
442439
return VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT;
443-
} else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR) {
444-
return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT;
445440
} else if (core_report_obj == VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR) {
446441
return VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT;
447-
} else if (core_report_obj == VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR) {
448-
return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT;
449442
} else if (core_report_obj == VK_OBJECT_TYPE_VALIDATION_CACHE_EXT) {
450443
return VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT;
451444
} else if (core_report_obj == VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV) {

scripts/common_codegen.py

+33
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
# Author: Mark Lobodzinski <mark@lunarg.com>
2020

2121
import os
22+
import sys
23+
import subprocess
2224

2325
# Copyright text prefixing all headers (list of strings).
2426
prefixStrings = [
@@ -75,3 +77,34 @@ def GetFeatureProtect(interface):
7577
# helper to define paths relative to the repo root
7678
def repo_relative(path):
7779
return os.path.abspath(os.path.join(os.path.dirname(__file__), '..', path))
80+
81+
# Points to the directory containing the top level CMakeLists.txt
82+
PROJECT_SRC_DIR = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], '..'))
83+
if not os.path.isfile(f'{PROJECT_SRC_DIR}/CMakeLists.txt'):
84+
print(f'PROJECT_SRC_DIR invalid! {PROJECT_SRC_DIR}')
85+
sys.exit(1)
86+
87+
# Returns true if we are running in GitHub actions
88+
# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
89+
def IsGHA():
90+
if 'GITHUB_ACTION' in os.environ:
91+
return True
92+
return False
93+
94+
# Runs a command in a directory and returns its return code.
95+
# Directory is project root by default, or a relative path from project root
96+
def RunShellCmd(command, start_dir = PROJECT_SRC_DIR, env=None, verbose=False):
97+
# Flush stdout here. Helps when debugging on CI.
98+
sys.stdout.flush()
99+
100+
if start_dir != PROJECT_SRC_DIR:
101+
start_dir = repo_relative(start_dir)
102+
cmd_list = command.split(" ")
103+
104+
# Helps a lot when debugging CI issues
105+
if IsGHA():
106+
verbose = True
107+
108+
if verbose:
109+
print(f'CICMD({cmd_list}, env={env})')
110+
subprocess.check_call(cmd_list, cwd=start_dir, env=env)

0 commit comments

Comments
 (0)