diff --git a/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp b/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp
index dfd809f956..9c392e02ce 100644
--- a/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp
+++ b/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp
@@ -205,6 +205,7 @@ void AdvancedWidget::OnBackendChanged()
Core::GetState() == Core::State::Uninitialized &&
g_Config.backend_info.bSupportsGeometryShaders &&
g_Config.backend_info.bSupportsVSLinePointExpand);
+ AddDescriptions();
}
void AdvancedWidget::OnEmulationStateChanged(bool running)
@@ -304,7 +305,7 @@ void AdvancedWidget::AddDescriptions()
QT_TR_NOOP("On backends that support both using the geometry shader and the vertex shader "
"for expanding points and lines, selects the vertex shader for the job. May "
"affect performance."
- "
If unsure, leave this unchecked.");
+ "
%1");
static const char TR_DEFER_EFB_ACCESS_INVALIDATION_DESCRIPTION[] = QT_TR_NOOP(
"Defers invalidation of the EFB access cache until a GPU synchronization command "
"is executed. If disabled, the cache will be invalidated with every draw call. "
@@ -332,6 +333,9 @@ void AdvancedWidget::AddDescriptions()
"unchecked.");
#endif
+ static const char IF_UNSURE_UNCHECKED[] =
+ QT_TR_NOOP("If unsure, leave this unchecked.");
+
m_enable_wireframe->SetDescription(tr(TR_WIREFRAME_DESCRIPTION));
m_show_statistics->SetDescription(tr(TR_SHOW_STATS_DESCRIPTION));
m_enable_format_overlay->SetDescription(tr(TR_TEXTURE_FORMAT_DESCRIPTION));
@@ -353,8 +357,17 @@ void AdvancedWidget::AddDescriptions()
m_enable_cropping->SetDescription(tr(TR_CROPPING_DESCRIPTION));
m_enable_prog_scan->SetDescription(tr(TR_PROGRESSIVE_SCAN_DESCRIPTION));
m_backend_multithreading->SetDescription(tr(TR_BACKEND_MULTITHREADING_DESCRIPTION));
+ QString vsexpand_extra;
+ if (!g_Config.backend_info.bSupportsGeometryShaders)
+ vsexpand_extra = tr("Forced on because %1 doesn't support geometry shaders.")
+ .arg(tr(g_Config.backend_info.DisplayName.c_str()));
+ else if (!g_Config.backend_info.bSupportsVSLinePointExpand)
+ vsexpand_extra = tr("Forced off because %1 doesn't support VS expansion.")
+ .arg(tr(g_Config.backend_info.DisplayName.c_str()));
+ else
+ vsexpand_extra = tr(IF_UNSURE_UNCHECKED);
m_prefer_vs_for_point_line_expansion->SetDescription(
- tr(TR_PREFER_VS_FOR_POINT_LINE_EXPANSION_DESCRIPTION));
+ tr(TR_PREFER_VS_FOR_POINT_LINE_EXPANSION_DESCRIPTION).arg(vsexpand_extra));
#ifdef _WIN32
m_borderless_fullscreen->SetDescription(tr(TR_BORDERLESS_FULLSCREEN_DESCRIPTION));
#endif
diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp
index b385883093..2b4883d22b 100644
--- a/Source/Core/VideoCommon/VideoBackendBase.cpp
+++ b/Source/Core/VideoCommon/VideoBackendBase.cpp
@@ -274,6 +274,7 @@ void VideoBackendBase::PopulateBackendInfo()
// a value from the previously used renderer
g_Config.backend_info = {};
ActivateBackend(Config::Get(Config::MAIN_GFX_BACKEND));
+ g_Config.backend_info.DisplayName = g_video_backend->GetDisplayName();
g_video_backend->InitBackendInfo();
// We validate the config after initializing the backend info, as system-specific settings
// such as anti-aliasing, or the selected adapter may be invalid, and should be checked.
diff --git a/Source/Core/VideoCommon/VideoConfig.h b/Source/Core/VideoCommon/VideoConfig.h
index 471ff5a18f..d0863a9d84 100644
--- a/Source/Core/VideoCommon/VideoConfig.h
+++ b/Source/Core/VideoCommon/VideoConfig.h
@@ -174,6 +174,7 @@ struct VideoConfig final
struct
{
APIType api_type = APIType::Nothing;
+ std::string DisplayName;
std::vector Adapters; // for D3D
std::vector AAModes;