Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
e47d3dd
vkconfig: Fix command line whitespace decoding
christophe-lunarg Mar 2, 2026
5ca2588
vkconfig: Clarify UI for use without layers overriding
christophe-lunarg Mar 9, 2026
73a24ef
vkconfig: Add Vulkan Drivers override mode for no physical device
christophe-lunarg Mar 17, 2026
be0d5ab
vkconfig: Fix application launcher 'options' edit #2598
christophe-lunarg Mar 18, 2026
2e6f2e8
vkconfig: Improve layer control tooltips #2595
christophe-lunarg Mar 18, 2026
ecade91
vkconfig: Add vkconfig.json backup on Reset to Default
christophe-lunarg Mar 18, 2026
9d627a6
vkconfig: Add 'Discard Ordering and Enabling Layers' default config #…
christophe-lunarg Mar 18, 2026
a21b9ee
vkconfig: Updated message when loader is not found #2533
christophe-lunarg Mar 18, 2026
cd88815
vkconfig: Fix high CPU usage on idle when no layers configuration is …
christophe-lunarg Mar 19, 2026
61b4736
vkconfig: Clean up dead code
christophe-lunarg Mar 19, 2026
38d1548
vkconfig: Fix UUID display in log, following the RFC9562 standard #2423
christophe-lunarg Mar 20, 2026
d65f27e
vkconfig: Load all Vulkan drivers from a path
christophe-lunarg Mar 24, 2026
f40d431
vkconfig: Refactor layers tab and improve UI consistency
christophe-lunarg Mar 24, 2026
c6b4b1e
vkconfig: Fix mix layer and icd manifest
christophe-lunarg Mar 31, 2026
4027d71
vkconfig: Removed dead code
christophe-lunarg Apr 7, 2026
1126f87
vkconfig: Add layers display option to show only explicit layers #2636
christophe-lunarg Apr 8, 2026
fe0876c
dump: Fix VkIndirectExecutionSetCreateInfoEXT union
spencer-lunarg Apr 8, 2026
885e788
vkconfig: Add enabled and ordered layers to generated configuration f…
christophe-lunarg Apr 8, 2026
88a6fa6
vkconfig: Updated doc, fixes and clean up
christophe-lunarg Apr 9, 2026
29667c1
vkconfig: Documentation and fixes
christophe-lunarg Apr 14, 2026
4350329
api dump: Fix missing use of aliases
charles-lunarg Apr 20, 2026
7789abf
api dump: Workaround removed VkDeviceCreateInfo xml fields
charles-lunarg Apr 20, 2026
5c671bc
codegen: Improve error handling when registry is missing
charles-lunarg Apr 20, 2026
d4a6738
ci: Add pyparsing to deps
charles-lunarg Apr 20, 2026
e808724
build: Update to header version 1.4.349
charles-lunarg Apr 20, 2026
2b0b023
vkconfig: Add layer messages only on specified platforms #2650
christophe-lunarg Apr 27, 2026
5fbd46f
vkconfig: Fix all enabled applying wrong configuration
christophe-lunarg Apr 27, 2026
a2649b7
vkconfig: SDK 349 bugfixing
christophe-lunarg Apr 27, 2026
2afa2cb
vkconfig: Fix highligher perf issue
christophe-lunarg Apr 28, 2026
e59f85f
vkconfig: Improve application log stream speed
christophe-lunarg Apr 29, 2026
603b065
build: Update to header version 1.4.350
charles-lunarg May 1, 2026
06c9e3e
vkconfig: Fix layer manifest validation
christophe-lunarg May 4, 2026
5bf6d96
vkconfig: Fix layer schema validation caching
christophe-lunarg May 5, 2026
a995d0f
vkconfig: Clean up tray icon
christophe-lunarg May 5, 2026
74ef4c3
vkconfig: Fix missing layer setting status to setting group type
christophe-lunarg May 5, 2026
aadc90a
vkconfig: Improve configure tooltips
christophe-lunarg May 5, 2026
6448eb2
vkconfig: Renamed API dump and validation default configuration
christophe-lunarg May 6, 2026
601c188
vkconfig: Fix global vk_layer_settings.txt being written when layers …
christophe-lunarg May 6, 2026
678e51c
vkconfig: Fix tray icon on Linux
christophe-lunarg May 7, 2026
14717ef
vkconfig: Fix layer init
christophe-lunarg May 8, 2026
1d67b28
vkconfig: Fix system tray
christophe-lunarg May 11, 2026
990587a
vkconfig: Improve icon tray design
christophe-lunarg May 11, 2026
12eb43e
vkconfig: Fix cmd mode initialization
christophe-lunarg May 11, 2026
fa1c6c2
vkconfig: Fix dark mode message on Linux
christophe-lunarg May 19, 2026
6224f0f
Regenerate CPUTiming dispatch headers with newer Vulkan Headers
emrekultursay May 21, 2026
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
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ jobs:
- name: Clone repository
uses: actions/checkout@v6
- run: sudo apt-get -qq update && sudo apt-get install -y libwayland-dev xorg-dev
- run: python3 -m pip install pyparsing
- run: python3 scripts/github_ci_linux.py --config Debug --tests GitHubCI
- run: python3 scripts/generate_source.py --verify external/Vulkan-Headers/registry

Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
cmake_minimum_required(VERSION 3.22.1)

