DX11: If the virtual XFB list overflows, replace the oldest XFB with a new one instead of just failing.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6305 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
7410056536
commit
91186d2b8a
|
@ -181,8 +181,8 @@ void FramebufferManager::copyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight
|
||||||
|
|
||||||
if (it == m_virtualXFBList.end() && (int)m_virtualXFBList.size() >= MAX_VIRTUAL_XFB)
|
if (it == m_virtualXFBList.end() && (int)m_virtualXFBList.size() >= MAX_VIRTUAL_XFB)
|
||||||
{
|
{
|
||||||
PanicAlert("Requested creating a new virtual XFB although the maximum number has already been reached! Report this to the devs");
|
// Replace the last virtual XFB (might cause glitches, but better than allocating 50 XFBs...)
|
||||||
return;
|
--it;
|
||||||
}
|
}
|
||||||
|
|
||||||
float scaleX = Renderer::GetTargetScaleX();
|
float scaleX = Renderer::GetTargetScaleX();
|
||||||
|
@ -243,12 +243,10 @@ void FramebufferManager::copyToVirtualXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight
|
||||||
// Add the new Virtual XFB to the list
|
// Add the new Virtual XFB to the list
|
||||||
if (m_virtualXFBList.size() >= MAX_VIRTUAL_XFB)
|
if (m_virtualXFBList.size() >= MAX_VIRTUAL_XFB)
|
||||||
{
|
{
|
||||||
PanicAlert("Requested creating a new virtual XFB although the maximum number has already been reached! Report this to the devs");
|
// List overflowed; delete the oldest.
|
||||||
SAFE_RELEASE(newVirt.xfbSource.tex);
|
m_virtualXFBList.back().xfbSource.tex->Release();
|
||||||
return;
|
m_virtualXFBList.pop_back();
|
||||||
// TODO, possible alternative to failing: just delete the oldest virtual XFB:
|
WARN_LOG(VIDEO, "Virtual XFB list overflown, releasing oldest virtual XFB");
|
||||||
// m_virtualXFBList.back().xfbSource.tex->Release();
|
|
||||||
// m_virtualXFBList.pop_back();
|
|
||||||
}
|
}
|
||||||
m_virtualXFBList.push_front(newVirt);
|
m_virtualXFBList.push_front(newVirt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,15 +61,7 @@ inline bool addrRangesOverlap(u32 aLower, u32 aUpper, u32 bLower, u32 bUpper)
|
||||||
|
|
||||||
struct XFBSource
|
struct XFBSource
|
||||||
{
|
{
|
||||||
XFBSource()
|
XFBSource() : srcAddr(0), srcWidth(0), srcHeight(0), tex(NULL), texWidth(0), texHeight(0) {}
|
||||||
{
|
|
||||||
this->srcAddr = 0;
|
|
||||||
this->srcWidth = 0;
|
|
||||||
this->srcHeight = 0;
|
|
||||||
this->tex = NULL;
|
|
||||||
this->texWidth = 0;
|
|
||||||
this->texHeight = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
u32 srcAddr;
|
u32 srcAddr;
|
||||||
u32 srcWidth;
|
u32 srcWidth;
|
||||||
|
|
Loading…
Reference in New Issue