diff options
| author | Stenzek <stenzek@gmail.com> | 2019-06-29 21:05:30 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2019-07-24 05:19:22 +1000 |
| commit | 137009affef20bfaa91ff32ea1bb6693c09e03c2 (patch) | |
| tree | ab6ac090a91ffdc2aa9efd6a1ca01fba1c0c363b /Source/Core/VideoCommon/FramebufferShaderGen.cpp | |
| parent | 1082468133342586ae2a5986408d163ce5aa14ca (diff) | |
FramebufferManager: Support saving EFB to save state
Diffstat (limited to 'Source/Core/VideoCommon/FramebufferShaderGen.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/FramebufferShaderGen.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
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 |
