GSdx: reworked the gs transfer function a bit, and removed the nloop hack, which does not seem to be necessary anymore.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@997 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
gabest11 2009-04-17 01:06:27 +00:00
parent 0bf914833f
commit 8865ee398b
17 changed files with 173 additions and 208 deletions

View File

@ -106,10 +106,6 @@ static INT32 GSopen(void* dsp, char* title, int mt, int renderer)
GSclose();
// TODO
int nloophack = AfxGetApp()->GetProfileInt(_T("Settings"), _T("nloophack"), 2);
GSRendererSettings rs;
rs.m_interlace = AfxGetApp()->GetProfileInt(_T("Settings"), _T("interlace"), 0);
@ -125,14 +121,14 @@ static INT32 GSopen(void* dsp, char* title, int mt, int renderer)
switch(renderer)
{
default:
case 0: s_gs = new GSRendererHW9(s_basemem, !!mt, s_irq, nloophack, rs); break;
case 1: s_gs = new GSRendererSW<GSDevice9>(s_basemem, !!mt, s_irq, nloophack, rs, threads); break;
case 2: s_gs = new GSRendererNull<GSDevice9>(s_basemem, !!mt, s_irq, nloophack, rs); break;
case 3: s_gs = new GSRendererHW10(s_basemem, !!mt, s_irq, nloophack, rs); break;
case 4: s_gs = new GSRendererSW<GSDevice10>(s_basemem, !!mt, s_irq, nloophack, rs, threads); break;
case 5: s_gs = new GSRendererNull<GSDevice10>(s_basemem, !!mt, s_irq, nloophack, rs); break;
case 6: s_gs = new GSRendererSW<GSDeviceNull>(s_basemem, !!mt, s_irq, nloophack, rs, threads); break;
case 7: s_gs = new GSRendererNull<GSDeviceNull>(s_basemem, !!mt, s_irq, nloophack, rs); break;
case 0: s_gs = new GSRendererHW9(s_basemem, !!mt, s_irq, rs); break;
case 1: s_gs = new GSRendererSW<GSDevice9>(s_basemem, !!mt, s_irq, rs, threads); break;
case 2: s_gs = new GSRendererNull<GSDevice9>(s_basemem, !!mt, s_irq, rs); break;
case 3: s_gs = new GSRendererHW10(s_basemem, !!mt, s_irq, rs); break;
case 4: s_gs = new GSRendererSW<GSDevice10>(s_basemem, !!mt, s_irq, rs, threads); break;
case 5: s_gs = new GSRendererNull<GSDevice10>(s_basemem, !!mt, s_irq, rs); break;
case 6: s_gs = new GSRendererSW<GSDeviceNull>(s_basemem, !!mt, s_irq, rs, threads); break;
case 7: s_gs = new GSRendererNull<GSDeviceNull>(s_basemem, !!mt, s_irq, rs); break;
}
s_hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);

View File

