From 34692ab826abc8f8faa61bdb2280b742424528f1 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 7 Dec 2013 15:14:29 -0500 Subject: Remove unnecessary Src/ folders --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 260 +++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 Source/Core/VideoCommon/FramebufferManagerBase.cpp (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp new file mode 100644 index 0000000000..a975da624c --- /dev/null +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -0,0 +1,260 @@ + +#include "FramebufferManagerBase.h" + +#include "RenderBase.h" +#include "VideoConfig.h" + +FramebufferManagerBase *g_framebuffer_manager; + +XFBSourceBase *FramebufferManagerBase::m_realXFBSource; // Only used in Real XFB mode +FramebufferManagerBase::VirtualXFBListType FramebufferManagerBase::m_virtualXFBList; // Only used in Virtual XFB mode +const XFBSourceBase* FramebufferManagerBase::m_overlappingXFBArray[MAX_VIRTUAL_XFB]; + +unsigned int FramebufferManagerBase::s_last_xfb_width = 1; +unsigned int FramebufferManagerBase::s_last_xfb_height = 1; + +FramebufferManagerBase::FramebufferManagerBase() +{ + m_realXFBSource = NULL; + + // can't hurt + memset(m_overlappingXFBArray, 0, sizeof(m_overlappingXFBArray)); +} + +FramebufferManagerBase::~FramebufferManagerBase() +{ + VirtualXFBListType::iterator + it = m_virtualXFBList.begin(), + vlend = m_virtualXFBList.end(); + for (; it != vlend; ++it) + delete it->xfbSource; + + m_virtualXFBList.clear(); + + delete m_realXFBSource; +} + +const XFBSourceBase* const* FramebufferManagerBase::GetXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) +{ + if (!g_ActiveConfig.bUseXFB) + return NULL; + + if (g_ActiveConfig.bUseRealXFB) + return GetRealXFBSource(xfbAddr, fbWidth, fbHeight, xfbCount); + else + return GetVirtualXFBSource(xfbAddr, fbWidth, fbHeight, xfbCount); +} + +const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) +{ + xfbCount = 1; + + if (!m_realXFBSource) + m_realXFBSource = g_framebuffer_manager->CreateXFBSource(fbWidth, fbHeight); + + m_realXFBSource->srcAddr = xfbAddr; + + m_realXFBSource->srcWidth = MAX_XFB_WIDTH; + m_realXFBSource->srcHeight = MAX_XFB_HEIGHT; + + m_realXFBSource->texWidth = fbWidth; + m_realXFBSource->texHeight = fbHeight; + + // TODO: stuff only used by OGL... :/ + // OpenGL texture coordinates originate at the lower left, which is why + // sourceRc.top = fbHeight and sourceRc.bottom = 0. + m_realXFBSource->sourceRc.left = 0; + m_realXFBSource->sourceRc.top = fbHeight; + m_realXFBSource->sourceRc.right = fbWidth; + m_realXFBSource->sourceRc.bottom = 0; + + // Decode YUYV data from GameCube RAM + m_realXFBSource->DecodeToTexture(xfbAddr, fbWidth, fbHeight); + + m_overlappingXFBArray[0] = m_realXFBSource; + return &m_overlappingXFBArray[0]; +} + +const XFBSourceBase* const* FramebufferManagerBase::GetVirtualXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) +{ + xfbCount = 0; + + if (m_virtualXFBList.empty()) // no Virtual XFBs available + return NULL; + + u32 srcLower = xfbAddr; + u32 srcUpper = xfbAddr + 2 * fbWidth * fbHeight; + + VirtualXFBListType::reverse_iterator + it = m_virtualXFBList.rbegin(), + vlend = m_virtualXFBList.rend(); + for (; it != vlend; ++it) + { + VirtualXFB* vxfb = &*it; + + u32 dstLower = vxfb->xfbAddr; + u32 dstUpper = vxfb->xfbAddr + 2 * vxfb->xfbWidth * vxfb->xfbHeight; + + if (addrRangesOverlap(srcLower, srcUpper, dstLower, dstUpper)) + { + m_overlappingXFBArray[xfbCount] = vxfb->xfbSource; + ++xfbCount; + } + } + + return &m_overlappingXFBArray[0]; +} + +void FramebufferManagerBase::CopyToXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc,float Gamma) +{ + if (g_ActiveConfig.bUseRealXFB) + g_framebuffer_manager->CopyToRealXFB(xfbAddr, fbWidth, fbHeight, sourceRc,Gamma); + else + CopyToVirtualXFB(xfbAddr, fbWidth, fbHeight, sourceRc,Gamma); +} + +void FramebufferManagerBase::CopyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc,float Gamma) +{ + VirtualXFBListType::iterator vxfb = FindVirtualXFB(xfbAddr, fbWidth, fbHeight); + + if (m_virtualXFBList.end() == vxfb) + { + if (m_virtualXFBList.size() < MAX_VIRTUAL_XFB) + { + // create a new Virtual XFB and place it at the front of the list + VirtualXFB v; + memset(&v, 0, sizeof v); + m_virtualXFBList.push_front(v); + vxfb = m_virtualXFBList.begin(); + } + else + { + // Replace the last virtual XFB + --vxfb; + } + } + //else // replace existing virtual XFB + + // move this Virtual XFB to the front of the list. + if (m_virtualXFBList.begin() != vxfb) + m_virtualXFBList.splice(m_virtualXFBList.begin(), m_virtualXFBList, vxfb); + + unsigned int target_width, target_height; + g_framebuffer_manager->GetTargetSize(&target_width, &target_height, sourceRc); + + // recreate if needed + if (vxfb->xfbSource && (vxfb->xfbSource->texWidth != target_width || vxfb->xfbSource->texHeight != target_height)) + { + //delete vxfb->xfbSource; + //vxfb->xfbSource = NULL; + } + + if (!vxfb->xfbSource) + { + vxfb->xfbSource = g_framebuffer_manager->CreateXFBSource(target_width, target_height); + vxfb->xfbSource->texWidth = target_width; + vxfb->xfbSource->texHeight = target_height; + } + + vxfb->xfbSource->srcAddr = vxfb->xfbAddr = xfbAddr; + vxfb->xfbSource->srcWidth = vxfb->xfbWidth = fbWidth; + vxfb->xfbSource->srcHeight = vxfb->xfbHeight = fbHeight; + + vxfb->xfbSource->sourceRc = g_renderer->ConvertEFBRectangle(sourceRc); + + // keep stale XFB data from being used + ReplaceVirtualXFB(); + + // Copy EFB data to XFB and restore render target again + vxfb->xfbSource->CopyEFB(Gamma); +} + +FramebufferManagerBase::VirtualXFBListType::iterator FramebufferManagerBase::FindVirtualXFB(u32 xfbAddr, u32 width, u32 height) +{ + const u32 srcLower = xfbAddr; + const u32 srcUpper = xfbAddr + 2 * width * height; + + VirtualXFBListType::iterator it = m_virtualXFBList.begin(); + for (; it != m_virtualXFBList.end(); ++it) + { + const u32 dstLower = it->xfbAddr; + const u32 dstUpper = it->xfbAddr + 2 * it->xfbWidth * it->xfbHeight; + + if (dstLower >= srcLower && dstUpper <= srcUpper) + break; + } + + return it; +} + +void FramebufferManagerBase::ReplaceVirtualXFB() +{ + VirtualXFBListType::iterator it = m_virtualXFBList.begin(); + + const s32 srcLower = it->xfbAddr; + const s32 srcUpper = it->xfbAddr + 2 * it->xfbWidth * it->xfbHeight; + const s32 lineSize = 2 * it->xfbWidth; + + ++it; + + for (; it != m_virtualXFBList.end(); ++it) + { + s32 dstLower = it->xfbAddr; + s32 dstUpper = it->xfbAddr + 2 * it->xfbWidth * it->xfbHeight; + + if (dstLower >= srcLower && dstUpper <= srcUpper) + { + // Invalidate the data + it->xfbAddr = 0; + it->xfbHeight = 0; + it->xfbWidth = 0; + } + else if (addrRangesOverlap(srcLower, srcUpper, dstLower, dstUpper)) + { + s32 upperOverlap = (srcUpper - dstLower) / lineSize; + s32 lowerOverlap = (dstUpper - srcLower) / lineSize; + + if (upperOverlap > 0 && lowerOverlap < 0) + { + it->xfbAddr += lineSize * upperOverlap; + it->xfbHeight -= upperOverlap; + } + else if (lowerOverlap > 0) + { + it->xfbHeight -= lowerOverlap; + } + } + } +} + +int FramebufferManagerBase::ScaleToVirtualXfbWidth(int x, unsigned int backbuffer_width) +{ + if (g_ActiveConfig.RealXFBEnabled()) + return x; + + if (g_ActiveConfig.b3DVision) + { + // This works, yet the version in the else doesn't. No idea why. + return x * (int)backbuffer_width / (int)FramebufferManagerBase::LastXfbWidth(); + } + else + { + return x * (int)Renderer::GetTargetRectangle().GetWidth() / (int)FramebufferManagerBase::LastXfbWidth(); + } +} + +int FramebufferManagerBase::ScaleToVirtualXfbHeight(int y, unsigned int backbuffer_height) +{ + if (g_ActiveConfig.RealXFBEnabled()) + return y; + + if (g_ActiveConfig.b3DVision) + { + // This works, yet the version in the else doesn't. No idea why. + return y * (int)backbuffer_height / (int)FramebufferManagerBase::LastXfbHeight(); + } + else + { + return y * (int)Renderer::GetTargetRectangle().GetHeight() / (int)FramebufferManagerBase::LastXfbHeight(); + } +} -- cgit v1.2.3 From 2afe2152712981e21d6bda6f029292ed2b1cf91e Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 17 Feb 2014 05:18:15 -0500 Subject: Convert all includes to relative paths. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index a975da624c..e5e8a856ca 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -1,8 +1,7 @@ -#include "FramebufferManagerBase.h" - -#include "RenderBase.h" -#include "VideoConfig.h" +#include "VideoCommon/FramebufferManagerBase.h" +#include "VideoCommon/RenderBase.h" +#include "VideoCommon/VideoConfig.h" FramebufferManagerBase *g_framebuffer_manager; -- cgit v1.2.3 From c89f04a7c5256d92b75e9868df9af6cfb7050559 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Mon, 3 Mar 2014 06:25:15 +0100 Subject: clang-modernize -loop-convert and some manual adjustments --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index e5e8a856ca..0cd1eb4a83 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -22,12 +22,10 @@ FramebufferManagerBase::FramebufferManagerBase() FramebufferManagerBase::~FramebufferManagerBase() { - VirtualXFBListType::iterator - it = m_virtualXFBList.begin(), - vlend = m_virtualXFBList.end(); - for (; it != vlend; ++it) - delete it->xfbSource; - + for (VirtualXFB& vxfb : m_virtualXFBList) + { + delete vxfb.xfbSource; + } m_virtualXFBList.clear(); delete m_realXFBSource; -- cgit v1.2.3 From d802d392811be44d34ae9cd23f616db93e54c50f Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sun, 9 Mar 2014 21:14:26 +0100 Subject: clang-modernize -use-nullptr and s/\bNULL\b/nullptr/g for *.cpp/h/mm files not compiled on my machine --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index 0cd1eb4a83..f23af5e36c 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -14,7 +14,7 @@ unsigned int FramebufferManagerBase::s_last_xfb_height = 1; FramebufferManagerBase::FramebufferManagerBase() { - m_realXFBSource = NULL; + m_realXFBSource = nullptr; // can't hurt memset(m_overlappingXFBArray, 0, sizeof(m_overlappingXFBArray)); @@ -34,7 +34,7 @@ FramebufferManagerBase::~FramebufferManagerBase() const XFBSourceBase* const* FramebufferManagerBase::GetXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) { if (!g_ActiveConfig.bUseXFB) - return NULL; + return nullptr; if (g_ActiveConfig.bUseRealXFB) return GetRealXFBSource(xfbAddr, fbWidth, fbHeight, xfbCount); @@ -77,7 +77,7 @@ const XFBSourceBase* const* FramebufferManagerBase::GetVirtualXFBSource(u32 xfbA xfbCount = 0; if (m_virtualXFBList.empty()) // no Virtual XFBs available - return NULL; + return nullptr; u32 srcLower = xfbAddr; u32 srcUpper = xfbAddr + 2 * fbWidth * fbHeight; @@ -143,7 +143,7 @@ void FramebufferManagerBase::CopyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHe if (vxfb->xfbSource && (vxfb->xfbSource->texWidth != target_width || vxfb->xfbSource->texHeight != target_height)) { //delete vxfb->xfbSource; - //vxfb->xfbSource = NULL; + //vxfb->xfbSource = nullptr; } if (!vxfb->xfbSource) -- cgit v1.2.3 From 716b3fefd423fc443b3280a65336e9bc0504d96c Mon Sep 17 00:00:00 2001 From: magumagu Date: Fri, 2 May 2014 23:07:55 -0700 Subject: VideoCommon: recreate XFB texture when the XFB size changes. We need to do this to correctly deal with games which dynamically change the XFB width and height. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index f23af5e36c..6e26dea190 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -46,6 +46,13 @@ const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr { xfbCount = 1; + // recreate if needed + if (m_realXFBSource && (m_realXFBSource->texWidth != fbWidth || m_realXFBSource->texHeight != fbHeight)) + { + delete m_realXFBSource; + m_realXFBSource = nullptr; + } + if (!m_realXFBSource) m_realXFBSource = g_framebuffer_manager->CreateXFBSource(fbWidth, fbHeight); @@ -142,8 +149,8 @@ void FramebufferManagerBase::CopyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHe // recreate if needed if (vxfb->xfbSource && (vxfb->xfbSource->texWidth != target_width || vxfb->xfbSource->texHeight != target_height)) { - //delete vxfb->xfbSource; - //vxfb->xfbSource = nullptr; + delete vxfb->xfbSource; + vxfb->xfbSource = nullptr; } if (!vxfb->xfbSource) -- cgit v1.2.3 From bd9953d97ef45e165d0fb555efa29957c3bb8e82 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sat, 26 Jul 2014 12:45:10 +0200 Subject: Remove the 3D Vision hack. The hack was needed because the Nvidia 3D Vision heuristics are documented to only support surfaces that are the same size as the backbuffer. This would be the case if you enabled the hack and selected the "Auto (Window Size)" internal resolution. However, on recent drivers the same effect is achieved by selecting the "Auto (Multiple)" internal resolution. Therefore the hack is no longer required. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index 6e26dea190..d3dd0b92fd 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -236,15 +236,7 @@ int FramebufferManagerBase::ScaleToVirtualXfbWidth(int x, unsigned int backbuffe if (g_ActiveConfig.RealXFBEnabled()) return x; - if (g_ActiveConfig.b3DVision) - { - // This works, yet the version in the else doesn't. No idea why. - return x * (int)backbuffer_width / (int)FramebufferManagerBase::LastXfbWidth(); - } - else - { - return x * (int)Renderer::GetTargetRectangle().GetWidth() / (int)FramebufferManagerBase::LastXfbWidth(); - } + return x * (int)Renderer::GetTargetRectangle().GetWidth() / (int)FramebufferManagerBase::LastXfbWidth(); } int FramebufferManagerBase::ScaleToVirtualXfbHeight(int y, unsigned int backbuffer_height) @@ -252,13 +244,5 @@ int FramebufferManagerBase::ScaleToVirtualXfbHeight(int y, unsigned int backbuff if (g_ActiveConfig.RealXFBEnabled()) return y; - if (g_ActiveConfig.b3DVision) - { - // This works, yet the version in the else doesn't. No idea why. - return y * (int)backbuffer_height / (int)FramebufferManagerBase::LastXfbHeight(); - } - else - { - return y * (int)Renderer::GetTargetRectangle().GetHeight() / (int)FramebufferManagerBase::LastXfbHeight(); - } + return y * (int)Renderer::GetTargetRectangle().GetHeight() / (int)FramebufferManagerBase::LastXfbHeight(); } -- cgit v1.2.3 From a6ffa552151b3571fe72713c955cecd9c1ac16c6 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 20 Sep 2014 14:54:59 -0400 Subject: VideoCommon: Fix function casing in FrameBufferManagerBase --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index d3dd0b92fd..16e96e3892 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -99,7 +99,7 @@ const XFBSourceBase* const* FramebufferManagerBase::GetVirtualXFBSource(u32 xfbA u32 dstLower = vxfb->xfbAddr; u32 dstUpper = vxfb->xfbAddr + 2 * vxfb->xfbWidth * vxfb->xfbHeight; - if (addrRangesOverlap(srcLower, srcUpper, dstLower, dstUpper)) + if (AddressRangesOverlap(srcLower, srcUpper, dstLower, dstUpper)) { m_overlappingXFBArray[xfbCount] = vxfb->xfbSource; ++xfbCount; @@ -213,7 +213,7 @@ void FramebufferManagerBase::ReplaceVirtualXFB() it->xfbHeight = 0; it->xfbWidth = 0; } - else if (addrRangesOverlap(srcLower, srcUpper, dstLower, dstUpper)) + else if (AddressRangesOverlap(srcLower, srcUpper, dstLower, dstUpper)) { s32 upperOverlap = (srcUpper - dstLower) / lineSize; s32 lowerOverlap = (dstUpper - srcLower) / lineSize; -- cgit v1.2.3 From 7f6284c2fcea9d543b0eec44ea0f3ad36bd0c0aa Mon Sep 17 00:00:00 2001 From: comex Date: Thu, 2 Oct 2014 02:20:46 -0400 Subject: Change a bunch of reference function arguments to pointers. Per the coding style and sanity. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index 16e96e3892..ea865cd275 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -31,20 +31,20 @@ FramebufferManagerBase::~FramebufferManagerBase() delete m_realXFBSource; } -const XFBSourceBase* const* FramebufferManagerBase::GetXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) +const XFBSourceBase* const* FramebufferManagerBase::GetXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32* xfbCountP) { if (!g_ActiveConfig.bUseXFB) return nullptr; if (g_ActiveConfig.bUseRealXFB) - return GetRealXFBSource(xfbAddr, fbWidth, fbHeight, xfbCount); + return GetRealXFBSource(xfbAddr, fbWidth, fbHeight, xfbCountP); else - return GetVirtualXFBSource(xfbAddr, fbWidth, fbHeight, xfbCount); + return GetVirtualXFBSource(xfbAddr, fbWidth, fbHeight, xfbCountP); } -const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) +const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32* xfbCountP) { - xfbCount = 1; + *xfbCountP = 1; // recreate if needed if (m_realXFBSource && (m_realXFBSource->texWidth != fbWidth || m_realXFBSource->texHeight != fbHeight)) @@ -79,9 +79,9 @@ const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr return &m_overlappingXFBArray[0]; } -const XFBSourceBase* const* FramebufferManagerBase::GetVirtualXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32 &xfbCount) +const XFBSourceBase* const* FramebufferManagerBase::GetVirtualXFBSource(u32 xfbAddr, u32 fbWidth, u32 fbHeight, u32* xfbCountP) { - xfbCount = 0; + u32 xfbCount = 0; if (m_virtualXFBList.empty()) // no Virtual XFBs available return nullptr; @@ -106,6 +106,7 @@ const XFBSourceBase* const* FramebufferManagerBase::GetVirtualXFBSource(u32 xfbA } } + *xfbCountP = xfbCount; return &m_overlappingXFBArray[0]; } -- cgit v1.2.3 From 8210b9c915816cf8f778db1b633f2327897af005 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Thu, 6 Nov 2014 11:41:39 +0100 Subject: TextureCache: Ensure that all render target textures have as many layers as the frame buffer. Also fixes a case where the D3D code path did not initialize num_layers leading to undefined behaviour. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index ea865cd275..e2a09c6527 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -12,6 +12,8 @@ const XFBSourceBase* FramebufferManagerBase::m_overlappingXFBArray[MAX_VIRTUAL_X unsigned int FramebufferManagerBase::s_last_xfb_width = 1; unsigned int FramebufferManagerBase::s_last_xfb_height = 1; +unsigned int FramebufferManagerBase::m_EFBLayers = 1; + FramebufferManagerBase::FramebufferManagerBase() { m_realXFBSource = nullptr; -- cgit v1.2.3 From b109b31f6146acd84a4ab702e79e2b99c02b7a9c Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sat, 20 Dec 2014 17:24:35 +0100 Subject: FramebufferManagerBase: Only allocate one layer for Real XFB. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index e2a09c6527..b11bb97b6b 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -56,7 +56,7 @@ const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr } if (!m_realXFBSource) - m_realXFBSource = g_framebuffer_manager->CreateXFBSource(fbWidth, fbHeight); + m_realXFBSource = g_framebuffer_manager->CreateXFBSource(fbWidth, fbHeight, 1); m_realXFBSource->srcAddr = xfbAddr; @@ -158,7 +158,7 @@ void FramebufferManagerBase::CopyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHe if (!vxfb->xfbSource) { - vxfb->xfbSource = g_framebuffer_manager->CreateXFBSource(target_width, target_height); + vxfb->xfbSource = g_framebuffer_manager->CreateXFBSource(target_width, target_height, m_EFBLayers); vxfb->xfbSource->texWidth = target_width; vxfb->xfbSource->texHeight = target_height; } -- cgit v1.2.3 From 4a86234a79f2ad2f72d17bb622669710aa1a37e8 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Sat, 20 Dec 2014 18:20:49 +0100 Subject: D3D: Support stereoscopic XFB blit to screen. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index b11bb97b6b..83ad3a1ca4 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -66,7 +66,6 @@ const XFBSourceBase* const* FramebufferManagerBase::GetRealXFBSource(u32 xfbAddr m_realXFBSource->texWidth = fbWidth; m_realXFBSource->texHeight = fbHeight; - // TODO: stuff only used by OGL... :/ // OpenGL texture coordinates originate at the lower left, which is why // sourceRc.top = fbHeight and sourceRc.bottom = 0. m_realXFBSource->sourceRc.left = 0; -- cgit v1.2.3 From 46bb4fd364ccd5e13c2cb13f1d8356526948337e Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Thu, 25 Dec 2014 00:58:16 +0100 Subject: FramebufferManagerBase: Remove obsolete parameters. --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index 83ad3a1ca4..178a157f9a 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -146,7 +146,7 @@ void FramebufferManagerBase::CopyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHe m_virtualXFBList.splice(m_virtualXFBList.begin(), m_virtualXFBList, vxfb); unsigned int target_width, target_height; - g_framebuffer_manager->GetTargetSize(&target_width, &target_height, sourceRc); + g_framebuffer_manager->GetTargetSize(&target_width, &target_height); // recreate if needed if (vxfb->xfbSource && (vxfb->xfbSource->texWidth != target_width || vxfb->xfbSource->texHeight != target_height)) @@ -233,7 +233,7 @@ void FramebufferManagerBase::ReplaceVirtualXFB() } } -int FramebufferManagerBase::ScaleToVirtualXfbWidth(int x, unsigned int backbuffer_width) +int FramebufferManagerBase::ScaleToVirtualXfbWidth(int x) { if (g_ActiveConfig.RealXFBEnabled()) return x; @@ -241,7 +241,7 @@ int FramebufferManagerBase::ScaleToVirtualXfbWidth(int x, unsigned int backbuffe return x * (int)Renderer::GetTargetRectangle().GetWidth() / (int)FramebufferManagerBase::LastXfbWidth(); } -int FramebufferManagerBase::ScaleToVirtualXfbHeight(int y, unsigned int backbuffer_height) +int FramebufferManagerBase::ScaleToVirtualXfbHeight(int y) { if (g_ActiveConfig.RealXFBEnabled()) return y; -- cgit v1.2.3 From e07679114bf33e387c2d4094cac3174650def0e5 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 4 Feb 2015 10:36:42 -0500 Subject: Use emplace_* functions where in-place construction is preferable --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index 178a157f9a..f928fec979 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -128,9 +128,7 @@ void FramebufferManagerBase::CopyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHe if (m_virtualXFBList.size() < MAX_VIRTUAL_XFB) { // create a new Virtual XFB and place it at the front of the list - VirtualXFB v; - memset(&v, 0, sizeof v); - m_virtualXFBList.push_front(v); + m_virtualXFBList.emplace_front(); vxfb = m_virtualXFBList.begin(); } else -- cgit v1.2.3 From 268f52e05479dc8e0f2cbf550472ca8d4867cf22 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sun, 24 May 2015 06:32:32 +0200 Subject: Add missing license headers --- Source/Core/VideoCommon/FramebufferManagerBase.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp') diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp index f928fec979..10d1cfa414 100644 --- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp +++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp @@ -1,3 +1,7 @@ +// Copyright 2010 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + #include "VideoCommon/FramebufferManagerBase.h" #include "VideoCommon/RenderBase.h" -- cgit v1.2.3