mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +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:
parent
ce7526eaf5
commit
dca42610a8
|
@ -1634,11 +1634,9 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM(u32 _address, bool _bCFB)
|
||||||
Cleaner cleaner(this);
|
Cleaner cleaner(this);
|
||||||
|
|
||||||
if (m_pCurBuffer == nullptr) {
|
if (m_pCurBuffer == nullptr) {
|
||||||
if (!_bCFB && config.frameBufferEmulation.copyFromRDRAM == 0)
|
if (_bCFB || (config.frameBufferEmulation.copyFromRDRAM != 0 && !fbInfo.isSupported()))
|
||||||
return;
|
|
||||||
m_pCurBuffer = frameBufferList().findBuffer(_address);
|
m_pCurBuffer = frameBufferList().findBuffer(_address);
|
||||||
}
|
} else if (m_vecAddress.empty())
|
||||||
else if (m_vecAddress.empty())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_pCurBuffer == nullptr || m_pCurBuffer->m_size < G_IM_SIZ_16b)
|
if (m_pCurBuffer == nullptr || m_pCurBuffer->m_size < G_IM_SIZ_16b)
|
||||||
|
|
|
@ -10,6 +10,11 @@
|
||||||
|
|
||||||
FBInfo fbInfo;
|
FBInfo fbInfo;
|
||||||
|
|
||||||
|
void FBInfo::reset() {
|
||||||
|
m_supported = false;
|
||||||
|
m_pWriteBuffer = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void FBInfo::Write(u32 addr, u32 size)
|
void FBInfo::Write(u32 addr, u32 size)
|
||||||
{
|
{
|
||||||
// TODO: remove debug print
|
// TODO: remove debug print
|
||||||
|
@ -62,4 +67,5 @@ void FBInfo::GetInfo(void *pinfo)
|
||||||
frameBufferList().fillBufferInfo(&pFBInfo[idx], 6 - idx);
|
frameBufferList().fillBufferInfo(&pFBInfo[idx], 6 - idx);
|
||||||
|
|
||||||
m_pWriteBuffer = nullptr;
|
m_pWriteBuffer = nullptr;
|
||||||
|
m_supported = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,13 @@ public:
|
||||||
|
|
||||||
void GetInfo(void *pinfo);
|
void GetInfo(void *pinfo);
|
||||||
|
|
||||||
|
bool isSupported() const { return m_supported; }
|
||||||
|
|
||||||
|
void reset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const FrameBuffer * m_pWriteBuffer;
|
const FrameBuffer * m_pWriteBuffer;
|
||||||
|
bool m_supported;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern FBInfo fbInfo;
|
extern FBInfo fbInfo;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "GLSLCombiner.h"
|
#include "GLSLCombiner.h"
|
||||||
#include "FrameBuffer.h"
|
#include "FrameBuffer.h"
|
||||||
#include "DepthBuffer.h"
|
#include "DepthBuffer.h"
|
||||||
|
#include "FrameBufferInfo.h"
|
||||||
#include "GLideNHQ/Ext_TxFilter.h"
|
#include "GLideNHQ/Ext_TxFilter.h"
|
||||||
#include "VI.h"
|
#include "VI.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
@ -1395,6 +1396,7 @@ void OGLRender::_initData()
|
||||||
TextDrawer::get().init();
|
TextDrawer::get().init();
|
||||||
TFH.init();
|
TFH.init();
|
||||||
PostProcessor::get().init();
|
PostProcessor::get().init();
|
||||||
|
fbInfo.reset();
|
||||||
m_renderState = rsNone;
|
m_renderState = rsNone;
|
||||||
|
|
||||||
gSP.changed = gDP.changed = 0xFFFFFFFF;
|
gSP.changed = gDP.changed = 0xFFFFFFFF;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "RSP.h"
|
#include "RSP.h"
|
||||||
#include "FrameBuffer.h"
|
#include "FrameBuffer.h"
|
||||||
#include "DepthBuffer.h"
|
#include "DepthBuffer.h"
|
||||||
|
#include "FrameBufferInfo.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
|
@ -111,7 +112,7 @@ void VI_UpdateScreen()
|
||||||
FrameBuffer * pBuffer = frameBufferList().findBuffer(*REG.VI_ORIGIN);
|
FrameBuffer * pBuffer = frameBufferList().findBuffer(*REG.VI_ORIGIN);
|
||||||
if (pBuffer == NULL)
|
if (pBuffer == NULL)
|
||||||
gDP.changed |= CHANGED_CPU_FB_WRITE;
|
gDP.changed |= CHANGED_CPU_FB_WRITE;
|
||||||
else if (!pBuffer->isValid()) {
|
else if (!fbInfo.isSupported() && !pBuffer->isValid()) {
|
||||||
gDP.changed |= CHANGED_CPU_FB_WRITE;
|
gDP.changed |= CHANGED_CPU_FB_WRITE;
|
||||||
if (config.frameBufferEmulation.copyToRDRAM == 0)
|
if (config.frameBufferEmulation.copyToRDRAM == 0)
|
||||||
pBuffer->copyRdram();
|
pBuffer->copyRdram();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user