From c7e6fa23d5e9f5f81e4587b1199524f6afe8c4bf Mon Sep 17 00:00:00 2001 From: Christophe Date: Wed, 25 Sep 2024 11:38:06 +0200 Subject: [PATCH] vkconfig: Fix flags settings dependencies --- vkconfig/CHANGELOG.md | 7 ++++- vkconfig/mainwindow.cpp | 41 ++++++++++++++--------------- vkconfig_core/setting.cpp | 8 ++++-- vkconfig_core/setting_flags.cpp | 46 ++++++++++++++++++++++++++------- vkconfig_core/version.cpp | 2 +- 5 files changed, 69 insertions(+), 35 deletions(-) diff --git a/vkconfig/CHANGELOG.md b/vkconfig/CHANGELOG.md index 46df0731e1..5fae5fd6b2 100644 --- a/vkconfig/CHANGELOG.md +++ b/vkconfig/CHANGELOG.md @@ -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 diff --git a/vkconfig/mainwindow.cpp b/vkconfig/mainwindow.cpp index df2c8924b9..a0239a1d66 100644 --- a/vkconfig/mainwindow.cpp +++ b/vkconfig/mainwindow.cpp @@ -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 { @@ -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; @@ -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()); @@ -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"); @@ -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()) { diff --git a/vkconfig_core/setting.cpp b/vkconfig_core/setting.cpp index 2bc45b8f7f..2520cd48a5 100644 --- a/vkconfig_core/setting.cpp +++ b/vkconfig_core/setting.cpp @@ -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; } diff --git a/vkconfig_core/setting_flags.cpp b/vkconfig_core/setting_flags.cpp index 0e8fa4362f..da47938974 100644 --- a/vkconfig_core/setting_flags.cpp +++ b/vkconfig_core/setting_flags.cpp @@ -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. @@ -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; @@ -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(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; + } } diff --git a/vkconfig_core/version.cpp b/vkconfig_core/version.cpp index d2ccb8d1f3..576acf88d5 100644 --- a/vkconfig_core/version.cpp +++ b/vkconfig_core/version.cpp @@ -28,7 +28,7 @@ #include #include -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);