summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/D3D12/FramebufferManager.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-03-06 18:48:35 +1000
committerStenzek <stenzek@gmail.com>2016-05-08 23:18:51 +1000
commit6f3573dda87d2796a031fb7afc5ac1cecbb7ee2f (patch)
tree856fd55a31f9216664579f25491225f2c743c6ff /Source/Core/VideoBackends/D3D12/FramebufferManager.cpp
parent3372bfa6ab72c38763ed5b37dcb0fe6a9068a7eb (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.cpp14
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)