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
+
+
+