@ -24,107 +24,107 @@
CRC::Game CRC::m_games[] =
{
{0x00000000, None, Unknown, false},
{0x2113EA2E, MetalSlug6, Unknown, false},
{0x42E05BAF, TomoyoAfter, JP, false},
{0x7800DC84, Clannad, JP, false},
{0xa39517ab, FFX, EU, true},
{0xa39517ae, FFX, FR, true},
{0x941bb7d9, FFX, DE, true},
{0xa39517a9, FFX, IT, true},
{0x941bb7de, FFX, ES, true},
{0xb4414ea1, FFX, RU, true},
{0xee97db5b, FFX, RU, true},
{0xaec495cc, FFX, RU, true},
{0xbb3d833a, FFX, US, true},
{0x6a4efe60, FFX, JP, true},
{0x3866ca7e, FFX, ASIA, true}, // int.
{0x658597e2, FFX, JP, true}, // int.
{0x9aac5309, FFX2, EU, true},
{0x9aac530c, FFX2, FR, true},
{0x9aac530a, FFX2, FR, true}, // ?
{0x9aac530d, FFX2, DE, true},
{0x9aac530b, FFX2, IT, true},
{0x48fe0c71, FFX2, US, true},
{0xe1fd9a2d, FFX2, JP, true}, // int.
{0x78da0252, FFXII, EU, false},
{0xc1274668, FFXII, EU, false},
{0xdc2a467e, FFXII, EU, false},
{0xca284668, FFXII, EU, false},
{0x280AD120, FFXII, JP, false},
{0x8BE3D7B2, ShadowHearts, Unknown, false},
{0xDEFA4763, ShadowHearts, US, false},
{0x21068223, Okami, US, false},
{0x891f223f, Okami, FR, false},
{0xC5DEFEA0, Okami, JP, false},
{0x053D2239, MetalGearSolid3, US, false},
{0x086273D2, MetalGearSolid3, FR, false},
{0x26A6E286, MetalGearSolid3, EU, false},
{0xAA31B5BF, MetalGearSolid3, Unknown, false},
{0x9F185CE1, MetalGearSolid3, Unknown, false},
{0x98D4BC93, MetalGearSolid3, EU, false},
{0x86BC3040, MetalGearSolid3, US, false}, //Subsistance disc 1
{0x0481AD8A, MetalGearSolid3, JP, false},
{0x79ED26AD, MetalGearSolid3, EU, false},
{0x5E31EA42, MetalGearSolid3, EU, false},
{0x278722BF, DBZBT2, US, false},
{0xFE961D28, DBZBT2, US, false},
{0x0393B6BE, DBZBT2, EU, false},
{0xE2F289ED, DBZBT2, JP, false}, // Sparking Neo!
{0x35AA84D1, DBZBT2, Unknown, false},
{0x428113C2, DBZBT3, US, false},
{0xA422BB13, DBZBT3, EU, false},
{0x983c53d2, DBZBT3, Unknown, false},
{0x72B3802A, SFEX3, US, false},
{0x71521863, SFEX3, US, false},
{0x28703748, Bully, US, false},
{0xC78A495D, BullyCC, US, false},
{0xC19A374E, SoTC, US, false},
{0x7D8F539A, SoTC, EU, false},
{0x3122B508, OnePieceGrandAdventure, US, false},
{0x6F8545DB, ICO, US, false},
{0xB01A4C95, ICO, JP, false},
{0x5C991F4E, ICO, Unknown, false},
{0xAEAD1CA3, GT4, JP, false},
{0x44A61C8F, GT4, Unknown, false},
{0x0086E35B, GT4, Unknown, false},
{0x77E61C8A, GT4, Unknown, false},
{0xC164550A, WildArms5, JPUNDUB, false},
{0xC1640D2C, WildArms5, US, false},
{0x0FCF8FE4, WildArms5, EU, false},
{0x2294D322, WildArms5, JP, false},
{0x565B6170, WildArms5, JP, false},
{0x8B029334, Manhunt2, Unknown, false},
{0x09F49E37, CrashBandicootWoC, Unknown, false},
{0x013E349D, ResidentEvil4, US, false},
{0x6BA2F6B9, ResidentEvil4, Unknown, false},
{0x60FA8C69, ResidentEvil4, JP, false},
{0x72E1E60E, Spartan, Unknown, false},
{0x5ED8FB53, AceCombat4, JP, false},
{0x1B9B7563, AceCombat4, Unknown, false},
{0xEC432B24, Drakengard2, Unknown, false},
{0xFC46EA61, Tekken5, JP, false},
{0x1F88EE37, Tekken5, Unknown, false},
{0x652050D2, Tekken5, Unknown, false},
{0x9E98B8AE, IkkiTousen, JP, false},
{0xD6385328, GodOfWar, US, false},
{0xFB0E6D72, GodOfWar, EU, false},
{0xEB001875, GodOfWar, EU, false},
{0xA61A4C6D, GodOfWar, Unknown, false},
{0xE23D532B, GodOfWar, Unknown, false},
{0x2F123FD8, GodOfWar2, RU, false},
{0x2F123FD8, GodOfWar2, US, false},
{0x44A8A22A, GodOfWar2, EU, false},
{0x5D482F18, JackieChanAdv, Unknown, false},
{0xf0a6d880, HarvestMoon, US, true},
{0x75c01a04, NamcoXCapcom, US, false},
{0xBF6F101F, GiTS, US, false},
{0xA5768F53, GiTS, JP, false},
{0x6BF11378, Onimusha3, US, false},
{0xF442260C, MajokkoALaMode2, JP, false},
{0x14FE77F7, TalesOfAbyss, US, false},
{0x045D77E9, TalesOfAbyss, US, false}, // undub
{0xAA5EC3A3, TalesOfAbyss, JP, false},
{0x00000000, None, Unknown},
{0x2113EA2E, MetalSlug6, Unknown},
{0x42E05BAF, TomoyoAfter, JP},
{0x7800DC84, Clannad, JP},
{0xa39517ab, FFX, EU},
{0xa39517ae, FFX, FR},
{0x941bb7d9, FFX, DE},
{0xa39517a9, FFX, IT},
{0x941bb7de, FFX, ES},
{0xb4414ea1, FFX, RU},
{0xee97db5b, FFX, RU},
{0xaec495cc, FFX, RU},
{0xbb3d833a, FFX, US},
{0x6a4efe60, FFX, JP},
{0x3866ca7e, FFX, ASIA}, // int.
{0x658597e2, FFX, JP}, // int.
{0x9aac5309, FFX2, EU},
{0x9aac530c, FFX2, FR},
{0x9aac530a, FFX2, FR}, // ?
{0x9aac530d, FFX2, DE},
{0x9aac530b, FFX2, IT},
{0x48fe0c71, FFX2, US},
{0xe1fd9a2d, FFX2, JP}, // int.
{0x78da0252, FFXII, EU},
{0xc1274668, FFXII, EU},
{0xdc2a467e, FFXII, EU},
{0xca284668, FFXII, EU},
{0x280AD120, FFXII, JP},
{0x8BE3D7B2, ShadowHearts, Unknown},
{0xDEFA4763, ShadowHearts, US},
{0x21068223, Okami, US},
{0x891f223f, Okami, FR},
{0xC5DEFEA0, Okami, JP},
{0x053D2239, MetalGearSolid3, US},
{0x086273D2, MetalGearSolid3, FR},
{0x26A6E286, MetalGearSolid3, EU},
{0xAA31B5BF, MetalGearSolid3, Unknown},
{0x9F185CE1, MetalGearSolid3, Unknown},
{0x98D4BC93, MetalGearSolid3, EU},
{0x86BC3040, MetalGearSolid3, US}, //Subsistance disc 1
{0x0481AD8A, MetalGearSolid3, JP},
{0x79ED26AD, MetalGearSolid3, EU},
{0x5E31EA42, MetalGearSolid3, EU},
{0x278722BF, DBZBT2, US},
{0xFE961D28, DBZBT2, US},
{0x0393B6BE, DBZBT2, EU},
{0xE2F289ED, DBZBT2, JP}, // Sparking Neo!
{0x35AA84D1, DBZBT2, Unknown},
{0x428113C2, DBZBT3, US},
{0xA422BB13, DBZBT3, EU},
{0x983c53d2, DBZBT3, Unknown},
{0x72B3802A, SFEX3, US},
{0x71521863, SFEX3, US},
{0x28703748, Bully, US},
{0xC78A495D, BullyCC, US},
{0xC19A374E, SoTC, US},
{0x7D8F539A, SoTC, EU},
{0x3122B508, OnePieceGrandAdventure, US},
{0x6F8545DB, ICO, US},
{0xB01A4C95, ICO, JP},
{0x5C991F4E, ICO, Unknown},
{0xAEAD1CA3, GT4, JP},
{0x44A61C8F, GT4, Unknown},
{0x0086E35B, GT4, Unknown},
{0x77E61C8A, GT4, Unknown},
{0xC164550A, WildArms5, JPUNDUB},
{0xC1640D2C, WildArms5, US},
{0x0FCF8FE4, WildArms5, EU},
{0x2294D322, WildArms5, JP},
{0x565B6170, WildArms5, JP},
{0x8B029334, Manhunt2, Unknown},
{0x09F49E37, CrashBandicootWoC, Unknown},
{0x013E349D, ResidentEvil4, US},
{0x6BA2F6B9, ResidentEvil4, Unknown},
{0x60FA8C69, ResidentEvil4, JP},
{0x72E1E60E, Spartan, Unknown},
{0x5ED8FB53, AceCombat4, JP},
{0x1B9B7563, AceCombat4, Unknown},
{0xEC432B24, Drakengard2, Unknown},
{0xFC46EA61, Tekken5, JP},
{0x1F88EE37, Tekken5, Unknown},
{0x652050D2, Tekken5, Unknown},
{0x9E98B8AE, IkkiTousen, JP},
{0xD6385328, GodOfWar, US},
{0xFB0E6D72, GodOfWar, EU},
{0xEB001875, GodOfWar, EU},
{0xA61A4C6D, GodOfWar, Unknown},
{0xE23D532B, GodOfWar, Unknown},
{0x2F123FD8, GodOfWar2, RU},
{0x2F123FD8, GodOfWar2, US},
{0x44A8A22A, GodOfWar2, EU},
{0x5D482F18, JackieChanAdv, Unknown},
{0xf0a6d880, HarvestMoon, US},
{0x75c01a04, NamcoXCapcom, US},
{0xBF6F101F, GiTS, US},
{0xA5768F53, GiTS, JP},
{0x6BF11378, Onimusha3, US},
{0xF442260C, MajokkoALaMode2, JP},
{0x14FE77F7, TalesOfAbyss, US},
{0x045D77E9, TalesOfAbyss, US}, // undub
{0xAA5EC3A3, TalesOfAbyss, JP},
};
CAtlMap<DWORD, CRC::Game*> CRC::m_map;

