From 25b3e5e029c7996ea90e8eeadabb9fece9ebf468 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 3 Aug 2019 01:46:52 +1000 Subject: [PATCH 1/2] FramebufferManager: Fix restoring of EFB depth buffer Correct state wasn't being set. --- Source/Core/VideoCommon/FramebufferManager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Core/VideoCommon/FramebufferManager.cpp b/Source/Core/VideoCommon/FramebufferManager.cpp index f61ebcf4a9..48bef4b276 100644 --- a/Source/Core/VideoCommon/FramebufferManager.cpp +++ b/Source/Core/VideoCommon/FramebufferManager.cpp @@ -472,6 +472,7 @@ bool FramebufferManager::CompileReadbackPipelines() if (!restore_shader) return false; + config.depth_state = RenderState::GetAlwaysWriteDepthState(); config.framebuffer_state = GetEFBFramebufferState(); config.framebuffer_state.per_sample_shading = false; config.vertex_shader = g_shader_cache->GetScreenQuadVertexShader(); From d6460e0b18c51a0213edad9eb1395f6b19b469df Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 3 Aug 2019 01:48:57 +1000 Subject: [PATCH 2/2] FramebufferShaderGen: Fix upside-down EFB being restored in OpenGL --- Source/Core/VideoCommon/FramebufferShaderGen.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Source/Core/VideoCommon/FramebufferShaderGen.cpp b/Source/Core/VideoCommon/FramebufferShaderGen.cpp index 00ff753d92..4917b2dba7 100644 --- a/Source/Core/VideoCommon/FramebufferShaderGen.cpp +++ b/Source/Core/VideoCommon/FramebufferShaderGen.cpp @@ -651,14 +651,11 @@ std::string GenerateEFBRestorePixelShader() EmitPixelMainDeclaration(ss, 1, 0, "float4", GetAPIType() == APIType::D3D ? "out float depth : SV_Depth, " : ""); ss << "{\n"; - ss << " float3 coords = float3(v_tex0.x, " - << (g_ActiveConfig.backend_info.bUsesLowerLeftOrigin ? "1.0 - " : "") - << "v_tex0.y, v_tex0.z);\n"; ss << " ocol0 = "; - EmitSampleTexture(ss, 0, "coords"); + EmitSampleTexture(ss, 0, "v_tex0"); ss << ";\n"; ss << " " << (GetAPIType() == APIType::D3D ? "depth" : "gl_FragDepth") << " = "; - EmitSampleTexture(ss, 1, "coords"); + EmitSampleTexture(ss, 1, "v_tex0"); ss << ".r;\n"; ss << "}\n"; return ss.str();