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

Code rafactor to fix compilation errors with mupen64plus build.

This commit is contained in:
Sergey Lipskiy 2016-02-27 11:58:56 +06:00
parent c4b0e9999e
commit f06b2d823a
13 changed files with 144 additions and 127 deletions

View File

@ -63,11 +63,6 @@ EXPORT void CALL FBWrite(unsigned int addr, unsigned int size)
api().FBWrite(addr, size);
}
EXPORT void CALL FBWList(FrameBufferModifyEntry *plist, unsigned int size)
{
api().FBWList(plist, size);
}
EXPORT void CALL FBRead(unsigned int addr)
{
api().FBRead(addr);
@ -78,4 +73,10 @@ EXPORT void CALL FBGetFrameBufferInfo(void *pinfo)
api().FBGetFrameBufferInfo(pinfo);
}
#ifndef MUPENPLUSAPI
EXPORT void CALL FBWList(FrameBufferModifyEntry *plist, unsigned int size)
{
api().FBWList(plist, size);
}
#endif
}

View File

@ -650,15 +650,17 @@ void FrameBufferList::removeBuffers(u32 _width)
}
}
void FrameBufferList::fillBufferInfo(FrameBufferInfo * _pinfo, u32 _size)
void FrameBufferList::fillBufferInfo(void * _pinfo, u32 _size)
{
FBInfo::FrameBufferInfo* pInfo = reinterpret_cast<FBInfo::FrameBufferInfo*>(_pinfo);
u32 idx = 0;
for (FrameBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter) {
if (iter->m_width == VI.width && !iter->m_cfb && !iter->m_isDepthBuffer) {
_pinfo[idx].addr = iter->m_startAddress;
_pinfo[idx].width = iter->m_width;
_pinfo[idx].height = iter->m_height;
_pinfo[idx++].size = iter->m_size;
pInfo[idx].addr = iter->m_startAddress;
pInfo[idx].width = iter->m_width;
pInfo[idx].height = iter->m_height;
pInfo[idx++].size = iter->m_size;
if (idx >= _size)
return;
}
@ -1641,7 +1643,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM(u32 _address, bool _bCFB)
Cleaner cleaner(this);
if (m_pCurBuffer == nullptr) {
if (_bCFB || (config.frameBufferEmulation.copyFromRDRAM != 0 && !fbInfo.isSupported()))
if (_bCFB || (config.frameBufferEmulation.copyFromRDRAM != 0 && !FBInfo::fbInfo.isSupported()))
m_pCurBuffer = frameBufferList().findBuffer(_address);
} else if (m_vecAddress.empty())
return;

View File

@ -10,7 +10,6 @@ struct gDPTile;
struct DepthBuffer;
const int fingerprint[4] = { 2, 6, 4, 3 };
struct FrameBufferInfo;
struct FrameBuffer
{
@ -77,7 +76,7 @@ public:
FrameBuffer * getCopyBuffer() const { return m_pCopy; }
void setCopyBuffer(FrameBuffer * _pBuffer) { m_pCopy = _pBuffer; }
void fillBufferInfo(FrameBufferInfo * _pinfo, u32 _size);
void fillBufferInfo(void * _pinfo, u32 _size);
static FrameBufferList & get();

View File

@ -8,77 +8,81 @@
#include "VI.h"
#include "Log.h"
FBInfo fbInfo;
namespace FBInfo {
void FBInfo::reset() {
m_supported = false;
m_pWriteBuffer = m_pReadBuffer = nullptr;
}
FBInfo fbInfo;
void FBInfo::Write(u32 addr, u32 size)
{
// TODO: remove debug print
//debugPrint("FBWrite addr=%08lx size=%u\n", addr, size);
void FBInfo::reset() {
m_supported = false;
m_pWriteBuffer = m_pReadBuffer = nullptr;
}
const u32 address = RSP_SegmentToPhysical(addr);
if (m_pWriteBuffer == nullptr)
void FBInfo::Write(u32 addr, u32 size)
{
// TODO: remove debug print
//debugPrint("FBWrite addr=%08lx size=%u\n", addr, size);
const u32 address = RSP_SegmentToPhysical(addr);
if (m_pWriteBuffer == nullptr)
m_pWriteBuffer = frameBufferList().findBuffer(address);
FrameBuffer_AddAddress(address, size);
}
void FBInfo::WriteList(FrameBufferModifyEntry *plist, u32 size)
{
debugPrint("FBWList size=%u\n", size);
for (u32 i = 0; i < size; ++i)
debugPrint(" plist[%u] addr=%08lx val=%08lx size=%u\n", i, plist[i].addr, plist[i].val, plist[i].size);
const u32 address = RSP_SegmentToPhysical(plist[0].addr);
m_pWriteBuffer = frameBufferList().findBuffer(address);
FrameBuffer_AddAddress(address, size);
}
void FBInfo::WriteList(FrameBufferModifyEntry *plist, u32 size)
{
debugPrint("FBWList size=%u\n", size);
for (u32 i = 0; i < size; ++i)
debugPrint(" plist[%u] addr=%08lx val=%08lx size=%u\n", i, plist[i].addr, plist[i].val, plist[i].size);
const u32 address = RSP_SegmentToPhysical(plist[0].addr);
m_pWriteBuffer = frameBufferList().findBuffer(address);
}
void FBInfo::Read(u32 addr)
{
// TODO: remove debug print
//debugPrint("FBRead addr=%08lx \n", addr);
const u32 address = RSP_SegmentToPhysical(addr);
FrameBuffer * pBuffer = frameBufferList().findBuffer(address);
if (pBuffer == nullptr || pBuffer == m_pWriteBuffer)
return;
if (pBuffer->m_isDepthBuffer) {
if (config.frameBufferEmulation.fbInfoReadDepthChunk != 0)
FrameBuffer_CopyDepthBufferChunk(address);
else if (pBuffer != m_pReadBuffer)
FrameBuffer_CopyDepthBuffer(address);
} else {
if (config.frameBufferEmulation.fbInfoReadColorChunk != 0)
FrameBuffer_CopyChunkToRDRAM(address);
else if (pBuffer != m_pReadBuffer)
FrameBuffer_CopyToRDRAM(address, true);
}
m_pReadBuffer = pBuffer;
}
void FBInfo::Read(u32 addr)
{
// TODO: remove debug print
//debugPrint("FBRead addr=%08lx \n", addr);
void FBInfo::GetInfo(void *pinfo)
{
// debugPrint("FBGetInfo\n");
FrameBufferInfo * pFBInfo = (FrameBufferInfo*)pinfo;
memset(pFBInfo, 0, sizeof(FrameBufferInfo)* 6);
const u32 address = RSP_SegmentToPhysical(addr);
FrameBuffer * pBuffer = frameBufferList().findBuffer(address);
if (pBuffer == nullptr || pBuffer == m_pWriteBuffer)
return;
if (config.frameBufferEmulation.fbInfoDisabled != 0)
return;
if (pBuffer->m_isDepthBuffer) {
if (config.frameBufferEmulation.fbInfoReadDepthChunk != 0)
FrameBuffer_CopyDepthBufferChunk(address);
else if (pBuffer != m_pReadBuffer)
FrameBuffer_CopyDepthBuffer(address);
}
else {
if (config.frameBufferEmulation.fbInfoReadColorChunk != 0)
FrameBuffer_CopyChunkToRDRAM(address);
else if (pBuffer != m_pReadBuffer)
FrameBuffer_CopyToRDRAM(address, true);
}
u32 idx = 0;
DepthBuffer * pDepthBuffer = depthBufferList().getCurrent();
if (pDepthBuffer != nullptr) {
pFBInfo[idx].addr = pDepthBuffer->m_address;
pFBInfo[idx].width = pDepthBuffer->m_width;
pFBInfo[idx].height = VI.real_height;
pFBInfo[idx++].size = 2;
m_pReadBuffer = pBuffer;
}
frameBufferList().fillBufferInfo(&pFBInfo[idx], 6 - idx);
m_pWriteBuffer = m_pReadBuffer = nullptr;
m_supported = true;
}
void FBInfo::GetInfo(void *pinfo)
{
// debugPrint("FBGetInfo\n");
FrameBufferInfo * pFBInfo = (FrameBufferInfo*)pinfo;
memset(pFBInfo, 0, sizeof(FrameBufferInfo)* 6);
if (config.frameBufferEmulation.fbInfoDisabled != 0)
return;
u32 idx = 0;
DepthBuffer * pDepthBuffer = depthBufferList().getCurrent();
if (pDepthBuffer != nullptr) {
pFBInfo[idx].addr = pDepthBuffer->m_address;
pFBInfo[idx].width = pDepthBuffer->m_width;
pFBInfo[idx].height = VI.real_height;
pFBInfo[idx++].size = 2;
}
frameBufferList().fillBufferInfo(&pFBInfo[idx], 6 - idx);
m_pWriteBuffer = m_pReadBuffer = nullptr;
m_supported = true;
}
}

View File

@ -10,35 +10,46 @@
#include "Types.h"
#include "PluginAPI.h"
struct FrameBufferInfo
{
unsigned int addr;
unsigned int size;
unsigned int width;
unsigned int height;
};
struct FrameBuffer;
class FBInfo {
public:
void Write(u32 addr, u32 size);
void WriteList(FrameBufferModifyEntry *plist, u32 size);
namespace FBInfo {
void Read(u32 addr);
struct FrameBufferInfo
{
unsigned int addr;
unsigned int size;
unsigned int width;
unsigned int height;
};
void GetInfo(void *pinfo);
struct FrameBufferModifyEntry
{
unsigned int addr;
unsigned int val;
unsigned int size;
};
bool isSupported() const { return m_supported; }
class FBInfo {
public:
void Write(u32 addr, u32 size);
void reset();
void WriteList(FrameBufferModifyEntry *plist, u32 size);
private:
const FrameBuffer * m_pWriteBuffer;
const FrameBuffer * m_pReadBuffer;
bool m_supported;
};
void Read(u32 addr);
extern FBInfo fbInfo;
void GetInfo(void *pinfo);
bool isSupported() const { return m_supported; }
void reset();
private:
const FrameBuffer * m_pWriteBuffer;
const FrameBuffer * m_pReadBuffer;
bool m_supported;
};
extern FBInfo fbInfo;
}
#endif // _FRAME_BUFFER_INFO_H_

View File

@ -23,12 +23,7 @@ extern "C" {
*******************************************************************/
EXPORT void CALL FBWrite(unsigned int addr, unsigned int size);
typedef struct
{
unsigned int addr;
unsigned int val;
unsigned int size;
} FrameBufferModifyEntry;
struct FrameBufferModifyEntry;
/******************************************************************
Function: FrameBufferWriteList

View File

@ -1399,7 +1399,7 @@ void OGLRender::_initData()
TextDrawer::get().init();
TFH.init();
PostProcessor::get().init();
fbInfo.reset();
FBInfo::fbInfo.reset();
m_renderState = rsNone;
gSP.changed = gDP.changed = 0xFFFFFFFF;

View File

@ -8,9 +8,9 @@
#include "m64p_plugin.h"
#else
#include "ZilmarGFX_1_3.h"
#include "FrameBufferInfoAPI.h"
#define RSPTHREAD
#endif
#include "FrameBufferInfoAPI.h"
class APICommand;
@ -43,12 +43,6 @@ public:
void GetUserDataPath(wchar_t * _strPath);
void GetUserCachePath(wchar_t * _strPath);
// FrameBufferInfo extension
void FBWrite(unsigned int addr, unsigned int size);
void FBWList(FrameBufferModifyEntry *plist, unsigned int size);
void FBRead(unsigned int addr);
void FBGetFrameBufferInfo(void *pinfo);
#ifndef MUPENPLUSAPI
// Zilmar
void DllTest(HWND /*_hParent*/) {}
@ -61,6 +55,12 @@ public:
void ReadScreen(void **_dest, long *_width, long *_height);
void DllAbout(/*HWND _hParent*/);
// FrameBufferInfo extension
void FBWrite(unsigned int addr, unsigned int size);
void FBWList(FrameBufferModifyEntry *plist, unsigned int size);
void FBRead(unsigned int addr);
void FBGetFrameBufferInfo(void *pinfo);
#else
// MupenPlus
void ResizeVideoOutput(int _Width, int _Height);
@ -76,6 +76,11 @@ public:
int * _Capabilities
);
void SetRenderingCallback(void (*callback)(int));
// FrameBufferInfo extension
void FBWrite(unsigned int addr, unsigned int size);
void FBRead(unsigned int addr);
void FBGetFrameBufferInfo(void *pinfo);
#endif
static PluginAPI & get();

View File

@ -210,7 +210,7 @@ void RSP_ProcessDList()
}
}
if (config.frameBufferEmulation.copyDepthToRDRAM != Config::ctDisable && !fbInfo.isSupported())
if (config.frameBufferEmulation.copyDepthToRDRAM != Config::ctDisable && !FBInfo::fbInfo.isSupported())
FrameBuffer_CopyDepthBuffer(gDP.colorImage.address);
RSP.busy = FALSE;

View File

@ -112,7 +112,7 @@ void VI_UpdateScreen()
FrameBuffer * pBuffer = frameBufferList().findBuffer(*REG.VI_ORIGIN);
if (pBuffer == NULL)
gDP.changed |= CHANGED_CPU_FB_WRITE;
else if (!fbInfo.isSupported() && !pBuffer->isValid()) {
else if (!FBInfo::fbInfo.isSupported() && !pBuffer->isValid()) {
gDP.changed |= CHANGED_CPU_FB_WRITE;
if (config.frameBufferEmulation.copyToRDRAM == 0)
pBuffer->copyRdram();

View File

@ -92,7 +92,7 @@ public:
}
bool run() {
fbInfo.Read(m_addr);
FBInfo::fbInfo.Read(m_addr);
return true;
}
private:
@ -250,12 +250,7 @@ void PluginAPI::ChangeWindow()
void PluginAPI::FBWrite(unsigned int _addr, unsigned int _size)
{
fbInfo.Write(_addr, _size);
}
void PluginAPI::FBWList(FrameBufferModifyEntry * _plist, unsigned int _size)
{
fbInfo.WriteList(_plist, _size);
FBInfo::fbInfo.Write(_addr, _size);
}
void PluginAPI::FBRead(unsigned int _addr)
@ -263,11 +258,18 @@ void PluginAPI::FBRead(unsigned int _addr)
#ifdef RSPTHREAD
_callAPICommand(FBReadCommand(_addr));
#else
fbInfo.Read(_addr);
FBInfo::fbInfo.Read(_addr);
#endif
}
void PluginAPI::FBGetFrameBufferInfo(void * _pinfo)
{
fbInfo.GetInfo(_pinfo);
FBInfo::fbInfo.GetInfo(_pinfo);
}
#ifndef MUPENPLUSAPI
void PluginAPI::FBWList(FrameBufferModifyEntry * _plist, unsigned int _size)
{
FBInfo::fbInfo.WriteList(reinterpret_cast<FBInfo::FrameBufferModifyEntry*>(_plist), _size);
}
#endif

View File

@ -884,11 +884,11 @@ void gDPFullSync()
}
const bool sync = config.frameBufferEmulation.copyToRDRAM == Config::ctSync;
if (config.frameBufferEmulation.copyToRDRAM != Config::ctDisable && !fbInfo.isSupported())
if (config.frameBufferEmulation.copyToRDRAM != Config::ctDisable && !FBInfo::fbInfo.isSupported())
FrameBuffer_CopyToRDRAM(gDP.colorImage.address, sync);
if (RSP.bLLE) {
if (config.frameBufferEmulation.copyDepthToRDRAM != Config::ctDisable && !fbInfo.isSupported())
if (config.frameBufferEmulation.copyDepthToRDRAM != Config::ctDisable && !FBInfo::fbInfo.isSupported())
FrameBuffer_CopyDepthBuffer(gDP.colorImage.address);
}

View File

@ -196,7 +196,6 @@ EXPORT void CALL ResizeVideoOutput(int width, int height);
#endif
/* frame buffer plugin spec extension */
#if 0 // The extension is moved to separate header.
typedef struct
{
unsigned int addr;
@ -212,7 +211,6 @@ EXPORT void CALL FBRead(unsigned int addr);
EXPORT void CALL FBWrite(unsigned int addr, unsigned int size);
EXPORT void CALL FBGetFrameBufferInfo(void *p);
#endif
#endif // 0
/* audio plugin function pointers */
typedef void (*ptr_AiDacrateChanged)(int SystemType);