# The VERSION field is generated with the "--generated-version" flag in the generate_source.py script
project(VULKAN_TOOLS VERSION 1.4.342 LANGUAGES CXX)
project(VULKAN_TOOLS VERSION 1.4.350 LANGUAGES CXX)

add_subdirectory(scripts)

Expand Down
1,007 changes: 913 additions & 94 deletions layersvt/generated/api_dump_dispatch.h

Large diffs are not rendered by default.

5,085 changes: 3,798 additions & 1,287 deletions layersvt/generated/api_dump_implementation.h

Large diffs are not rendered by default.

247 changes: 245 additions & 2 deletions layersvt/generated/cputiming_dispatch.h

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion layersvt/json/VkLayer_api_dump.json.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"name": "VK_LAYER_LUNARG_api_dump",
"type": "GLOBAL",
"library_path": "@JSON_LIBRARY_PATH@",
"api_version": "1.4.342",
"api_version": "1.4.350",
"implementation_version": "2",
"description": "LunarG API dump layer",
"introduction": "The API Dump utility layer prints API calls, parameters, and values to the identified output stream.",
Expand Down
3 changes: 2 additions & 1 deletion scripts/generate_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@ def RunGenerators(api: str, registry: str, video_registry: str, directory: str,
sys.path.insert(0, registry_headers_path)
try:
from reg import Registry
except:
except Exception as err:
print("ModuleNotFoundError: No module named 'reg'") # normal python error message
print(f'{registry_headers_path} is not pointing to the Vulkan-Headers registry directory.')
print("Inside Vulkan-Headers there is a registry/reg.py file that is used.")
print(f"Error {err=}, {type(err)=}")
sys.exit(1) # Return without call stack so easy to spot error

from base_generator import BaseGeneratorOptions
Expand Down
4 changes: 2 additions & 2 deletions scripts/generators/api_dump_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
'ApiDumpInstance::current().setDescriptorType(object.type);',
'VkResourceDescriptorInfoEXT':
'ApiDumpInstance::current().setDescriptorType(object.type);',
'VkIndirectExecutionSetInfoEXT':
'VkIndirectExecutionSetCreateInfoEXT':
'ApiDumpInstance::current().setIndirectExecutionSetInfoType(object.type);',
'VkIndirectCommandsLayoutTokenEXT':
'ApiDumpInstance::current().setIndirectCommandsLayoutToken(object.type);',
Expand Down Expand Up @@ -954,7 +954,7 @@ def write_value(self, var, parent):
else:
if var.pointer and var.type not in self.only_use_as_pointer_types and var.type not in self.vk.funcPointers.keys() and var.type not in ['void', 'char'] and not (var.name == 'pNext' and var.fullType in ['void*', 'const void*']):
pointer_type = f'dump_type<Format, {custom_type}>'
if (var.type in self.vulkan_defined_types):
if (call_type in self.vulkan_defined_types):
pointer_type = f'dump_{call_type}<Format>'

self.write(f'dump_pointer<Format>({value}, settings, "{custom_fullType}", "{var.name}", {indent}, {pointer_type});')
Expand Down
8 changes: 4 additions & 4 deletions scripts/known_good.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"sub_dir": "Vulkan-Headers",
"build_dir": "Vulkan-Headers/build",
"install_dir": "Vulkan-Headers/build/install",
"commit": "v1.4.342",
"commit": "v1.4.350",
"cmake_options": [
"-DVULKAN_HEADERS_ENABLE_MODULE=OFF"
]
Expand All @@ -17,7 +17,7 @@
"sub_dir": "Vulkan-Utility-Libraries",
"build_dir": "Vulkan-Utility-Libraries/build",
"install_dir": "Vulkan-Utility-Libraries/build/install",
"commit": "v1.4.342",
"commit": "v1.4.350",
"deps": [
{
"var_name": "VULKAN_HEADERS_INSTALL_DIR",
Expand All @@ -31,7 +31,7 @@
"sub_dir": "Vulkan-Loader",
"build_dir": "Vulkan-Loader/build",
"install_dir": "Vulkan-Loader/build/install",
"commit": "v1.4.342",
"commit": "v1.4.350",
"deps": [
{
"var_name": "VULKAN_HEADERS_INSTALL_DIR",
Expand All @@ -50,7 +50,7 @@
"sub_dir": "Vulkan-Tools",
"build_dir": "Vulkan-Tools/build",
"install_dir": "Vulkan-Tools/build/install",
"commit": "v1.4.342",
"commit": "v1.4.350",
"deps": [
{
"var_name": "VULKAN_HEADERS_INSTALL_DIR",
Expand Down
25 changes: 12 additions & 13 deletions vkconfig_cmd/main_layers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,22 +87,21 @@ static int RunLayersSurrender(Configurator& configurator, const CommandLine& com
}

static int RunLayersPath(Configurator& configurator, const CommandLine& command_line) {
printf("vkconfig: [INFO] Paths to find Vulkan Layers\n");
printf("vkconfig: [INFO] Vulkan Layers paths:\n");

for (int layers_paths_index = 0, layers_paths_count = LAYERS_PATHS_COUNT; layers_paths_index < layers_paths_count;
++layers_paths_index) {
const std::vector<LayersPathInfo>& paths = configurator.layers.paths[layers_paths_index];
printf("\n%s:\n", GetLabel(static_cast<LayersPaths>(layers_paths_index)));
const std::set<LayerDisplay>& layer_display_list = configurator.layers.BuildLayerDisplayList();

if (paths.empty()) {
printf(" - None\n");
} else {
for (std::size_t i = 0, n = paths.size(); i < n; ++i) {
if (paths[i].enabled) {
printf(" - %s\n", paths[i].path.AbsolutePath().c_str());
}
}
for (auto it = layer_display_list.begin(), end = layer_display_list.end(); it != end; ++it) {
const Layer* layer = configurator.layers.FindFromManifest(it->id.manifest_path, true);
if (layer == nullptr) {
continue;
}

const std::string status = layer->status == STATUS_STABLE ? "" : format(" (%s)", ::GetToken(layer->status));
const std::string text = format("%s - %s%s, %s layer", layer->key.c_str(), layer->api_version.str().c_str(), status.c_str(),
::GetToken(layer->type));

printf(" - %s\n", text.c_str());
}

return 0;
Expand Down
2 changes: 1 addition & 1 deletion vkconfig_cmd/main_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ static int RunLoaderSurrender(Configurator& configurator, const CommandLine& com
fprintf(stderr, "vkconfig: Failed to surrender Vulkan Layers configuration...\n");
}
} else {
fprintf(stderr, "vkconfig: No active Vulkan Loader configuration, nothing to surrender\n");
fprintf(stderr, "vkconfig: No active Vulkan Layers configuration, nothing to surrender\n");
}

return surrender_result ? 0 : -1;
Expand Down
2 changes: 1 addition & 1 deletion vkconfig_cmd/resources.qrc
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<RCC>
<qresource prefix="/configurations">
<file alias="API dump.json">../vkconfig_core/configurations/API dump.json</file>
<file alias="API dump with Validation.json">../vkconfig_core/configurations/API dump with Validation.json</file>
<file alias="Crash Diagnostic.json">../vkconfig_core/configurations/Crash Diagnostic.json</file>
<file alias="Disable All Vulkan Layers.json">../vkconfig_core/configurations/Disable All Vulkan Layers.json</file>
<file alias="Frame Capture.json">../vkconfig_core/configurations/Frame Capture.json</file>
<file alias="Portability.json">../vkconfig_core/configurations/Portability.json</file>
<file alias="Validation.json">../vkconfig_core/configurations/Validation.json</file>
<file alias="Validation with API Dump Log.json">../vkconfig_core/configurations/Validation with API Dump Log.json</file>
</qresource>

<qresource prefix="/vkconfig">
Expand Down
4 changes: 2 additions & 2 deletions vkconfig_core/application_singleton.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-2021 Valve Corporation
* Copyright (c) 2020-2021 LunarG, Inc.
* Copyright (c) 2020-2026 Valve Corporation
* Copyright (c) 2020-2026 LunarG, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
20 changes: 8 additions & 12 deletions vkconfig_core/command_line.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -640,8 +640,8 @@ void CommandLine::usage() const {
printf("\tversion = Display %s version.\n", VKCONFIG_NAME);
printf("\tgui = Launch the graphical interface.\n");
printf("\treset = Reset layers configurations.\n");
printf("\tloader = Configure system the Vulkan Loader configuration.\n");
printf("\tlayers = List the Vulkan layers found on the system.\n");
printf("\tloader = Configure system the Vulkan Layers configuration.\n");
printf("\tlayers = Configure system the Vulkan Layers configuration.\n");
printf("\tsettings = Create layer settings and documentation files for Vulkan developers.\n");
printf("\n");
printf(" (Run 'vkconfig help <command>' for detailed usage of %s commands.)\n", VKCONFIG_NAME);
Expand Down Expand Up @@ -673,13 +673,13 @@ void CommandLine::usage() const {
}
case HELP_LAYERS: {
printf("Name\n");
printf("\t'layers' - Command to list the Vulkan layers found on the system.\n");
printf("\t'layers' - Command to configure system Vulkan Layers configuration.\n");
printf("\n");
printf("Synopsis\n");
printf("\tvkconfig layers (--list | -l)\n");
printf("\tvkconfig layers (--list-verbose | -lv)\n");
printf("\tvkconfig layers (--path | -p)\n");
printf("\tvkconfig layers (--override | -o) <loader_configuration_file>\n");
printf("\tvkconfig layers (--override | -o) <layers_configuration_file>\n");
printf("\tvkconfig layers (--surrender | -s)\n");
printf("\n");
printf("Description\n");
Expand All @@ -692,20 +692,16 @@ void CommandLine::usage() const {
printf("\tvkconfig layers (--path | -p)\n");
printf("\t\tList the Vulkan layers locations found by %s on the system.\n", VKCONFIG_NAME);
printf("\n");
printf("\tvkconfig layers (--override | -o) <loader_configuration_file>\n");
printf("\t\tOverride the Vulkan layers using <loader_configuration_file> generated by %s.\n", VKCONFIG_NAME);
printf("\t (DEPRECATED: Use `vkconfig loader --override` instead.)\n");
printf("\tvkconfig layers (--override | -o) <layers_configuration_file>\n");
printf("\t\tOverride the Vulkan layers using <layers_configuration_file> generated by %s.\n", VKCONFIG_NAME);
printf("\n");
printf("\tvkconfig layers (--surrender | -s)\n");
printf("\t\tSurrender the Vulkan layers control to Vulkan applications.\n");
printf("\t (DEPRECATED: Use `vkconfig loader --surrender` instead.)\n");
break;
}
case HELP_LOADER: {
printf("Name\n");
printf(
"\t'loader' - Command to configure system Vulkan Loader configuration, including layers, loader logging and "
"drivers.\n");
printf("\t'loader' - Command to configure system Vulkan Layers configuration.\n");
printf("\n");
printf("Synopsis\n");
printf("\tvkconfig loader (--override | -o) (<configuration_index> | <configuration_name> | <configuration_file>)\n");
Expand All @@ -723,7 +719,7 @@ void CommandLine::usage() const {
printf("\t (Run 'vkconfig loader --list' to enumerate the available configurations.)\n");
printf("\n");
printf("\tvkconfig loader (--surrender | -s)\n");
printf("\t\tSurrender the Vulkan Loader configuration to Vulkan applications.\n");
printf("\t\tSurrender the Vulkan Layers configuration to Vulkan applications.\n");
printf("\n");
printf("\tvkconfig loader (--list | -l)\n");
printf("\t\tList the Vulkan Layers configurations found by %s on the system.\n", VKCONFIG_NAME);
Expand Down
54 changes: 45 additions & 9 deletions vkconfig_core/configuration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,9 @@ bool Configuration::Load(const Path& full_path, const LayerManager& layers) {
if (json_layer_object.value("rank") != QJsonValue::Undefined) {
parameter.overridden_rank = json_layer_object.value("rank").toInt();
}
if (json_layer_object.value("was_explicitly_rank") != QJsonValue::Undefined) {
parameter.was_explicitly_rank = json_layer_object.value("was_explicitly_rank").toBool();
}
if (json_layer_object.value("version") != QJsonValue::Undefined) {
const std::string& version = ReadStringValue(json_layer_object, "version");
parameter.api_version = version == "latest" ? Version::LATEST : Version(version.c_str());
Expand All @@ -173,7 +176,7 @@ bool Configuration::Load(const Path& full_path, const LayerManager& layers) {

if (layer != nullptr) {
parameter.manifest = layer->manifest_path;
parameter.type = layer->type;
// parameter.type = layer->type;
}

if (parameter.api_version != Version::LATEST) {
Expand Down Expand Up @@ -249,7 +252,7 @@ bool Configuration::Save(const Path& full_path, bool export_mode) const {
for (std::size_t i = 0, n = this->parameters.size(); i < n; ++i) {
const Parameter& parameter = this->parameters[i];

if (parameter.type == LAYER_TYPE_IMPLICIT && parameter.control == LAYER_CONTROL_AUTO) {
if (export_mode && parameter.IsAutoImplicitLayer()) {
continue;
}

Expand All @@ -261,6 +264,7 @@ bool Configuration::Save(const Path& full_path, bool export_mode) const {
}
json_layer.insert("control", GetToken(parameter.control));
json_layer.insert("rank", parameter.overridden_rank);
json_layer.insert("was_explicitly_rank", parameter.was_explicitly_rank);
json_layer.insert("version", parameter.api_version == Version::LATEST ? "latest" : parameter.api_version.str().c_str());
if (parameter.builtin == LAYER_BUILTIN_NONE && !export_mode) {
json_layer.insert("manifest", parameter.manifest.RelativePath().c_str());
Expand Down Expand Up @@ -526,20 +530,39 @@ void Configuration::GatherParameters(const LayerManager& layers) {
std::swap(this->parameters, gathered_parameters);
}

void Configuration::ResetLayersOrder(const LayerManager& layers) {
for (std::size_t i = 0, n = this->parameters.size(); i < n; ++i) {
this->parameters[i].was_explicitly_rank = false;
this->parameters[i].overridden_rank = Parameter::NO_RANK;
}

::OrderParameter(this->parameters, layers);
}

void Configuration::Reorder(const std::vector<std::string>& layer_names) {
std::vector<Parameter> ordered_parameters;

int rank = 0;

for (std::size_t i = 0, n = layer_names.size(); i < n; ++i) {
Parameter* parameter = this->Find(layer_names[i]);
if (parameter == nullptr) {
continue;
}
if (layer_names[i] == implicit_layers) {
std::vector<Parameter*> parameters = this->GatherImplicitAutoLayers();
for (std::size_t j = 0, p = parameters.size(); j < p; ++j) {
Parameter* parameter = parameters[j];
parameter->overridden_rank = rank;
++rank;
ordered_parameters.push_back(*parameter);
}
} else {
Parameter* parameter = this->Find(layer_names[i]);
if (parameter == nullptr) {
continue;
}

parameter->overridden_rank = rank;
++rank;
ordered_parameters.push_back(*parameter);
parameter->overridden_rank = rank;
++rank;
ordered_parameters.push_back(*parameter);
}
}

// Add the remaining parameters not listed in `layer_names`
Expand All @@ -563,6 +586,19 @@ void Configuration::Reorder(const std::vector<std::string>& layer_names) {
this->parameters = ordered_parameters;
}

std::vector<Parameter*> Configuration::GatherImplicitAutoLayers() {
std::vector<Parameter*> result;

for (std::size_t i = 0, n = this->parameters.size(); i < n; ++i) {
Parameter* parameter = &this->parameters[i];
if (parameter->IsAutoImplicitLayer()) {
result.push_back(parameter);
}
}

return result;
}

bool Configuration::IsDefault() const {
const std::vector<Path>& builtin_configuration_files = CollectFilePaths(":/configurations/");
for (std::size_t i = 0, n = builtin_configuration_files.size(); i < n; ++i) {
Expand Down
8 changes: 3 additions & 5 deletions vkconfig_core/configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,18 @@ class Configuration {
void SwitchLayerVersion(const LayerManager& layers, const std::string& layer_key, const Path& manifest_path);
void SwitchLayerLatest(const LayerManager& layers, const std::string& layer_key);
void GatherParameters(const LayerManager& layers);
void ResetLayersOrder(const LayerManager& layers);
void Reorder(const std::vector<std::string>& layer_names);

std::vector<Parameter*> GatherImplicitAutoLayers();

std::string key = "New Configuration"; // User readable display of the configuration name (may contain spaces)
int version = 1;
int platform_flags = PLATFORM_DESKTOP_BIT;
LayerControl default_control = LAYER_CONTROL_AUTO;
bool override_settings = false;
Path override_settings_path;
// bool override_layers = true; // Keep or not ?
std::string selected_layer_name;
// bool override_driver = false;
// std::string override_driver_name = DEFAULT_PHYSICAL_DEVICE;
// bool override_loader = true;
// int loader_log_messages_flags = GetBit(LOG_ERROR);

std::vector<Parameter> parameters;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"file_format_version": "3.0.0",
"configuration": {
"name": "API dump",
"name": "API dump with Validation",
"version": 1,
"platforms": [
"WINDOWS",
Expand Down
Loading
Loading