early-access version 3567
This commit is contained in:
parent
2aa90dd2b4
commit
acf7b81b9a
17 changed files with 97 additions and 14 deletions
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 3566.
|
This is the source code for early-access 3567.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
|
@ -232,6 +232,7 @@ void RestoreGlobalState(bool is_powered_on) {
|
||||||
values.bg_red.SetGlobal(true);
|
values.bg_red.SetGlobal(true);
|
||||||
values.bg_green.SetGlobal(true);
|
values.bg_green.SetGlobal(true);
|
||||||
values.bg_blue.SetGlobal(true);
|
values.bg_blue.SetGlobal(true);
|
||||||
|
values.enable_compute_pipelines.SetGlobal(true);
|
||||||
|
|
||||||
// System
|
// System
|
||||||
values.language_index.SetGlobal(true);
|
values.language_index.SetGlobal(true);
|
||||||
|
|
|
@ -472,6 +472,7 @@ struct Values {
|
||||||
SwitchableSetting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"};
|
SwitchableSetting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"};
|
||||||
SwitchableSetting<bool> use_vulkan_driver_pipeline_cache{true,
|
SwitchableSetting<bool> use_vulkan_driver_pipeline_cache{true,
|
||||||
"use_vulkan_driver_pipeline_cache"};
|
"use_vulkan_driver_pipeline_cache"};
|
||||||
|
SwitchableSetting<bool> enable_compute_pipelines{false, "enable_compute_pipelines"};
|
||||||
|
|
||||||
SwitchableSetting<u8> bg_red{0, "bg_red"};
|
SwitchableSetting<u8> bg_red{0, "bg_red"};
|
||||||
SwitchableSetting<u8> bg_green{0, "bg_green"};
|
SwitchableSetting<u8> bg_green{0, "bg_green"};
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include "core/file_sys/vfs_layered.h"
|
#include "core/file_sys/vfs_layered.h"
|
||||||
|
#include "core/file_sys/vfs_types.h"
|
||||||
|
|
||||||
namespace FileSys {
|
namespace FileSys {
|
||||||
|
|
||||||
|
@ -58,11 +59,13 @@ std::string LayeredVfsDirectory::GetFullPath() const {
|
||||||
|
|
||||||
std::vector<VirtualFile> LayeredVfsDirectory::GetFiles() const {
|
std::vector<VirtualFile> LayeredVfsDirectory::GetFiles() const {
|
||||||
std::vector<VirtualFile> out;
|
std::vector<VirtualFile> out;
|
||||||
|
std::map<std::string, size_t, std::less<>> out_positions;
|
||||||
|
|
||||||
for (const auto& layer : dirs) {
|
for (const auto& layer : dirs) {
|
||||||
for (const auto& file : layer->GetFiles()) {
|
for (const auto& file : layer->GetFiles()) {
|
||||||
if (std::find_if(out.begin(), out.end(), [&file](const VirtualFile& comp) {
|
auto file_name = file->GetName();
|
||||||
return comp->GetName() == file->GetName();
|
if (!out_positions.contains(file_name)) {
|
||||||
}) == out.end()) {
|
out_positions.emplace(std::move(file_name), out.size());
|
||||||
out.push_back(file);
|
out.push_back(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,23 @@ VectorVfsDirectory::VectorVfsDirectory(std::vector<VirtualFile> files_,
|
||||||
|
|
||||||
VectorVfsDirectory::~VectorVfsDirectory() = default;
|
VectorVfsDirectory::~VectorVfsDirectory() = default;
|
||||||
|
|
||||||
|
VirtualFile VectorVfsDirectory::GetFile(std::string_view file_name) const {
|
||||||
|
if (!optimized_file_index_built) {
|
||||||
|
optimized_file_index.clear();
|
||||||
|
for (size_t i = 0; i < files.size(); i++) {
|
||||||
|
optimized_file_index.emplace(files[i]->GetName(), i);
|
||||||
|
}
|
||||||
|
optimized_file_index_built = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto it = optimized_file_index.find(file_name);
|
||||||
|
if (it != optimized_file_index.end()) {
|
||||||
|
return files[it->second];
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<VirtualFile> VectorVfsDirectory::GetFiles() const {
|
std::vector<VirtualFile> VectorVfsDirectory::GetFiles() const {
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
@ -107,6 +124,7 @@ bool VectorVfsDirectory::DeleteSubdirectory(std::string_view subdir_name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VectorVfsDirectory::DeleteFile(std::string_view file_name) {
|
bool VectorVfsDirectory::DeleteFile(std::string_view file_name) {
|
||||||
|
optimized_file_index_built = false;
|
||||||
return FindAndRemoveVectorElement(files, file_name);
|
return FindAndRemoveVectorElement(files, file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +142,7 @@ VirtualFile VectorVfsDirectory::CreateFile(std::string_view file_name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VectorVfsDirectory::AddFile(VirtualFile file) {
|
void VectorVfsDirectory::AddFile(VirtualFile file) {
|
||||||
|
optimized_file_index_built = false;
|
||||||
files.push_back(std::move(file));
|
files.push_back(std::move(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,7 @@ public:
|
||||||
VirtualDir parent = nullptr);
|
VirtualDir parent = nullptr);
|
||||||
~VectorVfsDirectory() override;
|
~VectorVfsDirectory() override;
|
||||||
|
|
||||||
|
VirtualFile GetFile(std::string_view file_name) const override;
|
||||||
std::vector<VirtualFile> GetFiles() const override;
|
std::vector<VirtualFile> GetFiles() const override;
|
||||||
std::vector<VirtualDir> GetSubdirectories() const override;
|
std::vector<VirtualDir> GetSubdirectories() const override;
|
||||||
bool IsWritable() const override;
|
bool IsWritable() const override;
|
||||||
|
@ -126,6 +127,9 @@ private:
|
||||||
|
|
||||||
VirtualDir parent;
|
VirtualDir parent;
|
||||||
std::string name;
|
std::string name;
|
||||||
|
|
||||||
|
mutable std::map<std::string, size_t, std::less<>> optimized_file_index;
|
||||||
|
mutable bool optimized_file_index_built{};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace FileSys
|
} // namespace FileSys
|
||||||
|
|
|
@ -698,7 +698,8 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline(
|
||||||
PipelineStatistics* statistics, bool build_in_parallel) try {
|
PipelineStatistics* statistics, bool build_in_parallel) try {
|
||||||
// TODO: Remove this when Intel fixes their shader compiler.
|
// TODO: Remove this when Intel fixes their shader compiler.
|
||||||
// https://github.com/IGCIT/Intel-GPU-Community-Issue-Tracker-IGCIT/issues/159
|
// https://github.com/IGCIT/Intel-GPU-Community-Issue-Tracker-IGCIT/issues/159
|
||||||
if (device.GetDriverID() == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS) {
|
if (device.GetDriverID() == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS &&
|
||||||
|
!Settings::values.enable_compute_pipelines.GetValue()) {
|
||||||
LOG_ERROR(Render_Vulkan, "Skipping 0x{:016x}", key.Hash());
|
LOG_ERROR(Render_Vulkan, "Skipping 0x{:016x}", key.Hash());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,6 +715,7 @@ void Config::ReadRendererValues() {
|
||||||
ReadGlobalSetting(Settings::values.use_asynchronous_shaders);
|
ReadGlobalSetting(Settings::values.use_asynchronous_shaders);
|
||||||
ReadGlobalSetting(Settings::values.use_fast_gpu_time);
|
ReadGlobalSetting(Settings::values.use_fast_gpu_time);
|
||||||
ReadGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
|
ReadGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
|
||||||
|
ReadGlobalSetting(Settings::values.enable_compute_pipelines);
|
||||||
ReadGlobalSetting(Settings::values.bg_red);
|
ReadGlobalSetting(Settings::values.bg_red);
|
||||||
ReadGlobalSetting(Settings::values.bg_green);
|
ReadGlobalSetting(Settings::values.bg_green);
|
||||||
ReadGlobalSetting(Settings::values.bg_blue);
|
ReadGlobalSetting(Settings::values.bg_blue);
|
||||||
|
@ -1364,6 +1365,7 @@ void Config::SaveRendererValues() {
|
||||||
WriteGlobalSetting(Settings::values.use_asynchronous_shaders);
|
WriteGlobalSetting(Settings::values.use_asynchronous_shaders);
|
||||||
WriteGlobalSetting(Settings::values.use_fast_gpu_time);
|
WriteGlobalSetting(Settings::values.use_fast_gpu_time);
|
||||||
WriteGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
|
WriteGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
|
||||||
|
WriteGlobalSetting(Settings::values.enable_compute_pipelines);
|
||||||
WriteGlobalSetting(Settings::values.bg_red);
|
WriteGlobalSetting(Settings::values.bg_red);
|
||||||
WriteGlobalSetting(Settings::values.bg_green);
|
WriteGlobalSetting(Settings::values.bg_green);
|
||||||
WriteGlobalSetting(Settings::values.bg_blue);
|
WriteGlobalSetting(Settings::values.bg_blue);
|
||||||
|
|
|
@ -36,8 +36,9 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
|
||||||
debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, this)},
|
debug_tab_tab{std::make_unique<ConfigureDebugTab>(system_, this)},
|
||||||
filesystem_tab{std::make_unique<ConfigureFilesystem>(this)},
|
filesystem_tab{std::make_unique<ConfigureFilesystem>(this)},
|
||||||
general_tab{std::make_unique<ConfigureGeneral>(system_, this)},
|
general_tab{std::make_unique<ConfigureGeneral>(system_, this)},
|
||||||
graphics_tab{std::make_unique<ConfigureGraphics>(system_, this)},
|
|
||||||
graphics_advanced_tab{std::make_unique<ConfigureGraphicsAdvanced>(system_, this)},
|
graphics_advanced_tab{std::make_unique<ConfigureGraphicsAdvanced>(system_, this)},
|
||||||
|
graphics_tab{std::make_unique<ConfigureGraphics>(
|
||||||
|
system_, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, this)},
|
||||||
hotkeys_tab{std::make_unique<ConfigureHotkeys>(system_.HIDCore(), this)},
|
hotkeys_tab{std::make_unique<ConfigureHotkeys>(system_.HIDCore(), this)},
|
||||||
input_tab{std::make_unique<ConfigureInput>(system_, this)},
|
input_tab{std::make_unique<ConfigureInput>(system_, this)},
|
||||||
network_tab{std::make_unique<ConfigureNetwork>(system_, this)},
|
network_tab{std::make_unique<ConfigureNetwork>(system_, this)},
|
||||||
|
|
|
@ -72,8 +72,8 @@ private:
|
||||||
std::unique_ptr<ConfigureDebugTab> debug_tab_tab;
|
std::unique_ptr<ConfigureDebugTab> debug_tab_tab;
|
||||||
std::unique_ptr<ConfigureFilesystem> filesystem_tab;
|
std::unique_ptr<ConfigureFilesystem> filesystem_tab;
|
||||||
std::unique_ptr<ConfigureGeneral> general_tab;
|
std::unique_ptr<ConfigureGeneral> general_tab;
|
||||||
std::unique_ptr<ConfigureGraphics> graphics_tab;
|
|
||||||
std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab;
|
std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab;
|
||||||
|
std::unique_ptr<ConfigureGraphics> graphics_tab;
|
||||||
std::unique_ptr<ConfigureHotkeys> hotkeys_tab;
|
std::unique_ptr<ConfigureHotkeys> hotkeys_tab;
|
||||||
std::unique_ptr<ConfigureInput> input_tab;
|
std::unique_ptr<ConfigureInput> input_tab;
|
||||||
std::unique_ptr<ConfigureNetwork> network_tab;
|
std::unique_ptr<ConfigureNetwork> network_tab;
|
||||||
|
|
|
@ -2,9 +2,11 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
// Include this early to include Vulkan headers how we want to
|
// 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 "video_core/vulkan_common/vulkan_wrapper.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <functional>
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -74,8 +76,11 @@ static constexpr Settings::VSyncMode PresentModeToSetting(VkPresentModeKHR mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigureGraphics::ConfigureGraphics(const Core::System& system_, QWidget* parent)
|
ConfigureGraphics::ConfigureGraphics(const Core::System& system_,
|
||||||
: QWidget(parent), ui{std::make_unique<Ui::ConfigureGraphics>()}, system{system_} {
|
const std::function<void()>& expose_compute_option_,
|
||||||
|
QWidget* parent)
|
||||||
|
: QWidget(parent), ui{std::make_unique<Ui::ConfigureGraphics>()},
|
||||||
|
expose_compute_option{expose_compute_option_}, system{system_} {
|
||||||
vulkan_device = Settings::values.vulkan_device.GetValue();
|
vulkan_device = Settings::values.vulkan_device.GetValue();
|
||||||
RetrieveVulkanDevices();
|
RetrieveVulkanDevices();
|
||||||
|
|
||||||
|
@ -513,8 +518,7 @@ void ConfigureGraphics::RetrieveVulkanDevices() try {
|
||||||
const Common::DynamicLibrary library = OpenLibrary();
|
const Common::DynamicLibrary library = OpenLibrary();
|
||||||
const vk::Instance instance = CreateInstance(library, dld, VK_API_VERSION_1_1, wsi.type);
|
const vk::Instance instance = CreateInstance(library, dld, VK_API_VERSION_1_1, wsi.type);
|
||||||
const std::vector<VkPhysicalDevice> physical_devices = instance.EnumeratePhysicalDevices();
|
const std::vector<VkPhysicalDevice> physical_devices = instance.EnumeratePhysicalDevices();
|
||||||
vk::SurfaceKHR surface = //< needed to view present modes for a device
|
vk::SurfaceKHR surface = CreateSurface(instance, wsi);
|
||||||
CreateSurface(instance, wsi);
|
|
||||||
|
|
||||||
vulkan_devices.clear();
|
vulkan_devices.clear();
|
||||||
vulkan_devices.reserve(physical_devices.size());
|
vulkan_devices.reserve(physical_devices.size());
|
||||||
|
@ -527,6 +531,17 @@ void ConfigureGraphics::RetrieveVulkanDevices() try {
|
||||||
physical_device.GetSurfacePresentModesKHR(*surface);
|
physical_device.GetSurfacePresentModesKHR(*surface);
|
||||||
vulkan_devices.push_back(QString::fromStdString(name));
|
vulkan_devices.push_back(QString::fromStdString(name));
|
||||||
device_present_modes.push_back(present_modes);
|
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) {
|
||||||
|
expose_compute_option();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (const Vulkan::vk::Exception& exception) {
|
} catch (const Vulkan::vk::Exception& exception) {
|
||||||
LOG_ERROR(Frontend, "Failed to enumerate devices with error: {}", exception.what());
|
LOG_ERROR(Frontend, "Failed to enumerate devices with error: {}", exception.what());
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
|
@ -37,7 +38,9 @@ class ConfigureGraphics : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ConfigureGraphics(const Core::System& system_, QWidget* parent = nullptr);
|
explicit ConfigureGraphics(const Core::System& system_,
|
||||||
|
const std::function<void()>& expose_compute_option_,
|
||||||
|
QWidget* parent = nullptr);
|
||||||
~ConfigureGraphics() override;
|
~ConfigureGraphics() override;
|
||||||
|
|
||||||
void ApplyConfiguration();
|
void ApplyConfiguration();
|
||||||
|
@ -81,6 +84,7 @@ private:
|
||||||
// selection in the combobox
|
// selection in the combobox
|
||||||
u32 vulkan_device{};
|
u32 vulkan_device{};
|
||||||
Settings::ShaderBackend shader_backend{};
|
Settings::ShaderBackend shader_backend{};
|
||||||
|
const std::function<void()>& expose_compute_option;
|
||||||
|
|
||||||
const Core::System& system;
|
const Core::System& system;
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,8 @@ ConfigureGraphicsAdvanced::ConfigureGraphicsAdvanced(const Core::System& system_
|
||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
ui->enable_compute_pipelines_checkbox->setVisible(false);
|
||||||
|
|
||||||
SetupPerGameUI();
|
SetupPerGameUI();
|
||||||
|
|
||||||
SetConfiguration();
|
SetConfiguration();
|
||||||
|
@ -27,6 +29,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
|
||||||
ui->async_astc->setEnabled(runtime_lock);
|
ui->async_astc->setEnabled(runtime_lock);
|
||||||
ui->use_asynchronous_shaders->setEnabled(runtime_lock);
|
ui->use_asynchronous_shaders->setEnabled(runtime_lock);
|
||||||
ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
|
ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
|
||||||
|
ui->enable_compute_pipelines_checkbox->setEnabled(runtime_lock);
|
||||||
|
|
||||||
ui->async_present->setChecked(Settings::values.async_presentation.GetValue());
|
ui->async_present->setChecked(Settings::values.async_presentation.GetValue());
|
||||||
ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
|
ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
|
||||||
|
@ -36,6 +39,8 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
|
||||||
ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
|
ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
|
||||||
ui->use_vulkan_driver_pipeline_cache->setChecked(
|
ui->use_vulkan_driver_pipeline_cache->setChecked(
|
||||||
Settings::values.use_vulkan_driver_pipeline_cache.GetValue());
|
Settings::values.use_vulkan_driver_pipeline_cache.GetValue());
|
||||||
|
ui->enable_compute_pipelines_checkbox->setChecked(
|
||||||
|
Settings::values.enable_compute_pipelines.GetValue());
|
||||||
|
|
||||||
if (Settings::IsConfiguringGlobal()) {
|
if (Settings::IsConfiguringGlobal()) {
|
||||||
ui->gpu_accuracy->setCurrentIndex(
|
ui->gpu_accuracy->setCurrentIndex(
|
||||||
|
@ -74,6 +79,9 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
|
||||||
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vulkan_driver_pipeline_cache,
|
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vulkan_driver_pipeline_cache,
|
||||||
ui->use_vulkan_driver_pipeline_cache,
|
ui->use_vulkan_driver_pipeline_cache,
|
||||||
use_vulkan_driver_pipeline_cache);
|
use_vulkan_driver_pipeline_cache);
|
||||||
|
ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_compute_pipelines,
|
||||||
|
ui->enable_compute_pipelines_checkbox,
|
||||||
|
enable_compute_pipelines);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
|
void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
|
||||||
|
@ -104,6 +112,8 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
|
||||||
Settings::values.use_vulkan_driver_pipeline_cache.UsingGlobal());
|
Settings::values.use_vulkan_driver_pipeline_cache.UsingGlobal());
|
||||||
ui->anisotropic_filtering_combobox->setEnabled(
|
ui->anisotropic_filtering_combobox->setEnabled(
|
||||||
Settings::values.max_anisotropy.UsingGlobal());
|
Settings::values.max_anisotropy.UsingGlobal());
|
||||||
|
ui->enable_compute_pipelines_checkbox->setEnabled(
|
||||||
|
Settings::values.enable_compute_pipelines.UsingGlobal());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -125,6 +135,9 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
|
||||||
ConfigurationShared::SetColoredTristate(ui->use_vulkan_driver_pipeline_cache,
|
ConfigurationShared::SetColoredTristate(ui->use_vulkan_driver_pipeline_cache,
|
||||||
Settings::values.use_vulkan_driver_pipeline_cache,
|
Settings::values.use_vulkan_driver_pipeline_cache,
|
||||||
use_vulkan_driver_pipeline_cache);
|
use_vulkan_driver_pipeline_cache);
|
||||||
|
ConfigurationShared::SetColoredTristate(ui->enable_compute_pipelines_checkbox,
|
||||||
|
Settings::values.enable_compute_pipelines,
|
||||||
|
enable_compute_pipelines);
|
||||||
ConfigurationShared::SetColoredComboBox(
|
ConfigurationShared::SetColoredComboBox(
|
||||||
ui->gpu_accuracy, ui->label_gpu_accuracy,
|
ui->gpu_accuracy, ui->label_gpu_accuracy,
|
||||||
static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
|
static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
|
||||||
|
@ -132,3 +145,7 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
|
||||||
ui->anisotropic_filtering_combobox, ui->af_label,
|
ui->anisotropic_filtering_combobox, ui->af_label,
|
||||||
static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));
|
static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigureGraphicsAdvanced::ExposeComputeOption() {
|
||||||
|
ui->enable_compute_pipelines_checkbox->setVisible(true);
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@ public:
|
||||||
void ApplyConfiguration();
|
void ApplyConfiguration();
|
||||||
void SetConfiguration();
|
void SetConfiguration();
|
||||||
|
|
||||||
|
void ExposeComputeOption();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void changeEvent(QEvent* event) override;
|
void changeEvent(QEvent* event) override;
|
||||||
void RetranslateUI();
|
void RetranslateUI();
|
||||||
|
@ -44,6 +46,7 @@ private:
|
||||||
ConfigurationShared::CheckState use_asynchronous_shaders;
|
ConfigurationShared::CheckState use_asynchronous_shaders;
|
||||||
ConfigurationShared::CheckState use_fast_gpu_time;
|
ConfigurationShared::CheckState use_fast_gpu_time;
|
||||||
ConfigurationShared::CheckState use_vulkan_driver_pipeline_cache;
|
ConfigurationShared::CheckState use_vulkan_driver_pipeline_cache;
|
||||||
|
ConfigurationShared::CheckState enable_compute_pipelines;
|
||||||
|
|
||||||
const Core::System& system;
|
const Core::System& system;
|
||||||
};
|
};
|
||||||
|
|
|
@ -136,6 +136,17 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="enable_compute_pipelines_checkbox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Enable compute pipelines, required by some games. This setting only exists for Intel proprietary drivers, and may crash if enabled.
|
||||||
|
Compute pipelines are always enabled on all other drivers.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Enable Compute Pipelines (Intel Vulkan only)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="af_layout" native="true">
|
<widget class="QWidget" name="af_layout" native="true">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_1">
|
<layout class="QHBoxLayout" name="horizontalLayout_1">
|
||||||
|
|
|
@ -48,8 +48,9 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
|
||||||
audio_tab = std::make_unique<ConfigureAudio>(system_, this);
|
audio_tab = std::make_unique<ConfigureAudio>(system_, this);
|
||||||
cpu_tab = std::make_unique<ConfigureCpu>(system_, this);
|
cpu_tab = std::make_unique<ConfigureCpu>(system_, this);
|
||||||
general_tab = std::make_unique<ConfigureGeneral>(system_, this);
|
general_tab = std::make_unique<ConfigureGeneral>(system_, this);
|
||||||
graphics_tab = std::make_unique<ConfigureGraphics>(system_, this);
|
|
||||||
graphics_advanced_tab = std::make_unique<ConfigureGraphicsAdvanced>(system_, this);
|
graphics_advanced_tab = std::make_unique<ConfigureGraphicsAdvanced>(system_, this);
|
||||||
|
graphics_tab = std::make_unique<ConfigureGraphics>(
|
||||||
|
system_, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, this);
|
||||||
input_tab = std::make_unique<ConfigureInputPerGame>(system_, game_config.get(), this);
|
input_tab = std::make_unique<ConfigureInputPerGame>(system_, game_config.get(), this);
|
||||||
system_tab = std::make_unique<ConfigureSystem>(system_, this);
|
system_tab = std::make_unique<ConfigureSystem>(system_, this);
|
||||||
|
|
||||||
|
|
|
@ -75,8 +75,8 @@ private:
|
||||||
std::unique_ptr<ConfigureAudio> audio_tab;
|
std::unique_ptr<ConfigureAudio> audio_tab;
|
||||||
std::unique_ptr<ConfigureCpu> cpu_tab;
|
std::unique_ptr<ConfigureCpu> cpu_tab;
|
||||||
std::unique_ptr<ConfigureGeneral> general_tab;
|
std::unique_ptr<ConfigureGeneral> general_tab;
|
||||||
std::unique_ptr<ConfigureGraphics> graphics_tab;
|
|
||||||
std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab;
|
std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab;
|
||||||
|
std::unique_ptr<ConfigureGraphics> graphics_tab;
|
||||||
std::unique_ptr<ConfigureInputPerGame> input_tab;
|
std::unique_ptr<ConfigureInputPerGame> input_tab;
|
||||||
std::unique_ptr<ConfigureSystem> system_tab;
|
std::unique_ptr<ConfigureSystem> system_tab;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue