From 137009affef20bfaa91ff32ea1bb6693c09e03c2 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 29 Jun 2019 21:05:30 +1000 Subject: FramebufferManager: Support saving EFB to save state --- Source/Core/VideoCommon/FramebufferShaderGen.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'Source/Core/VideoCommon/FramebufferShaderGen.cpp') diff --git a/Source/Core/VideoCommon/FramebufferShaderGen.cpp b/Source/Core/VideoCommon/FramebufferShaderGen.cpp index 5789c0a0d2..00ff753d92 100644 --- a/Source/Core/VideoCommon/FramebufferShaderGen.cpp +++ b/Source/Core/VideoCommon/FramebufferShaderGen.cpp @@ -644,4 +644,24 @@ std::string GenerateTextureReinterpretShader(TextureFormat from_format, TextureF return ss.str(); } +std::string GenerateEFBRestorePixelShader() +{ + std::stringstream ss; + EmitSamplerDeclarations(ss, 0, 2, false); + 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"); + ss << ";\n"; + ss << " " << (GetAPIType() == APIType::D3D ? "depth" : "gl_FragDepth") << " = "; + EmitSampleTexture(ss, 1, "coords"); + ss << ".r;\n"; + ss << "}\n"; + return ss.str(); +} + } // namespace FramebufferShaderGen -- cgit v1.2.3