diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.cpp | 5 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.h | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.cpp | 55 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.h | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.cpp | 5 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.h | 3 | 
6 files changed, 30 insertions, 48 deletions
| diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp index 8e76a819a..bdf83ebfe 100644 --- a/src/yuzu/configuration/configure_dialog.cpp +++ b/src/yuzu/configuration/configure_dialog.cpp @@ -6,6 +6,7 @@  #include "common/settings.h"  #include "core/core.h"  #include "ui_configure.h" +#include "vk_device_info.h"  #include "yuzu/configuration/config.h"  #include "yuzu/configuration/configure_audio.h"  #include "yuzu/configuration/configure_cpu.h" @@ -28,6 +29,7 @@  ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,                                   InputCommon::InputSubsystem* input_subsystem, +                                 std::vector<VkDeviceInfo::Record>& vk_device_records,                                   Core::System& system_, bool enable_web_config)      : QDialog(parent), ui{std::make_unique<Ui::ConfigureDialog>()},        registry(registry_), system{system_}, audio_tab{std::make_unique<ConfigureAudio>(system_, @@ -38,7 +40,8 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,        general_tab{std::make_unique<ConfigureGeneral>(system_, this)},        graphics_advanced_tab{std::make_unique<ConfigureGraphicsAdvanced>(system_, this)},        graphics_tab{std::make_unique<ConfigureGraphics>( -          system_, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, this)}, +          system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, +          this)},        hotkeys_tab{std::make_unique<ConfigureHotkeys>(system_.HIDCore(), this)},        input_tab{std::make_unique<ConfigureInput>(system_, this)},        network_tab{std::make_unique<ConfigureNetwork>(system_, this)}, diff --git a/src/yuzu/configuration/configure_dialog.h b/src/yuzu/configuration/configure_dialog.h index a086a07c4..2a08b7fee 100644 --- a/src/yuzu/configuration/configure_dialog.h +++ b/src/yuzu/configuration/configure_dialog.h @@ -4,7 +4,9 @@  #pragma once  #include <memory> +#include <vector>  #include <QDialog> +#include "yuzu/vk_device_info.h"  namespace Core {  class System; @@ -40,8 +42,9 @@ class ConfigureDialog : public QDialog {  public:      explicit ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_, -                             InputCommon::InputSubsystem* input_subsystem, Core::System& system_, -                             bool enable_web_config = true); +                             InputCommon::InputSubsystem* input_subsystem, +                             std::vector<VkDeviceInfo::Record>& vk_device_records, +                             Core::System& system_, bool enable_web_config = true);      ~ConfigureDialog() override;      void ApplyConfiguration(); diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 431585216..78b487494 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -1,10 +1,6 @@  // SPDX-FileCopyrightText: 2016 Citra Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later -// Include this early to include Vulkan headers how we want to -#include "video_core/vulkan_common/vulkan_device.h" -#include "video_core/vulkan_common/vulkan_wrapper.h" -  #include <algorithm>  #include <functional>  #include <iosfwd> @@ -34,13 +30,11 @@  #include "common/settings.h"  #include "core/core.h"  #include "ui_configure_graphics.h" -#include "video_core/vulkan_common/vulkan_instance.h" -#include "video_core/vulkan_common/vulkan_library.h" -#include "video_core/vulkan_common/vulkan_surface.h"  #include "yuzu/configuration/configuration_shared.h"  #include "yuzu/configuration/configure_graphics.h"  #include "yuzu/qt_common.h"  #include "yuzu/uisettings.h" +#include "yuzu/vk_device_info.h"  static const std::vector<VkPresentModeKHR> default_present_modes{VK_PRESENT_MODE_IMMEDIATE_KHR,                                                                   VK_PRESENT_MODE_FIFO_KHR}; @@ -77,9 +71,10 @@ static constexpr Settings::VSyncMode PresentModeToSetting(VkPresentModeKHR mode)  }  ConfigureGraphics::ConfigureGraphics(const Core::System& system_, +                                     std::vector<VkDeviceInfo::Record>& records_,                                       const std::function<void()>& expose_compute_option_,                                       QWidget* parent) -    : QWidget(parent), ui{std::make_unique<Ui::ConfigureGraphics>()}, +    : QWidget(parent), ui{std::make_unique<Ui::ConfigureGraphics>()}, records{records_},        expose_compute_option{expose_compute_option_}, system{system_} {      vulkan_device = Settings::values.vulkan_device.GetValue();      RetrieveVulkanDevices(); @@ -504,47 +499,19 @@ void ConfigureGraphics::UpdateAPILayout() {      }  } -void ConfigureGraphics::RetrieveVulkanDevices() try { -    if (UISettings::values.has_broken_vulkan) { -        return; -    } - -    using namespace Vulkan; - -    auto* window = this->window()->windowHandle(); -    auto wsi = QtCommon::GetWindowSystemInfo(window); - -    vk::InstanceDispatch dld; -    const auto library = OpenLibrary(); -    const vk::Instance instance = CreateInstance(*library, dld, VK_API_VERSION_1_1, wsi.type); -    const std::vector<VkPhysicalDevice> physical_devices = instance.EnumeratePhysicalDevices(); -    vk::SurfaceKHR surface = CreateSurface(instance, wsi); - +void ConfigureGraphics::RetrieveVulkanDevices() {      vulkan_devices.clear(); -    vulkan_devices.reserve(physical_devices.size()); +    vulkan_devices.reserve(records.size());      device_present_modes.clear(); -    device_present_modes.reserve(physical_devices.size()); -    for (const VkPhysicalDevice device : physical_devices) { -        const auto physical_device = vk::PhysicalDevice(device, dld); -        const std::string name = physical_device.GetProperties().deviceName; -        const std::vector<VkPresentModeKHR> present_modes = -            physical_device.GetSurfacePresentModesKHR(*surface); -        vulkan_devices.push_back(QString::fromStdString(name)); -        device_present_modes.push_back(present_modes); - -        VkPhysicalDeviceDriverProperties driver_properties{}; -        driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES; -        driver_properties.pNext = nullptr; -        VkPhysicalDeviceProperties2 properties{}; -        properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; -        properties.pNext = &driver_properties; -        dld.vkGetPhysicalDeviceProperties2(physical_device, &properties); -        if (driver_properties.driverID == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS) { +    device_present_modes.reserve(records.size()); +    for (const auto& record : records) { +        vulkan_devices.push_back(QString::fromStdString(record.name)); +        device_present_modes.push_back(record.vsync_support); + +        if (record.is_intel_proprietary) {              expose_compute_option();          }      } -} catch (const Vulkan::vk::Exception& exception) { -    LOG_ERROR(Frontend, "Failed to enumerate devices with error: {}", exception.what());  }  Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h index 364b1cac2..be9310b74 100644 --- a/src/yuzu/configuration/configure_graphics.h +++ b/src/yuzu/configuration/configure_graphics.h @@ -12,6 +12,7 @@  #include <qobjectdefs.h>  #include <vulkan/vulkan_core.h>  #include "common/common_types.h" +#include "vk_device_info.h"  class QEvent;  class QObject; @@ -39,6 +40,7 @@ class ConfigureGraphics : public QWidget {  public:      explicit ConfigureGraphics(const Core::System& system_, +                               std::vector<VkDeviceInfo::Record>& records,                                 const std::function<void()>& expose_compute_option_,                                 QWidget* parent = nullptr);      ~ConfigureGraphics() override; @@ -77,6 +79,7 @@ private:      ConfigurationShared::CheckState use_disk_shader_cache;      ConfigurationShared::CheckState use_asynchronous_gpu_emulation; +    std::vector<VkDeviceInfo::Record>& records;      std::vector<QString> vulkan_devices;      std::vector<std::vector<VkPresentModeKHR>> device_present_modes;      std::vector<VkPresentModeKHR> diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp index 7ac162586..eb96e6068 100644 --- a/src/yuzu/configuration/configure_per_game.cpp +++ b/src/yuzu/configuration/configure_per_game.cpp @@ -6,6 +6,7 @@  #include <memory>  #include <string>  #include <utility> +#include <vector>  #include <fmt/format.h> @@ -34,8 +35,10 @@  #include "yuzu/configuration/configure_system.h"  #include "yuzu/uisettings.h"  #include "yuzu/util/util.h" +#include "yuzu/vk_device_info.h"  ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::string& file_name, +                                   std::vector<VkDeviceInfo::Record>& vk_device_records,                                     Core::System& system_)      : QDialog(parent),        ui(std::make_unique<Ui::ConfigurePerGame>()), title_id{title_id_}, system{system_} { @@ -50,7 +53,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st      general_tab = std::make_unique<ConfigureGeneral>(system_, this);      graphics_advanced_tab = std::make_unique<ConfigureGraphicsAdvanced>(system_, this);      graphics_tab = std::make_unique<ConfigureGraphics>( -        system_, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, this); +        system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, this);      input_tab = std::make_unique<ConfigureInputPerGame>(system_, game_config.get(), this);      system_tab = std::make_unique<ConfigureSystem>(system_, this); diff --git a/src/yuzu/configuration/configure_per_game.h b/src/yuzu/configuration/configure_per_game.h index 85752f1fa..7ec1ded06 100644 --- a/src/yuzu/configuration/configure_per_game.h +++ b/src/yuzu/configuration/configure_per_game.h @@ -5,11 +5,13 @@  #include <memory>  #include <string> +#include <vector>  #include <QDialog>  #include <QList>  #include "core/file_sys/vfs_types.h" +#include "vk_device_info.h"  #include "yuzu/configuration/config.h"  namespace Core { @@ -45,6 +47,7 @@ class ConfigurePerGame : public QDialog {  public:      // Cannot use std::filesystem::path due to https://bugreports.qt.io/browse/QTBUG-73263      explicit ConfigurePerGame(QWidget* parent, u64 title_id_, const std::string& file_name, +                              std::vector<VkDeviceInfo::Record>& vk_device_records,                                Core::System& system_);      ~ConfigurePerGame() override; | 
