mirror of https://github.com/PCSX2/pcsx2.git
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:
parent
0bf914833f
commit
8865ee398b
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -86,7 +86,6 @@ public:
|
|||
DWORD crc;
|
||||
Title title;
|
||||
Region region;
|
||||
bool nloophack;
|
||||
};
|
||||
|
||||
private:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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> >();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue