diff options
| author | TellowKrinkle <tellowkrinkle@gmail.com> | 2022-06-12 21:27:11 -0500 |
|---|---|---|
| committer | TellowKrinkle <tellowkrinkle@gmail.com> | 2022-07-15 15:31:47 -0500 |
| commit | 991024173e3d048ea3a056c8debb6f92ae7b2da0 (patch) | |
| tree | 93259d094433a7ca7a1e9341508be4f2209d63f6 /Source/Core/VideoCommon/ShaderCache.cpp | |
| parent | 6ab24e6c176bfd288296bf8284a30b0835fa45c3 (diff) | |
VideoCommon: Always use fbfetch in ubershaders if available
Reduce the number of different pipelines needed. Also works around drivers that break when you combine fbfetch with dual source blending
Diffstat (limited to 'Source/Core/VideoCommon/ShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/ShaderCache.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Source/Core/VideoCommon/ShaderCache.cpp b/Source/Core/VideoCommon/ShaderCache.cpp index e4d2115c3b..6049fd29a7 100644 --- a/Source/Core/VideoCommon/ShaderCache.cpp +++ b/Source/Core/VideoCommon/ShaderCache.cpp @@ -743,9 +743,17 @@ static GXUberPipelineUid ApplyDriverBugs(const GXUberPipelineUid& in) { GXUberPipelineUid out; memcpy(&out, &in, sizeof(out)); // Copy padding - if (!g_ActiveConfig.backend_info.bSupportsDualSourceBlend || - (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_DUAL_SOURCE_BLENDING) && - !out.blending_state.RequiresDualSrc())) + if (g_ActiveConfig.backend_info.bSupportsFramebufferFetch) + { + // Always blend in shader + out.blending_state.hex = 0; + out.blending_state.colorupdate = in.blending_state.colorupdate.Value(); + out.blending_state.alphaupdate = in.blending_state.alphaupdate.Value(); + out.ps_uid.GetUidData()->no_dual_src = true; + } + else if (!g_ActiveConfig.backend_info.bSupportsDualSourceBlend || + (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_DUAL_SOURCE_BLENDING) && + !out.blending_state.RequiresDualSrc())) { out.blending_state.usedualsrc = false; out.ps_uid.GetUidData()->no_dual_src = true; |
