From 974d7313283627a566e86d79b3a64dc097291837 Mon Sep 17 00:00:00 2001 From: Christophe Date: Mon, 9 Sep 2024 17:46:53 +0200 Subject: [PATCH] vkconfig3: Various clean up --- vkconfig_core/application_manager.cpp | 21 ++++++ vkconfig_core/application_manager.h | 26 ++++++++ vkconfig_core/configuration_manager.cpp | 12 ++-- vkconfig_core/configurator.cpp | 4 +- vkconfig_core/environment.cpp | 14 ++-- vkconfig_core/help.cpp | 9 ++- vkconfig_core/layer_manager.cpp | 4 +- vkconfig_core/layer_preset.cpp | 16 +++-- vkconfig_core/layer_preset.h | 4 +- vkconfig_core/parameter.cpp | 66 ------------------- vkconfig_core/parameter.h | 3 - vkconfig_core/path.cpp | 14 ++-- vkconfig_core/registry.cpp | 4 +- vkconfig_core/registry.h | 4 +- vkconfig_core/test/test_command_line.cpp | 6 +- vkconfig_core/test/test_path.cpp | 4 +- vkconfig_core/test/test_type_platform.cpp | 49 ++++---------- vkconfig_core/type_platform.cpp | 53 +++++++-------- vkconfig_core/type_platform.h | 44 +++++++------ vkconfig_core/vulkan_util.cpp | 4 +- vkconfig_gui/dialog_vulkan_analysis.cpp | 2 +- vkconfig_gui/dialog_vulkan_info.cpp | 4 +- vkconfig_gui/vkconfig.pro | 2 + .../widget_tab_configurations_layer.cpp | 10 +-- 24 files changed, 172 insertions(+), 207 deletions(-) create mode 100644 vkconfig_core/application_manager.cpp create mode 100644 vkconfig_core/application_manager.h diff --git a/vkconfig_core/application_manager.cpp b/vkconfig_core/application_manager.cpp new file mode 100644 index 0000000000..974198f104 --- /dev/null +++ b/vkconfig_core/application_manager.cpp @@ -0,0 +1,21 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * - Christophe Riccio + */ + +#include "application_manager.h" diff --git a/vkconfig_core/application_manager.h b/vkconfig_core/application_manager.h new file mode 100644 index 0000000000..8264ae2b2a --- /dev/null +++ b/vkconfig_core/application_manager.h @@ -0,0 +1,26 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Authors: + * - Christophe Riccio + */ + +#pragma once + +class ApplicationManager { + public: + private: +}; diff --git a/vkconfig_core/configuration_manager.cpp b/vkconfig_core/configuration_manager.cpp index c3045c5436..ac70a3f3e6 100644 --- a/vkconfig_core/configuration_manager.cpp +++ b/vkconfig_core/configuration_manager.cpp @@ -139,13 +139,13 @@ void ConfigurationManager::LoadDefaultConfigurations(const LayerManager &layers) continue; } -#ifdef _M_ARM64 - if (configuration.key == "Frame Capture") { - continue; - } else if (configuration.key == "Crash Diagnostic") { - continue; + if (VKC_PLATFORM == PLATFORM_WINDOWS_ARM) { + if (configuration.key == "Frame Capture") { + continue; + } else if (configuration.key == "Crash Diagnostic") { + continue; + } } -#endif OrderParameter(configuration.parameters, layers); diff --git a/vkconfig_core/configurator.cpp b/vkconfig_core/configurator.cpp index 61fd06eba4..844b9f255f 100644 --- a/vkconfig_core/configurator.cpp +++ b/vkconfig_core/configurator.cpp @@ -419,7 +419,7 @@ bool Configurator::Override(OverrideArea override_area) { bool result_layers_settings = this->WriteLayersSettings(override_area, layers_settings_path); // On Windows only, we need to write these values to the registry -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 AppendRegistryEntriesForLayers(loader_settings_path.AbsolutePath().c_str(), layers_settings_path.AbsolutePath().c_str()); #endif @@ -441,7 +441,7 @@ bool Configurator::Surrender(OverrideArea override_area) { result_layers_settings = layers_settings_path.Remove(); } -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 RemoveRegistryEntriesForLayers(loader_settings_path.AbsolutePath().c_str(), layers_settings_path.AbsolutePath().c_str()); #endif diff --git a/vkconfig_core/environment.cpp b/vkconfig_core/environment.cpp index d8e2ca7c06..f0c4b9d9dd 100644 --- a/vkconfig_core/environment.cpp +++ b/vkconfig_core/environment.cpp @@ -41,10 +41,12 @@ static const char* GetApplicationSuffix() { static const char* TABLE[] = { - ".exe", // PLATFORM_WINDOWS + ".exe", // PLATFORM_WINDOWS_X86 + ".exe", // PLATFORM_WINDOWS_ARM "", // PLATFORM_LINUX ".app", // PLATFORM_MACOS - "N/A" // PLATFORM_ANDROID + "N/A", // PLATFORM_ANDROID + "N/A" // PLATFORM_IOS }; static_assert(std::size(TABLE) == PLATFORM_COUNT, "The tranlation table size doesn't match the enum number of elements"); @@ -356,7 +358,7 @@ bool ExactExecutableFromAppBundle(Path& app_path) { } DefaultPath Environment::GetDefaultExecutablePath(const std::string& executable_name) const { - static const char* DEFAULT_PATH = VKC_PLATFORM == VKC_PLATFORM_MACOS ? "/../.." : ""; + static const char* DEFAULT_PATH = VKC_PLATFORM == PLATFORM_MACOS ? "/../.." : ""; DefaultPath default_path{"." + executable_name, "."}; @@ -372,14 +374,14 @@ DefaultPath Environment::GetDefaultExecutablePath(const std::string& executable_ } // Search the default applications from package installation (Linux) - if (VKC_PLATFORM == VKC_PLATFORM_LINUX) { + if (VKC_PLATFORM == PLATFORM_LINUX) { const Path search_path(std::string("/usr/bin") + DEFAULT_PATH + executable_name); if (search_path.Exists()) { default_path.executable_path = Path(search_path.AbsolutePath(), true); default_path.working_folder = Path(search_path.AbsoluteDir(), true); return default_path; } - } else if (VKC_PLATFORM == VKC_PLATFORM_MACOS) { + } else if (VKC_PLATFORM == PLATFORM_MACOS) { Path search_path(std::string("/Applications") + executable_name); if (search_path.Exists() && ExactExecutableFromAppBundle(search_path)) { default_path.executable_path = Path(search_path.AbsolutePath(), true); @@ -389,7 +391,7 @@ DefaultPath Environment::GetDefaultExecutablePath(const std::string& executable_ } // Using relative path to vkconfig in case SDK is not "installed" - if (VKC_PLATFORM == VKC_PLATFORM_MACOS) { + if (VKC_PLATFORM == PLATFORM_MACOS) { Path search_path(std::string("..") + DEFAULT_PATH + executable_name); if (search_path.Exists() && ExactExecutableFromAppBundle(search_path)) { default_path.executable_path = Path(search_path.AbsolutePath(), true); diff --git a/vkconfig_core/help.cpp b/vkconfig_core/help.cpp index 41933a8925..c04e80375b 100644 --- a/vkconfig_core/help.cpp +++ b/vkconfig_core/help.cpp @@ -31,10 +31,15 @@ void ShowDoc(DocType doc_type) { static const char* PLATFORM_STRING[] = { - "windows", // PLATFORM_WINDOWS + "windows", // PLATFORM_WINDOWS_X86 + "windows", // PLATFORM_WINDOWS_ARM "linux", // PLATFORM_LINUX - "mac" // PLATFORM_MACOS + "mac", // PLATFORM_MACOS + "android", // PLATFORM_ANDROID + "ios" // PLATFORM_ANDROID }; + static_assert(std::size(PLATFORM_STRING) == PLATFORM_COUNT, + "The tranlation table size doesn't match the enum number of elements"); const char* platform = PLATFORM_STRING[VKC_PLATFORM]; diff --git a/vkconfig_core/layer_manager.cpp b/vkconfig_core/layer_manager.cpp index b7173482dd..4b813e588b 100644 --- a/vkconfig_core/layer_manager.cpp +++ b/vkconfig_core/layer_manager.cpp @@ -36,7 +36,7 @@ LayerType GetLayerType(LayersPaths Layers_paths_type) { std::vector GetImplicitLayerPaths() { std::vector result; -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 static const char *REGISTRY_PATHS[] = { "HKEY_LOCAL_MACHINE\\Software\\Khronos\\Vulkan\\ImplicitLayers", "HKEY_CURRENT_USER\\Software\\Khronos\\Vulkan\\ImplicitLayers", @@ -74,7 +74,7 @@ std::vector GetImplicitLayerPaths() { std::vector GetExplicitLayerPaths() { std::vector result; -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 static const char *REGISTRY_PATHS[] = { "HKEY_LOCAL_MACHINE\\Software\\Khronos\\Vulkan\\ExplicitLayers", "HKEY_CURRENT_USER\\Software\\Khronos\\Vulkan\\ExplicitLayers", diff --git a/vkconfig_core/layer_preset.cpp b/vkconfig_core/layer_preset.cpp index 8631174625..285129dd1d 100644 --- a/vkconfig_core/layer_preset.cpp +++ b/vkconfig_core/layer_preset.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. @@ -38,13 +38,19 @@ const LayerPreset* GetPreset(const std::vector& presets, const char } bool HasPreset(const SettingDataSet& layer_settings, const SettingDataSetConst& preset_settings) { - if (preset_settings.empty()) return false; + if (preset_settings.empty()) { + return false; + } for (std::size_t preset_index = 0, preset_count = preset_settings.size(); preset_index < preset_count; ++preset_index) { const SettingData* layer_setting = FindSetting(layer_settings, preset_settings[preset_index]->key.c_str()); - if (layer_setting == nullptr) return false; + if (layer_setting == nullptr) { + return false; + } - if (*preset_settings[preset_index] != *layer_setting) return false; + if (*preset_settings[preset_index] != *layer_setting) { + return false; + } } return true; diff --git a/vkconfig_core/layer_preset.h b/vkconfig_core/layer_preset.h index 61463391d9..24d148bb50 100644 --- a/vkconfig_core/layer_preset.h +++ b/vkconfig_core/layer_preset.h @@ -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. diff --git a/vkconfig_core/parameter.cpp b/vkconfig_core/parameter.cpp index 99a62d6ce4..0520a2f83c 100644 --- a/vkconfig_core/parameter.cpp +++ b/vkconfig_core/parameter.cpp @@ -77,34 +77,6 @@ ParameterRank GetParameterOrdering(const LayerManager& layers, const Parameter& } } -Version ComputeMinApiVersion(const Version api_version, const std::vector& parameters, const LayerManager& layers) { - if (parameters.empty()) { - return Version::NONE; - } - - Version min_version = api_version; - - for (std::size_t i = 0, n = parameters.size(); i < n; ++i) { - const Layer* layer = layers.Find(parameters[i].key, parameters[i].api_version); - if (layer == nullptr) { - continue; - } - - const ParameterRank state = GetParameterOrdering(layers, parameters[i]); - - if (state == PARAMETER_RANK_EXCLUDED) { - continue; - } - if (state == PARAMETER_RANK_MISSING) { - continue; - } - - min_version = min_version < layer->api_version ? min_version : layer->api_version; - } - - return min_version; -} - void OrderParameter(std::vector& parameters, const LayerManager& layers) { struct ParameterCompare { ParameterCompare(const LayerManager& layers) : layers(layers) {} @@ -144,20 +116,6 @@ void OrderParameter(std::vector& parameters, const LayerManager& laye } } -void FilterParameters(std::vector& parameters, const LayerControl control) { - std::vector filtered_parameters; - - for (std::size_t i = 0, n = parameters.size(); i < n; ++i) { - if (parameters[i].control == control) { - continue; - } - - filtered_parameters.push_back(parameters[i]); - } - - parameters = filtered_parameters; -} - bool HasMissingLayer(const std::vector& parameters, const LayerManager& layers, std::string& missing_layer) { for (auto it = parameters.begin(), end = parameters.end(); it != end; ++it) { if (it->control == LAYER_CONTROL_OFF) { @@ -194,27 +152,3 @@ std::size_t CountOverriddenLayers(const std::vector& parameters) { return count; } - -std::size_t CountExcludedLayers(const std::vector& parameters, const LayerManager& layers) { - std::size_t count = 0; - - for (std::size_t i = 0, n = parameters.size(); i < n; ++i) { - const Parameter& parameter = parameters[i]; - if (!IsPlatformSupported(parameter.platform_flags)) { - continue; - } - - if (parameter.control != LAYER_CONTROL_OFF) { - continue; - } - - const Layer* layer = layers.Find(parameter.key, parameter.api_version); - if (layer == nullptr) { - continue; // Do not display missing excluded layers - } - - ++count; - } - - return count; -} diff --git a/vkconfig_core/parameter.h b/vkconfig_core/parameter.h index c1bd2424bb..cab1afd6fc 100644 --- a/vkconfig_core/parameter.h +++ b/vkconfig_core/parameter.h @@ -54,11 +54,8 @@ struct Parameter { }; ParameterRank GetParameterOrdering(const LayerManager& layers, const Parameter& parameter); -Version ComputeMinApiVersion(const Version api_version, const std::vector& parameters, const LayerManager& layers); void OrderParameter(std::vector& parameters, const LayerManager& layers); -void FilterParameters(std::vector& parameters, const LayerControl control); bool HasMissingLayer(const std::vector& parameters, const LayerManager& layers, std::string& missing_layer); std::size_t CountOverriddenLayers(const std::vector& parameters); -std::size_t CountExcludedLayers(const std::vector& parameters, const LayerManager& layers); diff --git a/vkconfig_core/path.cpp b/vkconfig_core/path.cpp index f6fb5be082..2e37b8cda1 100644 --- a/vkconfig_core/path.cpp +++ b/vkconfig_core/path.cpp @@ -336,10 +336,12 @@ static const Path GetLoaderSettingsPath() { static const Path GetSDKPath() { const char* TABLE[] = { - "", // PLATFORM_WINDOWS + "", // PLATFORM_WINDOWS_X86 + "", // PLATFORM_WINDOWS_ARM "/usr", // PLATFORM_LINUX "/usr/local/share/vulkan", // PLATFORM_MACOS - "" // PLATFORM_ANDROID + "", // PLATFORM_ANDROID + "" // PLATFORM_IOS }; static_assert(std::size(TABLE) == PLATFORM_COUNT, "The tranlation table size doesn't match the enum number of elements"); @@ -347,7 +349,7 @@ static const Path GetSDKPath() { if (result.empty()) { result = TABLE[VKC_PLATFORM]; } else { // VULKAN_SDK may be set on macOS - if (VKC_PLATFORM == VKC_PLATFORM_MACOS) { + if (VKC_PLATFORM == PLATFORM_MACOS) { result += "/share/vulkan"; } } @@ -377,10 +379,12 @@ static const Path GetExplicitLayersPath() { static const Path GetVulkanContentPath() { static const std::string TABLE[] = { - "/Config", // PLATFORM_WINDOWS + "/Config", // PLATFORM_WINDOWS_86 + "/Config", // PLATFORM_WINDOWS_ARM "/share/vulkan/config", // PLATFORM_LINUX "/config", // PLATFORM_MACOS - "N/A" // PLATFORM_ANDROID + "N/A", // PLATFORM_ANDROID + "N/A" // PLATFORM_IOS }; static_assert(std::size(TABLE) == PLATFORM_COUNT); diff --git a/vkconfig_core/registry.cpp b/vkconfig_core/registry.cpp index 0b80ade1b7..5b4f368ec1 100644 --- a/vkconfig_core/registry.cpp +++ b/vkconfig_core/registry.cpp @@ -22,7 +22,7 @@ #include -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 #include #include #include @@ -200,4 +200,4 @@ std::vector LoadRegistryLayers(const QString &path) { return layers_paths; } -#endif // VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#endif // VKC_ENV == VKC_ENV_WIN32 diff --git a/vkconfig_core/registry.h b/vkconfig_core/registry.h index 7696fc8401..a40fcc1198 100644 --- a/vkconfig_core/registry.h +++ b/vkconfig_core/registry.h @@ -23,7 +23,7 @@ #include "type_platform.h" #include "layer.h" -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 #include @@ -35,4 +35,4 @@ void RemoveRegistryEntriesForLayers(QString override_file, QString settings_file std::vector LoadRegistryLayers(const QString &path); -#endif // VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#endif // VKC_ENV == VKC_ENV_WIN32 diff --git a/vkconfig_core/test/test_command_line.cpp b/vkconfig_core/test/test_command_line.cpp index 2358c1f75d..125392e300 100644 --- a/vkconfig_core/test/test_command_line.cpp +++ b/vkconfig_core/test/test_command_line.cpp @@ -23,10 +23,9 @@ #include "../util.h" #include "../type_platform.h" -#if VKC_PLATFORM == VKC_PLATFORM_LINUX +#if VKC_ENV == VKC_ENV_UNIX #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wwrite-strings" -#elif VKC_PLATFORM == VKC_PLATFORM_MACOS #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wwrite-strings" #endif @@ -203,8 +202,7 @@ TEST(test_command_line, usage_mode_layers_override_invalid_args) { EXPECT_TRUE(command_line.layers_configuration_path.empty()); } -#if VKC_PLATFORM == VKC_PLATFORM_LINUX +#if VKC_ENV == VKC_ENV_UNIX #pragma GCC diagnostic pop -#elif VKC_PLATFORM == VKC_PLATFORM_MACOS #pragma clang diagnostic pop #endif diff --git a/vkconfig_core/test/test_path.cpp b/vkconfig_core/test/test_path.cpp index 321d3d68cf..6111e29406 100644 --- a/vkconfig_core/test/test_path.cpp +++ b/vkconfig_core/test/test_path.cpp @@ -37,7 +37,7 @@ TEST(test_path, native_path) { for (std::size_t i = 0, n = std::size(table); i < n; ++i) { const std::string test_case = table[i]; - if (VKC_PLATFORM == VKC_PLATFORM_WINDOWS) { + if (VKC_ENV == VKC_ENV_WIN32) { EXPECT_STREQ("\\vkconfig\\test\\path\\format", Path(test_case).RelativePath().c_str()); } else { EXPECT_STREQ("/vkconfig/test/path/format", Path(test_case).RelativePath().c_str()); @@ -51,7 +51,7 @@ TEST(test_path, native_path_with_file) { for (std::size_t i = 0, n = std::size(table); i < n; ++i) { const std::string test_case = table[i]; - if (VKC_PLATFORM == VKC_PLATFORM_WINDOWS) { + if (VKC_ENV == VKC_ENV_WIN32) { EXPECT_STREQ("\\vkconfig\\test\\path\\format\\file.txt", Path(test_case).RelativePath().c_str()); } else { EXPECT_STREQ("/vkconfig/test/path/format/file.txt", Path(test_case).RelativePath().c_str()); diff --git a/vkconfig_core/test/test_type_platform.cpp b/vkconfig_core/test/test_type_platform.cpp index 01a893b7d3..f3306c9610 100644 --- a/vkconfig_core/test/test_type_platform.cpp +++ b/vkconfig_core/test/test_type_platform.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. @@ -25,28 +25,21 @@ #include TEST(test_platform, platform_flags_one) { - std::vector platform_strings; - platform_strings.push_back(GetToken(PLATFORM_LINUX)); - - EXPECT_EQ(PLATFORM_LINUX_BIT, GetPlatformFlags(platform_strings)); + std::vector platform_strings = GetPlatformTokens(PLATFORM_LINUX_BIT); + int flags = GetPlatformFlags(platform_strings); + EXPECT_EQ(PLATFORM_LINUX_BIT, flags); } TEST(test_platform, platform_flags_some) { - std::vector platform_strings; - platform_strings.push_back(GetToken(PLATFORM_LINUX)); - platform_strings.push_back(GetToken(PLATFORM_MACOS)); - - EXPECT_EQ(PLATFORM_LINUX_BIT | PLATFORM_MACOS_BIT, GetPlatformFlags(platform_strings)); + std::vector platform_strings = GetPlatformTokens(PLATFORM_LINUX_BIT | PLATFORM_MACOS_BIT); + int flags = GetPlatformFlags(platform_strings); + EXPECT_EQ(PLATFORM_LINUX_BIT | PLATFORM_MACOS_BIT, flags); } TEST(test_platform, platform_flags_all) { - std::vector platform_strings; - for (std::size_t i = 0, n = PLATFORM_COUNT; i < n; ++i) { - const PlatformType platform_type = static_cast(i); - platform_strings.push_back(GetToken(platform_type)); - } - - EXPECT_EQ(PLATFORM_DESKTOP_BIT | PLATFORM_ANDROID_BIT, GetPlatformFlags(platform_strings)); + std::vector platform_strings = GetPlatformTokens(PLATFORM_DESKTOP_BIT | PLATFORM_MOBILE_BIT); + int flags = GetPlatformFlags(platform_strings); + EXPECT_EQ(PLATFORM_DESKTOP_BIT | PLATFORM_MOBILE_BIT, flags); } TEST(test_platform, platform_to_tokens) { @@ -54,23 +47,3 @@ TEST(test_platform, platform_to_tokens) { EXPECT_EQ(PLATFORM_LINUX_BIT, GetPlatformFlags(GetPlatformTokens(PLATFORM_LINUX_BIT))); EXPECT_EQ(PLATFORM_DESKTOP_BIT, GetPlatformFlags(GetPlatformTokens(PLATFORM_DESKTOP_BIT))); } - -TEST(test_platform, platform_type_windows) { - EXPECT_STREQ("WINDOWS", GetToken(PLATFORM_WINDOWS)); - EXPECT_EQ(PLATFORM_WINDOWS, GetPlatformType("WINDOWS")); -} - -TEST(test_platform, platform_type_linux) { - EXPECT_STREQ("LINUX", GetToken(PLATFORM_LINUX)); - EXPECT_EQ(PLATFORM_LINUX, GetPlatformType("LINUX")); -} - -TEST(test_platform, platform_type_macos) { - EXPECT_STREQ("MACOS", GetToken(PLATFORM_MACOS)); - EXPECT_EQ(PLATFORM_MACOS, GetPlatformType("MACOS")); -} - -TEST(test_platform, platform_type_android) { - EXPECT_STREQ("ANDROID", GetToken(PLATFORM_ANDROID)); - EXPECT_EQ(PLATFORM_ANDROID, GetPlatformType("ANDROID")); -} diff --git a/vkconfig_core/type_platform.cpp b/vkconfig_core/type_platform.cpp index fb49df030f..679eb2e2b5 100644 --- a/vkconfig_core/type_platform.cpp +++ b/vkconfig_core/type_platform.cpp @@ -18,23 +18,27 @@ * - Christophe Riccio */ -#include "path.h" #include "util.h" #include "type_platform.h" -#include -#include -#include -#include -#include +#include -#include +static std::map const translation = {std::pair("WINDOWS_X86", PLATFORM_WINDOWS_X86_BIT), + std::pair("WINDOWS_ARM", PLATFORM_WINDOWS_ARM_BIT), + std::pair("WINDOWS", PLATFORM_WINDOWS_X86_BIT | PLATFORM_WINDOWS_ARM_BIT), + std::pair("LINUX", PLATFORM_LINUX_BIT), + std::pair("MACOS", PLATFORM_MACOS_BIT), + std::pair("ANDROID", PLATFORM_ANDROID_BIT), + std::pair("IOS", PLATFORM_IOS_BIT)}; int GetPlatformFlags(const std::vector& platform_strings) { int result = 0; for (std::size_t i = 0, n = platform_strings.size(); i < n; ++i) { - result |= (1 << GetPlatformType(platform_strings[i].c_str())); + auto it = translation.find(platform_strings[i]); + if (it != translation.end()) { + result |= it->second; + } } return result; @@ -44,34 +48,21 @@ std::vector GetPlatformTokens(int platform_flags) { std::vector result; for (std::size_t i = 0, n = PLATFORM_COUNT; i < n; ++i) { - if (platform_flags & (1 << i)) { - result.push_back(GetToken(static_cast(i))); + const int flag = platform_flags & (1 << i); + if (!flag) { + continue; } - } - - return result; -} -const char* GetToken(PlatformType type) { - static const char* table[] = { - "WINDOWS", // PLATFORM_WINDOWS - "LINUX", // PLATFORM_LINUX - "MACOS", // PLATFORM_MACOS - "ANDROID", // PLATFORM_ANDROID - }; - static_assert(std::size(table) == PLATFORM_COUNT, "The tranlation table size doesn't match the enum number of elements"); + for (auto it = translation.begin(), end = translation.end(); it != end; ++it) { + if (it->second != flag) { + continue; + } - return table[type]; -} - -PlatformType GetPlatformType(const char* token) { - for (std::size_t i = 0, n = PLATFORM_COUNT; i < n; ++i) { - const PlatformType platform_type = static_cast(i); - if (std::strcmp(GetToken(platform_type), token) == 0) return platform_type; + result.push_back(it->first); + } } - assert(0); - return static_cast(-1); + return result; } bool IsPlatformSupported(int platform_flags) { return platform_flags & (1 << VKC_PLATFORM); } diff --git a/vkconfig_core/type_platform.h b/vkconfig_core/type_platform.h index 6d0ec0105e..d7750ca601 100644 --- a/vkconfig_core/type_platform.h +++ b/vkconfig_core/type_platform.h @@ -23,12 +23,6 @@ #include #include -#define VKC_PLATFORM_WINDOWS 0 -#define VKC_PLATFORM_LINUX 1 -#define VKC_PLATFORM_MACOS 2 -#define VKC_PLATFORM_ANDROID 3 -#define VKC_PLATFORM_IOS 4 - #define VKC_ENV_WIN32 0 #define VKC_ENV_UNIX 1 @@ -43,43 +37,51 @@ enum EnviromentType { enum { ENVIRONMENT_COUNT = ENVIRONMENT_LAST - ENVIRONMENT_FIRST + 1 }; enum PlatformType { - PLATFORM_WINDOWS = VKC_PLATFORM_WINDOWS, - PLATFORM_LINUX = VKC_PLATFORM_LINUX, - PLATFORM_MACOS = VKC_PLATFORM_MACOS, - PLATFORM_ANDROID = VKC_PLATFORM_ANDROID, - - PLATFORM_FIRST = PLATFORM_WINDOWS, - PLATFORM_LAST = PLATFORM_ANDROID + PLATFORM_WINDOWS_X86 = 0, + PLATFORM_WINDOWS_ARM = 1, + PLATFORM_LINUX = 2, + PLATFORM_MACOS = 3, + PLATFORM_ANDROID = 4, + PLATFORM_IOS = 5, + + PLATFORM_FIRST = PLATFORM_WINDOWS_X86, + PLATFORM_LAST = PLATFORM_IOS }; enum { PLATFORM_COUNT = PLATFORM_LAST - PLATFORM_FIRST + 1 }; enum PlatformFlags { - PLATFORM_WINDOWS_BIT = (1 << PLATFORM_WINDOWS), + PLATFORM_WINDOWS_X86_BIT = (1 << PLATFORM_WINDOWS_X86), + PLATFORM_WINDOWS_ARM_BIT = (1 << PLATFORM_WINDOWS_ARM), PLATFORM_LINUX_BIT = (1 << PLATFORM_LINUX), PLATFORM_MACOS_BIT = (1 << PLATFORM_MACOS), PLATFORM_ANDROID_BIT = (1 << PLATFORM_ANDROID), + PLATFORM_IOS_BIT = (1 << PLATFORM_IOS), + + PLATFORM_WINDOWS_BIT = PLATFORM_WINDOWS_X86_BIT | PLATFORM_WINDOWS_ARM_BIT, - PLATFORM_DESKTOP_BIT = PLATFORM_WINDOWS_BIT | PLATFORM_LINUX_BIT | PLATFORM_MACOS_BIT + PLATFORM_DESKTOP_BIT = PLATFORM_WINDOWS_BIT | PLATFORM_LINUX_BIT | PLATFORM_MACOS_BIT, + PLATFORM_MOBILE_BIT = PLATFORM_ANDROID_BIT | PLATFORM_IOS_BIT }; int GetPlatformFlags(const std::vector& platform_strings); std::vector GetPlatformTokens(int platform_flags); -PlatformType GetPlatformType(const char* token); -const char* GetToken(PlatformType type); - #ifdef _WIN32 -#define VKC_PLATFORM VKC_PLATFORM_WINDOWS +#ifdef _M_ARM64 +#define VKC_PLATFORM PLATFORM_WINDOWS_ARM +#else +#define VKC_PLATFORM PLATFORM_WINDOWS_X86 +#endif #define VKC_ENV VKC_ENV_WIN32 #elif defined(__linux__) -#define VKC_PLATFORM VKC_PLATFORM_LINUX +#define VKC_PLATFORM PLATFORM_LINUX #define VKC_ENV VKC_ENV_UNIX #elif defined(__APPLE__) -#define VKC_PLATFORM VKC_PLATFORM_MACOS +#define VKC_PLATFORM PLATFORM_MACOS #define VKC_ENV VKC_ENV_UNIX #else diff --git a/vkconfig_core/vulkan_util.cpp b/vkconfig_core/vulkan_util.cpp index e9309e6573..a336a9c45f 100644 --- a/vkconfig_core/vulkan_util.cpp +++ b/vkconfig_core/vulkan_util.cpp @@ -53,10 +53,12 @@ struct VulkanFunctions { static const char *GetVulkanLibrary() { static const char *TABLE[] = { - "vulkan-1.dll", // PLATFORM_WINDOWS + "vulkan-1.dll", // PLATFORM_WINDOWS_X86 + "vulkan-1.dll", // PLATFORM_WINDOWS_ARM "libvulkan", // PLATFORM_LINUX "/usr/local/lib/libvulkan", // PLATFORM_MACOS "N/A", // PLATFORM_ANDROID + "N/A", // PLATFORM_IOS }; static_assert(std::size(TABLE) == PLATFORM_COUNT, "The tranlation table size doesn't match the enum number of elements"); diff --git a/vkconfig_gui/dialog_vulkan_analysis.cpp b/vkconfig_gui/dialog_vulkan_analysis.cpp index 585af580f2..b16cfc5634 100644 --- a/vkconfig_gui/dialog_vulkan_analysis.cpp +++ b/vkconfig_gui/dialog_vulkan_analysis.cpp @@ -58,7 +58,7 @@ void VulkanAnalysisDialog::Run() { ui->physicalDevicesTable->clear(); QProcess *via = new QProcess(this); -#if VKC_PLATFORM == VKC_PLATFORM_MACOS +#if VKC_PLATFORM == PLATFORM_MACOS via->setProgram("/usr/local/bin/vkvia"); #else via->setProgram("vkvia"); diff --git a/vkconfig_gui/dialog_vulkan_info.cpp b/vkconfig_gui/dialog_vulkan_info.cpp index a6698be1b8..88335e5b98 100644 --- a/vkconfig_gui/dialog_vulkan_info.cpp +++ b/vkconfig_gui/dialog_vulkan_info.cpp @@ -49,10 +49,12 @@ VulkanInfoDialog::VulkanInfoDialog(QWidget *parent) : QDialog(parent), ui(new Ui void VulkanInfoDialog::Run() { static const char *VULKAN_INFO_PATH[] = { - "vulkaninfoSDK", // PLATFORM_WINDOWS + "vulkaninfoSDK", // PLATFORM_WINDOWS_X86 + "vulkaninfoSDK", // PLATFORM_WINDOWS_ARM "vulkaninfo", // PLATFORM_LINUX "/usr/local/bin/vulkaninfo", // PLATFORM_MACOS "N/A", // PLATFORM_ANDROID + "N/A", // PLATFORM_IOS }; static_assert(std::size(VULKAN_INFO_PATH) == PLATFORM_COUNT, "The tranlation table size doesn't match the enum number of elements"); diff --git a/vkconfig_gui/vkconfig.pro b/vkconfig_gui/vkconfig.pro index d0632752c8..576febeaa6 100644 --- a/vkconfig_gui/vkconfig.pro +++ b/vkconfig_gui/vkconfig.pro @@ -29,6 +29,7 @@ linux: QMAKE_CXXFLAGS += -Wunused-variable SOURCES += \ ../vkconfig_core/alert.cpp \ ../vkconfig_core/application.cpp \ + ../vkconfig_core/application_manager.cpp \ ../vkconfig_core/application_singleton.cpp \ ../vkconfig_core/bitfield.cpp \ ../vkconfig_core/command_line.cpp \ @@ -105,6 +106,7 @@ SOURCES += \ HEADERS += \ ../vkconfig_core/alert.h \ ../vkconfig_core/application.h \ + ../vkconfig_core/application_manager.h \ ../vkconfig_core/application_singleton.h \ ../vkconfig_core/bitfield.h \ ../vkconfig_core/command_line.h \ diff --git a/vkconfig_gui/widget_tab_configurations_layer.cpp b/vkconfig_gui/widget_tab_configurations_layer.cpp index 75df1cc620..ce42789dbd 100644 --- a/vkconfig_gui/widget_tab_configurations_layer.cpp +++ b/vkconfig_gui/widget_tab_configurations_layer.cpp @@ -24,10 +24,10 @@ #include "../vkconfig_core/configurator.h" -#if VKC_PLATFORM == VKC_PLATFORM_LINUX || VKC_PLATFORM == VKC_PLATFORM_MACOS +#if VKC_ENV == VKC_ENV_UNIX #include -#elif VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#elif VKC_ENV == VKC_ENV_WIN32 #include // From Stack Overflow. @@ -56,11 +56,11 @@ static PE_ARCHITECTURE GetImageArchitecture(void *pImageBase) { } // End Stack Overflow -#endif // VKC_PLATFORM +#endif // VKC_ENV /// Utility function to see if the file is 32-bit static bool IsDLL32Bit(const std::string full_path) { -#if VKC_PLATFORM == VKC_PLATFORM_WINDOWS +#if VKC_ENV == VKC_ENV_WIN32 if (full_path.empty()) { return false; } @@ -90,7 +90,7 @@ static bool IsDLL32Bit(const std::string full_path) { #else (void)full_path; return false; -#endif +#endif // VKC_ENV } ConfigurationLayerWidget::ConfigurationLayerWidget(TabConfigurations *tab, const Parameter ¶meter,