1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Add FBInfo::isSupported() to know that emulator provides FBInfo support.

Correct frame buffer write detection hack (idea by purplemarshmallow).
This commit is contained in:
Sergey Lipskiy 2016-02-03 22:29:28 +06:00
parent ce7526eaf5
commit dca42610a8
5 changed files with 18 additions and 6 deletions

View File

@ -1634,11 +1634,9 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM(u32 _address, bool _bCFB)
Cleaner cleaner(this);
if (m_pCurBuffer == nullptr) {
if (!_bCFB && config.frameBufferEmulation.copyFromRDRAM == 0)
return;
m_pCurBuffer = frameBufferList().findBuffer(_address);
}
else if (m_vecAddress.empty())
if (_bCFB || (config.frameBufferEmulation.copyFromRDRAM != 0 && !fbInfo.isSupported()))
m_pCurBuffer = frameBufferList().findBuffer(_address);
} else if (m_vecAddress.empty())
return;
if (m_pCurBuffer == nullptr || m_pCurBuffer->m_size < G_IM_SIZ_16b)

View File

@ -10,6 +10,11 @@
FBInfo fbInfo;
void FBInfo::reset() {
m_supported = false;
m_pWriteBuffer = nullptr;
}
void FBInfo::Write(u32 addr, u32 size)
{
// TODO: remove debug print
@ -62,4 +67,5 @@ void FBInfo::GetInfo(void *pinfo)
frameBufferList().fillBufferInfo(&pFBInfo[idx], 6 - idx);
m_pWriteBuffer = nullptr;
m_supported = true;
}

View File

@ -29,8 +29,13 @@ public:
void GetInfo(void *pinfo);
bool isSupported() const { return m_supported; }
void reset();
private:
const FrameBuffer * m_pWriteBuffer;
bool m_supported;
};
extern FBInfo fbInfo;

View File

@ -17,6 +17,7 @@
#include "GLSLCombiner.h"
#include "FrameBuffer.h"
#include "DepthBuffer.h"
#include "FrameBufferInfo.h"
#include "GLideNHQ/Ext_TxFilter.h"
#include "VI.h"
#include "Config.h"
@ -1395,6 +1396,7 @@ void OGLRender::_initData()
TextDrawer::get().init();
TFH.init();
PostProcessor::get().init();
fbInfo.reset();
m_renderState = rsNone;
gSP.changed = gDP.changed = 0xFFFFFFFF;

View File

@ -9,6 +9,7 @@
#include "RSP.h"
#include "FrameBuffer.h"
#include "DepthBuffer.h"
#include "FrameBufferInfo.h"
#include "Config.h"
#include "Debug.h"
@ -111,7 +112,7 @@ void VI_UpdateScreen()
FrameBuffer * pBuffer = frameBufferList().findBuffer(*REG.VI_ORIGIN);
if (pBuffer == NULL)
gDP.changed |= CHANGED_CPU_FB_WRITE;
else if (!pBuffer->isValid()) {
else if (!fbInfo.isSupported() && !pBuffer->isValid()) {
gDP.changed |= CHANGED_CPU_FB_WRITE;
if (config.frameBufferEmulation.copyToRDRAM == 0)
pBuffer->copyRdram();