diff options
| author | Stenzek <stenzek@gmail.com> | 2015-11-28 21:33:47 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2015-12-08 20:29:21 +1000 |
| commit | 63264ac23f3b9cfaa725cf90d995497ba1601449 (patch) | |
| tree | 2e3934b26e064f9e794006223ed4a2d3ee3c657c /Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp | |
| parent | 5e803c3db3fa27b943d3d7789086789946eed6a7 (diff) | |
D3D: Fix EFB depth buffer copies, filtering on scaled EFB copies when MSAA is enabled, real XFB filtering
Since ResolveSubresource cannot be used with depth textures (and throws an error with the debug layer enabled), use a shader which selects the minimum depth value from all samples.
Changes the sampler by XFBEncoder to use a linear filter, rather than point, to match GL behavior.
Diffstat (limited to 'Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp b/Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp index 68a7a84d6a..5698077817 100644 --- a/Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp +++ b/Source/Core/VideoBackends/D3D/PSTextureEncoder.cpp @@ -96,6 +96,14 @@ void PSTextureEncoder::Encode(u8* dst, u32 format, u32 native_width, u32 bytes_p HRESULT hr; + // Resolve MSAA targets before copying. + ID3D11ShaderResourceView* pEFB = (srcFormat == PEControl::Z24) ? + FramebufferManager::GetResolvedEFBDepthTexture()->GetSRV() : + // FIXME: Instead of resolving EFB, it would be better to pick out a + // single sample from each pixel. The game may break if it isn't + // expecting the blurred edges around multisampled shapes. + FramebufferManager::GetResolvedEFBColorTexture()->GetSRV(); + // Reset API g_renderer->ResetAPIState(); @@ -111,13 +119,6 @@ void PSTextureEncoder::Encode(u8* dst, u32 format, u32 native_width, u32 bytes_p D3D::context->OMSetRenderTargets(1, &m_outRTV, nullptr); - ID3D11ShaderResourceView* pEFB = (srcFormat == PEControl::Z24) ? - FramebufferManager::GetResolvedEFBDepthTexture()->GetSRV() : - // FIXME: Instead of resolving EFB, it would be better to pick out a - // single sample from each pixel. The game may break if it isn't - // expecting the blurred edges around multisampled shapes. - FramebufferManager::GetResolvedEFBColorTexture()->GetSRV(); - EFBEncodeParams params; params.SrcLeft = srcRect.left; params.SrcTop = srcRect.top; |
