Skip to content

Commit

Permalink
vkconfig: Fix flags settings dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
christophe-lunarg committed Sep 25, 2024
1 parent a24a94a commit c7e6fa2
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 35 deletions.
7 changes: 6 additions & 1 deletion vkconfig/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@

# Release notes

## [Vulkan Configurator 2.6.1](https://github.com/LunarG/VulkanTools/tree/main) - July 2024
## [Vulkan Configurator 2.6.2](https://github.com/LunarG/VulkanTools/tree/main) - October 2024

### Fixes:
- Fix flag settings dependencies

## [Vulkan Configurator 2.6.1](https://github.com/LunarG/VulkanTools/tree/vulkan-sdk-1.3.290.0) - July 2024

### Features:
- Add Crash Diagnostic layer built-in configuration
Expand Down
41 changes: 20 additions & 21 deletions vkconfig/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1723,15 +1723,16 @@ bool MainWindow::SelectConfigurationItem(const std::string &configuration_name)
}

void MainWindow::ResetLaunchApplication() {
if (_launch_application) {
_launch_application->kill();
_launch_application->waitForFinished();
_launch_application.reset();

ui->push_button_launcher->setText("Launch");
if (_launch_application != nullptr) {
if (_launch_application->processId() > 0) {
_launch_application->kill();
_launch_application->waitForFinished();

_settings_tree_manager.launched_application = false;
_settings_tree_manager.launched_application = false;
}
}

ui->push_button_launcher->setText("Launch");
}

QStringList MainWindow::BuildEnvVariables() const {
Expand All @@ -1745,8 +1746,10 @@ QStringList MainWindow::BuildEnvVariables() const {
void MainWindow::on_push_button_launcher_clicked() {
// Are we already monitoring a running app? If so, terminate it
if (_launch_application != nullptr) {
ResetLaunchApplication();
return;
if (_launch_application->processId() > 0) {
ResetLaunchApplication();
return;
}
}

std::string launch_log;
Expand Down Expand Up @@ -1809,12 +1812,14 @@ void MainWindow::on_push_button_launcher_clicked() {

Log(launch_log.c_str());

if (_launch_application == nullptr) {
_launch_application.reset(new QProcess(this));
connect(_launch_application.get(), SIGNAL(readyReadStandardOutput()), this, SLOT(standardOutputAvailable()));
connect(_launch_application.get(), SIGNAL(readyReadStandardError()), this, SLOT(errorOutputAvailable()));
connect(_launch_application.get(), SIGNAL(finished(int, QProcess::ExitStatus)), this,
SLOT(processClosed(int, QProcess::ExitStatus)));
}
// Launch the test application
_launch_application.reset(new QProcess(this));
connect(_launch_application.get(), SIGNAL(readyReadStandardOutput()), this, SLOT(standardOutputAvailable()));
connect(_launch_application.get(), SIGNAL(readyReadStandardError()), this, SLOT(errorOutputAvailable()));
connect(_launch_application.get(), SIGNAL(finished(int, QProcess::ExitStatus)), this,
SLOT(processClosed(int, QProcess::ExitStatus)));

_launch_application->setProgram(ReplaceBuiltInVariable(_launcher_executable->text().toStdString()).c_str());
_launch_application->setWorkingDirectory(ReplaceBuiltInVariable(_launcher_working->text().toStdString()).c_str());
Expand All @@ -1832,8 +1837,7 @@ void MainWindow::on_push_button_launcher_clicked() {

// Wait... did we start? Give it 4 seconds, more than enough time
if (!_launch_application->waitForStarted(4000)) {
_launch_application->deleteLater();
_launch_application = nullptr;
//_launch_application->deleteLater();

ui->push_button_launcher->setText("Launch");

Expand All @@ -1855,11 +1859,6 @@ void MainWindow::processClosed(int exit_code, QProcess::ExitStatus status) {

assert(_launch_application);

disconnect(_launch_application.get(), SIGNAL(finished(int, QProcess::ExitStatus)), this,
SLOT(processClosed(int, QProcess::ExitStatus)));
disconnect(_launch_application.get(), SIGNAL(readyReadStandardError()), this, SLOT(errorOutputAvailable()));
disconnect(_launch_application.get(), SIGNAL(readyReadStandardOutput()), this, SLOT(standardOutputAvailable()));

Log("Process terminated");

if (_log_file.isOpen()) {
Expand Down
8 changes: 6 additions & 2 deletions vkconfig_core/setting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,13 @@ SettingDependenceMode CheckDependence(const SettingMeta& meta, const SettingData
const SettingDependenceMode mode =
meta.dependence[i]->type == SETTING_ENUM ? SETTING_DEPENDENCE_HIDE : SETTING_DEPENDENCE_DISABLE;
const SettingData* data = FindSetting(data_set, meta.dependence[i]->key.c_str());
if (data == nullptr) return mode;
if (data == nullptr) {
return mode;
}

if (*data != *meta.dependence[i]) return mode;
if (*data != *meta.dependence[i]) {
return mode;
}
}
return SETTING_DEPENDENCE_ENABLE;
}
Expand Down
46 changes: 36 additions & 10 deletions vkconfig_core/setting_flags.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-2024 Valve Corporation
* Copyright (c) 2020-2024 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 Expand Up @@ -154,7 +154,9 @@ bool SettingMetaFlags::Equal(const SettingMeta& other) const {
for (std::size_t i = 0, n = flags.default_value.size(); i < n; ++i) {
const char* flag = flags.default_value[i].c_str();

if (!IsStringFound(this->default_value, flag)) return false;
if (!IsStringFound(this->default_value, flag)) {
return false;
}
}

return true;
Expand Down Expand Up @@ -211,17 +213,41 @@ std::string SettingDataFlags::Export(ExportMode export_mode) const {
}

bool SettingDataFlags::Equal(const SettingData& other) const {
if (!SettingData::Equal(other)) return false;
if (!SettingData::Equal(other)) {
return false;
}

const SettingDataFlags& flags = static_cast<const SettingDataFlags&>(other);

if (this->value.size() != flags.value.size()) return false;
if (this->type == SETTING_FLAGS) {
if (this->value.empty() && flags.value.empty()) {
return true;
}

for (std::size_t i = 0, n = flags.value.size(); i < n; ++i) {
const char* flag = flags.value[i].c_str();
bool result = this->value.size() == flags.value.size();
for (std::size_t i = 0, n = flags.value.size(); i < n; ++i) {
const char* flag = flags.value[i].c_str();

if (!IsStringFound(this->value, flag)) return false;
}
result = result && IsStringFound(this->value, flag);
if (!result) {
break;
}
}

return true;
return result;
} else {
if (this->value.size() != flags.value.size()) {
return false;
}

for (std::size_t i = 0, n = flags.value.size(); i < n; ++i) {
const char* flag = flags.value[i].c_str();

if (!IsStringFound(this->value, flag)) {
return false;
}
}

return true;
}
}
2 changes: 1 addition & 1 deletion vkconfig_core/version.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include <cassert>
#include <cstring>

const Version Version::VKCONFIG(2, 6, 1);
const Version Version::VKCONFIG(2, 6, 2);
const Version Version::VKCONFIG3(3, 0, 0);
const Version Version::LAYER_CONFIG(2, 2, 3);
const Version Version::VKHEADER(VK_HEADER_VERSION_COMPLETE);
Expand Down

0 comments on commit c7e6fa2

Please sign in to comment.