View File

@ -86,7 +86,6 @@ public:
DWORD crc;
Title title;
Region region;
bool nloophack;
};
private:

View File

@ -266,10 +266,7 @@ bool GSDevice9::Reset(int w, int h, bool fs)
m_pp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
}
if(!!AfxGetApp()->GetProfileInt(_T("Settings"), _T("tvout"), FALSE))
{
m_pp.Flags |= D3DPRESENTFLAG_VIDEO;
}
m_pp.Flags |= D3DPRESENTFLAG_VIDEO; // enables tv-out (but I don't think anyone would still use a regular tv...)
int mw = AfxGetApp()->GetProfileInt(_T("Settings"), _T("ModeWidth"), 0);
int mh = AfxGetApp()->GetProfileInt(_T("Settings"), _T("ModeHeight"), 0);

View File

@ -95,8 +95,8 @@ public:
GSWnd m_wnd;
public:
GSRendererBase(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs)
: GSState(base, mt, irq, nloophack)
GSRendererBase(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs)
: GSState(base, mt, irq)
, m_osd(true)
{
m_interlace = rs.m_interlace;
@ -412,8 +412,8 @@ public:
GSCapture m_capture;
public:
GSRenderer(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs, bool psrr)
: GSRendererBase(base, mt, irq, nloophack, rs)
GSRenderer(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs, bool psrr)
: GSRendererBase(base, mt, irq, rs)
, m_psrr(psrr)
{
s_n = 0;
@ -687,8 +687,8 @@ protected:
virtual void Draw() = 0;
public:
GSRendererT(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs, bool psrr = true)
: GSRenderer<Device>(base, mt, irq, nloophack, rs, psrr)
GSRendererT(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs, bool psrr = true)
: GSRenderer<Device>(base, mt, irq, rs, psrr)
, m_count(0)
, m_maxcount(0)
, m_vertices(NULL)

View File

@ -631,8 +631,8 @@ protected:
}
public:
GSRendererHW(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs, bool psrr)
: GSRendererT<Device, Vertex>(base, mt, irq, nloophack, rs, psrr)
GSRendererHW(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs, bool psrr)
: GSRendererT<Device, Vertex>(base, mt, irq, rs, psrr)
, m_width(1024)
, m_height(1024)
, m_skip(0)

View File

@ -24,8 +24,8 @@
#include "GSCrc.h"
#include "resource.h"
GSRendererHW10::GSRendererHW10(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs)
: GSRendererHW<Device, Vertex, TextureCache>(base, mt, irq, nloophack, rs, true)
GSRendererHW10::GSRendererHW10(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs)
: GSRendererHW<Device, Vertex, TextureCache>(base, mt, irq, rs, true)
{
InitVertexKick<GSRendererHW10>();
}

View File

@ -48,7 +48,7 @@ protected:
void SetupDATE(Texture& rt, Texture& ds);
public:
GSRendererHW10(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs);
GSRendererHW10(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs);
bool Create(LPCTSTR title);

View File

@ -24,8 +24,8 @@
#include "GSCrc.h"
#include "resource.h"
GSRendererHW9::GSRendererHW9(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs)
: GSRendererHW<Device, Vertex, TextureCache>(base, mt, irq, nloophack, rs, false)
GSRendererHW9::GSRendererHW9(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs)
: GSRendererHW<Device, Vertex, TextureCache>(base, mt, irq, rs, false)
{
m_fba.enabled = !!AfxGetApp()->GetProfileInt(_T("Settings"), _T("fba"), TRUE);
m_logz = !!AfxGetApp()->GetProfileInt(_T("Settings"), _T("logz"), FALSE);

View File

@ -57,7 +57,7 @@ protected:
void UpdateFBA(Texture& rt);
public:
GSRendererHW9(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs);
GSRendererHW9(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs);
bool Create(LPCTSTR title);

View File

@ -37,8 +37,8 @@ protected:
}
public:
GSRendererNull(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs)
: GSRendererT<Device, GSVertexNull>(base, mt, irq, nloophack, rs)
GSRendererNull(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs)
: GSRendererT<Device, GSVertexNull>(base, mt, irq, rs)
{
InitVertexKick<GSRendererNull<Device> >();
}

View File

@ -717,8 +717,8 @@ protected:
}
public:
GSRendererSW(BYTE* base, bool mt, void (*irq)(), int nloophack, const GSRendererSettings& rs, int threads)
: GSRendererT(base, mt, irq, nloophack, rs)
GSRendererSW(BYTE* base, bool mt, void (*irq)(), const GSRendererSettings& rs, int threads)
: GSRendererT(base, mt, irq, rs)
{
m_rl.Create<GSDrawScanline>(this, threads);

View File

@ -68,9 +68,7 @@ GSSetting GSSettingsDlg::g_aspectratio[] =
IMPLEMENT_DYNAMIC(GSSettingsDlg, CDialog)
GSSettingsDlg::GSSettingsDlg(CWnd* pParent /*=NULL*/)
: CDialog(GSSettingsDlg::IDD, pParent)
, m_tvout(FALSE)
, m_filter(1)
, m_nloophack(2)
, m_nativeres(FALSE)
, m_vsync(FALSE)
, m_logz(FALSE)
@ -104,9 +102,7 @@ void GSSettingsDlg::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_COMBO4, m_psversion);
DDX_Control(pDX, IDC_COMBO2, m_interlace);
DDX_Control(pDX, IDC_COMBO5, m_aspectratio);
DDX_Check(pDX, IDC_CHECK3, m_tvout);
DDX_Check(pDX, IDC_CHECK4, m_filter);
DDX_Check(pDX, IDC_CHECK6, m_nloophack);
DDX_Control(pDX, IDC_SPIN1, m_resx);
DDX_Control(pDX, IDC_SPIN2, m_resy);
DDX_Control(pDX, IDC_SPIN3, m_swthreads);
@ -219,8 +215,6 @@ BOOL GSSettingsDlg::OnInitDialog()
//
m_filter = pApp->GetProfileInt(_T("Settings"), _T("filter"), 1);
m_tvout = pApp->GetProfileInt(_T("Settings"), _T("tvout"), FALSE);
m_nloophack = pApp->GetProfileInt(_T("Settings"), _T("nloophack"), 2);
m_vsync = !!pApp->GetProfileInt(_T("Settings"), _T("vsync"), FALSE);
m_logz = !!pApp->GetProfileInt(_T("Settings"), _T("logz"), FALSE);
m_fba = !!pApp->GetProfileInt(_T("Settings"), _T("fba"), TRUE);
@ -284,8 +278,6 @@ void GSSettingsDlg::OnOK()
}
pApp->WriteProfileInt(_T("Settings"), _T("filter"), m_filter);
pApp->WriteProfileInt(_T("Settings"), _T("tvout"), m_tvout);
pApp->WriteProfileInt(_T("Settings"), _T("nloophack"), m_nloophack);
pApp->WriteProfileInt(_T("Settings"), _T("vsync"), m_vsync);
pApp->WriteProfileInt(_T("Settings"), _T("logz"), m_logz);
pApp->WriteProfileInt(_T("Settings"), _T("fba"), m_fba);

