diff --git a/src/core/host.cpp b/src/core/host.cpp index 22a23be10..6083c6ee1 100644 --- a/src/core/host.cpp +++ b/src/core/host.cpp @@ -374,6 +374,10 @@ bool Host::CreateGPUDevice(RenderAPI api, bool fullscreen, Error* error) disabled_features |= GPUDevice::FEATURE_MASK_MEMORY_IMPORT; if (g_settings.gpu_disable_raster_order_views) disabled_features |= GPUDevice::FEATURE_MASK_RASTER_ORDER_VIEWS; + if (g_settings.gpu_disable_compute_shaders) + disabled_features |= GPUDevice::FEATURE_MASK_COMPUTE_SHADERS; + if (g_settings.gpu_disable_compressed_textures) + disabled_features |= GPUDevice::FEATURE_MASK_COMPRESSED_TEXTURES; // Don't dump shaders on debug builds for Android, users will complain about storage... #if !defined(__ANDROID__) || defined(_DEBUG) diff --git a/src/core/settings.cpp b/src/core/settings.cpp index feb4225fe..486203160 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -202,6 +202,8 @@ void Settings::Load(const SettingsInterface& si, const SettingsInterface& contro gpu_disable_texture_copy_to_self = si.GetBoolValue("GPU", "DisableTextureCopyToSelf", false); gpu_disable_memory_import = si.GetBoolValue("GPU", "DisableMemoryImport", false); gpu_disable_raster_order_views = si.GetBoolValue("GPU", "DisableRasterOrderViews", false); + gpu_disable_compute_shaders = si.GetBoolValue("GPU", "DisableComputeShaders", false); + gpu_disable_compressed_textures = si.GetBoolValue("GPU", "DisableCompressedTextures", false); gpu_per_sample_shading = si.GetBoolValue("GPU", "PerSampleShading", false); gpu_use_thread = si.GetBoolValue("GPU", "UseThread", true); gpu_use_software_renderer_for_readbacks = si.GetBoolValue("GPU", "UseSoftwareRendererForReadbacks", false); @@ -539,6 +541,8 @@ void Settings::Save(SettingsInterface& si, bool ignore_base) const si.SetBoolValue("GPU", "DisableTextureCopyToSelf", gpu_disable_texture_copy_to_self); si.SetBoolValue("GPU", "DisableMemoryImport", gpu_disable_memory_import); si.SetBoolValue("GPU", "DisableRasterOrderViews", gpu_disable_raster_order_views); + si.SetBoolValue("GPU", "DisableComputeShaders", gpu_disable_compute_shaders); + si.SetBoolValue("GPU", "DisableCompressedTextures", gpu_disable_compressed_textures); } si.SetBoolValue("GPU", "PerSampleShading", gpu_per_sample_shading); diff --git a/src/core/settings.h b/src/core/settings.h index d63345e7b..2640cbc0e 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -108,6 +108,8 @@ struct Settings bool gpu_disable_texture_copy_to_self : 1 = false; bool gpu_disable_memory_import : 1 = false; bool gpu_disable_raster_order_views : 1 = false; + bool gpu_disable_compute_shaders : 1 = false; + bool gpu_disable_compressed_textures : 1 = false; bool gpu_per_sample_shading : 1 = false; bool gpu_true_color : 1 = true; bool gpu_scaled_dithering : 1 = true; diff --git a/src/core/system.cpp b/src/core/system.cpp index 0569393ad..a6e9e1184 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -4244,6 +4244,8 @@ void System::CheckForSettingsChanges(const Settings& old_settings) g_settings.gpu_disable_texture_copy_to_self != old_settings.gpu_disable_texture_copy_to_self || g_settings.gpu_disable_memory_import != old_settings.gpu_disable_memory_import || g_settings.gpu_disable_raster_order_views != old_settings.gpu_disable_raster_order_views || + g_settings.gpu_disable_compute_shaders != old_settings.gpu_disable_compute_shaders || + g_settings.gpu_disable_compressed_textures != old_settings.gpu_disable_compressed_textures || g_settings.display_exclusive_fullscreen_control != old_settings.display_exclusive_fullscreen_control)) { // if debug device/threaded presentation change, we need to recreate the whole display @@ -4256,6 +4258,8 @@ void System::CheckForSettingsChanges(const Settings& old_settings) g_settings.gpu_disable_texture_copy_to_self != old_settings.gpu_disable_texture_copy_to_self || g_settings.gpu_disable_memory_import != old_settings.gpu_disable_memory_import || g_settings.gpu_disable_raster_order_views != old_settings.gpu_disable_raster_order_views || + g_settings.gpu_disable_compute_shaders != old_settings.gpu_disable_compute_shaders || + g_settings.gpu_disable_compressed_textures != old_settings.gpu_disable_compressed_textures || g_settings.display_exclusive_fullscreen_control != old_settings.display_exclusive_fullscreen_control); Host::AddIconOSDMessage("RendererSwitch", ICON_FA_PAINT_ROLLER, diff --git a/src/duckstation-qt/graphicssettingswidget.cpp b/src/duckstation-qt/graphicssettingswidget.cpp index a3c540a50..bd9535f91 100644 --- a/src/duckstation-qt/graphicssettingswidget.cpp +++ b/src/duckstation-qt/graphicssettingswidget.cpp @@ -308,6 +308,12 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget* SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableTextureBuffers, "GPU", "DisableTextureBuffers", false); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableTextureCopyToSelf, "GPU", "DisableTextureCopyToSelf", false); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableMemoryImport, "GPU", "DisableMemoryImport", false); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableRasterOrderViews, "GPU", "DisableRasterOrderViews", + false); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableComputeShaders, "GPU", "DisableComputeShaders", false); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.disableCompressedTextures, "GPU", "DisableCompressedTextures", + false); // Init all dependent options. updateRendererDependentOptions(); @@ -632,6 +638,12 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget* dialog->registerWidgetHelp(m_ui.disableRasterOrderViews, tr("Disable Rasterizer Order Views"), tr("Unchecked"), tr("Disables the use of rasterizer order views. Useful for testing broken graphics " "drivers. Only for developer use.")); + dialog->registerWidgetHelp(m_ui.disableComputeShaders, tr("Disable Compute Shaders"), tr("Unchecked"), + tr("Disables the use of compute shaders. Useful for testing broken graphics drivers. " + "Only for developer use.")); + dialog->registerWidgetHelp(m_ui.disableCompressedTextures, tr("Disable Compressed Textures"), tr("Unchecked"), + tr("Disables the use of compressed textures. Useful for testing broken graphics drivers. " + "Only for developer use.")); } GraphicsSettingsWidget::~GraphicsSettingsWidget() = default; diff --git a/src/duckstation-qt/graphicssettingswidget.ui b/src/duckstation-qt/graphicssettingswidget.ui index 4ed1bace1..43f0ff2d8 100644 --- a/src/duckstation-qt/graphicssettingswidget.ui +++ b/src/duckstation-qt/graphicssettingswidget.ui @@ -1331,13 +1331,6 @@ - - - - Disable Texture Copy To Self - - - @@ -1345,20 +1338,6 @@ - - - - Disable Dual-Source Blending - - - - - - - Disable Framebuffer Fetch - - - @@ -1366,6 +1345,13 @@ + + + + Disable Dual-Source Blending + + + @@ -1373,6 +1359,20 @@ + + + + Disable Framebuffer Fetch + + + + + + + Disable Texture Copy To Self + + + @@ -1387,6 +1387,20 @@ + + + + Disable Compute Shaders + + + + + + + Disable Compressed Textures + + +