diff options
| author | Stenzek <stenzek@gmail.com> | 2016-03-06 18:48:35 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-05-08 23:18:51 +1000 |
| commit | 6f3573dda87d2796a031fb7afc5ac1cecbb7ee2f (patch) | |
| tree | 856fd55a31f9216664579f25491225f2c743c6ff /Source/Core/VideoBackends/D3D12/FramebufferManager.cpp | |
| parent | 3372bfa6ab72c38763ed5b37dcb0fe6a9068a7eb (diff) | |
D3D12: Implement XFB encoding/decoding (support Real XFB)
Diffstat (limited to 'Source/Core/VideoBackends/D3D12/FramebufferManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D12/FramebufferManager.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/Source/Core/VideoBackends/D3D12/FramebufferManager.cpp b/Source/Core/VideoBackends/D3D12/FramebufferManager.cpp index 49fe92fa57..6f8698a76c 100644 --- a/Source/Core/VideoBackends/D3D12/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/D3D12/FramebufferManager.cpp @@ -15,8 +15,6 @@ namespace DX12 { -static XFBEncoder s_xfbEncoder; - FramebufferManager::Efb FramebufferManager::m_efb; unsigned int FramebufferManager::m_target_width; unsigned int FramebufferManager::m_target_height; @@ -133,14 +131,10 @@ FramebufferManager::FramebufferManager() } InitializeEFBAccessCopies(); - - s_xfbEncoder.Init(); } FramebufferManager::~FramebufferManager() { - s_xfbEncoder.Shutdown(); - DestroyEFBAccessCopies(); SAFE_RELEASE(m_efb.color_tex); @@ -153,7 +147,9 @@ FramebufferManager::~FramebufferManager() void FramebufferManager::CopyToRealXFB(u32 xfbAddr, u32 fbStride, u32 fbHeight, const EFBRectangle& sourceRc, float gamma) { u8* dst = Memory::GetPointer(xfbAddr); - s_xfbEncoder.Encode(dst, fbStride/2, fbHeight, sourceRc, gamma); + D3DTexture2D* src_texture = GetResolvedEFBColorTexture(); + TargetRectangle scaled_rect = g_renderer->ConvertEFBRectangle(sourceRc); + g_xfb_encoder->EncodeTextureToRam(dst, fbStride, fbHeight, src_texture, scaled_rect, m_target_width, m_target_height, gamma); } std::unique_ptr<XFBSourceBase> FramebufferManager::CreateXFBSource(unsigned int target_width, unsigned int target_height, unsigned int layers) @@ -412,8 +408,8 @@ void FramebufferManager::DestroyEFBAccessCopies() void XFBSource::DecodeToTexture(u32 xfbAddr, u32 fbWidth, u32 fbHeight) { - // DX12's XFB decoder does not use this function. - // YUYV data is decoded in Render::Swap. + u8* src = Memory::GetPointer(xfbAddr); + g_xfb_encoder->DecodeToTexture(m_tex, src, fbWidth, fbHeight); } void XFBSource::CopyEFB(float gamma) |