View File

@ -47,9 +47,7 @@ public:
CComboBox m_psversion;
CComboBox m_interlace;
CComboBox m_aspectratio;
BOOL m_tvout;
int m_filter;
int m_nloophack;
CSpinButtonCtrl m_resx;
CSpinButtonCtrl m_resy;
CSpinButtonCtrl m_swthreads;

View File

@ -22,11 +22,9 @@
#include "stdafx.h"
#include "GSState.h"
GSState::GSState(BYTE* base, bool mt, void (*irq)(), int nloophack)
GSState::GSState(BYTE* base, bool mt, void (*irq)())
: m_mt(mt)
, m_irq(irq)
, m_nloophack_org(nloophack)
, m_nloophack(nloophack == 1)
, m_crc(0)
, m_options(0)
, m_path3hack(0)
@ -1241,8 +1239,6 @@ template<int index> void GSState::Transfer(BYTE* mem, UINT32 size)
while(size > 0)
{
bool eop = false;
if(path.tag.NLOOP == 0)
{
path.SetTag(mem);
@ -1250,41 +1246,29 @@ template<int index> void GSState::Transfer(BYTE* mem, UINT32 size)
mem += sizeof(GIFTag);
size--;
m_q = 1.0f;
if(index == 2 && path.tag.EOP)
{
m_path3hack = 1;
}
if(path.tag.PRE)
if(path.tag.NLOOP > 0) // eeuser 7.2.2. GIFtag: "... when NLOOP is 0, the GIF does not output anything, and values other than the EOP field are disregarded."
{
ASSERT(path.tag.FLG != GIF_FLG_IMAGE); // kingdom hearts, ffxii, tales of abyss, berserk
m_q = 1.0f;
if((path.tag.FLG & 2) == 0)
if(path.tag.PRE)
{
GIFReg r;
r.i64 = path.tag.PRIM;
(this->*m_fpGIFRegHandlers[GIF_A_D_REG_PRIM])(&r);
}
}
ASSERT(path.tag.FLG != GIF_FLG_IMAGE); // kingdom hearts, ffxii, tales of abyss, berserk
if(path.tag.EOP)
{
eop = true;
}
else if(path.tag.NLOOP == 0)
{
if(index == 0 && m_nloophack)
{
continue;
if((path.tag.FLG & 2) == 0)
{
GIFReg r;
r.i64 = path.tag.PRIM;
(this->*m_fpGIFRegHandlers[GIF_A_D_REG_PRIM])(&r);
}
}
eop = true;
}
}
if(path.tag.NLOOP > 0)
else
{
switch(path.tag.FLG)
{
@ -1400,21 +1384,12 @@ template<int index> void GSState::Transfer(BYTE* mem, UINT32 size)
}
}
if(eop && ((int)size <= 0 || index == 0))
if(index == 0)
{
break;
}
}
// FIXME: dq8, pcsx2 error probably
if(index == 0)
{
if(!path.tag.EOP && path.tag.NLOOP > 0)
{
path.tag.NLOOP = 0;
TRACE(_T("path1 hack\n"));
if(path.tag.EOP && path.tag.NLOOP == 0)
{
break;
}
}
}
@ -1422,6 +1397,23 @@ template<int index> void GSState::Transfer(BYTE* mem, UINT32 size)
{
m_dump.Transfer(index, start, mem - start);
}
if(index == 0)
{
if(size == 0 && path.tag.NLOOP > 0)
{
if(m_mt)
{
// TODO
path.tag.NLOOP = 0;
}
else
{
Transfer<0>(mem - 0x4000, 0x4000 / 16);
}
}
}
}
template<class T> static void WriteState(BYTE*& dst, T* src, size_t len = sizeof(T))
@ -1617,11 +1609,6 @@ void GSState::SetGameCRC(DWORD crc, int options)
m_crc = crc;
m_options = options;
m_game = CRC::Lookup(crc);
if(m_nloophack_org == 2)
{
m_nloophack = m_game.nloophack;
}
}
void GSState::SetFrameSkip(int frameskip)

