mirror of
https://github.com/stenzek/duckstation.git
synced 2025-12-28 05:24:19 +00:00
Qt: Populate graphics adapters asynchronously
Some checks are pending
Automated Builds / 💻 Windows (push) Waiting to run
Automated Builds / 🐧 Linux AppImage (push) Waiting to run
Automated Builds / 🐧 Linux Cross-Compiled AppImage (push) Waiting to run
Automated Builds / 🍎 MacOS (push) Waiting to run
Automated Builds / 📤 Create Release (push) Blocked by required conditions
Some checks are pending
Automated Builds / 💻 Windows (push) Waiting to run
Automated Builds / 🐧 Linux AppImage (push) Waiting to run
Automated Builds / 🐧 Linux Cross-Compiled AppImage (push) Waiting to run
Automated Builds / 🍎 MacOS (push) Waiting to run
Automated Builds / 📤 Create Release (push) Blocked by required conditions
More time saved when opening the settings window.
This commit is contained in:
parent
fbdd2689b1
commit
5a7acfe730
@ -2,6 +2,7 @@
|
||||
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
|
||||
|
||||
#include "graphicssettingswidget.h"
|
||||
#include "qthost.h"
|
||||
#include "qtutils.h"
|
||||
#include "settingswindow.h"
|
||||
#include "settingwidgetbinder.h"
|
||||
@ -62,6 +63,8 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
||||
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.renderer, "GPU", "Renderer", &Settings::ParseRendererName,
|
||||
&Settings::GetRendererName, &Settings::GetRendererDisplayName,
|
||||
Settings::DEFAULT_GPU_RENDERER, GPURenderer::Count);
|
||||
if (!m_dialog->hasGameTrait(GameDatabase::Trait::DisableUpscaling))
|
||||
populateAndConnectUpscalingModes();
|
||||
SettingWidgetBinder::BindWidgetToEnumSetting(sif, m_ui.textureFiltering, "GPU", "TextureFilter",
|
||||
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
|
||||
&Settings::GetTextureFilterDisplayName,
|
||||
@ -831,7 +834,19 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
||||
if (m_adapters_render_api != render_api)
|
||||
{
|
||||
m_adapters_render_api = render_api;
|
||||
m_adapters = GPUDevice::GetAdapterListForAPI(render_api);
|
||||
|
||||
QtAsyncTask::create(this, [this, render_api]() {
|
||||
GPUDevice::AdapterInfoList adapters = GPUDevice::GetAdapterListForAPI(render_api);
|
||||
return [this, adapters = std::move(adapters), render_api]() mutable {
|
||||
if (m_adapters_render_api != render_api)
|
||||
return;
|
||||
|
||||
m_adapters = std::move(adapters);
|
||||
populateGPUAdaptersAndResolutions(render_api);
|
||||
};
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const GPUDevice::AdapterInfo* current_adapter = nullptr;
|
||||
@ -913,16 +928,9 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
||||
|
||||
if (!m_dialog->hasGameTrait(GameDatabase::Trait::DisableUpscaling))
|
||||
{
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||
m_ui.resolutionScale->clear();
|
||||
|
||||
const int max_scale =
|
||||
static_cast<int>(current_adapter ? std::clamp<u32>(current_adapter->max_texture_size / 1024u, 1u, 32u) : 16);
|
||||
populateUpscalingModes(m_ui.resolutionScale, max_scale);
|
||||
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.resolutionScale, "GPU", "ResolutionScale", 1);
|
||||
connect(m_ui.resolutionScale, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
|
||||
&GraphicsSettingsWidget::updateResolutionDependentOptions);
|
||||
populateAndConnectUpscalingModes(max_scale);
|
||||
}
|
||||
|
||||
{
|
||||
@ -972,6 +980,19 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
||||
}
|
||||
}
|
||||
|
||||
void GraphicsSettingsWidget::populateAndConnectUpscalingModes(int max_scale)
|
||||
{
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||
m_ui.resolutionScale->clear();
|
||||
|
||||
populateUpscalingModes(m_ui.resolutionScale, max_scale);
|
||||
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(m_dialog->getSettingsInterface(), m_ui.resolutionScale, "GPU",
|
||||
"ResolutionScale", 1);
|
||||
connect(m_ui.resolutionScale, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
|
||||
&GraphicsSettingsWidget::updateResolutionDependentOptions);
|
||||
}
|
||||
|
||||
void GraphicsSettingsWidget::populateUpscalingModes(QComboBox* const cb, int max_scale)
|
||||
{
|
||||
static constexpr const std::pair<int, const char*> templates[] = {
|
||||
|
||||
@ -22,10 +22,12 @@ class GraphicsSettingsWidget : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static constexpr int DEFAULT_MAX_RESOLUTION_SCALE = 16;
|
||||
|
||||
GraphicsSettingsWidget(SettingsWindow* dialog, QWidget* parent);
|
||||
~GraphicsSettingsWidget();
|
||||
|
||||
static void populateUpscalingModes(QComboBox* const cb, int max_scale);
|
||||
static void populateUpscalingModes(QComboBox* const cb, int max_scale = DEFAULT_MAX_RESOLUTION_SCALE);
|
||||
|
||||
static QVariant packAspectRatio(DisplayAspectRatio ar);
|
||||
static DisplayAspectRatio unpackAspectRatio(const QVariant& var);
|
||||
@ -74,6 +76,8 @@ private:
|
||||
|
||||
void populateGPUAdaptersAndResolutions(RenderAPI render_api);
|
||||
|
||||
void populateAndConnectUpscalingModes(int max_scale = DEFAULT_MAX_RESOLUTION_SCALE);
|
||||
|
||||
Ui::GraphicsSettingsWidget m_ui;
|
||||
|
||||
SettingsWindow* m_dialog;
|
||||
|
||||
@ -502,7 +502,7 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
||||
{
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||
m_ui.resolutionScale->clear();
|
||||
GraphicsSettingsWidget::populateUpscalingModes(m_ui.resolutionScale, 16);
|
||||
GraphicsSettingsWidget::populateUpscalingModes(m_ui.resolutionScale);
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(nullptr, m_ui.resolutionScale, "GPU", "ResolutionScale", 1);
|
||||
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.textureFiltering);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user