View File

@ -112,7 +112,6 @@ class GSState : public GSAlignedClass<16>
bool m_mt;
void (*m_irq)();
bool m_path3hack;
int m_nloophack_org;
int m_x, m_y;
int m_bytes;
@ -200,7 +199,6 @@ public:
DWORD m_vprim;
GSPerfMon m_perfmon;
bool m_nloophack;
DWORD m_crc;
int m_options;
int m_frameskip;
@ -208,7 +206,7 @@ public:
GSDump m_dump;
public:
GSState(BYTE* base, bool mt, void (*irq)(), int nloophack);
GSState(BYTE* base, bool mt, void (*irq)());
virtual ~GSState();
void ResetHandlers();

View File

@ -82,7 +82,7 @@ IDB_LOGO10 BITMAP "res\\logo10.bmp"
// Dialog
//
IDD_CONFIG DIALOGEX 0, 0, 189, 256
IDD_CONFIG DIALOGEX 0, 0, 189, 248
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Settings..."
FONT 8, "MS Shell Dlg", 400, 0, 0x1
@ -108,17 +108,15 @@ BEGIN
LTEXT "SW rend. threads:",IDC_STATIC,7,149,60,8
EDITTEXT IDC_EDIT3,71,147,35,13,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,99,150,11,14
CONTROL "NLOOP hack",IDC_CHECK6,"Button",BS_AUTO3STATE | WS_TABSTOP,7,167,55,10
CONTROL "Enable tv-out",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,80,167,57,10
CONTROL "Texture filtering",IDC_CHECK4,"Button",BS_AUTO3STATE | WS_TABSTOP,7,180,67,10
CONTROL "Logarithmic Z",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,80,180,58,10
CONTROL "Wait vsync",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,193,51,10
CONTROL "Alpha correction (FBA)",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,80,193,102,10
CONTROL "Texture filtering",IDC_CHECK4,"Button",BS_AUTO3STATE | WS_TABSTOP,7,167,67,10
CONTROL "Logarithmic Z",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,80,168,58,10
CONTROL "Wait vsync",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,180,51,10
CONTROL "Alpha correction (FBA)",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,80,181,102,10
CONTROL "Edge anti-aliasing (AA1, sw-mode only)",IDC_CHECK8,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,206,141,10
CONTROL "Enable output merger blur effect",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,219,121,10
DEFPUSHBUTTON "OK",IDOK,43,235,50,14
PUSHBUTTON "Cancel",IDCANCEL,96,235,50,14
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,194,141,10
CONTROL "Enable output merger blur effect",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,208,121,10
DEFPUSHBUTTON "OK",IDOK,43,227,50,14
PUSHBUTTON "Cancel",IDCANCEL,96,227,50,14
END
IDD_CAPTURE DIALOGEX 0, 0, 279, 71
@ -182,7 +180,7 @@ BEGIN
VERTGUIDE, 80
VERTGUIDE, 182
TOPMARGIN, 7
BOTTOMMARGIN, 249
BOTTOMMARGIN, 241
END
IDD_CAPTURE, DIALOG