From ef7dc5be5478c5ec29f8b13100e7ba76401909c8 Mon Sep 17 00:00:00 2001 From: gabest Date: Mon, 1 Dec 2008 10:59:20 +0000 Subject: [PATCH] --- gsdx/GPU.cpp | 2 +- gsdx/GPUDrawScanline.cpp | 938 +++++++------ gsdx/GPUDrawScanline.h | 19 +- gsdx/GPULocalMemory.cpp | 426 ++++-- gsdx/GPULocalMemory.h | 38 +- gsdx/GPURenderer.h | 33 +- gsdx/GPURendererSW.h | 82 +- gsdx/GPUState.cpp | 92 +- gsdx/GPUState.h | 8 +- gsdx/GPUTextureCacheSW.cpp | 130 -- gsdx/GPUTextureCacheSW.h | 41 - gsdx/GPUVertexSW.h | 96 -- gsdx/GS.h | 2 +- gsdx/GSDrawScanline.cpp | 2707 ++++++++++++++++++------------------ gsdx/GSDrawScanline.h | 18 +- gsdx/GSRasterizer.cpp | 27 +- gsdx/GSRasterizer.h | 13 +- gsdx/GSRenderer.h | 31 +- gsdx/GSRendererSW.h | 11 +- gsdx/GSUtil.cpp | 35 + gsdx/GSUtil.h | 2 + gsdx/GSdx_vs2008.vcproj | 12 - 22 files changed, 2339 insertions(+), 2424 deletions(-) delete mode 100644 gsdx/GPUTextureCacheSW.cpp delete mode 100644 gsdx/GPUTextureCacheSW.h delete mode 100644 gsdx/GPUVertexSW.h diff --git a/gsdx/GPU.cpp b/gsdx/GPU.cpp index de45f67..5a869ea 100644 --- a/gsdx/GPU.cpp +++ b/gsdx/GPU.cpp @@ -102,7 +102,7 @@ EXPORT_C_(INT32) GPUopen(HWND hWnd) rs.m_aspectratio = AfxGetApp()->GetProfileInt(_T("Settings"), _T("aspectratio"), 1); rs.m_vsync = !!AfxGetApp()->GetProfileInt(_T("Settings"), _T("vsync"), FALSE); - s_gpu = new GPURendererSW(rs); + s_gpu = new GPURendererSW(rs); s_hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); diff --git a/gsdx/GPUDrawScanline.cpp b/gsdx/GPUDrawScanline.cpp index e864e42..882b194 100644 --- a/gsdx/GPUDrawScanline.cpp +++ b/gsdx/GPUDrawScanline.cpp @@ -27,7 +27,7 @@ GPUDrawScanline::GPUDrawScanline(GPUState* state, int filter, int dither) , m_filter(filter) , m_dither(dither) { - InitEx(); + Init(); } GPUDrawScanline::~GPUDrawScanline() @@ -58,18 +58,18 @@ void GPUDrawScanline::SetupDraw(Vertex* vertices, int count, const void* texture m_sel.tlu = env.STATUS.TP < 2; m_sel.twin = (env.TWIN.ai32 & 0xfffff) != 0; m_sel.dtd = m_dither ? env.STATUS.DTD : 0; - m_sel.ltf = m_filter; + m_sel.ltf = m_filter < 2 ? m_filter : env.PRIM.TYPE == GPU_POLYGON ? 1 : 0; m_dsf = m_ds[m_sel]; // m_slenv - m_slenv.vm = m_state->m_mem.m_vm16; + m_slenv.mem = &m_state->m_mem; if(m_sel.tme) { m_slenv.tex = texture; - m_slenv.clut = m_state->GetCLUT(); + m_slenv.clut = m_state->m_mem.GetCLUT(env.STATUS.TP, env.CLUT.X, env.CLUT.Y); if(m_sel.twin) { @@ -93,149 +93,37 @@ void GPUDrawScanline::SetupDraw(Vertex* vertices, int count, const void* texture m_slenv.md = GSVector4i(env.STATUS.MD ? 0x80008000 : 0); } -__declspec(align(16)) static WORD s_dither[4][16] = +void GPUDrawScanline::SetupScanline(const Vertex& dv) { - {7, 0, 6, 1, 7, 0, 6, 1, 7, 0, 6, 1, 7, 0, 6, 1}, - {2, 5, 3, 4, 2, 5, 3, 4, 2, 5, 3, 4, 2, 5, 3, 4}, - {1, 6, 0, 7, 1, 6, 0, 7, 1, 6, 0, 7, 1, 6, 0, 7}, - {4, 3, 5, 2, 4, 3, 5, 2, 4, 3, 5, 2, 4, 3, 5, 2}, -}; - -void GPUDrawScanline::DrawScanline(int top, int left, int right, const Vertex& v, const Vertex& dv) -{ - (this->*m_dsf)(top, left, right, v, dv); - - return; - GSVector4 ps0123 = GSVector4::ps0123(); GSVector4 ps4567 = GSVector4::ps4567(); - GSVector4 s[2], t[2]; - - GSVector4 vt = v.t; + GSVector4 dt = dv.t; - s[0] = vt.xxxx(); s[1] = s[0]; - t[0] = vt.yyyy(); t[1] = t[0]; - - if(m_sel.tme) - { - GSVector4 dt = dv.t; + m_slenv.ds[0] = dt.xxxx() * ps0123; + m_slenv.dt[0] = dt.yyyy() * ps0123; + m_slenv.ds[1] = dt.xxxx() * ps4567; + m_slenv.dt[1] = dt.yyyy() * ps4567; + m_slenv.ds[2] = dt.xxxx() * 8.0f; + m_slenv.dt[2] = dt.yyyy() * 8.0f; - s[0] += dt.xxxx() * ps0123; - t[0] += dt.yyyy() * ps0123; - s[1] += dt.xxxx() * ps4567; - t[1] += dt.yyyy() * ps4567; - } + GSVector4i dc; - GSVector4 r[2], g[2], b[2]; - - GSVector4 vc = v.c; + dc = GSVector4i(dv.c); + dc = dc.ps32(); + dc = dc.upl16(dc); - r[0] = vc.xxxx(); r[1] = r[0]; - g[0] = vc.yyyy(); g[1] = g[0]; - b[0] = vc.zzzz(); b[1] = b[0]; + GSVector4i s_01234567(0x00010000, 0x00030002, 0x00050004, 0x00070006); // TODO - if(m_sel.iip) - { - GSVector4 dc = dv.c; + m_slenv.dr = dc.xxxx().mul16l(s_01234567); + m_slenv.dg = dc.yyyy().mul16l(s_01234567); + m_slenv.db = dc.zzzz().mul16l(s_01234567); + m_slenv.dc = dc.sll16(3); +} - r[0] += dc.xxxx() * ps0123; - g[0] += dc.yyyy() * ps0123; - b[0] += dc.zzzz() * ps0123; - r[1] += dc.xxxx() * ps4567; - g[1] += dc.yyyy() * ps4567; - b[1] += dc.zzzz() * ps4567; - } - - GSVector4i dither; - - if(m_sel.dtd) - { - dither = GSVector4i::load(&s_dither[top & 3][left & 3]); - } - - int steps = right - left; - - WORD* fb = &m_slenv.vm[(top << 10) + left]; - - while(1) - { - do - { - int pixels = GSVector4i::store(GSVector4i::load(steps).min_i16(GSVector4i::load(8))); - - GSVector4i test = GSVector4i::zero(); - - GSVector4i d = GSVector4i::zero(); - - if(m_sel.rfb) // me | abe - { - d = GSVector4i::load(fb); - - if(m_sel.me) - { - test = d.sra16(15); - - if(test.alltrue()) - { - continue; - } - } - } - - GSVector4i c[4]; - - if(m_sel.tme) - { - SampleTexture(pixels, m_sel.ltf, m_sel.tlu, m_sel.twin, test, s, t, c); - } - - ColorTFX(m_sel.tfx, r, g, b, c); - - if(m_sel.abe) - { - AlphaBlend(m_sel.abr, m_sel.tme, d, c); - } - - if(m_sel.dtd) - { - c[0] = c[0].addus8(dither); - c[1] = c[1].addus8(dither); - c[2] = c[2].addus8(dither); - } - - WriteFrame(fb, test, c, pixels); - } - while(0); - - if(steps <= 8) break; - - steps -= 8; - - fb += 8; - - if(m_sel.tme) - { - GSVector4 dt8 = dv.t * 8.0f; - - s[0] += dt8.xxxx(); - t[0] += dt8.yyyy(); - s[1] += dt8.xxxx(); - t[1] += dt8.yyyy(); - } - - if(m_sel.iip) - { - GSVector4 dc8 = dv.c * 8.0f; - - r[0] += dc8.xxxx(); - g[0] += dc8.yyyy(); - b[0] += dc8.zzzz(); - r[1] += dc8.xxxx(); - g[1] += dc8.yyyy(); - b[1] += dc8.zzzz(); - } - } +void GPUDrawScanline::DrawScanline(int top, int left, int right, const Vertex& v) +{ + (this->*m_dsf)(top, left, right, v); } void GPUDrawScanline::FillRect(const GSVector4i& r, const Vertex& v) @@ -245,6 +133,11 @@ void GPUDrawScanline::FillRect(const GSVector4i& r, const Vertex& v) ASSERT(0); } +IDrawScanline::DrawScanlinePtr GPUDrawScanline::GetDrawScanlinePtr() +{ + return m_dsf; +} + void GPUDrawScanline::SampleTexture(int pixels, DWORD ltf, DWORD tlu, DWORD twin, GSVector4i& test, const GSVector4* s, const GSVector4* t, GSVector4i* c) { const void* RESTRICT tex = m_slenv.tex; @@ -256,8 +149,8 @@ void GPUDrawScanline::SampleTexture(int pixels, DWORD ltf, DWORD tlu, DWORD twin for(int j = 0; j < 2; j++) { - GSVector4 ss = s[j] - 0.5f; - GSVector4 tt = t[j] - 0.5f; + GSVector4 ss = s[j] - 0.25f; + GSVector4 tt = t[j] - 0.25f; GSVector4 uf = ss.floor(); GSVector4 vf = tt.floor(); @@ -464,31 +357,20 @@ void GPUDrawScanline::SampleTexture(int pixels, DWORD ltf, DWORD tlu, DWORD twin } } -void GPUDrawScanline::ColorTFX(DWORD tfx, const GSVector4* r, const GSVector4* g, const GSVector4* b, GSVector4i* c) +void GPUDrawScanline::ColorTFX(DWORD tfx, const GSVector4i& r, const GSVector4i& g, const GSVector4i& b, GSVector4i* c) { - GSVector4i ri, gi, bi; - switch(tfx) { case 0: // none (tfx = 0) case 1: // none (tfx = tge) - ri = GSVector4i(r[0]).ps32(GSVector4i(r[1])); - gi = GSVector4i(g[0]).ps32(GSVector4i(g[1])); - bi = GSVector4i(b[0]).ps32(GSVector4i(b[1])); - c[0] = ri; - c[1] = gi; - c[2] = bi; + c[0] = r.srl16(7); + c[1] = g.srl16(7); + c[2] = b.srl16(7); break; case 2: // modulate (tfx = tme | tge) - ri = GSVector4i(r[0]).ps32(GSVector4i(r[1])); - gi = GSVector4i(g[0]).ps32(GSVector4i(g[1])); - bi = GSVector4i(b[0]).ps32(GSVector4i(b[1])); - c[0] = c[0].mul16l(ri).srl16(7); - c[1] = c[1].mul16l(gi).srl16(7); - c[2] = c[2].mul16l(bi).srl16(7); - c[0] = c[0].pu16().upl8(); - c[1] = c[1].pu16().upl8(); - c[2] = c[2].pu16().upl8(); + c[0] = c[0].sll16(2).mul16hu(r).pu16().upl8(); + c[1] = c[1].sll16(2).mul16hu(g).pu16().upl8(); + c[2] = c[2].sll16(2).mul16hu(b).pu16().upl8(); break; case 3: // decal (tfx = tme) break; @@ -566,317 +448,312 @@ void GPUDrawScanline::WriteFrame(WORD* RESTRICT fb, const GSVector4i& test, cons // -void GPUDrawScanline::InitEx() +void GPUDrawScanline::Init() { - m_ds[0x00] = &GPUDrawScanline::DrawScanlineExT<0x00>; - m_ds[0x01] = &GPUDrawScanline::DrawScanlineExT<0x01>; - m_ds[0x02] = &GPUDrawScanline::DrawScanlineExT<0x02>; - m_ds[0x03] = &GPUDrawScanline::DrawScanlineExT<0x03>; - m_ds[0x04] = &GPUDrawScanline::DrawScanlineExT<0x04>; - m_ds[0x05] = &GPUDrawScanline::DrawScanlineExT<0x05>; - m_ds[0x06] = &GPUDrawScanline::DrawScanlineExT<0x06>; - m_ds[0x07] = &GPUDrawScanline::DrawScanlineExT<0x07>; - m_ds[0x08] = &GPUDrawScanline::DrawScanlineExT<0x08>; - m_ds[0x09] = &GPUDrawScanline::DrawScanlineExT<0x09>; - m_ds[0x0a] = &GPUDrawScanline::DrawScanlineExT<0x0a>; - m_ds[0x0b] = &GPUDrawScanline::DrawScanlineExT<0x0b>; - m_ds[0x0c] = &GPUDrawScanline::DrawScanlineExT<0x0c>; - m_ds[0x0d] = &GPUDrawScanline::DrawScanlineExT<0x0d>; - m_ds[0x0e] = &GPUDrawScanline::DrawScanlineExT<0x0e>; - m_ds[0x0f] = &GPUDrawScanline::DrawScanlineExT<0x0f>; - m_ds[0x10] = &GPUDrawScanline::DrawScanlineExT<0x10>; - m_ds[0x11] = &GPUDrawScanline::DrawScanlineExT<0x11>; - m_ds[0x12] = &GPUDrawScanline::DrawScanlineExT<0x12>; - m_ds[0x13] = &GPUDrawScanline::DrawScanlineExT<0x13>; - m_ds[0x14] = &GPUDrawScanline::DrawScanlineExT<0x14>; - m_ds[0x15] = &GPUDrawScanline::DrawScanlineExT<0x15>; - m_ds[0x16] = &GPUDrawScanline::DrawScanlineExT<0x16>; - m_ds[0x17] = &GPUDrawScanline::DrawScanlineExT<0x17>; - m_ds[0x18] = &GPUDrawScanline::DrawScanlineExT<0x18>; - m_ds[0x19] = &GPUDrawScanline::DrawScanlineExT<0x19>; - m_ds[0x1a] = &GPUDrawScanline::DrawScanlineExT<0x1a>; - m_ds[0x1b] = &GPUDrawScanline::DrawScanlineExT<0x1b>; - m_ds[0x1c] = &GPUDrawScanline::DrawScanlineExT<0x1c>; - m_ds[0x1d] = &GPUDrawScanline::DrawScanlineExT<0x1d>; - m_ds[0x1e] = &GPUDrawScanline::DrawScanlineExT<0x1e>; - m_ds[0x1f] = &GPUDrawScanline::DrawScanlineExT<0x1f>; - m_ds[0x20] = &GPUDrawScanline::DrawScanlineExT<0x20>; - m_ds[0x21] = &GPUDrawScanline::DrawScanlineExT<0x21>; - m_ds[0x22] = &GPUDrawScanline::DrawScanlineExT<0x22>; - m_ds[0x23] = &GPUDrawScanline::DrawScanlineExT<0x23>; - m_ds[0x24] = &GPUDrawScanline::DrawScanlineExT<0x24>; - m_ds[0x25] = &GPUDrawScanline::DrawScanlineExT<0x25>; - m_ds[0x26] = &GPUDrawScanline::DrawScanlineExT<0x26>; - m_ds[0x27] = &GPUDrawScanline::DrawScanlineExT<0x27>; - m_ds[0x28] = &GPUDrawScanline::DrawScanlineExT<0x28>; - m_ds[0x29] = &GPUDrawScanline::DrawScanlineExT<0x29>; - m_ds[0x2a] = &GPUDrawScanline::DrawScanlineExT<0x2a>; - m_ds[0x2b] = &GPUDrawScanline::DrawScanlineExT<0x2b>; - m_ds[0x2c] = &GPUDrawScanline::DrawScanlineExT<0x2c>; - m_ds[0x2d] = &GPUDrawScanline::DrawScanlineExT<0x2d>; - m_ds[0x2e] = &GPUDrawScanline::DrawScanlineExT<0x2e>; - m_ds[0x2f] = &GPUDrawScanline::DrawScanlineExT<0x2f>; - m_ds[0x30] = &GPUDrawScanline::DrawScanlineExT<0x30>; - m_ds[0x31] = &GPUDrawScanline::DrawScanlineExT<0x31>; - m_ds[0x32] = &GPUDrawScanline::DrawScanlineExT<0x32>; - m_ds[0x33] = &GPUDrawScanline::DrawScanlineExT<0x33>; - m_ds[0x34] = &GPUDrawScanline::DrawScanlineExT<0x34>; - m_ds[0x35] = &GPUDrawScanline::DrawScanlineExT<0x35>; - m_ds[0x36] = &GPUDrawScanline::DrawScanlineExT<0x36>; - m_ds[0x37] = &GPUDrawScanline::DrawScanlineExT<0x37>; - m_ds[0x38] = &GPUDrawScanline::DrawScanlineExT<0x38>; - m_ds[0x39] = &GPUDrawScanline::DrawScanlineExT<0x39>; - m_ds[0x3a] = &GPUDrawScanline::DrawScanlineExT<0x3a>; - m_ds[0x3b] = &GPUDrawScanline::DrawScanlineExT<0x3b>; - m_ds[0x3c] = &GPUDrawScanline::DrawScanlineExT<0x3c>; - m_ds[0x3d] = &GPUDrawScanline::DrawScanlineExT<0x3d>; - m_ds[0x3e] = &GPUDrawScanline::DrawScanlineExT<0x3e>; - m_ds[0x3f] = &GPUDrawScanline::DrawScanlineExT<0x3f>; - m_ds[0x40] = &GPUDrawScanline::DrawScanlineExT<0x40>; - m_ds[0x41] = &GPUDrawScanline::DrawScanlineExT<0x41>; - m_ds[0x42] = &GPUDrawScanline::DrawScanlineExT<0x42>; - m_ds[0x43] = &GPUDrawScanline::DrawScanlineExT<0x43>; - m_ds[0x44] = &GPUDrawScanline::DrawScanlineExT<0x44>; - m_ds[0x45] = &GPUDrawScanline::DrawScanlineExT<0x45>; - m_ds[0x46] = &GPUDrawScanline::DrawScanlineExT<0x46>; - m_ds[0x47] = &GPUDrawScanline::DrawScanlineExT<0x47>; - m_ds[0x48] = &GPUDrawScanline::DrawScanlineExT<0x48>; - m_ds[0x49] = &GPUDrawScanline::DrawScanlineExT<0x49>; - m_ds[0x4a] = &GPUDrawScanline::DrawScanlineExT<0x4a>; - m_ds[0x4b] = &GPUDrawScanline::DrawScanlineExT<0x4b>; - m_ds[0x4c] = &GPUDrawScanline::DrawScanlineExT<0x4c>; - m_ds[0x4d] = &GPUDrawScanline::DrawScanlineExT<0x4d>; - m_ds[0x4e] = &GPUDrawScanline::DrawScanlineExT<0x4e>; - m_ds[0x4f] = &GPUDrawScanline::DrawScanlineExT<0x4f>; - m_ds[0x50] = &GPUDrawScanline::DrawScanlineExT<0x50>; - m_ds[0x51] = &GPUDrawScanline::DrawScanlineExT<0x51>; - m_ds[0x52] = &GPUDrawScanline::DrawScanlineExT<0x52>; - m_ds[0x53] = &GPUDrawScanline::DrawScanlineExT<0x53>; - m_ds[0x54] = &GPUDrawScanline::DrawScanlineExT<0x54>; - m_ds[0x55] = &GPUDrawScanline::DrawScanlineExT<0x55>; - m_ds[0x56] = &GPUDrawScanline::DrawScanlineExT<0x56>; - m_ds[0x57] = &GPUDrawScanline::DrawScanlineExT<0x57>; - m_ds[0x58] = &GPUDrawScanline::DrawScanlineExT<0x58>; - m_ds[0x59] = &GPUDrawScanline::DrawScanlineExT<0x59>; - m_ds[0x5a] = &GPUDrawScanline::DrawScanlineExT<0x5a>; - m_ds[0x5b] = &GPUDrawScanline::DrawScanlineExT<0x5b>; - m_ds[0x5c] = &GPUDrawScanline::DrawScanlineExT<0x5c>; - m_ds[0x5d] = &GPUDrawScanline::DrawScanlineExT<0x5d>; - m_ds[0x5e] = &GPUDrawScanline::DrawScanlineExT<0x5e>; - m_ds[0x5f] = &GPUDrawScanline::DrawScanlineExT<0x5f>; - m_ds[0x60] = &GPUDrawScanline::DrawScanlineExT<0x60>; - m_ds[0x61] = &GPUDrawScanline::DrawScanlineExT<0x61>; - m_ds[0x62] = &GPUDrawScanline::DrawScanlineExT<0x62>; - m_ds[0x63] = &GPUDrawScanline::DrawScanlineExT<0x63>; - m_ds[0x64] = &GPUDrawScanline::DrawScanlineExT<0x64>; - m_ds[0x65] = &GPUDrawScanline::DrawScanlineExT<0x65>; - m_ds[0x66] = &GPUDrawScanline::DrawScanlineExT<0x66>; - m_ds[0x67] = &GPUDrawScanline::DrawScanlineExT<0x67>; - m_ds[0x68] = &GPUDrawScanline::DrawScanlineExT<0x68>; - m_ds[0x69] = &GPUDrawScanline::DrawScanlineExT<0x69>; - m_ds[0x6a] = &GPUDrawScanline::DrawScanlineExT<0x6a>; - m_ds[0x6b] = &GPUDrawScanline::DrawScanlineExT<0x6b>; - m_ds[0x6c] = &GPUDrawScanline::DrawScanlineExT<0x6c>; - m_ds[0x6d] = &GPUDrawScanline::DrawScanlineExT<0x6d>; - m_ds[0x6e] = &GPUDrawScanline::DrawScanlineExT<0x6e>; - m_ds[0x6f] = &GPUDrawScanline::DrawScanlineExT<0x6f>; - m_ds[0x70] = &GPUDrawScanline::DrawScanlineExT<0x70>; - m_ds[0x71] = &GPUDrawScanline::DrawScanlineExT<0x71>; - m_ds[0x72] = &GPUDrawScanline::DrawScanlineExT<0x72>; - m_ds[0x73] = &GPUDrawScanline::DrawScanlineExT<0x73>; - m_ds[0x74] = &GPUDrawScanline::DrawScanlineExT<0x74>; - m_ds[0x75] = &GPUDrawScanline::DrawScanlineExT<0x75>; - m_ds[0x76] = &GPUDrawScanline::DrawScanlineExT<0x76>; - m_ds[0x77] = &GPUDrawScanline::DrawScanlineExT<0x77>; - m_ds[0x78] = &GPUDrawScanline::DrawScanlineExT<0x78>; - m_ds[0x79] = &GPUDrawScanline::DrawScanlineExT<0x79>; - m_ds[0x7a] = &GPUDrawScanline::DrawScanlineExT<0x7a>; - m_ds[0x7b] = &GPUDrawScanline::DrawScanlineExT<0x7b>; - m_ds[0x7c] = &GPUDrawScanline::DrawScanlineExT<0x7c>; - m_ds[0x7d] = &GPUDrawScanline::DrawScanlineExT<0x7d>; - m_ds[0x7e] = &GPUDrawScanline::DrawScanlineExT<0x7e>; - m_ds[0x7f] = &GPUDrawScanline::DrawScanlineExT<0x7f>; - m_ds[0x80] = &GPUDrawScanline::DrawScanlineExT<0x80>; - m_ds[0x81] = &GPUDrawScanline::DrawScanlineExT<0x81>; - m_ds[0x82] = &GPUDrawScanline::DrawScanlineExT<0x82>; - m_ds[0x83] = &GPUDrawScanline::DrawScanlineExT<0x83>; - m_ds[0x84] = &GPUDrawScanline::DrawScanlineExT<0x84>; - m_ds[0x85] = &GPUDrawScanline::DrawScanlineExT<0x85>; - m_ds[0x86] = &GPUDrawScanline::DrawScanlineExT<0x86>; - m_ds[0x87] = &GPUDrawScanline::DrawScanlineExT<0x87>; - m_ds[0x88] = &GPUDrawScanline::DrawScanlineExT<0x88>; - m_ds[0x89] = &GPUDrawScanline::DrawScanlineExT<0x89>; - m_ds[0x8a] = &GPUDrawScanline::DrawScanlineExT<0x8a>; - m_ds[0x8b] = &GPUDrawScanline::DrawScanlineExT<0x8b>; - m_ds[0x8c] = &GPUDrawScanline::DrawScanlineExT<0x8c>; - m_ds[0x8d] = &GPUDrawScanline::DrawScanlineExT<0x8d>; - m_ds[0x8e] = &GPUDrawScanline::DrawScanlineExT<0x8e>; - m_ds[0x8f] = &GPUDrawScanline::DrawScanlineExT<0x8f>; - m_ds[0x90] = &GPUDrawScanline::DrawScanlineExT<0x90>; - m_ds[0x91] = &GPUDrawScanline::DrawScanlineExT<0x91>; - m_ds[0x92] = &GPUDrawScanline::DrawScanlineExT<0x92>; - m_ds[0x93] = &GPUDrawScanline::DrawScanlineExT<0x93>; - m_ds[0x94] = &GPUDrawScanline::DrawScanlineExT<0x94>; - m_ds[0x95] = &GPUDrawScanline::DrawScanlineExT<0x95>; - m_ds[0x96] = &GPUDrawScanline::DrawScanlineExT<0x96>; - m_ds[0x97] = &GPUDrawScanline::DrawScanlineExT<0x97>; - m_ds[0x98] = &GPUDrawScanline::DrawScanlineExT<0x98>; - m_ds[0x99] = &GPUDrawScanline::DrawScanlineExT<0x99>; - m_ds[0x9a] = &GPUDrawScanline::DrawScanlineExT<0x9a>; - m_ds[0x9b] = &GPUDrawScanline::DrawScanlineExT<0x9b>; - m_ds[0x9c] = &GPUDrawScanline::DrawScanlineExT<0x9c>; - m_ds[0x9d] = &GPUDrawScanline::DrawScanlineExT<0x9d>; - m_ds[0x9e] = &GPUDrawScanline::DrawScanlineExT<0x9e>; - m_ds[0x9f] = &GPUDrawScanline::DrawScanlineExT<0x9f>; - m_ds[0xa0] = &GPUDrawScanline::DrawScanlineExT<0xa0>; - m_ds[0xa1] = &GPUDrawScanline::DrawScanlineExT<0xa1>; - m_ds[0xa2] = &GPUDrawScanline::DrawScanlineExT<0xa2>; - m_ds[0xa3] = &GPUDrawScanline::DrawScanlineExT<0xa3>; - m_ds[0xa4] = &GPUDrawScanline::DrawScanlineExT<0xa4>; - m_ds[0xa5] = &GPUDrawScanline::DrawScanlineExT<0xa5>; - m_ds[0xa6] = &GPUDrawScanline::DrawScanlineExT<0xa6>; - m_ds[0xa7] = &GPUDrawScanline::DrawScanlineExT<0xa7>; - m_ds[0xa8] = &GPUDrawScanline::DrawScanlineExT<0xa8>; - m_ds[0xa9] = &GPUDrawScanline::DrawScanlineExT<0xa9>; - m_ds[0xaa] = &GPUDrawScanline::DrawScanlineExT<0xaa>; - m_ds[0xab] = &GPUDrawScanline::DrawScanlineExT<0xab>; - m_ds[0xac] = &GPUDrawScanline::DrawScanlineExT<0xac>; - m_ds[0xad] = &GPUDrawScanline::DrawScanlineExT<0xad>; - m_ds[0xae] = &GPUDrawScanline::DrawScanlineExT<0xae>; - m_ds[0xaf] = &GPUDrawScanline::DrawScanlineExT<0xaf>; - m_ds[0xb0] = &GPUDrawScanline::DrawScanlineExT<0xb0>; - m_ds[0xb1] = &GPUDrawScanline::DrawScanlineExT<0xb1>; - m_ds[0xb2] = &GPUDrawScanline::DrawScanlineExT<0xb2>; - m_ds[0xb3] = &GPUDrawScanline::DrawScanlineExT<0xb3>; - m_ds[0xb4] = &GPUDrawScanline::DrawScanlineExT<0xb4>; - m_ds[0xb5] = &GPUDrawScanline::DrawScanlineExT<0xb5>; - m_ds[0xb6] = &GPUDrawScanline::DrawScanlineExT<0xb6>; - m_ds[0xb7] = &GPUDrawScanline::DrawScanlineExT<0xb7>; - m_ds[0xb8] = &GPUDrawScanline::DrawScanlineExT<0xb8>; - m_ds[0xb9] = &GPUDrawScanline::DrawScanlineExT<0xb9>; - m_ds[0xba] = &GPUDrawScanline::DrawScanlineExT<0xba>; - m_ds[0xbb] = &GPUDrawScanline::DrawScanlineExT<0xbb>; - m_ds[0xbc] = &GPUDrawScanline::DrawScanlineExT<0xbc>; - m_ds[0xbd] = &GPUDrawScanline::DrawScanlineExT<0xbd>; - m_ds[0xbe] = &GPUDrawScanline::DrawScanlineExT<0xbe>; - m_ds[0xbf] = &GPUDrawScanline::DrawScanlineExT<0xbf>; - m_ds[0xc0] = &GPUDrawScanline::DrawScanlineExT<0xc0>; - m_ds[0xc1] = &GPUDrawScanline::DrawScanlineExT<0xc1>; - m_ds[0xc2] = &GPUDrawScanline::DrawScanlineExT<0xc2>; - m_ds[0xc3] = &GPUDrawScanline::DrawScanlineExT<0xc3>; - m_ds[0xc4] = &GPUDrawScanline::DrawScanlineExT<0xc4>; - m_ds[0xc5] = &GPUDrawScanline::DrawScanlineExT<0xc5>; - m_ds[0xc6] = &GPUDrawScanline::DrawScanlineExT<0xc6>; - m_ds[0xc7] = &GPUDrawScanline::DrawScanlineExT<0xc7>; - m_ds[0xc8] = &GPUDrawScanline::DrawScanlineExT<0xc8>; - m_ds[0xc9] = &GPUDrawScanline::DrawScanlineExT<0xc9>; - m_ds[0xca] = &GPUDrawScanline::DrawScanlineExT<0xca>; - m_ds[0xcb] = &GPUDrawScanline::DrawScanlineExT<0xcb>; - m_ds[0xcc] = &GPUDrawScanline::DrawScanlineExT<0xcc>; - m_ds[0xcd] = &GPUDrawScanline::DrawScanlineExT<0xcd>; - m_ds[0xce] = &GPUDrawScanline::DrawScanlineExT<0xce>; - m_ds[0xcf] = &GPUDrawScanline::DrawScanlineExT<0xcf>; - m_ds[0xd0] = &GPUDrawScanline::DrawScanlineExT<0xd0>; - m_ds[0xd1] = &GPUDrawScanline::DrawScanlineExT<0xd1>; - m_ds[0xd2] = &GPUDrawScanline::DrawScanlineExT<0xd2>; - m_ds[0xd3] = &GPUDrawScanline::DrawScanlineExT<0xd3>; - m_ds[0xd4] = &GPUDrawScanline::DrawScanlineExT<0xd4>; - m_ds[0xd5] = &GPUDrawScanline::DrawScanlineExT<0xd5>; - m_ds[0xd6] = &GPUDrawScanline::DrawScanlineExT<0xd6>; - m_ds[0xd7] = &GPUDrawScanline::DrawScanlineExT<0xd7>; - m_ds[0xd8] = &GPUDrawScanline::DrawScanlineExT<0xd8>; - m_ds[0xd9] = &GPUDrawScanline::DrawScanlineExT<0xd9>; - m_ds[0xda] = &GPUDrawScanline::DrawScanlineExT<0xda>; - m_ds[0xdb] = &GPUDrawScanline::DrawScanlineExT<0xdb>; - m_ds[0xdc] = &GPUDrawScanline::DrawScanlineExT<0xdc>; - m_ds[0xdd] = &GPUDrawScanline::DrawScanlineExT<0xdd>; - m_ds[0xde] = &GPUDrawScanline::DrawScanlineExT<0xde>; - m_ds[0xdf] = &GPUDrawScanline::DrawScanlineExT<0xdf>; - m_ds[0xe0] = &GPUDrawScanline::DrawScanlineExT<0xe0>; - m_ds[0xe1] = &GPUDrawScanline::DrawScanlineExT<0xe1>; - m_ds[0xe2] = &GPUDrawScanline::DrawScanlineExT<0xe2>; - m_ds[0xe3] = &GPUDrawScanline::DrawScanlineExT<0xe3>; - m_ds[0xe4] = &GPUDrawScanline::DrawScanlineExT<0xe4>; - m_ds[0xe5] = &GPUDrawScanline::DrawScanlineExT<0xe5>; - m_ds[0xe6] = &GPUDrawScanline::DrawScanlineExT<0xe6>; - m_ds[0xe7] = &GPUDrawScanline::DrawScanlineExT<0xe7>; - m_ds[0xe8] = &GPUDrawScanline::DrawScanlineExT<0xe8>; - m_ds[0xe9] = &GPUDrawScanline::DrawScanlineExT<0xe9>; - m_ds[0xea] = &GPUDrawScanline::DrawScanlineExT<0xea>; - m_ds[0xeb] = &GPUDrawScanline::DrawScanlineExT<0xeb>; - m_ds[0xec] = &GPUDrawScanline::DrawScanlineExT<0xec>; - m_ds[0xed] = &GPUDrawScanline::DrawScanlineExT<0xed>; - m_ds[0xee] = &GPUDrawScanline::DrawScanlineExT<0xee>; - m_ds[0xef] = &GPUDrawScanline::DrawScanlineExT<0xef>; - m_ds[0xf0] = &GPUDrawScanline::DrawScanlineExT<0xf0>; - m_ds[0xf1] = &GPUDrawScanline::DrawScanlineExT<0xf1>; - m_ds[0xf2] = &GPUDrawScanline::DrawScanlineExT<0xf2>; - m_ds[0xf3] = &GPUDrawScanline::DrawScanlineExT<0xf3>; - m_ds[0xf4] = &GPUDrawScanline::DrawScanlineExT<0xf4>; - m_ds[0xf5] = &GPUDrawScanline::DrawScanlineExT<0xf5>; - m_ds[0xf6] = &GPUDrawScanline::DrawScanlineExT<0xf6>; - m_ds[0xf7] = &GPUDrawScanline::DrawScanlineExT<0xf7>; - m_ds[0xf8] = &GPUDrawScanline::DrawScanlineExT<0xf8>; - m_ds[0xf9] = &GPUDrawScanline::DrawScanlineExT<0xf9>; - m_ds[0xfa] = &GPUDrawScanline::DrawScanlineExT<0xfa>; - m_ds[0xfb] = &GPUDrawScanline::DrawScanlineExT<0xfb>; - m_ds[0xfc] = &GPUDrawScanline::DrawScanlineExT<0xfc>; - m_ds[0xfd] = &GPUDrawScanline::DrawScanlineExT<0xfd>; - m_ds[0xfe] = &GPUDrawScanline::DrawScanlineExT<0xfe>; - m_ds[0xff] = &GPUDrawScanline::DrawScanlineExT<0xff>; + for(int i = 0; i < countof(m_ds); i++) + { + m_ds[i] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineT; + } + + m_ds[0x00] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x00>; + m_ds[0x01] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x01>; + m_ds[0x02] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x02>; + m_ds[0x03] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x03>; + m_ds[0x04] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x04>; + m_ds[0x05] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x05>; + m_ds[0x06] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x06>; + m_ds[0x07] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x07>; + m_ds[0x08] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x08>; + m_ds[0x09] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x09>; + m_ds[0x0a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x0a>; + m_ds[0x0b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x0b>; + m_ds[0x0c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x0c>; + m_ds[0x0d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x0d>; + m_ds[0x0e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x0e>; + m_ds[0x0f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x0f>; + m_ds[0x10] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x10>; + m_ds[0x11] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x11>; + m_ds[0x12] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x12>; + m_ds[0x13] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x13>; + m_ds[0x14] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x14>; + m_ds[0x15] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x15>; + m_ds[0x16] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x16>; + m_ds[0x17] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x17>; + m_ds[0x18] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x18>; + m_ds[0x19] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x19>; + m_ds[0x1a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x1a>; + m_ds[0x1b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x1b>; + m_ds[0x1c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x1c>; + m_ds[0x1d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x1d>; + m_ds[0x1e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x1e>; + m_ds[0x1f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x1f>; + m_ds[0x20] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x20>; + m_ds[0x21] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x21>; + m_ds[0x22] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x22>; + m_ds[0x23] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x23>; + m_ds[0x24] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x24>; + m_ds[0x25] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x25>; + m_ds[0x26] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x26>; + m_ds[0x27] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x27>; + m_ds[0x28] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x28>; + m_ds[0x29] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x29>; + m_ds[0x2a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x2a>; + m_ds[0x2b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x2b>; + m_ds[0x2c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x2c>; + m_ds[0x2d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x2d>; + m_ds[0x2e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x2e>; + m_ds[0x2f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x2f>; + m_ds[0x30] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x30>; + m_ds[0x31] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x31>; + m_ds[0x32] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x32>; + m_ds[0x33] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x33>; + m_ds[0x34] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x34>; + m_ds[0x35] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x35>; + m_ds[0x36] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x36>; + m_ds[0x37] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x37>; + m_ds[0x38] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x38>; + m_ds[0x39] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x39>; + m_ds[0x3a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x3a>; + m_ds[0x3b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x3b>; + m_ds[0x3c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x3c>; + m_ds[0x3d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x3d>; + m_ds[0x3e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x3e>; + m_ds[0x3f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x3f>; + m_ds[0x40] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x40>; + m_ds[0x41] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x41>; + m_ds[0x42] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x42>; + m_ds[0x43] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x43>; + m_ds[0x44] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x44>; + m_ds[0x45] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x45>; + m_ds[0x46] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x46>; + m_ds[0x47] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x47>; + m_ds[0x48] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x48>; + m_ds[0x49] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x49>; + m_ds[0x4a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x4a>; + m_ds[0x4b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x4b>; + m_ds[0x4c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x4c>; + m_ds[0x4d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x4d>; + m_ds[0x4e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x4e>; + m_ds[0x4f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x4f>; + m_ds[0x50] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x50>; + m_ds[0x51] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x51>; + m_ds[0x52] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x52>; + m_ds[0x53] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x53>; + m_ds[0x54] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x54>; + m_ds[0x55] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x55>; + m_ds[0x56] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x56>; + m_ds[0x57] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x57>; + m_ds[0x58] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x58>; + m_ds[0x59] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x59>; + m_ds[0x5a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x5a>; + m_ds[0x5b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x5b>; + m_ds[0x5c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x5c>; + m_ds[0x5d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x5d>; + m_ds[0x5e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x5e>; + m_ds[0x5f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x5f>; + m_ds[0x60] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x60>; + m_ds[0x61] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x61>; + m_ds[0x62] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x62>; + m_ds[0x63] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x63>; + m_ds[0x64] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x64>; + m_ds[0x65] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x65>; + m_ds[0x66] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x66>; + m_ds[0x67] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x67>; + m_ds[0x68] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x68>; + m_ds[0x69] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x69>; + m_ds[0x6a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x6a>; + m_ds[0x6b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x6b>; + m_ds[0x6c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x6c>; + m_ds[0x6d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x6d>; + m_ds[0x6e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x6e>; + m_ds[0x6f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x6f>; + m_ds[0x70] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x70>; + m_ds[0x71] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x71>; + m_ds[0x72] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x72>; + m_ds[0x73] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x73>; + m_ds[0x74] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x74>; + m_ds[0x75] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x75>; + m_ds[0x76] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x76>; + m_ds[0x77] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x77>; + m_ds[0x78] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x78>; + m_ds[0x79] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x79>; + m_ds[0x7a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x7a>; + m_ds[0x7b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x7b>; + m_ds[0x7c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x7c>; + m_ds[0x7d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x7d>; + m_ds[0x7e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x7e>; + m_ds[0x7f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x7f>; + m_ds[0x80] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x80>; + m_ds[0x81] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x81>; + m_ds[0x82] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x82>; + m_ds[0x83] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x83>; + m_ds[0x84] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x84>; + m_ds[0x85] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x85>; + m_ds[0x86] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x86>; + m_ds[0x87] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x87>; + m_ds[0x88] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x88>; + m_ds[0x89] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x89>; + m_ds[0x8a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x8a>; + m_ds[0x8b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x8b>; + m_ds[0x8c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x8c>; + m_ds[0x8d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x8d>; + m_ds[0x8e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x8e>; + m_ds[0x8f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x8f>; + m_ds[0x90] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x90>; + m_ds[0x91] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x91>; + m_ds[0x92] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x92>; + m_ds[0x93] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x93>; + m_ds[0x94] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x94>; + m_ds[0x95] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x95>; + m_ds[0x96] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x96>; + m_ds[0x97] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x97>; + m_ds[0x98] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x98>; + m_ds[0x99] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x99>; + m_ds[0x9a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x9a>; + m_ds[0x9b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x9b>; + m_ds[0x9c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x9c>; + m_ds[0x9d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x9d>; + m_ds[0x9e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x9e>; + m_ds[0x9f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0x9f>; + m_ds[0xa0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa0>; + m_ds[0xa1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa1>; + m_ds[0xa2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa2>; + m_ds[0xa3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa3>; + m_ds[0xa4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa4>; + m_ds[0xa5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa5>; + m_ds[0xa6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa6>; + m_ds[0xa7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa7>; + m_ds[0xa8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa8>; + m_ds[0xa9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xa9>; + m_ds[0xaa] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xaa>; + m_ds[0xab] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xab>; + m_ds[0xac] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xac>; + m_ds[0xad] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xad>; + m_ds[0xae] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xae>; + m_ds[0xaf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xaf>; + m_ds[0xb0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb0>; + m_ds[0xb1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb1>; + m_ds[0xb2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb2>; + m_ds[0xb3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb3>; + m_ds[0xb4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb4>; + m_ds[0xb5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb5>; + m_ds[0xb6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb6>; + m_ds[0xb7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb7>; + m_ds[0xb8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb8>; + m_ds[0xb9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xb9>; + m_ds[0xba] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xba>; + m_ds[0xbb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xbb>; + m_ds[0xbc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xbc>; + m_ds[0xbd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xbd>; + m_ds[0xbe] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xbe>; + m_ds[0xbf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xbf>; + m_ds[0xc0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc0>; + m_ds[0xc1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc1>; + m_ds[0xc2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc2>; + m_ds[0xc3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc3>; + m_ds[0xc4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc4>; + m_ds[0xc5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc5>; + m_ds[0xc6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc6>; + m_ds[0xc7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc7>; + m_ds[0xc8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc8>; + m_ds[0xc9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xc9>; + m_ds[0xca] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xca>; + m_ds[0xcb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xcb>; + m_ds[0xcc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xcc>; + m_ds[0xcd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xcd>; + m_ds[0xce] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xce>; + m_ds[0xcf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xcf>; + m_ds[0xd0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd0>; + m_ds[0xd1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd1>; + m_ds[0xd2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd2>; + m_ds[0xd3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd3>; + m_ds[0xd4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd4>; + m_ds[0xd5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd5>; + m_ds[0xd6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd6>; + m_ds[0xd7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd7>; + m_ds[0xd8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd8>; + m_ds[0xd9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xd9>; + m_ds[0xda] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xda>; + m_ds[0xdb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xdb>; + m_ds[0xdc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xdc>; + m_ds[0xdd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xdd>; + m_ds[0xde] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xde>; + m_ds[0xdf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xdf>; + m_ds[0xe0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe0>; + m_ds[0xe1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe1>; + m_ds[0xe2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe2>; + m_ds[0xe3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe3>; + m_ds[0xe4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe4>; + m_ds[0xe5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe5>; + m_ds[0xe6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe6>; + m_ds[0xe7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe7>; + m_ds[0xe8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe8>; + m_ds[0xe9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xe9>; + m_ds[0xea] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xea>; + m_ds[0xeb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xeb>; + m_ds[0xec] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xec>; + m_ds[0xed] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xed>; + m_ds[0xee] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xee>; + m_ds[0xef] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xef>; + m_ds[0xf0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf0>; + m_ds[0xf1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf1>; + m_ds[0xf2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf2>; + m_ds[0xf3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf3>; + m_ds[0xf4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf4>; + m_ds[0xf5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf5>; + m_ds[0xf6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf6>; + m_ds[0xf7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf7>; + m_ds[0xf8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf8>; + m_ds[0xf9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xf9>; + m_ds[0xfa] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xfa>; + m_ds[0xfb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xfb>; + m_ds[0xfc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xfc>; + m_ds[0xfd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xfd>; + m_ds[0xfe] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xfe>; + m_ds[0xff] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineExT<0xff>; } -template -void GPUDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex& v, const Vertex& dv) +__declspec(align(16)) static WORD s_dither[4][16] = { - DWORD iip = (sel >> 0) & 1; - DWORD me = (sel >> 1) & 1; - DWORD abe = (sel >> 2) & 1; - DWORD abr = (sel >> 3) & 3; - // DWORD tge = (sel >> 5) & 1; - DWORD tme = (sel >> 6) & 1; - DWORD twin = (sel >> 7) & 1; - DWORD rfb = (sel >> 1) & 3; - DWORD tfx = (sel >> 5) & 3; - - GSVector4 ps0123 = GSVector4::ps0123(); - GSVector4 ps4567 = GSVector4::ps4567(); + {7, 0, 6, 1, 7, 0, 6, 1, 7, 0, 6, 1, 7, 0, 6, 1}, + {2, 5, 3, 4, 2, 5, 3, 4, 2, 5, 3, 4, 2, 5, 3, 4}, + {1, 6, 0, 7, 1, 6, 0, 7, 1, 6, 0, 7, 1, 6, 0, 7}, + {4, 3, 5, 2, 4, 3, 5, 2, 4, 3, 5, 2, 4, 3, 5, 2}, +}; +void GPUDrawScanline::DrawScanlineT(int top, int left, int right, const Vertex& v) +{ GSVector4 s[2], t[2]; GSVector4 vt = v.t; s[0] = vt.xxxx(); s[1] = s[0]; t[0] = vt.yyyy(); t[1] = t[0]; - - if(tme) - { - GSVector4 dt = dv.t; - s[0] += dt.xxxx() * ps0123; - t[0] += dt.yyyy() * ps0123; - s[1] += dt.xxxx() * ps4567; - t[1] += dt.yyyy() * ps4567; + if(m_sel.tme) + { + s[0] += m_slenv.ds[0]; + t[0] += m_slenv.dt[0]; + s[1] += m_slenv.ds[1]; + t[1] += m_slenv.dt[1]; } - GSVector4 r[2], g[2], b[2]; + GSVector4i vc = GSVector4i(v.c); + + vc = vc.ps32(vc); + vc = vc.upl16(vc); + + GSVector4i r, g, b; - GSVector4 vc = v.c; + r = vc.xxxx(); + g = vc.yyyy(); + b = vc.zzzz(); - r[0] = vc.xxxx(); r[1] = r[0]; - g[0] = vc.yyyy(); g[1] = g[0]; - b[0] = vc.zzzz(); b[1] = b[0]; - - if(iip) + if(m_sel.iip) { - GSVector4 dc = dv.c; - - r[0] += dc.xxxx() * ps0123; - g[0] += dc.yyyy() * ps0123; - b[0] += dc.zzzz() * ps0123; - r[1] += dc.xxxx() * ps4567; - g[1] += dc.yyyy() * ps4567; - b[1] += dc.zzzz() * ps4567; + r = r.add16(m_slenv.dr); + g = g.add16(m_slenv.dg); + b = b.add16(m_slenv.db); } GSVector4i dither; @@ -888,7 +765,142 @@ void GPUDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex int steps = right - left; - WORD* fb = &m_slenv.vm[(top << 10) + left]; + WORD* fb = m_slenv.mem->GetPixelAddress(left, top); + + while(1) + { + do + { + int pixels = GSVector4i::store(GSVector4i::load(steps).min_i16(GSVector4i::load(8))); + + GSVector4i test = GSVector4i::zero(); + + GSVector4i d = GSVector4i::zero(); + + if(m_sel.rfb) // me | abe + { + d = GSVector4i::load(fb); + + if(m_sel.me) + { + test = d.sra16(15); + + if(test.alltrue()) + { + continue; + } + } + } + + GSVector4i c[4]; + + if(m_sel.tme) + { + SampleTexture(pixels, m_sel.ltf, m_sel.tlu, m_sel.twin, test, s, t, c); + } + + ColorTFX(m_sel.tfx, r, g, b, c); + + if(m_sel.abe) + { + AlphaBlend(m_sel.abr, m_sel.tme, d, c); + } + + if(m_sel.dtd) + { + c[0] = c[0].addus8(dither); + c[1] = c[1].addus8(dither); + c[2] = c[2].addus8(dither); + } + + WriteFrame(fb, test, c, pixels); + } + while(0); + + if(steps <= 8) break; + + steps -= 8; + + fb += 8; + + if(m_sel.tme) + { + GSVector4 ds = m_slenv.ds[2]; + GSVector4 dt = m_slenv.dt[2]; + + s[0] += ds; + t[0] += dt; + s[1] += ds; + t[1] += dt; + } + + if(m_sel.iip) + { + GSVector4i dc = m_slenv.dc; + + r = r.add16(dc.xxxx()); + g = g.add16(dc.yyyy()); + b = b.add16(dc.zzzz()); + } + } +} + +template +void GPUDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex& v) +{ + DWORD iip = (sel >> 0) & 1; + DWORD me = (sel >> 1) & 1; + DWORD abe = (sel >> 2) & 1; + DWORD abr = (sel >> 3) & 3; + // DWORD tge = (sel >> 5) & 1; + DWORD tme = (sel >> 6) & 1; + DWORD twin = (sel >> 7) & 1; + DWORD rfb = (sel >> 1) & 3; + DWORD tfx = (sel >> 5) & 3; + + GSVector4 s[2], t[2]; + + GSVector4 vt = v.t; + + s[0] = vt.xxxx(); s[1] = s[0]; + t[0] = vt.yyyy(); t[1] = t[0]; + + if(tme) + { + s[0] += m_slenv.ds[0]; + t[0] += m_slenv.dt[0]; + s[1] += m_slenv.ds[1]; + t[1] += m_slenv.dt[1]; + } + + GSVector4i vc = GSVector4i(v.c); + + vc = vc.ps32(vc); + vc = vc.upl16(vc); + + GSVector4i r, g, b; + + r = vc.xxxx(); + g = vc.yyyy(); + b = vc.zzzz(); + + if(m_sel.iip) + { + r = r.add16(m_slenv.dr); + g = g.add16(m_slenv.dg); + b = b.add16(m_slenv.db); + } + + GSVector4i dither; + + if(m_sel.dtd) + { + dither = GSVector4i::load(&s_dither[top & 3][left & 3]); + } + + int steps = right - left; + + WORD* fb = m_slenv.mem->GetPixelAddress(left, top); while(1) { @@ -948,24 +960,22 @@ void GPUDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex if(tme) { - GSVector4 dt8 = dv.t * 8.0f; + GSVector4 ds = m_slenv.ds[2]; + GSVector4 dt = m_slenv.dt[2]; - s[0] += dt8.xxxx(); - t[0] += dt8.yyyy(); - s[1] += dt8.xxxx(); - t[1] += dt8.yyyy(); + s[0] += ds; + t[0] += dt; + s[1] += ds; + t[1] += dt; } if(iip) { - GSVector4 dc8 = dv.c * 8.0f; + GSVector4i dc = m_slenv.dc; - r[0] += dc8.xxxx(); - g[0] += dc8.yyyy(); - b[0] += dc8.zzzz(); - r[1] += dc8.xxxx(); - g[1] += dc8.yyyy(); - b[1] += dc8.zzzz(); + r = r.add16(dc.xxxx()); + g = g.add16(dc.yyyy()); + b = b.add16(dc.zzzz()); } } } diff --git a/gsdx/GPUDrawScanline.h b/gsdx/GPUDrawScanline.h index d228ea0..8e94d55 100644 --- a/gsdx/GPUDrawScanline.h +++ b/gsdx/GPUDrawScanline.h @@ -59,7 +59,7 @@ class GPUDrawScanline : public GSAlignedClass<16>, public IDrawScanline __declspec(align(16)) struct ScanlineEnvironment { - WORD* vm; + GPULocalMemory* mem; const void* tex; const WORD* clut; @@ -69,22 +69,25 @@ class GPUDrawScanline : public GSAlignedClass<16>, public IDrawScanline GSVector4i a; GSVector4i md; // similar to gs fba + + GSVector4 ds[3], dt[3]; + GSVector4i dr, dg, db, dc; }; ScanlineSelector m_sel; ScanlineEnvironment m_slenv; - typedef void (GPUDrawScanline::*DrawScanlinePtr)(int top, int left, int right, const Vertex& v, const Vertex& dv); - DrawScanlinePtr m_ds[2048], m_dsf; - void InitEx(); + void Init(); + + void DrawScanlineT(int top, int left, int right, const Vertex& v); template - void DrawScanlineExT(int top, int left, int right, const Vertex& v, const Vertex& dv); + void DrawScanlineExT(int top, int left, int right, const Vertex& v); __forceinline void SampleTexture(int pixels, DWORD ltf, DWORD tlu, DWORD twin, GSVector4i& test, const GSVector4* s, const GSVector4* t, GSVector4i* c); - __forceinline void ColorTFX(DWORD tfx, const GSVector4* r, const GSVector4* g, const GSVector4* b, GSVector4i* c); + __forceinline void ColorTFX(DWORD tfx, const GSVector4i& r, const GSVector4i& g, const GSVector4i& b, GSVector4i* c); __forceinline void AlphaBlend(UINT32 abr, UINT32 tme, const GSVector4i& d, GSVector4i* c); __forceinline void WriteFrame(WORD* RESTRICT fb, const GSVector4i& test, const GSVector4i* c, int pixels); @@ -102,6 +105,8 @@ public: // IDrawScanline void SetupDraw(Vertex* vertices, int count, const void* texture); - void DrawScanline(int top, int left, int right, const Vertex& v, const Vertex& dv); + void SetupScanline(const Vertex& dv); + void DrawScanline(int top, int left, int right, const Vertex& v); void FillRect(const GSVector4i& r, const Vertex& v); + DrawScanlinePtr GetDrawScanlinePtr(); }; diff --git a/gsdx/GPULocalMemory.cpp b/gsdx/GPULocalMemory.cpp index 03f9aa5..b74d9bf 100644 --- a/gsdx/GPULocalMemory.cpp +++ b/gsdx/GPULocalMemory.cpp @@ -39,107 +39,226 @@ static void CheckRect(const CRect& r) GPULocalMemory::GPULocalMemory() { - m_vm8 = (BYTE*)VirtualAlloc(NULL, m_vmsize * 2, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + m_vm = (WORD*)VirtualAlloc(NULL, m_size * 2, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - memset(m_vm8, 0, m_vmsize); + memset(m_vm, 0, m_size * 2); + + // + + m_clut.buff = m_vm + m_size; + m_clut.dirty = true; + + // + + int size = 256 * 256 * (1 + 1 + 4) * 32; + + m_texture.buff[0] = (BYTE*)VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + m_texture.buff[1] = m_texture.buff[0] + 256 * 256 * 32; + m_texture.buff[2] = m_texture.buff[1] + 256 * 256 * 32; + + memset(m_texture.buff[0], 0, size); + + memset(m_texture.valid, 0, sizeof(m_texture.valid)); + + for(int y = 0, offset = 0; y < 2; y++) + { + for(int x = 0; x < 16; x++, offset += 256 * 256) + { + m_texture.page[0][y][x] = &((BYTE*)m_texture.buff[0])[offset]; + m_texture.page[1][y][x] = &((BYTE*)m_texture.buff[1])[offset]; + } + } + + for(int y = 0, offset = 0; y < 2; y++) + { + for(int x = 0; x < 16; x++, offset += 256 * 256) + { + m_texture.page[2][y][x] = &((DWORD*)m_texture.buff[2])[offset]; + } + } } GPULocalMemory::~GPULocalMemory() { - VirtualFree(m_vm8, 0, MEM_RELEASE); + VirtualFree(m_vm, 0, MEM_RELEASE); + + VirtualFree(m_texture.buff[0], 0, MEM_RELEASE); +} + +const WORD* GPULocalMemory::GetCLUT(int tp, int cx, int cy) +{ + if(m_clut.dirty || m_clut.tp != tp || m_clut.cx != cx || m_clut.cy != cy) + { + WORD* src = GetPixelAddress(cx << (4 + 1), cy << 1); + WORD* dst = m_clut.buff; + + // TODO: at normal horizontal resolution just return src + + if(tp == 0) + { + for(int i = 0; i < 16; i++) + { + dst[i] = src[i * 2]; + } + } + else if(tp == 1) + { + for(int i = 0; i < 256; i++) + { + dst[i] = src[i * 2]; + } + } + + m_clut.tp = tp; + m_clut.cx = cx; + m_clut.cy = cy; + m_clut.dirty = false; + } + + return m_clut.buff; +} + +const void* GPULocalMemory::GetTexture(int tp, int tx, int ty) +{ + if(tp == 3) + { + ASSERT(0); + + return NULL; + } + + void* buff = m_texture.page[tp][ty][tx]; + + UINT32 flag = 1 << tx; + + if((m_texture.valid[tp][ty] & flag) == 0) + { + int bpp = 0; + + switch(tp) + { + case 0: + ReadPage4(tx, ty, (BYTE*)buff); + bpp = 4; + break; + case 1: + ReadPage8(tx, ty, (BYTE*)buff); + bpp = 8; + break; + case 2: + case 3: + ReadPage16(tx, ty, (WORD*)buff); + bpp = 16; + default: + // FIXME: __assume(0); // vc9 generates bogus code in release mode + break; + } + + // TODO: m_state->m_perfmon.Put(GSPerfMon::Unswizzle, 256 * 256 * bpp >> 3); + + m_texture.valid[tp][ty] |= flag; + } + + return buff; +} + +void GPULocalMemory::Invalidate(const CRect& r) +{ + if(!m_clut.dirty) + { + if(r.top <= m_clut.cy && m_clut.cy < r.bottom) + { + int left = m_clut.cx << 4; + int right = left + (m_clut.tp == 0 ? 16 : 256); + + if(r.left < right && r.right > left) + { + m_clut.dirty = true; + } + } + } + + for(int y = 0, ye = min(r.bottom, 512), j = 0; y < ye; y += 256, j++) + { + if(r.top >= y + 256) continue; + + for(int x = 0, xe = min(r.right, 1024), i = 0; x < xe; x += 64, i++) + { + DWORD flag = 1 << i; + + if(r.left >= x + 256) continue; + + m_texture.valid[2][j] &= ~flag; + + if(r.left >= x + 128) continue; + + m_texture.valid[1][j] &= ~flag; + + if(r.left >= x + 64) continue; + + m_texture.valid[0][j] &= ~flag; + } + } } void GPULocalMemory::FillRect(const CRect& r, WORD c) { CheckRect(r); - CRect clip; - - clip.left = (r.left + 7) & ~7; - clip.top = r.top; - clip.right = r.right & ~7; - clip.bottom = r.bottom; + Invalidate(r); - for(int y = r.top; y < clip.top; y++) + WORD* RESTRICT dst = GetPixelAddress(r.left << 1, r.top << 1); + + int w = r.Width() << 1; + int h = r.Height() << 1; + + for(int j = 0; j < h; j++, dst += m_width) { - WORD* p = &m_vm16[y << 10]; - - for(int x = r.left; x < r.right; x++) + for(int i = 0; i < w; i++) { - p[x] = c; - } - } - - for(int y = clip.bottom; y < r.bottom; y++) - { - WORD* p = &m_vm16[y << 10]; - - for(int x = r.left; x < r.right; x++) - { - p[x] = c; - } - } - - if(r.left < clip.left || clip.right < r.right) - { - for(int y = clip.top; y < clip.bottom; y++) - { - WORD* p = &m_vm16[y << 10]; - - for(int x = r.left; x < clip.left; x++) - { - p[x] = c; - } - - for(int x = clip.right; x < r.right; x++) - { - p[x] = c; - } - } - } - - GSVector4i c128((c << 16) | c); - - for(int y = clip.top; y < clip.bottom; y++) - { - GSVector4i* p = (GSVector4i*)&m_vm16[(y << 10) + clip.left]; - - for(int i = 0, n = (clip.right - clip.left) >> 3; i < n; i++) - { - p[i] = c128; + dst[i] = c; } } } -void GPULocalMemory::WriteRect(const CRect& r, const WORD* c) +void GPULocalMemory::WriteRect(const CRect& r, const WORD* RESTRICT src) { CheckRect(r); + Invalidate(r); + + WORD* RESTRICT dst = GetPixelAddress(r.left << 1, r.top << 1); + int w = r.Width(); + int h = r.Height(); - for(int y = r.top; y < r.bottom; y++) + for(int j = 0; j < h; j++, src += w, dst += m_width << 1) { - WORD* p = &m_vm16[y << 10]; - - memcpy(&p[r.left], c, w * 2); - - c += w; + for(int i = 0; i < w; i++) + { + dst[i * 2] = src[i]; + dst[i * 2 + 1] = src[i]; + dst[i * 2 + m_width] = src[i]; + dst[i * 2 + m_width + 1] = src[i]; + } } } -void GPULocalMemory::ReadRect(const CRect& r, WORD* c) +void GPULocalMemory::ReadRect(const CRect& r, WORD* RESTRICT dst) { CheckRect(r); + WORD* RESTRICT src = GetPixelAddress(r.left << 1, r.top << 1); + int w = r.Width(); + int h = r.Height(); - for(int y = r.top; y < r.bottom; y++) + for(int j = 0; j < h; j++, src += m_width << 1, dst += w) { - WORD* p = &m_vm16[y << 10]; - - memcpy(c, &p[r.left], w * 2); - - c += w; + for(int i = 0; i < w; i++) + { + dst[i] = src[i * 2]; + } } } @@ -148,12 +267,17 @@ void GPULocalMemory::MoveRect(const CPoint& src, const CPoint& dst, int w, int h CheckRect(CRect(src, CSize(w, h))); CheckRect(CRect(dst, CSize(w, h))); - WORD* s = &m_vm16[(src.y << 10) + src.x]; - WORD* d = &m_vm16[(dst.y << 10) + dst.x]; + Invalidate(CRect(dst, CSize(w, h))); - for(int i = 0; i < h; i++, s += 1024, d += 1024) + WORD* s = GetPixelAddress(src.x << 1, src.y << 1); + WORD* d = GetPixelAddress(dst.x << 1, dst.y << 1); + + w <<= 1; + h <<= 1; + + for(int i = 0; i < h; i++, s += m_width, d += m_width) { - memcpy(d, s, w * 2); + memcpy(d, s, w * sizeof(WORD)); } } @@ -161,54 +285,64 @@ void GPULocalMemory::ReadPage4(int tx, int ty, BYTE* dst) { GSVector4i mask(0x0f0f0f0f); - WORD* src = &m_vm16[(ty << 18) + (tx << 6)]; + WORD* src = GetPixelAddress(tx << (6 + 1), ty << (8 + 1)); - for(int j = 0; j < 256; j++, src += 1024, dst += 256) + for(int j = 0; j < 256; j++, src += m_width << 1, dst += 256) { - GSVector4i* s = (GSVector4i*)src; - GSVector4i* d = (GSVector4i*)dst; - - for(int i = 0; i < 8; i++) + for(int i = 0; i < 64; i++) { - GSVector4i c = s[i]; - - GSVector4i l = c & mask; - GSVector4i h = c.andnot(mask) >> 4; - - d[i * 2 + 0] = l.upl8(h); - d[i * 2 + 1] = l.uph8(h); + dst[i * 4 + 0] = (src[i * 2] >> 0) & 0xf; + dst[i * 4 + 1] = (src[i * 2] >> 4) & 0xf; + dst[i * 4 + 2] = (src[i * 2] >> 8) & 0xf; + dst[i * 4 + 3] = (src[i * 2] >> 12) & 0xf; } } } void GPULocalMemory::ReadPage8(int tx, int ty, BYTE* dst) { - WORD* src = &m_vm16[(ty << 18) + (tx << 6)]; + WORD* src = GetPixelAddress(tx << (6 + 1), ty << (8 + 1)); - for(int j = 0; j < 256; j++, src += 1024, dst += 256) + for(int j = 0; j < 256; j++, src += m_width << 1, dst += 256) { - memcpy(dst, src, 256); + for(int i = 0; i < 128; i++) + { + ((WORD*)dst)[i] = src[i * 2]; + } } } void GPULocalMemory::ReadPage16(int tx, int ty, WORD* dst) { - WORD* src = &m_vm16[(ty << 18) + (tx << 6)]; + WORD* src = GetPixelAddress(tx << (6 + 1), ty << (8 + 1)); - for(int j = 0; j < 256; j++, src += 1024, dst += 256) + for(int j = 0; j < 256; j++, src += m_width << 1, dst += 256) { - memcpy(dst, src, 256 * sizeof(WORD)); + for(int i = 0; i < 256; i++) + { + dst[i] = src[i * 2]; + } } } -void GPULocalMemory::ReadPalette4(int cx, int cy, WORD* dst) +void GPULocalMemory::ReadFrame32(const CRect& r, DWORD* dst, bool rgb24) { - memcpy(dst, &m_vm16[(cy << 10) + (cx << 4)], 16 * sizeof(WORD)); -} + WORD* src = GetPixelAddress(r.left, r.top); -void GPULocalMemory::ReadPalette8(int cx, int cy, WORD* dst) -{ - memcpy(dst, &m_vm16[(cy << 10) + (cx << 4)], 256 * sizeof(WORD)); + if(rgb24) + { + for(int i = r.top; i < r.bottom; i++, src += m_width, dst += m_width) + { + Expand24(src, dst, r.Width()); + } + } + else + { + for(int i = r.top; i < r.bottom; i++, src += m_width, dst += m_width) + { + Expand16(src, dst, r.Width()); + } + } } void GPULocalMemory::Expand16(const WORD* RESTRICT src, DWORD* RESTRICT dst, int pixels) @@ -239,8 +373,102 @@ void GPULocalMemory::Expand24(const WORD* RESTRICT src, DWORD* RESTRICT dst, int BYTE* s = (BYTE*)src; - for(int i = 0; i < pixels; i++, s += 3) + for(int i = 0; i < pixels; i += 4, s += 12) { - dst[i] = (s[2] << 16) | (s[1] << 8) | s[0]; + dst[i + 0] = dst[i + 1] = (s[4] << 16) | (s[1] << 8) | s[0]; + dst[i + 2] = dst[i + 3] = (s[9] << 16) | (s[8] << 8) | s[5]; + } +} + +void GPULocalMemory::SaveBMP(LPCTSTR path, CRect r, int tp, int cx, int cy) +{ + r.left <<= 1; + r.top <<= 1; + r.right <<= 1; + r.bottom <<= 1; + + r.left &= ~1; + r.right &= ~1; + + if(FILE* fp = _tfopen(path, _T("wb"))) + { + BITMAPINFOHEADER bih; + memset(&bih, 0, sizeof(bih)); + bih.biSize = sizeof(bih); + bih.biWidth = r.Width(); + bih.biHeight = r.Height(); + bih.biPlanes = 1; + bih.biBitCount = 32; + bih.biCompression = BI_RGB; + bih.biSizeImage = bih.biWidth * bih.biHeight * 4; + + BITMAPFILEHEADER bfh; + memset(&bfh, 0, sizeof(bfh)); + bfh.bfType = 'MB'; + bfh.bfOffBits = sizeof(bfh) + sizeof(bih); + bfh.bfSize = bfh.bfOffBits + bih.biSizeImage; + bfh.bfReserved1 = bfh.bfReserved2 = 0; + + fwrite(&bfh, 1, sizeof(bfh), fp); + fwrite(&bih, 1, sizeof(bih), fp); + + WORD* buff = (WORD*)_aligned_malloc(sizeof(WORD) * m_width, 16); + DWORD* buff32 = (DWORD*)_aligned_malloc(sizeof(DWORD) * m_width, 16); + WORD* src = GetPixelAddress(r.left, r.bottom - 1); + const WORD* clut = GetCLUT(tp, cx, cy); + + for(int j = r.bottom - 1; j >= r.top; j--, src -= m_width) + { + switch(tp) + { + case 0: // 4 bpp + + for(int i = 0, k = r.Width() / 2; i < k; i++) + { + buff[i * 2 + 0] = clut[((BYTE*)src)[i] & 0xf]; + buff[i * 2 + 1] = clut[((BYTE*)src)[i] >> 4]; + } + + break; + + case 1: // 8 bpp + + for(int i = 0, k = r.Width(); i < k; i++) + { + buff[i] = clut[((BYTE*)src)[i]]; + } + + break; + + case 2: // 16 bpp; + + for(int i = 0, k = r.Width(); i < k; i++) + { + buff[i] = src[i]; + } + + break; + + case 3: // 24 bpp + + // TODO + + break; + } + + Expand16(buff, buff32, r.Width()); + + for(int i = 0, k = r.Width(); i < k; i++) + { + buff32[i] = (buff32[i] & 0xff00ff00) | ((buff32[i] & 0x00ff0000) >> 16) | ((buff32[i] & 0x000000ff) << 16); + } + + fwrite(buff32, 1, r.Width() * 4, fp); + } + + _aligned_free(buff); + _aligned_free(buff32); + + fclose(fp); } } diff --git a/gsdx/GPULocalMemory.h b/gsdx/GPULocalMemory.h index 99f5865..69b5977 100644 --- a/gsdx/GPULocalMemory.h +++ b/gsdx/GPULocalMemory.h @@ -31,29 +31,53 @@ class GPULocalMemory static const GSVector4i m_xgxx; static const GSVector4i m_rxxx; -public: - static const int m_vmsize = 1024 * 1024; + WORD* m_vm; - union {BYTE* m_vm8; WORD* m_vm16; DWORD* m_vm32;}; + struct + { + WORD* buff; + int tp, cx, cy; + bool dirty; + } m_clut; + + struct + { + BYTE* buff[3]; + void* page[3][2][16]; + WORD valid[3][2]; + } m_texture; + +public: + static const int m_width = (1024 << 1); + static const int m_height = (512 << 1); + static const int m_size = m_width * m_height * 2; public: GPULocalMemory(); virtual ~GPULocalMemory(); + WORD* GetPixelAddress(int x, int y) const {return &m_vm[(y << (10 + 1)) + x];} + + const WORD* GetCLUT(int tp, int cx, int cy); + const void* GetTexture(int tp, int tx, int ty); + + void Invalidate(const CRect& r); + void FillRect(const CRect& r, WORD c); - void WriteRect(const CRect& r, const WORD* c); - void ReadRect(const CRect& r, WORD* c); + void WriteRect(const CRect& r, const WORD* RESTRICT src); + void ReadRect(const CRect& r, WORD* RESTRICT dst); void MoveRect(const CPoint& src, const CPoint& dst, int w, int h); void ReadPage4(int tx, int ty, BYTE* dst); void ReadPage8(int tx, int ty, BYTE* dst); void ReadPage16(int tx, int ty, WORD* dst); - void ReadPalette4(int cx, int cy, WORD* dst); - void ReadPalette8(int cx, int cy, WORD* dst); + void ReadFrame32(const CRect& r, DWORD* dst, bool rgb24); static void Expand16(const WORD* RESTRICT src, DWORD* RESTRICT dst, int pixels); static void Expand24(const WORD* RESTRICT src, DWORD* RESTRICT dst, int pixels); + + void SaveBMP(LPCTSTR path, CRect r, int tp, int cx, int cy); }; #pragma warning(default: 4244) \ No newline at end of file diff --git a/gsdx/GPURenderer.h b/gsdx/GPURenderer.h index 49ccd5e..4215d8d 100644 --- a/gsdx/GPURenderer.h +++ b/gsdx/GPURenderer.h @@ -57,7 +57,7 @@ protected: { if(wParam == VK_DELETE) { - m_filter = m_filter ? 0 : 1; + m_filter = (m_filter + 1) % 3; return 0; } @@ -372,36 +372,11 @@ public: ResetDevice(); } - static const int ar[][2] = {{0, 0}, {4, 3}, {16, 9}}; - - int arx = ar[m_aspectratio][0]; - int ary = ar[m_aspectratio][1]; - - CRect cr; + CRect r; - GetClientRect(m_hWnd, &cr); + GetClientRect(m_hWnd, &r); - CRect r = cr; - - if(arx > 0 && ary > 0) - { - if(r.Width() * ary > r.Height() * arx) - { - int w = r.Height() * arx / ary; - r.left = r.CenterPoint().x - w / 2; - if(r.left & 1) r.left++; - r.right = r.left + w; - } - else - { - int h = r.Width() * ary / arx; - r.top = r.CenterPoint().y - h / 2; - if(r.top & 1) r.top++; - r.bottom = r.top + h; - } - } - - r &= cr; + GSUtil::FitRect(r, m_aspectratio); m_dev.Present(r); } diff --git a/gsdx/GPURendererSW.h b/gsdx/GPURendererSW.h index a6ad7c9..9080040 100644 --- a/gsdx/GPURendererSW.h +++ b/gsdx/GPURendererSW.h @@ -22,7 +22,6 @@ #pragma once #include "GPURenderer.h" -#include "GPUTextureCacheSW.h" #include "GPUDrawScanline.h" template @@ -32,18 +31,9 @@ class GPURendererSW : public GPURenderer protected: long m_threads; - GPUTextureCacheSW* m_tc; - GPUDrawScanline* m_ds; GSRasterizer* m_rst; Texture m_texture; - void Reset() - { - m_tc->Invalidate(CRect(0, 0, 1024, 512)); - - __super::Reset(); - } - void ResetDevice() { m_texture = Texture(); @@ -53,6 +43,11 @@ protected: { CRect r = m_env.GetDisplayRect(); + r.left <<= 1; + r.top <<= 1; + r.right <<= 1; + r.bottom <<= 1; + if(m_texture.GetWidth() != r.Width() || m_texture.GetHeight() != r.Height()) { m_texture = Texture(); @@ -64,31 +59,13 @@ protected: } // TODO - static DWORD* buff = (DWORD*)_aligned_malloc(1024 * 512 * 4, 16); - static int pitch = 1024 * 4; + static DWORD* buff = (DWORD*)_aligned_malloc(GPULocalMemory::m_size * 2, 16); - if(m_env.STATUS.ISRGB24) - { - DWORD* dst = buff; - - for(int i = r.top; i < r.bottom; i++, dst += 1024) - { - m_mem.Expand24(&m_mem.m_vm16[(i << 10) + r.left], dst, r.Width()); - } - } - else - { - DWORD* dst = buff; - - for(int i = r.top; i < r.bottom; i++, dst += 1024) - { - m_mem.Expand16(&m_mem.m_vm16[(i << 10) + r.left], dst, r.Width()); - } - } + m_mem.ReadFrame32(r, buff, !!m_env.STATUS.ISRGB24); r.OffsetRect(-r.TopLeft()); - m_texture.Update(r, buff, pitch); + m_texture.Update(r, buff, GPULocalMemory::m_width * 4); t = m_texture; @@ -107,11 +84,11 @@ protected: int s = m_v.UV.X; int t = m_v.UV.Y; - GSVector4 pt(x, y, s, t); + GSVector4 pt(x << 1, y << 1, s, t); v.p = pt.xyxy(GSVector4::zero()); - v.t = pt.zwzw(GSVector4::zero()) + GSVector4(0.5f); - v.c = GSVector4((DWORD)m_v.RGB.ai32); + v.t = pt.zwzw(GSVector4::zero()) + GSVector4(0.25f); + v.c = GSVector4((DWORD)m_v.RGB.ai32) * 128.0f; __super::VertexKick(); } @@ -137,25 +114,27 @@ protected: if(m_env.PRIM.TME) { - texture = m_tc->Lookup(m_env.STATUS); + texture = m_mem.GetTexture(m_env.STATUS.TP, m_env.STATUS.TX, m_env.STATUS.TY); if(!texture) {ASSERT(0); return;} } // - m_ds->SetOptions(m_filter, m_dither); + GPUDrawScanline* ds = (GPUDrawScanline*)m_rst->GetDrawScanline(); + + ds->SetOptions(m_filter, m_dither); - m_ds->SetupDraw(m_vertices, m_count, texture); + ds->SetupDraw(m_vertices, m_count, texture); // GSVector4i scissor; - scissor.x = m_env.DRAREATL.X; - scissor.y = m_env.DRAREATL.Y; - scissor.z = min(m_env.DRAREABR.X + 1, 1024); - scissor.w = min(m_env.DRAREABR.Y + 1, 512); + scissor.x = m_env.DRAREATL.X << 1; + scissor.y = m_env.DRAREATL.Y << 1; + scissor.z = min((m_env.DRAREABR.X + 1) << 1, 1024 << 1); + scissor.w = min((m_env.DRAREABR.Y + 1) << 1, 512 << 1); // @@ -207,31 +186,22 @@ protected: CRect r; - r.left = max(scissor.x, min(scissor.z, (int)tl.x)); - r.top = max(scissor.y, min(scissor.w, (int)tl.y)); - r.right = max(scissor.x, min(scissor.z, (int)br.x)); - r.bottom = max(scissor.y, min(scissor.w, (int)br.y)); + r.left = max(scissor.x, min(scissor.z, (int)tl.x)) >> 1; + r.top = max(scissor.y, min(scissor.w, (int)tl.y)) >> 1; + r.right = max(scissor.x, min(scissor.z, (int)br.x)) >> 1; + r.bottom = max(scissor.y, min(scissor.w, (int)br.y)) >> 1; Invalidate(r); } } - void Invalidate(const CRect& r) - { - __super::Invalidate(r); - - m_tc->Invalidate(r); - } - public: GPURendererSW(const GPURendererSettings& rs) : GPURenderer(rs) { m_threads = 1; - m_tc = new GPUTextureCacheSW(this); - m_ds = new GPUDrawScanline(this, m_filter, m_dither); - m_rst = new GSRasterizer(m_ds, 0, m_threads); + m_rst = new GSRasterizer(new GPUDrawScanline(this, m_filter, m_dither), 0, m_threads); m_fpDrawingKickHandlers[GPU_POLYGON] = (DrawingKickHandler)&GPURendererSW::DrawingKickTriangle; m_fpDrawingKickHandlers[GPU_LINE] = (DrawingKickHandler)&GPURendererSW::DrawingKickLine; @@ -240,8 +210,6 @@ public: virtual ~GPURendererSW() { - delete m_tc; - delete m_ds; delete m_rst; } }; diff --git a/gsdx/GPUState.cpp b/gsdx/GPUState.cpp index 66fd72f..f8540d0 100644 --- a/gsdx/GPUState.cpp +++ b/gsdx/GPUState.cpp @@ -63,6 +63,8 @@ void GPUState::Reset() { m_env.Reset(); + m_mem.Invalidate(CRect(0, 0, 1024, 512)); + memset(&m_v, 0, sizeof(m_v)); } @@ -132,6 +134,11 @@ void GPUState::SetTPAGE(GPUReg* r) } } +void GPUState::Invalidate(const CRect& r) +{ + m_mem.Invalidate(r); +} + void GPUState::WriteData(const BYTE* mem, UINT32 size) { GSPerfMonAutoTimer pmat(m_perfmon); @@ -209,14 +216,14 @@ void GPUState::Freeze(GPUFreezeData* data) { data->status = m_env.STATUS.ai32; memcpy(data->control, m_status, 256 * 4); - memcpy(data->vram, m_mem.m_vm16, 1024 * 512 * 2); + m_mem.ReadRect(CRect(0, 0, 1024, 512), data->vram); } void GPUState::Defrost(const GPUFreezeData* data) { m_env.STATUS.ai32 = data->status; memcpy(m_status, data->control, 256 * 4); - memcpy(m_mem.m_vm16, data->vram, 1024 * 512 * 2); + m_mem.WriteRect(CRect(0, 0, 1024, 512), data->vram); for(int i = 0; i <= 8; i++) { @@ -618,8 +625,6 @@ int GPUState::PH_Read(GPUReg* r, int size) m_mem.ReadRect(r2, (WORD*)m_read.buff); - Invalidate(r2); - Dump(_T("r")); m_env.STATUS.IMG = 1; @@ -681,85 +686,6 @@ int GPUState::PH_Environment(GPUReg* r, int size) return 1; } -void GPUState::SaveBMP(LPCTSTR path, UINT32 TP, CRect r) -{ - r.left &= ~1; - r.right &= ~1; - - if(FILE* fp = _tfopen(path, _T("wb"))) - { - BITMAPINFOHEADER bih; - memset(&bih, 0, sizeof(bih)); - bih.biSize = sizeof(bih); - bih.biWidth = r.Width(); - bih.biHeight = r.Height(); - bih.biPlanes = 1; - bih.biBitCount = 32; - bih.biCompression = BI_RGB; - bih.biSizeImage = bih.biWidth * bih.biHeight * 4; - - BITMAPFILEHEADER bfh; - memset(&bfh, 0, sizeof(bfh)); - bfh.bfType = 'MB'; - bfh.bfOffBits = sizeof(bfh) + sizeof(bih); - bfh.bfSize = bfh.bfOffBits + bih.biSizeImage; - bfh.bfReserved1 = bfh.bfReserved2 = 0; - - fwrite(&bfh, 1, sizeof(bfh), fp); - fwrite(&bih, 1, sizeof(bih), fp); - - WORD* buff = (WORD*)_aligned_malloc(sizeof(WORD) * 1024, 16); - DWORD* buff32 = (DWORD*)_aligned_malloc(sizeof(DWORD) * 1024, 16); - WORD* clut = GetCLUT(); - - for(int j = r.bottom - 1; j >= r.top; j--) - { - WORD* p = &m_mem.m_vm16[(j << 10) + r.left]; - - if(TP == 0) // 4 bpp - { - for(int i = 0, k = r.Width() / 2; i < k; i++) - { - buff[i * 2 + 0] = clut[((BYTE*)p)[i] & 0xf]; - buff[i * 2 + 1] = clut[((BYTE*)p)[i] >> 4]; - } - } - else if(TP == 1) // 8 bpp - { - for(int i = 0, k = r.Width(); i < k; i++) - { - buff[i] = clut[((BYTE*)p)[i]]; - } - } - else if(TP == 2) // 16 bpp; - { - for(int i = 0, k = r.Width(); i < k; i++) - { - buff[i] = p[i]; - } - } - else if(TP == 3) // 24 bpp - { - // TODO - } - - m_mem.Expand16(buff, buff32, r.Width()); - - for(int i = 0, k = r.Width(); i < k; i++) - { - buff32[i] = (buff32[i] & 0xff00ff00) | ((buff32[i] & 0x00ff0000) >> 16) | ((buff32[i] & 0x000000ff) << 16); - } - - fwrite(buff32, 1, r.Width() * 4, fp); - } - - _aligned_free(buff); - _aligned_free(buff32); - - fclose(fp); - } -} - // GPUState::Buffer::Buffer() diff --git a/gsdx/GPUState.h b/gsdx/GPUState.h index 1a8e2fe..80519c9 100644 --- a/gsdx/GPUState.h +++ b/gsdx/GPUState.h @@ -105,7 +105,7 @@ protected: #endif CString str; str.Format(_T("c:\\temp%d\\%04d_%s.bmp"), dir, s_n, s); - SaveBMP(str, TP, r); + m_mem.SaveBMP(str, r, TP, m_env.CLUT.X, m_env.CLUT.Y); } void Dump(LPCTSTR s, int inc = true) @@ -113,8 +113,6 @@ protected: Dump(s, 2, CRect(0, 0, 1024, 512), inc); } - void SaveBMP(LPCTSTR path, UINT32 TP, CRect r); - public: GPUDrawingEnvironment m_env; GPULocalMemory m_mem; @@ -131,9 +129,7 @@ public: virtual void FlushPrim() = 0; virtual void ResetPrim() = 0; virtual void VertexKick() = 0; - virtual void Invalidate(const CRect& r) {} - - WORD* GetCLUT() {return &m_mem.m_vm16[(m_env.CLUT.Y << 10) + (m_env.CLUT.X << 4)];} + virtual void Invalidate(const CRect& r); void WriteData(const BYTE* mem, UINT32 size); void ReadData(BYTE* mem, UINT32 size); diff --git a/gsdx/GPUTextureCacheSW.cpp b/gsdx/GPUTextureCacheSW.cpp deleted file mode 100644 index 03fb896..0000000 --- a/gsdx/GPUTextureCacheSW.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2007 Gabest - * http://www.gabest.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "StdAfx.h" -#include "GPUTextureCacheSW.h" - -GPUTextureCacheSW::GPUTextureCacheSW(GPUState* state) - : m_state(state) -{ - int size = 256 * 256 * (1 + 1 + 4) * 32; - - m_buff[0] = (BYTE*)VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - m_buff[1] = m_buff[0] + 256 * 256 * 32; - m_buff[2] = m_buff[1] + 256 * 256 * 32; - - memset(m_buff[0], 0, size); - - memset(m_valid, 0, sizeof(m_valid)); - - for(int y = 0, offset = 0; y < 2; y++) - { - for(int x = 0; x < 16; x++, offset += 256 * 256) - { - m_texture[0][y][x] = &((BYTE*)m_buff[0])[offset]; - m_texture[1][y][x] = &((BYTE*)m_buff[1])[offset]; - } - } - - for(int y = 0, offset = 0; y < 2; y++) - { - for(int x = 0; x < 16; x++, offset += 256 * 256) - { - m_texture[2][y][x] = &((DWORD*)m_buff[2])[offset]; - } - } -} - -GPUTextureCacheSW::~GPUTextureCacheSW() -{ - VirtualFree(m_buff[0], 0, MEM_RELEASE); -} - -const void* GPUTextureCacheSW::Lookup(const GPURegSTATUS& TPAGE) -{ - if(TPAGE.TP == 3) - { - ASSERT(0); - - return NULL; - } - - void* buff = m_texture[TPAGE.TP][TPAGE.TY][TPAGE.TX]; - - UINT32 flag = 1 << TPAGE.TX; - - if(TPAGE.TY) flag <<= 16; - - if((m_valid[TPAGE.TP] & flag) == 0) - { - int bpp = 0; - - switch(TPAGE.TP) - { - case 0: - m_state->m_mem.ReadPage4(TPAGE.TX, TPAGE.TY, (BYTE*)buff); - bpp = 4; - break; - case 1: - m_state->m_mem.ReadPage8(TPAGE.TX, TPAGE.TY, (BYTE*)buff); - bpp = 8; - break; - case 2: - case 3: - m_state->m_mem.ReadPage16(TPAGE.TX, TPAGE.TY, (WORD*)buff); - bpp = 16; - default: - // FIXME: __assume(0); // vc9 generates bogus code in release mode - break; - } - - m_state->m_perfmon.Put(GSPerfMon::Unswizzle, 256 * 256 * bpp >> 3); - - m_valid[TPAGE.TP] |= flag; - } - - return buff; -} - -void GPUTextureCacheSW::Invalidate(const CRect& r) -{ - for(int y = 0, ye = min(r.bottom, 512), j = 0; y < ye; y += 256, j += 16) - { - if(r.top >= y + 256) continue; - - for(int x = 0, xe = min(r.right, 1024), i = 0; x < xe; x += 64, i++) - { - DWORD flag = (1 << i) << j; - - if(r.left >= x + 256) continue; - - m_valid[2] &= ~flag; - - if(r.left >= x + 128) continue; - - m_valid[1] &= ~flag; - - if(r.left >= x + 64) continue; - - m_valid[0] &= ~flag; - } - } -} \ No newline at end of file diff --git a/gsdx/GPUTextureCacheSW.h b/gsdx/GPUTextureCacheSW.h deleted file mode 100644 index 0a4df4d..0000000 --- a/gsdx/GPUTextureCacheSW.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2007 Gabest - * http://www.gabest.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#pragma once - -#include "GPURenderer.h" - -class GPUTextureCacheSW -{ -protected: - GPUState* m_state; - BYTE* m_buff[3]; - void* m_texture[3][2][16]; - DWORD m_valid[3]; - -public: - GPUTextureCacheSW(GPUState* state); - virtual ~GPUTextureCacheSW(); - - const void* Lookup(const GPURegSTATUS& TPAGE); - - void Invalidate(const CRect& r); -}; diff --git a/gsdx/GPUVertexSW.h b/gsdx/GPUVertexSW.h deleted file mode 100644 index 26bcdd3..0000000 --- a/gsdx/GPUVertexSW.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2007 Gabest - * http://www.gabest.org - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#pragma once - -#include "GSVector.h" - -__declspec(align(16)) union GPUVertexSW -{ - typedef GSVector4 Vector; - - struct {Vector p, c;}; - struct {Vector v[2];}; - struct {float f[8];}; - - GPUVertexSW() {} - GPUVertexSW(const GPUVertexSW& v) {*this = v;} - - void operator = (const GPUVertexSW& v) {c = v.c; p = v.p;} - void operator += (const GPUVertexSW& v) {c += v.c; p += v.p;} - - friend GPUVertexSW operator + (const GPUVertexSW& v1, const GPUVertexSW& v2); - friend GPUVertexSW operator - (const GPUVertexSW& v1, const GPUVertexSW& v2); - friend GPUVertexSW operator * (const GPUVertexSW& v, const Vector& vv); - friend GPUVertexSW operator / (const GPUVertexSW& v, const Vector& vv); - friend GPUVertexSW operator * (const GPUVertexSW& v, float f); - friend GPUVertexSW operator / (const GPUVertexSW& v, float f); -}; - -__forceinline GPUVertexSW operator + (const GPUVertexSW& v1, const GPUVertexSW& v2) -{ - GPUVertexSW v0; - v0.c = v1.c + v2.c; - v0.p = v1.p + v2.p; - return v0; -} - -__forceinline GPUVertexSW operator - (const GPUVertexSW& v1, const GPUVertexSW& v2) -{ - GPUVertexSW v0; - v0.c = v1.c - v2.c; - v0.p = v1.p - v2.p; - return v0; -} - -__forceinline GPUVertexSW operator * (const GPUVertexSW& v, const GPUVertexSW::Vector& vv) -{ - GPUVertexSW v0; - v0.c = v.c * vv; - v0.p = v.p * vv; - return v0; -} - -__forceinline GPUVertexSW operator / (const GPUVertexSW& v, const GPUVertexSW::Vector& vv) -{ - GPUVertexSW v0; - v0.c = v.c / vv; - v0.p = v.p / vv; - return v0; -} - -__forceinline GPUVertexSW operator * (const GPUVertexSW& v, float f) -{ - GPUVertexSW v0; - GPUVertexSW::Vector vf(f); - v0.c = v.c * vf; - v0.p = v.p * vf; - return v0; -} - -__forceinline GPUVertexSW operator / (const GPUVertexSW& v, float f) -{ - GPUVertexSW v0; - GPUVertexSW::Vector vf(f); - v0.c = v.c / vf; - v0.p = v.p / vf; - return v0; -} diff --git a/gsdx/GS.h b/gsdx/GS.h index 328aa49..9c0b905 100644 --- a/gsdx/GS.h +++ b/gsdx/GS.h @@ -26,7 +26,7 @@ #pragma once -#define PLUGIN_VERSION 11 +#define PLUGIN_VERSION 12 #include "GSVector.h" diff --git a/gsdx/GSDrawScanline.cpp b/gsdx/GSDrawScanline.cpp index ade1a74..ee3d7c5 100644 --- a/gsdx/GSDrawScanline.cpp +++ b/gsdx/GSDrawScanline.cpp @@ -28,34 +28,7 @@ GSDrawScanline::GSDrawScanline(GSState* state) , m_fbo(NULL) , m_zbo(NULL) { - // w00t :P - - #define InitDS_IIP(iFPSM, iZPSM, iZTST, iIIP) \ - m_ds[iFPSM][iZPSM][iZTST][iIIP] = &GSDrawScanline::DrawScanlineT; \ - - #define InitDS_ZTST(iFPSM, iZPSM, iZTST) \ - InitDS_IIP(iFPSM, iZPSM, iZTST, 0) \ - InitDS_IIP(iFPSM, iZPSM, iZTST, 1) \ - - #define InitDS_ZPSM(iFPSM, iZPSM) \ - InitDS_ZTST(iFPSM, iZPSM, 0) \ - InitDS_ZTST(iFPSM, iZPSM, 1) \ - InitDS_ZTST(iFPSM, iZPSM, 2) \ - InitDS_ZTST(iFPSM, iZPSM, 3) \ - - #define InitDS_FPSM(iFPSM) \ - InitDS_ZPSM(iFPSM, 0) \ - InitDS_ZPSM(iFPSM, 1) \ - InitDS_ZPSM(iFPSM, 2) \ - - #define InitDS() \ - InitDS_FPSM(0) \ - InitDS_FPSM(1) \ - InitDS_FPSM(2) \ - - InitDS(); - - InitEx(); + Init(); } GSDrawScanline::~GSDrawScanline() @@ -173,7 +146,7 @@ void GSDrawScanline::SetupDraw(Vertex* vertices, int count, const void* texture) if(!pair->m_value) { - _ftprintf(fp, _T("m_dsmap.SetAt(0x%08x, &GSDrawScanline::DrawScanlineExT<0x%08x>);\n"), pair->m_key, pair->m_key); + _ftprintf(fp, _T("m_dsmap.SetAt(0x%08x, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x%08x>);\n"), pair->m_key, pair->m_key); } } @@ -276,9 +249,27 @@ void GSDrawScanline::SetupDraw(Vertex* vertices, int count, const void* texture) } } -void GSDrawScanline::DrawScanline(int top, int left, int right, const Vertex& v, const Vertex& dv) +void GSDrawScanline::SetupScanline(const Vertex& dv) { - (this->*m_dsf)(top, left, right, v, dv); + GSVector4 dp = dv.p; + + m_slenv.dp = dp; + m_slenv.dp4 = dp * 4.0; + + GSVector4 dt = dv.t; + + m_slenv.dt = dt; + m_slenv.dt4 = dt * 4.0; + + GSVector4 dc = dv.c; + + m_slenv.dc = dc; + m_slenv.dc4 = dc * 4.0; +} + +void GSDrawScanline::DrawScanline(int top, int left, int right, const Vertex& v) +{ + (this->*m_dsf)(top, left, right, v); } void GSDrawScanline::FillRect(const GSVector4i& r, const Vertex& v) @@ -316,6 +307,11 @@ void GSDrawScanline::FillRect(const GSVector4i& r, const Vertex& v) // m_slenv.steps += r.Width() * r.Height(); } +IDrawScanline::DrawScanlinePtr GSDrawScanline::GetDrawScanlinePtr() +{ + return m_dsf; +} + void GSDrawScanline::SetupOffset(Offset*& o, DWORD bp, DWORD bw, DWORD psm) { if(bw == 0) {ASSERT(0); return;} @@ -376,210 +372,6 @@ void GSDrawScanline::FreeOffsets() m_omap.RemoveAll(); } -template -void GSDrawScanline::DrawScanlineT(int top, int left, int right, const Vertex& v, const Vertex& dv) -{ - GSVector4i fa_base = m_slenv.fbr[top]; - GSVector4i* fa_offset = (GSVector4i*)&m_slenv.fbc[left & 3][left]; - - GSVector4i za_base = m_slenv.zbr[top]; - GSVector4i* za_offset = (GSVector4i*)&m_slenv.zbc[left & 3][left]; - - GSVector4 ps0123 = GSVector4::ps0123(); - - GSVector4 vp = v.p; - GSVector4 dp = dv.p; - GSVector4 z = vp.zzzz(); z += dp.zzzz() * ps0123; - GSVector4 f = vp.wwww(); f += dp.wwww() * ps0123; - - GSVector4 vt = v.t; - GSVector4 dt = dv.t; - GSVector4 s = vt.xxxx(); s += dt.xxxx() * ps0123; - GSVector4 t = vt.yyyy(); t += dt.yyyy() * ps0123; - GSVector4 q = vt.zzzz(); q += dt.zzzz() * ps0123; - - GSVector4 vc = v.c; - GSVector4 dc = dv.c; - GSVector4 r = vc.xxxx(); if(iip) r += dc.xxxx() * ps0123; - GSVector4 g = vc.yyyy(); if(iip) g += dc.yyyy() * ps0123; - GSVector4 b = vc.zzzz(); if(iip) b += dc.zzzz() * ps0123; - GSVector4 a = vc.wwww(); if(iip) a += dc.wwww() * ps0123; - - int steps = right - left; - - while(1) - { - do - { - GSVector4i za = za_base + GSVector4i::load(za_offset); - - GSVector4i zs = (GSVector4i(z * 0.5f) << 1) | (GSVector4i(z) & GSVector4i::x00000001(za)); - - GSVector4i test; - - if(!TestZ(zpsm, ztst, zs, za, test)) - { - continue; - } - - int pixels = GSVector4i::store(GSVector4i::load(steps).min_i16(GSVector4i::load(4))); - - GSVector4 c[12]; - - if(m_sel.tfx != TFX_NONE) - { - GSVector4 u = s; - GSVector4 v = t; - - if(!m_sel.fst) - { - GSVector4 w = q.rcp(); - - u *= w; - v *= w; - - if(m_sel.ltf) - { - u -= 0.5f; - v -= 0.5f; - } - } - - SampleTexture(pixels, ztst, m_sel.ltf, m_sel.tlu, test, u, v, c); - } - - AlphaTFX(m_sel.tfx, m_sel.tcc, a, c[3]); - - GSVector4i fm = m_slenv.fm; - GSVector4i zm = m_slenv.zm; - - if(!TestAlpha(m_sel.atst, m_sel.afail, c[3], fm, zm, test)) - { - continue; - } - - ColorTFX(m_sel.tfx, r, g, b, a, c[0], c[1], c[2]); - - if(m_sel.fge) - { - Fog(f, c[0], c[1], c[2]); - } - - GSVector4i fa = fa_base + GSVector4i::load(fa_offset); - - GSVector4i d = GSVector4i::zero(); - - if(m_sel.rfb) - { - d = ReadFrameX(fpsm == 1 ? 0 : fpsm, fa); - - if(fpsm != 1 && m_sel.date) - { - test |= (d ^ m_slenv.datm).sra32(31); - - if(test.alltrue()) - { - continue; - } - } - } - - fm |= test; - zm |= test; - - if(m_sel.abe != 255) - { - // GSVector4::expand(d, c[4], c[5], c[6], c[7]); - - c[4] = (d << 24) >> 24; - c[5] = (d << 16) >> 24; - c[6] = (d << 8) >> 24; - c[7] = (d >> 24); - - if(fpsm == 1) - { - c[7] = GSVector4(128.0f); - } - - c[8] = GSVector4::zero(); - c[9] = GSVector4::zero(); - c[10] = GSVector4::zero(); - c[11] = m_slenv.afix; - - DWORD abea = m_sel.abea; - DWORD abeb = m_sel.abeb; - DWORD abec = m_sel.abec; - DWORD abed = m_sel.abed; - - GSVector4 r = (c[abea*4 + 0] - c[abeb*4 + 0]).mod2x(c[abec*4 + 3]) + c[abed*4 + 0]; - GSVector4 g = (c[abea*4 + 1] - c[abeb*4 + 1]).mod2x(c[abec*4 + 3]) + c[abed*4 + 1]; - GSVector4 b = (c[abea*4 + 2] - c[abeb*4 + 2]).mod2x(c[abec*4 + 3]) + c[abed*4 + 2]; - - if(m_sel.pabe) - { - GSVector4 mask = c[3] >= GSVector4(128.0f); - - c[0] = c[0].blend8(r, mask); - c[1] = c[1].blend8(g, mask); - c[2] = c[2].blend8(b, mask); - } - else - { - c[0] = r; - c[1] = g; - c[2] = b; - } - } - - GSVector4i rb = GSVector4i(c[0]).ps32(GSVector4i(c[2])); - GSVector4i ga = GSVector4i(c[1]).ps32(GSVector4i(c[3])); - - GSVector4i rg = rb.upl16(ga) & m_slenv.colclamp; - GSVector4i ba = rb.uph16(ga) & m_slenv.colclamp; - - GSVector4i s = rg.upl32(ba).pu16(rg.uph32(ba)); - - if(fpsm != 1) - { - s |= m_slenv.fba; - } - - if(m_sel.rfb) - { - s = s.blend(d, fm); - } - - WriteFrameAndZBufX(fpsm, fa, fm, s, ztst > 0 ? zpsm : 3, za, zm, zs, pixels); - } - while(0); - - if(steps <= 4) break; - - steps -= 4; - - fa_offset++; - za_offset++; - - GSVector4 dp4 = dv.p * 4.0f; - - z += dp4.zzzz(); - f += dp4.wwww(); - - GSVector4 dt4 = dv.t * 4.0f; - - s += dt4.xxxx(); - t += dt4.yyyy(); - q += dt4.zzzz(); - - GSVector4 dc4 = dv.c * 4.0; - - if(iip) r += dc4.xxxx(); - if(iip) g += dc4.yyyy(); - if(iip) b += dc4.zzzz(); - if(iip) a += dc4.wwww(); - } -} - GSVector4i GSDrawScanline::Wrap(const GSVector4i& t) { GSVector4i clamp = t.sat_i16(m_slenv.t.min, m_slenv.t.max); @@ -1111,1229 +903,1256 @@ void GSDrawScanline::WriteFrameAndZBufX( // -void GSDrawScanline::InitEx() +void GSDrawScanline::Init() { + // w00t :P + + #define InitDS_IIP(iFPSM, iZPSM, iZTST, iIIP) \ + m_ds[iFPSM][iZPSM][iZTST][iIIP] = (DrawScanlinePtr)&GSDrawScanline::DrawScanlineT; \ + + #define InitDS_ZTST(iFPSM, iZPSM, iZTST) \ + InitDS_IIP(iFPSM, iZPSM, iZTST, 0) \ + InitDS_IIP(iFPSM, iZPSM, iZTST, 1) \ + + #define InitDS_ZPSM(iFPSM, iZPSM) \ + InitDS_ZTST(iFPSM, iZPSM, 0) \ + InitDS_ZTST(iFPSM, iZPSM, 1) \ + InitDS_ZTST(iFPSM, iZPSM, 2) \ + InitDS_ZTST(iFPSM, iZPSM, 3) \ + + #define InitDS_FPSM(iFPSM) \ + InitDS_ZPSM(iFPSM, 0) \ + InitDS_ZPSM(iFPSM, 1) \ + InitDS_ZPSM(iFPSM, 2) \ + + #define InitDS() \ + InitDS_FPSM(0) \ + InitDS_FPSM(1) \ + InitDS_FPSM(2) \ + + InitDS(); + // ffx - m_dsmap.SetAt(0x2420c265, &GSDrawScanline::DrawScanlineExT<0x2420c265>); - m_dsmap.SetAt(0x2420e245, &GSDrawScanline::DrawScanlineExT<0x2420e245>); - m_dsmap.SetAt(0x24402205, &GSDrawScanline::DrawScanlineExT<0x24402205>); - m_dsmap.SetAt(0x24402245, &GSDrawScanline::DrawScanlineExT<0x24402245>); - m_dsmap.SetAt(0x24402275, &GSDrawScanline::DrawScanlineExT<0x24402275>); - m_dsmap.SetAt(0x2440c265, &GSDrawScanline::DrawScanlineExT<0x2440c265>); - m_dsmap.SetAt(0x2440fc05, &GSDrawScanline::DrawScanlineExT<0x2440fc05>); - m_dsmap.SetAt(0x2440fc45, &GSDrawScanline::DrawScanlineExT<0x2440fc45>); - m_dsmap.SetAt(0x24411045, &GSDrawScanline::DrawScanlineExT<0x24411045>); - m_dsmap.SetAt(0x24411075, &GSDrawScanline::DrawScanlineExT<0x24411075>); - m_dsmap.SetAt(0x2444d465, &GSDrawScanline::DrawScanlineExT<0x2444d465>); - m_dsmap.SetAt(0x24610265, &GSDrawScanline::DrawScanlineExT<0x24610265>); - m_dsmap.SetAt(0x24802245, &GSDrawScanline::DrawScanlineExT<0x24802245>); - m_dsmap.SetAt(0x24802275, &GSDrawScanline::DrawScanlineExT<0x24802275>); - m_dsmap.SetAt(0x2480c265, &GSDrawScanline::DrawScanlineExT<0x2480c265>); - m_dsmap.SetAt(0x2480e245, &GSDrawScanline::DrawScanlineExT<0x2480e245>); - m_dsmap.SetAt(0x26402275, &GSDrawScanline::DrawScanlineExT<0x26402275>); - m_dsmap.SetAt(0x2880c205, &GSDrawScanline::DrawScanlineExT<0x2880c205>); - m_dsmap.SetAt(0x4ff02215, &GSDrawScanline::DrawScanlineExT<0x4ff02215>); - m_dsmap.SetAt(0x4ff02896, &GSDrawScanline::DrawScanlineExT<0x4ff02896>); - m_dsmap.SetAt(0x4ff0d475, &GSDrawScanline::DrawScanlineExT<0x4ff0d475>); - m_dsmap.SetAt(0x4ff4c275, &GSDrawScanline::DrawScanlineExT<0x4ff4c275>); - m_dsmap.SetAt(0x4ff4d475, &GSDrawScanline::DrawScanlineExT<0x4ff4d475>); - m_dsmap.SetAt(0x64402215, &GSDrawScanline::DrawScanlineExT<0x64402215>); - m_dsmap.SetAt(0x64402255, &GSDrawScanline::DrawScanlineExT<0x64402255>); - m_dsmap.SetAt(0x64402815, &GSDrawScanline::DrawScanlineExT<0x64402815>); - m_dsmap.SetAt(0x6440e215, &GSDrawScanline::DrawScanlineExT<0x6440e215>); - m_dsmap.SetAt(0x6440e255, &GSDrawScanline::DrawScanlineExT<0x6440e255>); - m_dsmap.SetAt(0x6440fc15, &GSDrawScanline::DrawScanlineExT<0x6440fc15>); - m_dsmap.SetAt(0x6444c265, &GSDrawScanline::DrawScanlineExT<0x6444c265>); - m_dsmap.SetAt(0x6444d465, &GSDrawScanline::DrawScanlineExT<0x6444d465>); - m_dsmap.SetAt(0x66402275, &GSDrawScanline::DrawScanlineExT<0x66402275>); - m_dsmap.SetAt(0x664038a5, &GSDrawScanline::DrawScanlineExT<0x664038a5>); - m_dsmap.SetAt(0x6a902215, &GSDrawScanline::DrawScanlineExT<0x6a902215>); - m_dsmap.SetAt(0xa420dc05, &GSDrawScanline::DrawScanlineExT<0xa420dc05>); - m_dsmap.SetAt(0xa440d405, &GSDrawScanline::DrawScanlineExT<0xa440d405>); - m_dsmap.SetAt(0xa440d425, &GSDrawScanline::DrawScanlineExT<0xa440d425>); - m_dsmap.SetAt(0xa440d465, &GSDrawScanline::DrawScanlineExT<0xa440d465>); - m_dsmap.SetAt(0xa440dc05, &GSDrawScanline::DrawScanlineExT<0xa440dc05>); - m_dsmap.SetAt(0xa440fc05, &GSDrawScanline::DrawScanlineExT<0xa440fc05>); - m_dsmap.SetAt(0xa444d465, &GSDrawScanline::DrawScanlineExT<0xa444d465>); - m_dsmap.SetAt(0xa480d425, &GSDrawScanline::DrawScanlineExT<0xa480d425>); - m_dsmap.SetAt(0xa480d465, &GSDrawScanline::DrawScanlineExT<0xa480d465>); - m_dsmap.SetAt(0xa6803435, &GSDrawScanline::DrawScanlineExT<0xa6803435>); - m_dsmap.SetAt(0xa680e425, &GSDrawScanline::DrawScanlineExT<0xa680e425>); - m_dsmap.SetAt(0xcff03435, &GSDrawScanline::DrawScanlineExT<0xcff03435>); - m_dsmap.SetAt(0xcff0d415, &GSDrawScanline::DrawScanlineExT<0xcff0d415>); - m_dsmap.SetAt(0xcff0d475, &GSDrawScanline::DrawScanlineExT<0xcff0d475>); - m_dsmap.SetAt(0xcff4d475, &GSDrawScanline::DrawScanlineExT<0xcff4d475>); - m_dsmap.SetAt(0xe440d465, &GSDrawScanline::DrawScanlineExT<0xe440d465>); - m_dsmap.SetAt(0xe440ec55, &GSDrawScanline::DrawScanlineExT<0xe440ec55>); - m_dsmap.SetAt(0xe440fc15, &GSDrawScanline::DrawScanlineExT<0xe440fc15>); - m_dsmap.SetAt(0xe440fc25, &GSDrawScanline::DrawScanlineExT<0xe440fc25>); - m_dsmap.SetAt(0xe440fc55, &GSDrawScanline::DrawScanlineExT<0xe440fc55>); - m_dsmap.SetAt(0xe444d465, &GSDrawScanline::DrawScanlineExT<0xe444d465>); - m_dsmap.SetAt(0xe444fc75, &GSDrawScanline::DrawScanlineExT<0xe444fc75>); - m_dsmap.SetAt(0xe484fc75, &GSDrawScanline::DrawScanlineExT<0xe484fc75>); - m_dsmap.SetAt(0xe680e425, &GSDrawScanline::DrawScanlineExT<0xe680e425>); - m_dsmap.SetAt(0x66402895, &GSDrawScanline::DrawScanlineExT<0x66402895>); - m_dsmap.SetAt(0xa480d405, &GSDrawScanline::DrawScanlineExT<0xa480d405>); - m_dsmap.SetAt(0xa480dc05, &GSDrawScanline::DrawScanlineExT<0xa480dc05>); - m_dsmap.SetAt(0x24202245, &GSDrawScanline::DrawScanlineExT<0x24202245>); - m_dsmap.SetAt(0xa440fc45, &GSDrawScanline::DrawScanlineExT<0xa440fc45>); + m_dsmap.SetAt(0x2420c265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2420c265>); + m_dsmap.SetAt(0x2420e245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2420e245>); + m_dsmap.SetAt(0x24402205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402205>); + m_dsmap.SetAt(0x24402245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402245>); + m_dsmap.SetAt(0x24402275, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402275>); + m_dsmap.SetAt(0x2440c265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440c265>); + m_dsmap.SetAt(0x2440fc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440fc05>); + m_dsmap.SetAt(0x2440fc45, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440fc45>); + m_dsmap.SetAt(0x24411045, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411045>); + m_dsmap.SetAt(0x24411075, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411075>); + m_dsmap.SetAt(0x2444d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2444d465>); + m_dsmap.SetAt(0x24610265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24610265>); + m_dsmap.SetAt(0x24802245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802245>); + m_dsmap.SetAt(0x24802275, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802275>); + m_dsmap.SetAt(0x2480c265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480c265>); + m_dsmap.SetAt(0x2480e245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480e245>); + m_dsmap.SetAt(0x26402275, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402275>); + m_dsmap.SetAt(0x2880c205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2880c205>); + m_dsmap.SetAt(0x4ff02215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02215>); + m_dsmap.SetAt(0x4ff02896, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02896>); + m_dsmap.SetAt(0x4ff0d475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0d475>); + m_dsmap.SetAt(0x4ff4c275, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4c275>); + m_dsmap.SetAt(0x4ff4d475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4d475>); + m_dsmap.SetAt(0x64402215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402215>); + m_dsmap.SetAt(0x64402255, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402255>); + m_dsmap.SetAt(0x64402815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402815>); + m_dsmap.SetAt(0x6440e215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e215>); + m_dsmap.SetAt(0x6440e255, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e255>); + m_dsmap.SetAt(0x6440fc15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440fc15>); + m_dsmap.SetAt(0x6444c265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444c265>); + m_dsmap.SetAt(0x6444d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444d465>); + m_dsmap.SetAt(0x66402275, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402275>); + m_dsmap.SetAt(0x664038a5, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x664038a5>); + m_dsmap.SetAt(0x6a902215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a902215>); + m_dsmap.SetAt(0xa420dc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa420dc05>); + m_dsmap.SetAt(0xa440d405, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d405>); + m_dsmap.SetAt(0xa440d425, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d425>); + m_dsmap.SetAt(0xa440d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d465>); + m_dsmap.SetAt(0xa440dc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440dc05>); + m_dsmap.SetAt(0xa440fc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440fc05>); + m_dsmap.SetAt(0xa444d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa444d465>); + m_dsmap.SetAt(0xa480d425, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d425>); + m_dsmap.SetAt(0xa480d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d465>); + m_dsmap.SetAt(0xa6803435, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6803435>); + m_dsmap.SetAt(0xa680e425, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa680e425>); + m_dsmap.SetAt(0xcff03435, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff03435>); + m_dsmap.SetAt(0xcff0d415, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0d415>); + m_dsmap.SetAt(0xcff0d475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0d475>); + m_dsmap.SetAt(0xcff4d475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4d475>); + m_dsmap.SetAt(0xe440d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d465>); + m_dsmap.SetAt(0xe440ec55, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ec55>); + m_dsmap.SetAt(0xe440fc15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440fc15>); + m_dsmap.SetAt(0xe440fc25, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440fc25>); + m_dsmap.SetAt(0xe440fc55, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440fc55>); + m_dsmap.SetAt(0xe444d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444d465>); + m_dsmap.SetAt(0xe444fc75, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444fc75>); + m_dsmap.SetAt(0xe484fc75, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe484fc75>); + m_dsmap.SetAt(0xe680e425, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe680e425>); + m_dsmap.SetAt(0x66402895, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402895>); + m_dsmap.SetAt(0xa480d405, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d405>); + m_dsmap.SetAt(0xa480dc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480dc05>); + m_dsmap.SetAt(0x24202245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24202245>); + m_dsmap.SetAt(0xa440fc45, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440fc45>); // ffxii - m_dsmap.SetAt(0x0ff02204, &GSDrawScanline::DrawScanlineExT<0x0ff02204>); - m_dsmap.SetAt(0x0ff11c04, &GSDrawScanline::DrawScanlineExT<0x0ff11c04>); - m_dsmap.SetAt(0x0ff11c14, &GSDrawScanline::DrawScanlineExT<0x0ff11c14>); - m_dsmap.SetAt(0x24210224, &GSDrawScanline::DrawScanlineExT<0x24210224>); - m_dsmap.SetAt(0x24410214, &GSDrawScanline::DrawScanlineExT<0x24410214>); - m_dsmap.SetAt(0x24410254, &GSDrawScanline::DrawScanlineExT<0x24410254>); - m_dsmap.SetAt(0x24411464, &GSDrawScanline::DrawScanlineExT<0x24411464>); - m_dsmap.SetAt(0x24411c04, &GSDrawScanline::DrawScanlineExT<0x24411c04>); - m_dsmap.SetAt(0x24431054, &GSDrawScanline::DrawScanlineExT<0x24431054>); - m_dsmap.SetAt(0x244b0224, &GSDrawScanline::DrawScanlineExT<0x244b0224>); - m_dsmap.SetAt(0x24810224, &GSDrawScanline::DrawScanlineExT<0x24810224>); - m_dsmap.SetAt(0x24810264, &GSDrawScanline::DrawScanlineExT<0x24810264>); - m_dsmap.SetAt(0x24811464, &GSDrawScanline::DrawScanlineExT<0x24811464>); - m_dsmap.SetAt(0x24830254, &GSDrawScanline::DrawScanlineExT<0x24830254>); - m_dsmap.SetAt(0x24831c04, &GSDrawScanline::DrawScanlineExT<0x24831c04>); - m_dsmap.SetAt(0x25830214, &GSDrawScanline::DrawScanlineExT<0x25830214>); - m_dsmap.SetAt(0x2a882204, &GSDrawScanline::DrawScanlineExT<0x2a882204>); - m_dsmap.SetAt(0x2ff02224, &GSDrawScanline::DrawScanlineExT<0x2ff02224>); - m_dsmap.SetAt(0x2ff30204, &GSDrawScanline::DrawScanlineExT<0x2ff30204>); - m_dsmap.SetAt(0x2ff82204, &GSDrawScanline::DrawScanlineExT<0x2ff82204>); - m_dsmap.SetAt(0x4ff02214, &GSDrawScanline::DrawScanlineExT<0x4ff02214>); - m_dsmap.SetAt(0x4ff20214, &GSDrawScanline::DrawScanlineExT<0x4ff20214>); - m_dsmap.SetAt(0x4ff4a264, &GSDrawScanline::DrawScanlineExT<0x4ff4a264>); - m_dsmap.SetAt(0x64403054, &GSDrawScanline::DrawScanlineExT<0x64403054>); - m_dsmap.SetAt(0x8ff11454, &GSDrawScanline::DrawScanlineExT<0x8ff11454>); - m_dsmap.SetAt(0xa4411424, &GSDrawScanline::DrawScanlineExT<0xa4411424>); - m_dsmap.SetAt(0xa4411454, &GSDrawScanline::DrawScanlineExT<0xa4411454>); - m_dsmap.SetAt(0xa4411464, &GSDrawScanline::DrawScanlineExT<0xa4411464>); - m_dsmap.SetAt(0xa4411c14, &GSDrawScanline::DrawScanlineExT<0xa4411c14>); - m_dsmap.SetAt(0xa4411c54, &GSDrawScanline::DrawScanlineExT<0xa4411c54>); - m_dsmap.SetAt(0xa4430c14, &GSDrawScanline::DrawScanlineExT<0xa4430c14>); - m_dsmap.SetAt(0xa4431054, &GSDrawScanline::DrawScanlineExT<0xa4431054>); - m_dsmap.SetAt(0xa4431464, &GSDrawScanline::DrawScanlineExT<0xa4431464>); - m_dsmap.SetAt(0xa4431c14, &GSDrawScanline::DrawScanlineExT<0xa4431c14>); - m_dsmap.SetAt(0xa4431c54, &GSDrawScanline::DrawScanlineExT<0xa4431c54>); - m_dsmap.SetAt(0xa4811424, &GSDrawScanline::DrawScanlineExT<0xa4811424>); - m_dsmap.SetAt(0xa4811464, &GSDrawScanline::DrawScanlineExT<0xa4811464>); - m_dsmap.SetAt(0xa4830c14, &GSDrawScanline::DrawScanlineExT<0xa4830c14>); - m_dsmap.SetAt(0xa4831464, &GSDrawScanline::DrawScanlineExT<0xa4831464>); - m_dsmap.SetAt(0xa4911424, &GSDrawScanline::DrawScanlineExT<0xa4911424>); - m_dsmap.SetAt(0xa4911464, &GSDrawScanline::DrawScanlineExT<0xa4911464>); - m_dsmap.SetAt(0xcff4a464, &GSDrawScanline::DrawScanlineExT<0xcff4a464>); - m_dsmap.SetAt(0xcff4b464, &GSDrawScanline::DrawScanlineExT<0xcff4b464>); - m_dsmap.SetAt(0xe4203054, &GSDrawScanline::DrawScanlineExT<0xe4203054>); - m_dsmap.SetAt(0xe445b464, &GSDrawScanline::DrawScanlineExT<0xe445b464>); - m_dsmap.SetAt(0xe445d464, &GSDrawScanline::DrawScanlineExT<0xe445d464>); - m_dsmap.SetAt(0xe485b464, &GSDrawScanline::DrawScanlineExT<0xe485b464>); + m_dsmap.SetAt(0x0ff02204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02204>); + m_dsmap.SetAt(0x0ff11c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff11c04>); + m_dsmap.SetAt(0x0ff11c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff11c14>); + m_dsmap.SetAt(0x24210224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24210224>); + m_dsmap.SetAt(0x24410214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410214>); + m_dsmap.SetAt(0x24410254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410254>); + m_dsmap.SetAt(0x24411464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411464>); + m_dsmap.SetAt(0x24411c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411c04>); + m_dsmap.SetAt(0x24431054, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24431054>); + m_dsmap.SetAt(0x244b0224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x244b0224>); + m_dsmap.SetAt(0x24810224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24810224>); + m_dsmap.SetAt(0x24810264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24810264>); + m_dsmap.SetAt(0x24811464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24811464>); + m_dsmap.SetAt(0x24830254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24830254>); + m_dsmap.SetAt(0x24831c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24831c04>); + m_dsmap.SetAt(0x25830214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25830214>); + m_dsmap.SetAt(0x2a882204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a882204>); + m_dsmap.SetAt(0x2ff02224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02224>); + m_dsmap.SetAt(0x2ff30204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff30204>); + m_dsmap.SetAt(0x2ff82204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff82204>); + m_dsmap.SetAt(0x4ff02214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02214>); + m_dsmap.SetAt(0x4ff20214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff20214>); + m_dsmap.SetAt(0x4ff4a264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4a264>); + m_dsmap.SetAt(0x64403054, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64403054>); + m_dsmap.SetAt(0x8ff11454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff11454>); + m_dsmap.SetAt(0xa4411424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411424>); + m_dsmap.SetAt(0xa4411454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411454>); + m_dsmap.SetAt(0xa4411464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411464>); + m_dsmap.SetAt(0xa4411c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411c14>); + m_dsmap.SetAt(0xa4411c54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411c54>); + m_dsmap.SetAt(0xa4430c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4430c14>); + m_dsmap.SetAt(0xa4431054, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4431054>); + m_dsmap.SetAt(0xa4431464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4431464>); + m_dsmap.SetAt(0xa4431c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4431c14>); + m_dsmap.SetAt(0xa4431c54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4431c54>); + m_dsmap.SetAt(0xa4811424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4811424>); + m_dsmap.SetAt(0xa4811464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4811464>); + m_dsmap.SetAt(0xa4830c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4830c14>); + m_dsmap.SetAt(0xa4831464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4831464>); + m_dsmap.SetAt(0xa4911424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4911424>); + m_dsmap.SetAt(0xa4911464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4911464>); + m_dsmap.SetAt(0xcff4a464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4a464>); + m_dsmap.SetAt(0xcff4b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4b464>); + m_dsmap.SetAt(0xe4203054, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4203054>); + m_dsmap.SetAt(0xe445b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445b464>); + m_dsmap.SetAt(0xe445d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445d464>); + m_dsmap.SetAt(0xe485b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe485b464>); // kingdom hearts - m_dsmap.SetAt(0x0ff02205, &GSDrawScanline::DrawScanlineExT<0x0ff02205>); - m_dsmap.SetAt(0x0ff03c04, &GSDrawScanline::DrawScanlineExT<0x0ff03c04>); - m_dsmap.SetAt(0x0ff03c05, &GSDrawScanline::DrawScanlineExT<0x0ff03c05>); - m_dsmap.SetAt(0x24403c04, &GSDrawScanline::DrawScanlineExT<0x24403c04>); - m_dsmap.SetAt(0x2440d824, &GSDrawScanline::DrawScanlineExT<0x2440d824>); - m_dsmap.SetAt(0x28102204, &GSDrawScanline::DrawScanlineExT<0x28102204>); - m_dsmap.SetAt(0x2ff03c00, &GSDrawScanline::DrawScanlineExT<0x2ff03c00>); - m_dsmap.SetAt(0x62a4d468, &GSDrawScanline::DrawScanlineExT<0x62a4d468>); - m_dsmap.SetAt(0x6420c254, &GSDrawScanline::DrawScanlineExT<0x6420c254>); - m_dsmap.SetAt(0x64402c14, &GSDrawScanline::DrawScanlineExT<0x64402c14>); - m_dsmap.SetAt(0x6440c214, &GSDrawScanline::DrawScanlineExT<0x6440c214>); - m_dsmap.SetAt(0x6440c254, &GSDrawScanline::DrawScanlineExT<0x6440c254>); - m_dsmap.SetAt(0x6440d464, &GSDrawScanline::DrawScanlineExT<0x6440d464>); - m_dsmap.SetAt(0x6480c254, &GSDrawScanline::DrawScanlineExT<0x6480c254>); - m_dsmap.SetAt(0x6ff02218, &GSDrawScanline::DrawScanlineExT<0x6ff02218>); - m_dsmap.SetAt(0x6ff0c228, &GSDrawScanline::DrawScanlineExT<0x6ff0c228>); - m_dsmap.SetAt(0xa440d434, &GSDrawScanline::DrawScanlineExT<0xa440d434>); - m_dsmap.SetAt(0xa440d474, &GSDrawScanline::DrawScanlineExT<0xa440d474>); - m_dsmap.SetAt(0xa440dc04, &GSDrawScanline::DrawScanlineExT<0xa440dc04>); - m_dsmap.SetAt(0xa4445464, &GSDrawScanline::DrawScanlineExT<0xa4445464>); - m_dsmap.SetAt(0xa444d464, &GSDrawScanline::DrawScanlineExT<0xa444d464>); - m_dsmap.SetAt(0xa480d434, &GSDrawScanline::DrawScanlineExT<0xa480d434>); - m_dsmap.SetAt(0xa480d474, &GSDrawScanline::DrawScanlineExT<0xa480d474>); - m_dsmap.SetAt(0xa480dc34, &GSDrawScanline::DrawScanlineExT<0xa480dc34>); - m_dsmap.SetAt(0xa484d474, &GSDrawScanline::DrawScanlineExT<0xa484d474>); - m_dsmap.SetAt(0xcff4d464, &GSDrawScanline::DrawScanlineExT<0xcff4d464>); - m_dsmap.SetAt(0xe4402c14, &GSDrawScanline::DrawScanlineExT<0xe4402c14>); - m_dsmap.SetAt(0xe4402c54, &GSDrawScanline::DrawScanlineExT<0xe4402c54>); - m_dsmap.SetAt(0xe4403414, &GSDrawScanline::DrawScanlineExT<0xe4403414>); - m_dsmap.SetAt(0xe4403c14, &GSDrawScanline::DrawScanlineExT<0xe4403c14>); - m_dsmap.SetAt(0xe4403c54, &GSDrawScanline::DrawScanlineExT<0xe4403c54>); - m_dsmap.SetAt(0xe440dc14, &GSDrawScanline::DrawScanlineExT<0xe440dc14>); - m_dsmap.SetAt(0xe440dc54, &GSDrawScanline::DrawScanlineExT<0xe440dc54>); - m_dsmap.SetAt(0xe444b464, &GSDrawScanline::DrawScanlineExT<0xe444b464>); - m_dsmap.SetAt(0xe444b468, &GSDrawScanline::DrawScanlineExT<0xe444b468>); - m_dsmap.SetAt(0xe444d464, &GSDrawScanline::DrawScanlineExT<0xe444d464>); - m_dsmap.SetAt(0xe4802c14, &GSDrawScanline::DrawScanlineExT<0xe4802c14>); - m_dsmap.SetAt(0xe480dc14, &GSDrawScanline::DrawScanlineExT<0xe480dc14>); - m_dsmap.SetAt(0xe480dc54, &GSDrawScanline::DrawScanlineExT<0xe480dc54>); + m_dsmap.SetAt(0x0ff02205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02205>); + m_dsmap.SetAt(0x0ff03c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c04>); + m_dsmap.SetAt(0x0ff03c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c05>); + m_dsmap.SetAt(0x24403c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403c04>); + m_dsmap.SetAt(0x2440d824, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440d824>); + m_dsmap.SetAt(0x28102204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x28102204>); + m_dsmap.SetAt(0x2ff03c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03c00>); + m_dsmap.SetAt(0x62a4d468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x62a4d468>); + m_dsmap.SetAt(0x6420c254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6420c254>); + m_dsmap.SetAt(0x64402c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402c14>); + m_dsmap.SetAt(0x6440c214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440c214>); + m_dsmap.SetAt(0x6440c254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440c254>); + m_dsmap.SetAt(0x6440d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440d464>); + m_dsmap.SetAt(0x6480c254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6480c254>); + m_dsmap.SetAt(0x6ff02218, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff02218>); + m_dsmap.SetAt(0x6ff0c228, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff0c228>); + m_dsmap.SetAt(0xa440d434, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d434>); + m_dsmap.SetAt(0xa440d474, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d474>); + m_dsmap.SetAt(0xa440dc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440dc04>); + m_dsmap.SetAt(0xa4445464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4445464>); + m_dsmap.SetAt(0xa444d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa444d464>); + m_dsmap.SetAt(0xa480d434, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d434>); + m_dsmap.SetAt(0xa480d474, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d474>); + m_dsmap.SetAt(0xa480dc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480dc34>); + m_dsmap.SetAt(0xa484d474, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa484d474>); + m_dsmap.SetAt(0xcff4d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4d464>); + m_dsmap.SetAt(0xe4402c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4402c14>); + m_dsmap.SetAt(0xe4402c54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4402c54>); + m_dsmap.SetAt(0xe4403414, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403414>); + m_dsmap.SetAt(0xe4403c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403c14>); + m_dsmap.SetAt(0xe4403c54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403c54>); + m_dsmap.SetAt(0xe440dc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc14>); + m_dsmap.SetAt(0xe440dc54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc54>); + m_dsmap.SetAt(0xe444b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444b464>); + m_dsmap.SetAt(0xe444b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444b468>); + m_dsmap.SetAt(0xe444d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444d464>); + m_dsmap.SetAt(0xe4802c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4802c14>); + m_dsmap.SetAt(0xe480dc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480dc14>); + m_dsmap.SetAt(0xe480dc54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480dc54>); // dbzbt3 - m_dsmap.SetAt(0x24402204, &GSDrawScanline::DrawScanlineExT<0x24402204>); - m_dsmap.SetAt(0x24402884, &GSDrawScanline::DrawScanlineExT<0x24402884>); - m_dsmap.SetAt(0x24402c84, &GSDrawScanline::DrawScanlineExT<0x24402c84>); - m_dsmap.SetAt(0x24403804, &GSDrawScanline::DrawScanlineExT<0x24403804>); - m_dsmap.SetAt(0x24403884, &GSDrawScanline::DrawScanlineExT<0x24403884>); - m_dsmap.SetAt(0x2440fc84, &GSDrawScanline::DrawScanlineExT<0x2440fc84>); - m_dsmap.SetAt(0x2448e464, &GSDrawScanline::DrawScanlineExT<0x2448e464>); - m_dsmap.SetAt(0x24802264, &GSDrawScanline::DrawScanlineExT<0x24802264>); - m_dsmap.SetAt(0x24882204, &GSDrawScanline::DrawScanlineExT<0x24882204>); - m_dsmap.SetAt(0x25202204, &GSDrawScanline::DrawScanlineExT<0x25202204>); - m_dsmap.SetAt(0x25403804, &GSDrawScanline::DrawScanlineExT<0x25403804>); - m_dsmap.SetAt(0x26402204, &GSDrawScanline::DrawScanlineExT<0x26402204>); - m_dsmap.SetAt(0x26402206, &GSDrawScanline::DrawScanlineExT<0x26402206>); - m_dsmap.SetAt(0x26402244, &GSDrawScanline::DrawScanlineExT<0x26402244>); - m_dsmap.SetAt(0x26403804, &GSDrawScanline::DrawScanlineExT<0x26403804>); - m_dsmap.SetAt(0x2640fc84, &GSDrawScanline::DrawScanlineExT<0x2640fc84>); - m_dsmap.SetAt(0x26802204, &GSDrawScanline::DrawScanlineExT<0x26802204>); - m_dsmap.SetAt(0x26803804, &GSDrawScanline::DrawScanlineExT<0x26803804>); - m_dsmap.SetAt(0x2ff02c86, &GSDrawScanline::DrawScanlineExT<0x2ff02c86>); - m_dsmap.SetAt(0x64402214, &GSDrawScanline::DrawScanlineExT<0x64402214>); - m_dsmap.SetAt(0xa4402c84, &GSDrawScanline::DrawScanlineExT<0xa4402c84>); - m_dsmap.SetAt(0xa4402c86, &GSDrawScanline::DrawScanlineExT<0xa4402c86>); - m_dsmap.SetAt(0xa4402cb4, &GSDrawScanline::DrawScanlineExT<0xa4402cb4>); - m_dsmap.SetAt(0xa4403424, &GSDrawScanline::DrawScanlineExT<0xa4403424>); - m_dsmap.SetAt(0xa4403464, &GSDrawScanline::DrawScanlineExT<0xa4403464>); - m_dsmap.SetAt(0xa4403c04, &GSDrawScanline::DrawScanlineExT<0xa4403c04>); - m_dsmap.SetAt(0xa440b464, &GSDrawScanline::DrawScanlineExT<0xa440b464>); - m_dsmap.SetAt(0xa440bc04, &GSDrawScanline::DrawScanlineExT<0xa440bc04>); - m_dsmap.SetAt(0xa440d424, &GSDrawScanline::DrawScanlineExT<0xa440d424>); - m_dsmap.SetAt(0xa440d464, &GSDrawScanline::DrawScanlineExT<0xa440d464>); - m_dsmap.SetAt(0xa440fc04, &GSDrawScanline::DrawScanlineExT<0xa440fc04>); - m_dsmap.SetAt(0xa443bc04, &GSDrawScanline::DrawScanlineExT<0xa443bc04>); - m_dsmap.SetAt(0xa4483464, &GSDrawScanline::DrawScanlineExT<0xa4483464>); - m_dsmap.SetAt(0xa4483c04, &GSDrawScanline::DrawScanlineExT<0xa4483c04>); - m_dsmap.SetAt(0xa4802c84, &GSDrawScanline::DrawScanlineExT<0xa4802c84>); - m_dsmap.SetAt(0xa4803464, &GSDrawScanline::DrawScanlineExT<0xa4803464>); - m_dsmap.SetAt(0xa4883c04, &GSDrawScanline::DrawScanlineExT<0xa4883c04>); - m_dsmap.SetAt(0xa5803c04, &GSDrawScanline::DrawScanlineExT<0xa5803c04>); - m_dsmap.SetAt(0xa6202c86, &GSDrawScanline::DrawScanlineExT<0xa6202c86>); - m_dsmap.SetAt(0xe4403464, &GSDrawScanline::DrawScanlineExT<0xe4403464>); - m_dsmap.SetAt(0xe440b464, &GSDrawScanline::DrawScanlineExT<0xe440b464>); - m_dsmap.SetAt(0xe4419464, &GSDrawScanline::DrawScanlineExT<0xe4419464>); - m_dsmap.SetAt(0xe58034e4, &GSDrawScanline::DrawScanlineExT<0xe58034e4>); - m_dsmap.SetAt(0xe62034e4, &GSDrawScanline::DrawScanlineExT<0xe62034e4>); - m_dsmap.SetAt(0xe6403464, &GSDrawScanline::DrawScanlineExT<0xe6403464>); + m_dsmap.SetAt(0x24402204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402204>); + m_dsmap.SetAt(0x24402884, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402884>); + m_dsmap.SetAt(0x24402c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402c84>); + m_dsmap.SetAt(0x24403804, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403804>); + m_dsmap.SetAt(0x24403884, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403884>); + m_dsmap.SetAt(0x2440fc84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440fc84>); + m_dsmap.SetAt(0x2448e464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2448e464>); + m_dsmap.SetAt(0x24802264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802264>); + m_dsmap.SetAt(0x24882204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24882204>); + m_dsmap.SetAt(0x25202204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25202204>); + m_dsmap.SetAt(0x25403804, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25403804>); + m_dsmap.SetAt(0x26402204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402204>); + m_dsmap.SetAt(0x26402206, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402206>); + m_dsmap.SetAt(0x26402244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402244>); + m_dsmap.SetAt(0x26403804, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403804>); + m_dsmap.SetAt(0x2640fc84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2640fc84>); + m_dsmap.SetAt(0x26802204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26802204>); + m_dsmap.SetAt(0x26803804, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803804>); + m_dsmap.SetAt(0x2ff02c86, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02c86>); + m_dsmap.SetAt(0x64402214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402214>); + m_dsmap.SetAt(0xa4402c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c84>); + m_dsmap.SetAt(0xa4402c86, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c86>); + m_dsmap.SetAt(0xa4402cb4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402cb4>); + m_dsmap.SetAt(0xa4403424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403424>); + m_dsmap.SetAt(0xa4403464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403464>); + m_dsmap.SetAt(0xa4403c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403c04>); + m_dsmap.SetAt(0xa440b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440b464>); + m_dsmap.SetAt(0xa440bc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440bc04>); + m_dsmap.SetAt(0xa440d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d424>); + m_dsmap.SetAt(0xa440d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d464>); + m_dsmap.SetAt(0xa440fc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440fc04>); + m_dsmap.SetAt(0xa443bc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa443bc04>); + m_dsmap.SetAt(0xa4483464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4483464>); + m_dsmap.SetAt(0xa4483c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4483c04>); + m_dsmap.SetAt(0xa4802c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4802c84>); + m_dsmap.SetAt(0xa4803464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4803464>); + m_dsmap.SetAt(0xa4883c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4883c04>); + m_dsmap.SetAt(0xa5803c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa5803c04>); + m_dsmap.SetAt(0xa6202c86, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6202c86>); + m_dsmap.SetAt(0xe4403464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403464>); + m_dsmap.SetAt(0xe440b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440b464>); + m_dsmap.SetAt(0xe4419464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4419464>); + m_dsmap.SetAt(0xe58034e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe58034e4>); + m_dsmap.SetAt(0xe62034e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe62034e4>); + m_dsmap.SetAt(0xe6403464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe6403464>); // xenosaga - m_dsmap.SetAt(0x0ff10234, &GSDrawScanline::DrawScanlineExT<0x0ff10234>); - m_dsmap.SetAt(0x24402234, &GSDrawScanline::DrawScanlineExT<0x24402234>); - m_dsmap.SetAt(0x24402264, &GSDrawScanline::DrawScanlineExT<0x24402264>); - m_dsmap.SetAt(0x24402274, &GSDrawScanline::DrawScanlineExT<0x24402274>); - m_dsmap.SetAt(0x24403464, &GSDrawScanline::DrawScanlineExT<0x24403464>); - m_dsmap.SetAt(0x24403834, &GSDrawScanline::DrawScanlineExT<0x24403834>); - m_dsmap.SetAt(0x24407464, &GSDrawScanline::DrawScanlineExT<0x24407464>); - m_dsmap.SetAt(0x24430264, &GSDrawScanline::DrawScanlineExT<0x24430264>); - m_dsmap.SetAt(0x2480c264, &GSDrawScanline::DrawScanlineExT<0x2480c264>); - m_dsmap.SetAt(0x26408434, &GSDrawScanline::DrawScanlineExT<0x26408434>); - m_dsmap.SetAt(0x26802264, &GSDrawScanline::DrawScanlineExT<0x26802264>); - m_dsmap.SetAt(0x26810214, &GSDrawScanline::DrawScanlineExT<0x26810214>); - m_dsmap.SetAt(0x2ff10234, &GSDrawScanline::DrawScanlineExT<0x2ff10234>); - m_dsmap.SetAt(0x4ff02c34, &GSDrawScanline::DrawScanlineExT<0x4ff02c34>); - m_dsmap.SetAt(0x4ff0dc34, &GSDrawScanline::DrawScanlineExT<0x4ff0dc34>); - m_dsmap.SetAt(0x60003c14, &GSDrawScanline::DrawScanlineExT<0x60003c14>); - m_dsmap.SetAt(0x6000c214, &GSDrawScanline::DrawScanlineExT<0x6000c214>); - m_dsmap.SetAt(0x64803c14, &GSDrawScanline::DrawScanlineExT<0x64803c14>); - m_dsmap.SetAt(0x6600c274, &GSDrawScanline::DrawScanlineExT<0x6600c274>); - m_dsmap.SetAt(0x66403c14, &GSDrawScanline::DrawScanlineExT<0x66403c14>); - m_dsmap.SetAt(0x66803464, &GSDrawScanline::DrawScanlineExT<0x66803464>); - m_dsmap.SetAt(0x6680b464, &GSDrawScanline::DrawScanlineExT<0x6680b464>); - m_dsmap.SetAt(0x6a902224, &GSDrawScanline::DrawScanlineExT<0x6a902224>); - m_dsmap.SetAt(0x6ff02264, &GSDrawScanline::DrawScanlineExT<0x6ff02264>); - m_dsmap.SetAt(0x6ff0b464, &GSDrawScanline::DrawScanlineExT<0x6ff0b464>); - m_dsmap.SetAt(0xa420d424, &GSDrawScanline::DrawScanlineExT<0xa420d424>); - m_dsmap.SetAt(0xa4402c34, &GSDrawScanline::DrawScanlineExT<0xa4402c34>); - m_dsmap.SetAt(0xa4407464, &GSDrawScanline::DrawScanlineExT<0xa4407464>); - m_dsmap.SetAt(0xa4410c14, &GSDrawScanline::DrawScanlineExT<0xa4410c14>); - m_dsmap.SetAt(0xa480d424, &GSDrawScanline::DrawScanlineExT<0xa480d424>); - m_dsmap.SetAt(0xa6203464, &GSDrawScanline::DrawScanlineExT<0xa6203464>); - m_dsmap.SetAt(0xa6803464, &GSDrawScanline::DrawScanlineExT<0xa6803464>); - m_dsmap.SetAt(0xa8911434, &GSDrawScanline::DrawScanlineExT<0xa8911434>); - m_dsmap.SetAt(0xe000cc14, &GSDrawScanline::DrawScanlineExT<0xe000cc14>); - m_dsmap.SetAt(0xe000cc24, &GSDrawScanline::DrawScanlineExT<0xe000cc24>); - m_dsmap.SetAt(0xe000cc34, &GSDrawScanline::DrawScanlineExT<0xe000cc34>); - m_dsmap.SetAt(0xe110cc34, &GSDrawScanline::DrawScanlineExT<0xe110cc34>); - m_dsmap.SetAt(0xe290cc14, &GSDrawScanline::DrawScanlineExT<0xe290cc14>); - m_dsmap.SetAt(0xe440cc14, &GSDrawScanline::DrawScanlineExT<0xe440cc14>); - m_dsmap.SetAt(0xe440cc24, &GSDrawScanline::DrawScanlineExT<0xe440cc24>); - m_dsmap.SetAt(0xe440cc34, &GSDrawScanline::DrawScanlineExT<0xe440cc34>); - m_dsmap.SetAt(0xe440d424, &GSDrawScanline::DrawScanlineExT<0xe440d424>); - m_dsmap.SetAt(0xe6803464, &GSDrawScanline::DrawScanlineExT<0xe6803464>); - m_dsmap.SetAt(0xe680b464, &GSDrawScanline::DrawScanlineExT<0xe680b464>); - m_dsmap.SetAt(0xe680cc14, &GSDrawScanline::DrawScanlineExT<0xe680cc14>); - m_dsmap.SetAt(0xeff03464, &GSDrawScanline::DrawScanlineExT<0xeff03464>); - m_dsmap.SetAt(0xeff0b464, &GSDrawScanline::DrawScanlineExT<0xeff0b464>); - m_dsmap.SetAt(0x0ff10c04, &GSDrawScanline::DrawScanlineExT<0x0ff10c04>); - m_dsmap.SetAt(0x26430c34, &GSDrawScanline::DrawScanlineExT<0x26430c34>); - m_dsmap.SetAt(0x4ff03c34, &GSDrawScanline::DrawScanlineExT<0x4ff03c34>); - m_dsmap.SetAt(0x6440c264, &GSDrawScanline::DrawScanlineExT<0x6440c264>); - m_dsmap.SetAt(0x64420214, &GSDrawScanline::DrawScanlineExT<0x64420214>); - m_dsmap.SetAt(0x6ff03c34, &GSDrawScanline::DrawScanlineExT<0x6ff03c34>); - m_dsmap.SetAt(0xe440cc64, &GSDrawScanline::DrawScanlineExT<0xe440cc64>); + m_dsmap.SetAt(0x0ff10234, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10234>); + m_dsmap.SetAt(0x24402234, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402234>); + m_dsmap.SetAt(0x24402264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402264>); + m_dsmap.SetAt(0x24402274, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402274>); + m_dsmap.SetAt(0x24403464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403464>); + m_dsmap.SetAt(0x24403834, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403834>); + m_dsmap.SetAt(0x24407464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24407464>); + m_dsmap.SetAt(0x24430264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24430264>); + m_dsmap.SetAt(0x2480c264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480c264>); + m_dsmap.SetAt(0x26408434, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26408434>); + m_dsmap.SetAt(0x26802264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26802264>); + m_dsmap.SetAt(0x26810214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26810214>); + m_dsmap.SetAt(0x2ff10234, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff10234>); + m_dsmap.SetAt(0x4ff02c34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02c34>); + m_dsmap.SetAt(0x4ff0dc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0dc34>); + m_dsmap.SetAt(0x60003c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x60003c14>); + m_dsmap.SetAt(0x6000c214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6000c214>); + m_dsmap.SetAt(0x64803c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64803c14>); + m_dsmap.SetAt(0x6600c274, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6600c274>); + m_dsmap.SetAt(0x66403c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66403c14>); + m_dsmap.SetAt(0x66803464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66803464>); + m_dsmap.SetAt(0x6680b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6680b464>); + m_dsmap.SetAt(0x6a902224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a902224>); + m_dsmap.SetAt(0x6ff02264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff02264>); + m_dsmap.SetAt(0x6ff0b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff0b464>); + m_dsmap.SetAt(0xa420d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa420d424>); + m_dsmap.SetAt(0xa4402c34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c34>); + m_dsmap.SetAt(0xa4407464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4407464>); + m_dsmap.SetAt(0xa4410c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4410c14>); + m_dsmap.SetAt(0xa480d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d424>); + m_dsmap.SetAt(0xa6203464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6203464>); + m_dsmap.SetAt(0xa6803464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6803464>); + m_dsmap.SetAt(0xa8911434, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa8911434>); + m_dsmap.SetAt(0xe000cc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe000cc14>); + m_dsmap.SetAt(0xe000cc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe000cc24>); + m_dsmap.SetAt(0xe000cc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe000cc34>); + m_dsmap.SetAt(0xe110cc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe110cc34>); + m_dsmap.SetAt(0xe290cc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe290cc14>); + m_dsmap.SetAt(0xe440cc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440cc14>); + m_dsmap.SetAt(0xe440cc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440cc24>); + m_dsmap.SetAt(0xe440cc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440cc34>); + m_dsmap.SetAt(0xe440d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d424>); + m_dsmap.SetAt(0xe6803464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe6803464>); + m_dsmap.SetAt(0xe680b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe680b464>); + m_dsmap.SetAt(0xe680cc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe680cc14>); + m_dsmap.SetAt(0xeff03464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xeff03464>); + m_dsmap.SetAt(0xeff0b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xeff0b464>); + m_dsmap.SetAt(0x0ff10c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10c04>); + m_dsmap.SetAt(0x26430c34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26430c34>); + m_dsmap.SetAt(0x4ff03c34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03c34>); + m_dsmap.SetAt(0x6440c264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440c264>); + m_dsmap.SetAt(0x64420214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64420214>); + m_dsmap.SetAt(0x6ff03c34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff03c34>); + m_dsmap.SetAt(0xe440cc64, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440cc64>); // xenosaga 2 - m_dsmap.SetAt(0x0ff10204, &GSDrawScanline::DrawScanlineExT<0x0ff10204>); - m_dsmap.SetAt(0x0ff42244, &GSDrawScanline::DrawScanlineExT<0x0ff42244>); - m_dsmap.SetAt(0x24445464, &GSDrawScanline::DrawScanlineExT<0x24445464>); - m_dsmap.SetAt(0x26803c04, &GSDrawScanline::DrawScanlineExT<0x26803c04>); - m_dsmap.SetAt(0x28903464, &GSDrawScanline::DrawScanlineExT<0x28903464>); - m_dsmap.SetAt(0x2ff02204, &GSDrawScanline::DrawScanlineExT<0x2ff02204>); - m_dsmap.SetAt(0x2ff03c04, &GSDrawScanline::DrawScanlineExT<0x2ff03c04>); - m_dsmap.SetAt(0x2ff90204, &GSDrawScanline::DrawScanlineExT<0x2ff90204>); - m_dsmap.SetAt(0x4ff02c14, &GSDrawScanline::DrawScanlineExT<0x4ff02c14>); - m_dsmap.SetAt(0x4ff42264, &GSDrawScanline::DrawScanlineExT<0x4ff42264>); - m_dsmap.SetAt(0x4ff43464, &GSDrawScanline::DrawScanlineExT<0x4ff43464>); - m_dsmap.SetAt(0x4ff4b464, &GSDrawScanline::DrawScanlineExT<0x4ff4b464>); - m_dsmap.SetAt(0x64403c14, &GSDrawScanline::DrawScanlineExT<0x64403c14>); - m_dsmap.SetAt(0x66202214, &GSDrawScanline::DrawScanlineExT<0x66202214>); - m_dsmap.SetAt(0x66402214, &GSDrawScanline::DrawScanlineExT<0x66402214>); - m_dsmap.SetAt(0x66802214, &GSDrawScanline::DrawScanlineExT<0x66802214>); - m_dsmap.SetAt(0x8ff43444, &GSDrawScanline::DrawScanlineExT<0x8ff43444>); - m_dsmap.SetAt(0xa4405464, &GSDrawScanline::DrawScanlineExT<0xa4405464>); - m_dsmap.SetAt(0xa4443464, &GSDrawScanline::DrawScanlineExT<0xa4443464>); - m_dsmap.SetAt(0xa4a13404, &GSDrawScanline::DrawScanlineExT<0xa4a13404>); - m_dsmap.SetAt(0xa520d424, &GSDrawScanline::DrawScanlineExT<0xa520d424>); - m_dsmap.SetAt(0xa540d424, &GSDrawScanline::DrawScanlineExT<0xa540d424>); - m_dsmap.SetAt(0xa580d424, &GSDrawScanline::DrawScanlineExT<0xa580d424>); - m_dsmap.SetAt(0xcff03464, &GSDrawScanline::DrawScanlineExT<0xcff03464>); - m_dsmap.SetAt(0xcff43464, &GSDrawScanline::DrawScanlineExT<0xcff43464>); - m_dsmap.SetAt(0xe000dc34, &GSDrawScanline::DrawScanlineExT<0xe000dc34>); - m_dsmap.SetAt(0xe440dc34, &GSDrawScanline::DrawScanlineExT<0xe440dc34>); - m_dsmap.SetAt(0xe4803464, &GSDrawScanline::DrawScanlineExT<0xe4803464>); - m_dsmap.SetAt(0xe4803c14, &GSDrawScanline::DrawScanlineExT<0xe4803c14>); + m_dsmap.SetAt(0x0ff10204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10204>); + m_dsmap.SetAt(0x0ff42244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff42244>); + m_dsmap.SetAt(0x24445464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24445464>); + m_dsmap.SetAt(0x26803c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803c04>); + m_dsmap.SetAt(0x28903464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x28903464>); + m_dsmap.SetAt(0x2ff02204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02204>); + m_dsmap.SetAt(0x2ff03c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03c04>); + m_dsmap.SetAt(0x2ff90204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff90204>); + m_dsmap.SetAt(0x4ff02c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02c14>); + m_dsmap.SetAt(0x4ff42264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff42264>); + m_dsmap.SetAt(0x4ff43464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff43464>); + m_dsmap.SetAt(0x4ff4b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4b464>); + m_dsmap.SetAt(0x64403c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64403c14>); + m_dsmap.SetAt(0x66202214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66202214>); + m_dsmap.SetAt(0x66402214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402214>); + m_dsmap.SetAt(0x66802214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66802214>); + m_dsmap.SetAt(0x8ff43444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff43444>); + m_dsmap.SetAt(0xa4405464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4405464>); + m_dsmap.SetAt(0xa4443464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4443464>); + m_dsmap.SetAt(0xa4a13404, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4a13404>); + m_dsmap.SetAt(0xa520d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa520d424>); + m_dsmap.SetAt(0xa540d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa540d424>); + m_dsmap.SetAt(0xa580d424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa580d424>); + m_dsmap.SetAt(0xcff03464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff03464>); + m_dsmap.SetAt(0xcff43464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff43464>); + m_dsmap.SetAt(0xe000dc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe000dc34>); + m_dsmap.SetAt(0xe440dc34, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc34>); + m_dsmap.SetAt(0xe4803464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4803464>); + m_dsmap.SetAt(0xe4803c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4803c14>); // tales of abyss - m_dsmap.SetAt(0x0ff02208, &GSDrawScanline::DrawScanlineExT<0x0ff02208>); - m_dsmap.SetAt(0x0ff03c88, &GSDrawScanline::DrawScanlineExT<0x0ff03c88>); - m_dsmap.SetAt(0x2091a048, &GSDrawScanline::DrawScanlineExT<0x2091a048>); - m_dsmap.SetAt(0x20a02248, &GSDrawScanline::DrawScanlineExT<0x20a02248>); - m_dsmap.SetAt(0x20a1b448, &GSDrawScanline::DrawScanlineExT<0x20a1b448>); - m_dsmap.SetAt(0x24402248, &GSDrawScanline::DrawScanlineExT<0x24402248>); - m_dsmap.SetAt(0x24442268, &GSDrawScanline::DrawScanlineExT<0x24442268>); - m_dsmap.SetAt(0x25403c88, &GSDrawScanline::DrawScanlineExT<0x25403c88>); - m_dsmap.SetAt(0x2680d448, &GSDrawScanline::DrawScanlineExT<0x2680d448>); - m_dsmap.SetAt(0x2a803448, &GSDrawScanline::DrawScanlineExT<0x2a803448>); - m_dsmap.SetAt(0x2a803c08, &GSDrawScanline::DrawScanlineExT<0x2a803c08>); - m_dsmap.SetAt(0x2a805448, &GSDrawScanline::DrawScanlineExT<0x2a805448>); - m_dsmap.SetAt(0x2a80d448, &GSDrawScanline::DrawScanlineExT<0x2a80d448>); - m_dsmap.SetAt(0x2a81b448, &GSDrawScanline::DrawScanlineExT<0x2a81b448>); - m_dsmap.SetAt(0x2a81b468, &GSDrawScanline::DrawScanlineExT<0x2a81b468>); - m_dsmap.SetAt(0x2ff02208, &GSDrawScanline::DrawScanlineExT<0x2ff02208>); - m_dsmap.SetAt(0x2ff03c88, &GSDrawScanline::DrawScanlineExT<0x2ff03c88>); - m_dsmap.SetAt(0x4ff02218, &GSDrawScanline::DrawScanlineExT<0x4ff02218>); - m_dsmap.SetAt(0x60a02268, &GSDrawScanline::DrawScanlineExT<0x60a02268>); - m_dsmap.SetAt(0x60a1b468, &GSDrawScanline::DrawScanlineExT<0x60a1b468>); - m_dsmap.SetAt(0x6445b458, &GSDrawScanline::DrawScanlineExT<0x6445b458>); - m_dsmap.SetAt(0xa441b448, &GSDrawScanline::DrawScanlineExT<0xa441b448>); - m_dsmap.SetAt(0xa441b468, &GSDrawScanline::DrawScanlineExT<0xa441b468>); - m_dsmap.SetAt(0xa445b448, &GSDrawScanline::DrawScanlineExT<0xa445b448>); - m_dsmap.SetAt(0xa445b468, &GSDrawScanline::DrawScanlineExT<0xa445b468>); - m_dsmap.SetAt(0xa464f468, &GSDrawScanline::DrawScanlineExT<0xa464f468>); - m_dsmap.SetAt(0xa481b448, &GSDrawScanline::DrawScanlineExT<0xa481b448>); - m_dsmap.SetAt(0xa481b468, &GSDrawScanline::DrawScanlineExT<0xa481b468>); - m_dsmap.SetAt(0xa484f468, &GSDrawScanline::DrawScanlineExT<0xa484f468>); - m_dsmap.SetAt(0xa485b468, &GSDrawScanline::DrawScanlineExT<0xa485b468>); - m_dsmap.SetAt(0xaff02cb8, &GSDrawScanline::DrawScanlineExT<0xaff02cb8>); - m_dsmap.SetAt(0xe441b468, &GSDrawScanline::DrawScanlineExT<0xe441b468>); - m_dsmap.SetAt(0xe4443468, &GSDrawScanline::DrawScanlineExT<0xe4443468>); - m_dsmap.SetAt(0xe445a468, &GSDrawScanline::DrawScanlineExT<0xe445a468>); - m_dsmap.SetAt(0xe445b468, &GSDrawScanline::DrawScanlineExT<0xe445b468>); - m_dsmap.SetAt(0xe481b468, &GSDrawScanline::DrawScanlineExT<0xe481b468>); - m_dsmap.SetAt(0xe485b468, &GSDrawScanline::DrawScanlineExT<0xe485b468>); + m_dsmap.SetAt(0x0ff02208, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02208>); + m_dsmap.SetAt(0x0ff03c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c88>); + m_dsmap.SetAt(0x2091a048, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2091a048>); + m_dsmap.SetAt(0x20a02248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x20a02248>); + m_dsmap.SetAt(0x20a1b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x20a1b448>); + m_dsmap.SetAt(0x24402248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402248>); + m_dsmap.SetAt(0x24442268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24442268>); + m_dsmap.SetAt(0x25403c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25403c88>); + m_dsmap.SetAt(0x2680d448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680d448>); + m_dsmap.SetAt(0x2a803448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a803448>); + m_dsmap.SetAt(0x2a803c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a803c08>); + m_dsmap.SetAt(0x2a805448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a805448>); + m_dsmap.SetAt(0x2a80d448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a80d448>); + m_dsmap.SetAt(0x2a81b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a81b448>); + m_dsmap.SetAt(0x2a81b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a81b468>); + m_dsmap.SetAt(0x2ff02208, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02208>); + m_dsmap.SetAt(0x2ff03c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03c88>); + m_dsmap.SetAt(0x4ff02218, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02218>); + m_dsmap.SetAt(0x60a02268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x60a02268>); + m_dsmap.SetAt(0x60a1b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x60a1b468>); + m_dsmap.SetAt(0x6445b458, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6445b458>); + m_dsmap.SetAt(0xa441b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441b448>); + m_dsmap.SetAt(0xa441b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441b468>); + m_dsmap.SetAt(0xa445b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa445b448>); + m_dsmap.SetAt(0xa445b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa445b468>); + m_dsmap.SetAt(0xa464f468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa464f468>); + m_dsmap.SetAt(0xa481b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa481b448>); + m_dsmap.SetAt(0xa481b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa481b468>); + m_dsmap.SetAt(0xa484f468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa484f468>); + m_dsmap.SetAt(0xa485b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa485b468>); + m_dsmap.SetAt(0xaff02cb8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02cb8>); + m_dsmap.SetAt(0xe441b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441b468>); + m_dsmap.SetAt(0xe4443468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4443468>); + m_dsmap.SetAt(0xe445a468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445a468>); + m_dsmap.SetAt(0xe445b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445b468>); + m_dsmap.SetAt(0xe481b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481b468>); + m_dsmap.SetAt(0xe485b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe485b468>); // persona 4 - m_dsmap.SetAt(0x0ff1a248, &GSDrawScanline::DrawScanlineExT<0x0ff1a248>); - m_dsmap.SetAt(0x24210248, &GSDrawScanline::DrawScanlineExT<0x24210248>); - m_dsmap.SetAt(0x2441a268, &GSDrawScanline::DrawScanlineExT<0x2441a268>); - m_dsmap.SetAt(0x2441b468, &GSDrawScanline::DrawScanlineExT<0x2441b468>); - m_dsmap.SetAt(0x24810248, &GSDrawScanline::DrawScanlineExT<0x24810248>); - m_dsmap.SetAt(0x24811048, &GSDrawScanline::DrawScanlineExT<0x24811048>); - m_dsmap.SetAt(0x24842268, &GSDrawScanline::DrawScanlineExT<0x24842268>); - m_dsmap.SetAt(0x25411048, &GSDrawScanline::DrawScanlineExT<0x25411048>); - m_dsmap.SetAt(0x2541b048, &GSDrawScanline::DrawScanlineExT<0x2541b048>); - m_dsmap.SetAt(0x26842068, &GSDrawScanline::DrawScanlineExT<0x26842068>); - m_dsmap.SetAt(0x2ff82248, &GSDrawScanline::DrawScanlineExT<0x2ff82248>); - m_dsmap.SetAt(0x4ff42268, &GSDrawScanline::DrawScanlineExT<0x4ff42268>); - m_dsmap.SetAt(0x64402268, &GSDrawScanline::DrawScanlineExT<0x64402268>); - m_dsmap.SetAt(0x64442268, &GSDrawScanline::DrawScanlineExT<0x64442268>); - m_dsmap.SetAt(0x6445a268, &GSDrawScanline::DrawScanlineExT<0x6445a268>); - m_dsmap.SetAt(0x64802268, &GSDrawScanline::DrawScanlineExT<0x64802268>); - m_dsmap.SetAt(0x66842068, &GSDrawScanline::DrawScanlineExT<0x66842068>); - m_dsmap.SetAt(0xa4251468, &GSDrawScanline::DrawScanlineExT<0xa4251468>); - m_dsmap.SetAt(0xa4411448, &GSDrawScanline::DrawScanlineExT<0xa4411448>); - m_dsmap.SetAt(0xa4411468, &GSDrawScanline::DrawScanlineExT<0xa4411468>); - m_dsmap.SetAt(0xa4811468, &GSDrawScanline::DrawScanlineExT<0xa4811468>); - m_dsmap.SetAt(0xa4851468, &GSDrawScanline::DrawScanlineExT<0xa4851468>); - m_dsmap.SetAt(0xa541b448, &GSDrawScanline::DrawScanlineExT<0xa541b448>); - m_dsmap.SetAt(0xa541b468, &GSDrawScanline::DrawScanlineExT<0xa541b468>); - m_dsmap.SetAt(0xa6843468, &GSDrawScanline::DrawScanlineExT<0xa6843468>); - m_dsmap.SetAt(0xe441a468, &GSDrawScanline::DrawScanlineExT<0xe441a468>); - m_dsmap.SetAt(0xe441d468, &GSDrawScanline::DrawScanlineExT<0xe441d468>); - m_dsmap.SetAt(0xe443b468, &GSDrawScanline::DrawScanlineExT<0xe443b468>); - m_dsmap.SetAt(0xe447b468, &GSDrawScanline::DrawScanlineExT<0xe447b468>); - m_dsmap.SetAt(0xe6843468, &GSDrawScanline::DrawScanlineExT<0xe6843468>); + m_dsmap.SetAt(0x0ff1a248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff1a248>); + m_dsmap.SetAt(0x24210248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24210248>); + m_dsmap.SetAt(0x2441a268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441a268>); + m_dsmap.SetAt(0x2441b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441b468>); + m_dsmap.SetAt(0x24810248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24810248>); + m_dsmap.SetAt(0x24811048, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24811048>); + m_dsmap.SetAt(0x24842268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24842268>); + m_dsmap.SetAt(0x25411048, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25411048>); + m_dsmap.SetAt(0x2541b048, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2541b048>); + m_dsmap.SetAt(0x26842068, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26842068>); + m_dsmap.SetAt(0x2ff82248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff82248>); + m_dsmap.SetAt(0x4ff42268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff42268>); + m_dsmap.SetAt(0x64402268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402268>); + m_dsmap.SetAt(0x64442268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64442268>); + m_dsmap.SetAt(0x6445a268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6445a268>); + m_dsmap.SetAt(0x64802268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64802268>); + m_dsmap.SetAt(0x66842068, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66842068>); + m_dsmap.SetAt(0xa4251468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4251468>); + m_dsmap.SetAt(0xa4411448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411448>); + m_dsmap.SetAt(0xa4411468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411468>); + m_dsmap.SetAt(0xa4811468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4811468>); + m_dsmap.SetAt(0xa4851468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4851468>); + m_dsmap.SetAt(0xa541b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa541b448>); + m_dsmap.SetAt(0xa541b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa541b468>); + m_dsmap.SetAt(0xa6843468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6843468>); + m_dsmap.SetAt(0xe441a468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441a468>); + m_dsmap.SetAt(0xe441d468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441d468>); + m_dsmap.SetAt(0xe443b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443b468>); + m_dsmap.SetAt(0xe447b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe447b468>); + m_dsmap.SetAt(0xe6843468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe6843468>); // ffx-2 - m_dsmap.SetAt(0x20002806, &GSDrawScanline::DrawScanlineExT<0x20002806>); - m_dsmap.SetAt(0x24402805, &GSDrawScanline::DrawScanlineExT<0x24402805>); - m_dsmap.SetAt(0x2440c245, &GSDrawScanline::DrawScanlineExT<0x2440c245>); - m_dsmap.SetAt(0x2440c445, &GSDrawScanline::DrawScanlineExT<0x2440c445>); - m_dsmap.SetAt(0x2440d065, &GSDrawScanline::DrawScanlineExT<0x2440d065>); - m_dsmap.SetAt(0x2440d805, &GSDrawScanline::DrawScanlineExT<0x2440d805>); - m_dsmap.SetAt(0x24410215, &GSDrawScanline::DrawScanlineExT<0x24410215>); - m_dsmap.SetAt(0x24411c19, &GSDrawScanline::DrawScanlineExT<0x24411c19>); - m_dsmap.SetAt(0x24490214, &GSDrawScanline::DrawScanlineExT<0x24490214>); - m_dsmap.SetAt(0x24491854, &GSDrawScanline::DrawScanlineExT<0x24491854>); - m_dsmap.SetAt(0x244b1814, &GSDrawScanline::DrawScanlineExT<0x244b1814>); - m_dsmap.SetAt(0x2480c225, &GSDrawScanline::DrawScanlineExT<0x2480c225>); - m_dsmap.SetAt(0x2a902205, &GSDrawScanline::DrawScanlineExT<0x2a902205>); - m_dsmap.SetAt(0x2ff02805, &GSDrawScanline::DrawScanlineExT<0x2ff02805>); - m_dsmap.SetAt(0x2ff0c245, &GSDrawScanline::DrawScanlineExT<0x2ff0c245>); - m_dsmap.SetAt(0x4ff03829, &GSDrawScanline::DrawScanlineExT<0x4ff03829>); - m_dsmap.SetAt(0x4ff0c215, &GSDrawScanline::DrawScanlineExT<0x4ff0c215>); - m_dsmap.SetAt(0x6440d065, &GSDrawScanline::DrawScanlineExT<0x6440d065>); - m_dsmap.SetAt(0x6440d815, &GSDrawScanline::DrawScanlineExT<0x6440d815>); - m_dsmap.SetAt(0x6440e225, &GSDrawScanline::DrawScanlineExT<0x6440e225>); - m_dsmap.SetAt(0x6440e275, &GSDrawScanline::DrawScanlineExT<0x6440e275>); - m_dsmap.SetAt(0x64420215, &GSDrawScanline::DrawScanlineExT<0x64420215>); - m_dsmap.SetAt(0x64802219, &GSDrawScanline::DrawScanlineExT<0x64802219>); - m_dsmap.SetAt(0x64802259, &GSDrawScanline::DrawScanlineExT<0x64802259>); - m_dsmap.SetAt(0x64802269, &GSDrawScanline::DrawScanlineExT<0x64802269>); - m_dsmap.SetAt(0x6480c215, &GSDrawScanline::DrawScanlineExT<0x6480c215>); - m_dsmap.SetAt(0x66402215, &GSDrawScanline::DrawScanlineExT<0x66402215>); - m_dsmap.SetAt(0x6880c265, &GSDrawScanline::DrawScanlineExT<0x6880c265>); - m_dsmap.SetAt(0x6880d065, &GSDrawScanline::DrawScanlineExT<0x6880d065>); - m_dsmap.SetAt(0xa420d425, &GSDrawScanline::DrawScanlineExT<0xa420d425>); - m_dsmap.SetAt(0xa420d465, &GSDrawScanline::DrawScanlineExT<0xa420d465>); - m_dsmap.SetAt(0xa440cc05, &GSDrawScanline::DrawScanlineExT<0xa440cc05>); - m_dsmap.SetAt(0xa440dc25, &GSDrawScanline::DrawScanlineExT<0xa440dc25>); - m_dsmap.SetAt(0xa4410815, &GSDrawScanline::DrawScanlineExT<0xa4410815>); - m_dsmap.SetAt(0xa4490814, &GSDrawScanline::DrawScanlineExT<0xa4490814>); - m_dsmap.SetAt(0xa480dc25, &GSDrawScanline::DrawScanlineExT<0xa480dc25>); - m_dsmap.SetAt(0xa484d465, &GSDrawScanline::DrawScanlineExT<0xa484d465>); - m_dsmap.SetAt(0xa880d465, &GSDrawScanline::DrawScanlineExT<0xa880d465>); - m_dsmap.SetAt(0xaff02c45, &GSDrawScanline::DrawScanlineExT<0xaff02c45>); - m_dsmap.SetAt(0xaff0cc05, &GSDrawScanline::DrawScanlineExT<0xaff0cc05>); - m_dsmap.SetAt(0xaff0cc45, &GSDrawScanline::DrawScanlineExT<0xaff0cc45>); - m_dsmap.SetAt(0xe004d465, &GSDrawScanline::DrawScanlineExT<0xe004d465>); - m_dsmap.SetAt(0xe440d425, &GSDrawScanline::DrawScanlineExT<0xe440d425>); - m_dsmap.SetAt(0xe440ec15, &GSDrawScanline::DrawScanlineExT<0xe440ec15>); - m_dsmap.SetAt(0xe440ec25, &GSDrawScanline::DrawScanlineExT<0xe440ec25>); - m_dsmap.SetAt(0xe440fc75, &GSDrawScanline::DrawScanlineExT<0xe440fc75>); - m_dsmap.SetAt(0xe480ac15, &GSDrawScanline::DrawScanlineExT<0xe480ac15>); - m_dsmap.SetAt(0xe480ec15, &GSDrawScanline::DrawScanlineExT<0xe480ec15>); - m_dsmap.SetAt(0xe480fc15, &GSDrawScanline::DrawScanlineExT<0xe480fc15>); - m_dsmap.SetAt(0xe484d465, &GSDrawScanline::DrawScanlineExT<0xe484d465>); - m_dsmap.SetAt(0xe6402815, &GSDrawScanline::DrawScanlineExT<0xe6402815>); - m_dsmap.SetAt(0xe880d465, &GSDrawScanline::DrawScanlineExT<0xe880d465>); + m_dsmap.SetAt(0x20002806, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x20002806>); + m_dsmap.SetAt(0x24402805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402805>); + m_dsmap.SetAt(0x2440c245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440c245>); + m_dsmap.SetAt(0x2440c445, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440c445>); + m_dsmap.SetAt(0x2440d065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440d065>); + m_dsmap.SetAt(0x2440d805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440d805>); + m_dsmap.SetAt(0x24410215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410215>); + m_dsmap.SetAt(0x24411c19, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411c19>); + m_dsmap.SetAt(0x24490214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24490214>); + m_dsmap.SetAt(0x24491854, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24491854>); + m_dsmap.SetAt(0x244b1814, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x244b1814>); + m_dsmap.SetAt(0x2480c225, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480c225>); + m_dsmap.SetAt(0x2a902205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a902205>); + m_dsmap.SetAt(0x2ff02805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02805>); + m_dsmap.SetAt(0x2ff0c245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff0c245>); + m_dsmap.SetAt(0x4ff03829, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03829>); + m_dsmap.SetAt(0x4ff0c215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0c215>); + m_dsmap.SetAt(0x6440d065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440d065>); + m_dsmap.SetAt(0x6440d815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440d815>); + m_dsmap.SetAt(0x6440e225, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e225>); + m_dsmap.SetAt(0x6440e275, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e275>); + m_dsmap.SetAt(0x64420215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64420215>); + m_dsmap.SetAt(0x64802219, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64802219>); + m_dsmap.SetAt(0x64802259, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64802259>); + m_dsmap.SetAt(0x64802269, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64802269>); + m_dsmap.SetAt(0x6480c215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6480c215>); + m_dsmap.SetAt(0x66402215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402215>); + m_dsmap.SetAt(0x6880c265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6880c265>); + m_dsmap.SetAt(0x6880d065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6880d065>); + m_dsmap.SetAt(0xa420d425, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa420d425>); + m_dsmap.SetAt(0xa420d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa420d465>); + m_dsmap.SetAt(0xa440cc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440cc05>); + m_dsmap.SetAt(0xa440dc25, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440dc25>); + m_dsmap.SetAt(0xa4410815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4410815>); + m_dsmap.SetAt(0xa4490814, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4490814>); + m_dsmap.SetAt(0xa480dc25, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480dc25>); + m_dsmap.SetAt(0xa484d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa484d465>); + m_dsmap.SetAt(0xa880d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa880d465>); + m_dsmap.SetAt(0xaff02c45, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02c45>); + m_dsmap.SetAt(0xaff0cc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff0cc05>); + m_dsmap.SetAt(0xaff0cc45, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff0cc45>); + m_dsmap.SetAt(0xe004d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe004d465>); + m_dsmap.SetAt(0xe440d425, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d425>); + m_dsmap.SetAt(0xe440ec15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ec15>); + m_dsmap.SetAt(0xe440ec25, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ec25>); + m_dsmap.SetAt(0xe440fc75, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440fc75>); + m_dsmap.SetAt(0xe480ac15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480ac15>); + m_dsmap.SetAt(0xe480ec15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480ec15>); + m_dsmap.SetAt(0xe480fc15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480fc15>); + m_dsmap.SetAt(0xe484d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe484d465>); + m_dsmap.SetAt(0xe6402815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe6402815>); + m_dsmap.SetAt(0xe880d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe880d465>); // 12riven - m_dsmap.SetAt(0x24402208, &GSDrawScanline::DrawScanlineExT<0x24402208>); - m_dsmap.SetAt(0x24403c08, &GSDrawScanline::DrawScanlineExT<0x24403c08>); - m_dsmap.SetAt(0xa4402c08, &GSDrawScanline::DrawScanlineExT<0xa4402c08>); - m_dsmap.SetAt(0xa4402c48, &GSDrawScanline::DrawScanlineExT<0xa4402c48>); + m_dsmap.SetAt(0x24402208, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402208>); + m_dsmap.SetAt(0x24403c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403c08>); + m_dsmap.SetAt(0xa4402c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c08>); + m_dsmap.SetAt(0xa4402c48, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c48>); // onimusha 3 - m_dsmap.SetAt(0x0ff02c28, &GSDrawScanline::DrawScanlineExT<0x0ff02c28>); - m_dsmap.SetAt(0x0ff02c8a, &GSDrawScanline::DrawScanlineExT<0x0ff02c8a>); - m_dsmap.SetAt(0x0ff03808, &GSDrawScanline::DrawScanlineExT<0x0ff03808>); - m_dsmap.SetAt(0x0ff03c08, &GSDrawScanline::DrawScanlineExT<0x0ff03c08>); - m_dsmap.SetAt(0x0ff03c0a, &GSDrawScanline::DrawScanlineExT<0x0ff03c0a>); - m_dsmap.SetAt(0x2440bc28, &GSDrawScanline::DrawScanlineExT<0x2440bc28>); - m_dsmap.SetAt(0x24803c48, &GSDrawScanline::DrawScanlineExT<0x24803c48>); - m_dsmap.SetAt(0x26402c08, &GSDrawScanline::DrawScanlineExT<0x26402c08>); - m_dsmap.SetAt(0x26802228, &GSDrawScanline::DrawScanlineExT<0x26802228>); - m_dsmap.SetAt(0x26803c08, &GSDrawScanline::DrawScanlineExT<0x26803c08>); - m_dsmap.SetAt(0x26803c88, &GSDrawScanline::DrawScanlineExT<0x26803c88>); - m_dsmap.SetAt(0x2ff02238, &GSDrawScanline::DrawScanlineExT<0x2ff02238>); - m_dsmap.SetAt(0x2ff02c8a, &GSDrawScanline::DrawScanlineExT<0x2ff02c8a>); - m_dsmap.SetAt(0x2ff82208, &GSDrawScanline::DrawScanlineExT<0x2ff82208>); - m_dsmap.SetAt(0x2ff82c08, &GSDrawScanline::DrawScanlineExT<0x2ff82c08>); - m_dsmap.SetAt(0x6461d468, &GSDrawScanline::DrawScanlineExT<0x6461d468>); - m_dsmap.SetAt(0x6481c268, &GSDrawScanline::DrawScanlineExT<0x6481c268>); - m_dsmap.SetAt(0x6641c228, &GSDrawScanline::DrawScanlineExT<0x6641c228>); - m_dsmap.SetAt(0x6ff1c228, &GSDrawScanline::DrawScanlineExT<0x6ff1c228>); - m_dsmap.SetAt(0x8ff4d048, &GSDrawScanline::DrawScanlineExT<0x8ff4d048>); - m_dsmap.SetAt(0x8ff4d448, &GSDrawScanline::DrawScanlineExT<0x8ff4d448>); - m_dsmap.SetAt(0xa4403468, &GSDrawScanline::DrawScanlineExT<0xa4403468>); - m_dsmap.SetAt(0xa4803c08, &GSDrawScanline::DrawScanlineExT<0xa4803c08>); - m_dsmap.SetAt(0xa8902c88, &GSDrawScanline::DrawScanlineExT<0xa8902c88>); - m_dsmap.SetAt(0xaa102c88, &GSDrawScanline::DrawScanlineExT<0xaa102c88>); - m_dsmap.SetAt(0xaff02c88, &GSDrawScanline::DrawScanlineExT<0xaff02c88>); - m_dsmap.SetAt(0xaff03c88, &GSDrawScanline::DrawScanlineExT<0xaff03c88>); - m_dsmap.SetAt(0xcff4b468, &GSDrawScanline::DrawScanlineExT<0xcff4b468>); - m_dsmap.SetAt(0xcff5d068, &GSDrawScanline::DrawScanlineExT<0xcff5d068>); - m_dsmap.SetAt(0xe411d428, &GSDrawScanline::DrawScanlineExT<0xe411d428>); - m_dsmap.SetAt(0xe421d428, &GSDrawScanline::DrawScanlineExT<0xe421d428>); - m_dsmap.SetAt(0xe4403c28, &GSDrawScanline::DrawScanlineExT<0xe4403c28>); - m_dsmap.SetAt(0xe441d428, &GSDrawScanline::DrawScanlineExT<0xe441d428>); - m_dsmap.SetAt(0xe441dc28, &GSDrawScanline::DrawScanlineExT<0xe441dc28>); - m_dsmap.SetAt(0xe441dc68, &GSDrawScanline::DrawScanlineExT<0xe441dc68>); - m_dsmap.SetAt(0xe445d468, &GSDrawScanline::DrawScanlineExT<0xe445d468>); - m_dsmap.SetAt(0xe461dc28, &GSDrawScanline::DrawScanlineExT<0xe461dc28>); - m_dsmap.SetAt(0xe4803c28, &GSDrawScanline::DrawScanlineExT<0xe4803c28>); - m_dsmap.SetAt(0xe481d468, &GSDrawScanline::DrawScanlineExT<0xe481d468>); - m_dsmap.SetAt(0xe481dc28, &GSDrawScanline::DrawScanlineExT<0xe481dc28>); - m_dsmap.SetAt(0xe640bc28, &GSDrawScanline::DrawScanlineExT<0xe640bc28>); - m_dsmap.SetAt(0xe640ec28, &GSDrawScanline::DrawScanlineExT<0xe640ec28>); - m_dsmap.SetAt(0xe641cc28, &GSDrawScanline::DrawScanlineExT<0xe641cc28>); - m_dsmap.SetAt(0xe644b468, &GSDrawScanline::DrawScanlineExT<0xe644b468>); + m_dsmap.SetAt(0x0ff02c28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c28>); + m_dsmap.SetAt(0x0ff02c8a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c8a>); + m_dsmap.SetAt(0x0ff03808, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03808>); + m_dsmap.SetAt(0x0ff03c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c08>); + m_dsmap.SetAt(0x0ff03c0a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c0a>); + m_dsmap.SetAt(0x2440bc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440bc28>); + m_dsmap.SetAt(0x24803c48, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24803c48>); + m_dsmap.SetAt(0x26402c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402c08>); + m_dsmap.SetAt(0x26802228, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26802228>); + m_dsmap.SetAt(0x26803c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803c08>); + m_dsmap.SetAt(0x26803c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803c88>); + m_dsmap.SetAt(0x2ff02238, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02238>); + m_dsmap.SetAt(0x2ff02c8a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02c8a>); + m_dsmap.SetAt(0x2ff82208, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff82208>); + m_dsmap.SetAt(0x2ff82c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff82c08>); + m_dsmap.SetAt(0x6461d468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6461d468>); + m_dsmap.SetAt(0x6481c268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6481c268>); + m_dsmap.SetAt(0x6641c228, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6641c228>); + m_dsmap.SetAt(0x6ff1c228, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff1c228>); + m_dsmap.SetAt(0x8ff4d048, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff4d048>); + m_dsmap.SetAt(0x8ff4d448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff4d448>); + m_dsmap.SetAt(0xa4403468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403468>); + m_dsmap.SetAt(0xa4803c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4803c08>); + m_dsmap.SetAt(0xa8902c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa8902c88>); + m_dsmap.SetAt(0xaa102c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaa102c88>); + m_dsmap.SetAt(0xaff02c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02c88>); + m_dsmap.SetAt(0xaff03c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff03c88>); + m_dsmap.SetAt(0xcff4b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4b468>); + m_dsmap.SetAt(0xcff5d068, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff5d068>); + m_dsmap.SetAt(0xe411d428, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe411d428>); + m_dsmap.SetAt(0xe421d428, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe421d428>); + m_dsmap.SetAt(0xe4403c28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403c28>); + m_dsmap.SetAt(0xe441d428, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441d428>); + m_dsmap.SetAt(0xe441dc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441dc28>); + m_dsmap.SetAt(0xe441dc68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441dc68>); + m_dsmap.SetAt(0xe445d468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445d468>); + m_dsmap.SetAt(0xe461dc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe461dc28>); + m_dsmap.SetAt(0xe4803c28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4803c28>); + m_dsmap.SetAt(0xe481d468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481d468>); + m_dsmap.SetAt(0xe481dc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481dc28>); + m_dsmap.SetAt(0xe640bc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe640bc28>); + m_dsmap.SetAt(0xe640ec28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe640ec28>); + m_dsmap.SetAt(0xe641cc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe641cc28>); + m_dsmap.SetAt(0xe644b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe644b468>); // nba 2k8 - m_dsmap.SetAt(0x24403446, &GSDrawScanline::DrawScanlineExT<0x24403446>); - m_dsmap.SetAt(0x2448d466, &GSDrawScanline::DrawScanlineExT<0x2448d466>); - m_dsmap.SetAt(0x60002256, &GSDrawScanline::DrawScanlineExT<0x60002256>); - m_dsmap.SetAt(0x6440b466, &GSDrawScanline::DrawScanlineExT<0x6440b466>); - m_dsmap.SetAt(0x6480b466, &GSDrawScanline::DrawScanlineExT<0x6480b466>); - m_dsmap.SetAt(0x6a80b456, &GSDrawScanline::DrawScanlineExT<0x6a80b456>); - m_dsmap.SetAt(0x6a80b466, &GSDrawScanline::DrawScanlineExT<0x6a80b466>); - m_dsmap.SetAt(0xa440b466, &GSDrawScanline::DrawScanlineExT<0xa440b466>); - m_dsmap.SetAt(0xa480b466, &GSDrawScanline::DrawScanlineExT<0xa480b466>); - m_dsmap.SetAt(0xaa80b466, &GSDrawScanline::DrawScanlineExT<0xaa80b466>); - m_dsmap.SetAt(0xe440a466, &GSDrawScanline::DrawScanlineExT<0xe440a466>); - m_dsmap.SetAt(0xe440b466, &GSDrawScanline::DrawScanlineExT<0xe440b466>); - m_dsmap.SetAt(0xe440c466, &GSDrawScanline::DrawScanlineExT<0xe440c466>); - m_dsmap.SetAt(0xe440d466, &GSDrawScanline::DrawScanlineExT<0xe440d466>); - m_dsmap.SetAt(0xea80a466, &GSDrawScanline::DrawScanlineExT<0xea80a466>); - m_dsmap.SetAt(0xea80b066, &GSDrawScanline::DrawScanlineExT<0xea80b066>); - m_dsmap.SetAt(0xea80b466, &GSDrawScanline::DrawScanlineExT<0xea80b466>); + m_dsmap.SetAt(0x24403446, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403446>); + m_dsmap.SetAt(0x2448d466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2448d466>); + m_dsmap.SetAt(0x60002256, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x60002256>); + m_dsmap.SetAt(0x6440b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440b466>); + m_dsmap.SetAt(0x6480b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6480b466>); + m_dsmap.SetAt(0x6a80b456, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a80b456>); + m_dsmap.SetAt(0x6a80b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a80b466>); + m_dsmap.SetAt(0xa440b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440b466>); + m_dsmap.SetAt(0xa480b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480b466>); + m_dsmap.SetAt(0xaa80b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaa80b466>); + m_dsmap.SetAt(0xe440a466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440a466>); + m_dsmap.SetAt(0xe440b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440b466>); + m_dsmap.SetAt(0xe440c466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440c466>); + m_dsmap.SetAt(0xe440d466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d466>); + m_dsmap.SetAt(0xea80a466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xea80a466>); + m_dsmap.SetAt(0xea80b066, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xea80b066>); + m_dsmap.SetAt(0xea80b466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xea80b466>); // svr2k8 - m_dsmap.SetAt(0x24412244, &GSDrawScanline::DrawScanlineExT<0x24412244>); - m_dsmap.SetAt(0x2441a244, &GSDrawScanline::DrawScanlineExT<0x2441a244>); - m_dsmap.SetAt(0x2441c244, &GSDrawScanline::DrawScanlineExT<0x2441c244>); - m_dsmap.SetAt(0x2441d044, &GSDrawScanline::DrawScanlineExT<0x2441d044>); - m_dsmap.SetAt(0x2441d444, &GSDrawScanline::DrawScanlineExT<0x2441d444>); - m_dsmap.SetAt(0x2481a244, &GSDrawScanline::DrawScanlineExT<0x2481a244>); - m_dsmap.SetAt(0x26242244, &GSDrawScanline::DrawScanlineExT<0x26242244>); - m_dsmap.SetAt(0x2a910214, &GSDrawScanline::DrawScanlineExT<0x2a910214>); - m_dsmap.SetAt(0x2ff31815, &GSDrawScanline::DrawScanlineExT<0x2ff31815>); - m_dsmap.SetAt(0x4ff02216, &GSDrawScanline::DrawScanlineExT<0x4ff02216>); - m_dsmap.SetAt(0x64403064, &GSDrawScanline::DrawScanlineExT<0x64403064>); - m_dsmap.SetAt(0x6440dc24, &GSDrawScanline::DrawScanlineExT<0x6440dc24>); - m_dsmap.SetAt(0x6441a214, &GSDrawScanline::DrawScanlineExT<0x6441a214>); - m_dsmap.SetAt(0x6444d064, &GSDrawScanline::DrawScanlineExT<0x6444d064>); - m_dsmap.SetAt(0x6a9c2274, &GSDrawScanline::DrawScanlineExT<0x6a9c2274>); - m_dsmap.SetAt(0xa441b444, &GSDrawScanline::DrawScanlineExT<0xa441b444>); - m_dsmap.SetAt(0xa441bc04, &GSDrawScanline::DrawScanlineExT<0xa441bc04>); - m_dsmap.SetAt(0xa441d444, &GSDrawScanline::DrawScanlineExT<0xa441d444>); - m_dsmap.SetAt(0xa441dc04, &GSDrawScanline::DrawScanlineExT<0xa441dc04>); - m_dsmap.SetAt(0xa444b464, &GSDrawScanline::DrawScanlineExT<0xa444b464>); - m_dsmap.SetAt(0xa44c3474, &GSDrawScanline::DrawScanlineExT<0xa44c3474>); - m_dsmap.SetAt(0xa481b444, &GSDrawScanline::DrawScanlineExT<0xa481b444>); - m_dsmap.SetAt(0xa481b464, &GSDrawScanline::DrawScanlineExT<0xa481b464>); - m_dsmap.SetAt(0xa4843444, &GSDrawScanline::DrawScanlineExT<0xa4843444>); - m_dsmap.SetAt(0xa484d464, &GSDrawScanline::DrawScanlineExT<0xa484d464>); - m_dsmap.SetAt(0xa485d464, &GSDrawScanline::DrawScanlineExT<0xa485d464>); - m_dsmap.SetAt(0xcff0dc24, &GSDrawScanline::DrawScanlineExT<0xcff0dc24>); - m_dsmap.SetAt(0xcff0dc26, &GSDrawScanline::DrawScanlineExT<0xcff0dc26>); - m_dsmap.SetAt(0xe440d454, &GSDrawScanline::DrawScanlineExT<0xe440d454>); - m_dsmap.SetAt(0xe441b464, &GSDrawScanline::DrawScanlineExT<0xe441b464>); - m_dsmap.SetAt(0xe441b5e4, &GSDrawScanline::DrawScanlineExT<0xe441b5e4>); - m_dsmap.SetAt(0xe441bc14, &GSDrawScanline::DrawScanlineExT<0xe441bc14>); - m_dsmap.SetAt(0xe4443464, &GSDrawScanline::DrawScanlineExT<0xe4443464>); - m_dsmap.SetAt(0xe481b454, &GSDrawScanline::DrawScanlineExT<0xe481b454>); - m_dsmap.SetAt(0xe484d464, &GSDrawScanline::DrawScanlineExT<0xe484d464>); - m_dsmap.SetAt(0xe64c3474, &GSDrawScanline::DrawScanlineExT<0xe64c3474>); + m_dsmap.SetAt(0x24412244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24412244>); + m_dsmap.SetAt(0x2441a244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441a244>); + m_dsmap.SetAt(0x2441c244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441c244>); + m_dsmap.SetAt(0x2441d044, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441d044>); + m_dsmap.SetAt(0x2441d444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441d444>); + m_dsmap.SetAt(0x2481a244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2481a244>); + m_dsmap.SetAt(0x26242244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26242244>); + m_dsmap.SetAt(0x2a910214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a910214>); + m_dsmap.SetAt(0x2ff31815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff31815>); + m_dsmap.SetAt(0x4ff02216, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02216>); + m_dsmap.SetAt(0x64403064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64403064>); + m_dsmap.SetAt(0x6440dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440dc24>); + m_dsmap.SetAt(0x6441a214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6441a214>); + m_dsmap.SetAt(0x6444d064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444d064>); + m_dsmap.SetAt(0x6a9c2274, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a9c2274>); + m_dsmap.SetAt(0xa441b444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441b444>); + m_dsmap.SetAt(0xa441bc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441bc04>); + m_dsmap.SetAt(0xa441d444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441d444>); + m_dsmap.SetAt(0xa441dc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441dc04>); + m_dsmap.SetAt(0xa444b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa444b464>); + m_dsmap.SetAt(0xa44c3474, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa44c3474>); + m_dsmap.SetAt(0xa481b444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa481b444>); + m_dsmap.SetAt(0xa481b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa481b464>); + m_dsmap.SetAt(0xa4843444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4843444>); + m_dsmap.SetAt(0xa484d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa484d464>); + m_dsmap.SetAt(0xa485d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa485d464>); + m_dsmap.SetAt(0xcff0dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0dc24>); + m_dsmap.SetAt(0xcff0dc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0dc26>); + m_dsmap.SetAt(0xe440d454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d454>); + m_dsmap.SetAt(0xe441b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441b464>); + m_dsmap.SetAt(0xe441b5e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441b5e4>); + m_dsmap.SetAt(0xe441bc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441bc14>); + m_dsmap.SetAt(0xe4443464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4443464>); + m_dsmap.SetAt(0xe481b454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481b454>); + m_dsmap.SetAt(0xe484d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe484d464>); + m_dsmap.SetAt(0xe64c3474, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe64c3474>); // rumble roses - m_dsmap.SetAt(0x0ff03805, &GSDrawScanline::DrawScanlineExT<0x0ff03805>); - m_dsmap.SetAt(0x24410244, &GSDrawScanline::DrawScanlineExT<0x24410244>); - m_dsmap.SetAt(0x24430214, &GSDrawScanline::DrawScanlineExT<0x24430214>); - m_dsmap.SetAt(0x2ff10204, &GSDrawScanline::DrawScanlineExT<0x2ff10204>); - m_dsmap.SetAt(0x6440c224, &GSDrawScanline::DrawScanlineExT<0x6440c224>); - m_dsmap.SetAt(0x6440d824, &GSDrawScanline::DrawScanlineExT<0x6440d824>); - m_dsmap.SetAt(0x64443064, &GSDrawScanline::DrawScanlineExT<0x64443064>); - m_dsmap.SetAt(0x6640d824, &GSDrawScanline::DrawScanlineExT<0x6640d824>); - m_dsmap.SetAt(0x66443064, &GSDrawScanline::DrawScanlineExT<0x66443064>); - m_dsmap.SetAt(0xe440d464, &GSDrawScanline::DrawScanlineExT<0xe440d464>); - m_dsmap.SetAt(0xe440d5e4, &GSDrawScanline::DrawScanlineExT<0xe440d5e4>); - m_dsmap.SetAt(0xe440dc24, &GSDrawScanline::DrawScanlineExT<0xe440dc24>); - m_dsmap.SetAt(0xe441d464, &GSDrawScanline::DrawScanlineExT<0xe441d464>); - m_dsmap.SetAt(0xe443d5e4, &GSDrawScanline::DrawScanlineExT<0xe443d5e4>); - m_dsmap.SetAt(0xe445d064, &GSDrawScanline::DrawScanlineExT<0xe445d064>); - m_dsmap.SetAt(0xe447d464, &GSDrawScanline::DrawScanlineExT<0xe447d464>); - m_dsmap.SetAt(0xe5843464, &GSDrawScanline::DrawScanlineExT<0xe5843464>); - m_dsmap.SetAt(0xe6443464, &GSDrawScanline::DrawScanlineExT<0xe6443464>); - m_dsmap.SetAt(0xe644d464, &GSDrawScanline::DrawScanlineExT<0xe644d464>); - m_dsmap.SetAt(0xe645d064, &GSDrawScanline::DrawScanlineExT<0xe645d064>); - m_dsmap.SetAt(0xe645d464, &GSDrawScanline::DrawScanlineExT<0xe645d464>); + m_dsmap.SetAt(0x0ff03805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03805>); + m_dsmap.SetAt(0x24410244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410244>); + m_dsmap.SetAt(0x24430214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24430214>); + m_dsmap.SetAt(0x2ff10204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff10204>); + m_dsmap.SetAt(0x6440c224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440c224>); + m_dsmap.SetAt(0x6440d824, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440d824>); + m_dsmap.SetAt(0x64443064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64443064>); + m_dsmap.SetAt(0x6640d824, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6640d824>); + m_dsmap.SetAt(0x66443064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66443064>); + m_dsmap.SetAt(0xe440d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d464>); + m_dsmap.SetAt(0xe440d5e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d5e4>); + m_dsmap.SetAt(0xe440dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc24>); + m_dsmap.SetAt(0xe441d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441d464>); + m_dsmap.SetAt(0xe443d5e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443d5e4>); + m_dsmap.SetAt(0xe445d064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445d064>); + m_dsmap.SetAt(0xe447d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe447d464>); + m_dsmap.SetAt(0xe5843464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe5843464>); + m_dsmap.SetAt(0xe6443464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe6443464>); + m_dsmap.SetAt(0xe644d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe644d464>); + m_dsmap.SetAt(0xe645d064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe645d064>); + m_dsmap.SetAt(0xe645d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe645d464>); // disgaea 2 - m_dsmap.SetAt(0x6441d064, &GSDrawScanline::DrawScanlineExT<0x6441d064>); - m_dsmap.SetAt(0x6a80c224, &GSDrawScanline::DrawScanlineExT<0x6a80c224>); - m_dsmap.SetAt(0xe2a0d474, &GSDrawScanline::DrawScanlineExT<0xe2a0d474>); - m_dsmap.SetAt(0xe440dc64, &GSDrawScanline::DrawScanlineExT<0xe440dc64>); - m_dsmap.SetAt(0xe481d464, &GSDrawScanline::DrawScanlineExT<0xe481d464>); - m_dsmap.SetAt(0xe620d464, &GSDrawScanline::DrawScanlineExT<0xe620d464>); + m_dsmap.SetAt(0x6441d064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6441d064>); + m_dsmap.SetAt(0x6a80c224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a80c224>); + m_dsmap.SetAt(0xe2a0d474, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe2a0d474>); + m_dsmap.SetAt(0xe440dc64, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc64>); + m_dsmap.SetAt(0xe481d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481d464>); + m_dsmap.SetAt(0xe620d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe620d464>); // Gundam Seed Destiny OMNI VS ZAFT II PLUS - m_dsmap.SetAt(0x0ff12205, &GSDrawScanline::DrawScanlineExT<0x0ff12205>); - m_dsmap.SetAt(0x4ff12215, &GSDrawScanline::DrawScanlineExT<0x4ff12215>); - m_dsmap.SetAt(0xa4402c05, &GSDrawScanline::DrawScanlineExT<0xa4402c05>); - m_dsmap.SetAt(0xa4403445, &GSDrawScanline::DrawScanlineExT<0xa4403445>); - m_dsmap.SetAt(0xa4403c05, &GSDrawScanline::DrawScanlineExT<0xa4403c05>); - m_dsmap.SetAt(0xa441b475, &GSDrawScanline::DrawScanlineExT<0xa441b475>); - m_dsmap.SetAt(0xa445b475, &GSDrawScanline::DrawScanlineExT<0xa445b475>); - m_dsmap.SetAt(0xa4803445, &GSDrawScanline::DrawScanlineExT<0xa4803445>); - m_dsmap.SetAt(0xa481b475, &GSDrawScanline::DrawScanlineExT<0xa481b475>); - m_dsmap.SetAt(0xa485b475, &GSDrawScanline::DrawScanlineExT<0xa485b475>); - m_dsmap.SetAt(0xcff1b475, &GSDrawScanline::DrawScanlineExT<0xcff1b475>); - m_dsmap.SetAt(0xcff5b475, &GSDrawScanline::DrawScanlineExT<0xcff5b475>); - m_dsmap.SetAt(0xe445b475, &GSDrawScanline::DrawScanlineExT<0xe445b475>); + m_dsmap.SetAt(0x0ff12205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff12205>); + m_dsmap.SetAt(0x4ff12215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff12215>); + m_dsmap.SetAt(0xa4402c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c05>); + m_dsmap.SetAt(0xa4403445, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403445>); + m_dsmap.SetAt(0xa4403c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403c05>); + m_dsmap.SetAt(0xa441b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441b475>); + m_dsmap.SetAt(0xa445b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa445b475>); + m_dsmap.SetAt(0xa4803445, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4803445>); + m_dsmap.SetAt(0xa481b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa481b475>); + m_dsmap.SetAt(0xa485b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa485b475>); + m_dsmap.SetAt(0xcff1b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff1b475>); + m_dsmap.SetAt(0xcff5b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff5b475>); + m_dsmap.SetAt(0xe445b475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445b475>); // grandia 3 - m_dsmap.SetAt(0x20a0224a, &GSDrawScanline::DrawScanlineExT<0x20a0224a>); - m_dsmap.SetAt(0x24202200, &GSDrawScanline::DrawScanlineExT<0x24202200>); - m_dsmap.SetAt(0x24471460, &GSDrawScanline::DrawScanlineExT<0x24471460>); - m_dsmap.SetAt(0x24803c00, &GSDrawScanline::DrawScanlineExT<0x24803c00>); - m_dsmap.SetAt(0x24830240, &GSDrawScanline::DrawScanlineExT<0x24830240>); - m_dsmap.SetAt(0x24830260, &GSDrawScanline::DrawScanlineExT<0x24830260>); - m_dsmap.SetAt(0x26402200, &GSDrawScanline::DrawScanlineExT<0x26402200>); - m_dsmap.SetAt(0x26402c00, &GSDrawScanline::DrawScanlineExT<0x26402c00>); - m_dsmap.SetAt(0x26403c00, &GSDrawScanline::DrawScanlineExT<0x26403c00>); - m_dsmap.SetAt(0x26403c20, &GSDrawScanline::DrawScanlineExT<0x26403c20>); - m_dsmap.SetAt(0x26433c00, &GSDrawScanline::DrawScanlineExT<0x26433c00>); - m_dsmap.SetAt(0x26433c20, &GSDrawScanline::DrawScanlineExT<0x26433c20>); - m_dsmap.SetAt(0x2ff02200, &GSDrawScanline::DrawScanlineExT<0x2ff02200>); - m_dsmap.SetAt(0x4ff02210, &GSDrawScanline::DrawScanlineExT<0x4ff02210>); - m_dsmap.SetAt(0x4ff0221a, &GSDrawScanline::DrawScanlineExT<0x4ff0221a>); - m_dsmap.SetAt(0x6445a260, &GSDrawScanline::DrawScanlineExT<0x6445a260>); - m_dsmap.SetAt(0x6447a260, &GSDrawScanline::DrawScanlineExT<0x6447a260>); - m_dsmap.SetAt(0x66403c20, &GSDrawScanline::DrawScanlineExT<0x66403c20>); - m_dsmap.SetAt(0x66433c20, &GSDrawScanline::DrawScanlineExT<0x66433c20>); - m_dsmap.SetAt(0xa0903440, &GSDrawScanline::DrawScanlineExT<0xa0903440>); - m_dsmap.SetAt(0xa0931460, &GSDrawScanline::DrawScanlineExT<0xa0931460>); - m_dsmap.SetAt(0xa4271460, &GSDrawScanline::DrawScanlineExT<0xa4271460>); - m_dsmap.SetAt(0xa4403440, &GSDrawScanline::DrawScanlineExT<0xa4403440>); - m_dsmap.SetAt(0xa4471470, &GSDrawScanline::DrawScanlineExT<0xa4471470>); - m_dsmap.SetAt(0xa4831440, &GSDrawScanline::DrawScanlineExT<0xa4831440>); - m_dsmap.SetAt(0xa4831460, &GSDrawScanline::DrawScanlineExT<0xa4831460>); - m_dsmap.SetAt(0xa4871460, &GSDrawScanline::DrawScanlineExT<0xa4871460>); - m_dsmap.SetAt(0xa8191460, &GSDrawScanline::DrawScanlineExT<0xa8191460>); - m_dsmap.SetAt(0xe441b460, &GSDrawScanline::DrawScanlineExT<0xe441b460>); - m_dsmap.SetAt(0xe443b460, &GSDrawScanline::DrawScanlineExT<0xe443b460>); - m_dsmap.SetAt(0xe445b460, &GSDrawScanline::DrawScanlineExT<0xe445b460>); - m_dsmap.SetAt(0xe445d460, &GSDrawScanline::DrawScanlineExT<0xe445d460>); - m_dsmap.SetAt(0xe447b460, &GSDrawScanline::DrawScanlineExT<0xe447b460>); - m_dsmap.SetAt(0xe447d460, &GSDrawScanline::DrawScanlineExT<0xe447d460>); + m_dsmap.SetAt(0x20a0224a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x20a0224a>); + m_dsmap.SetAt(0x24202200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24202200>); + m_dsmap.SetAt(0x24471460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24471460>); + m_dsmap.SetAt(0x24803c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24803c00>); + m_dsmap.SetAt(0x24830240, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24830240>); + m_dsmap.SetAt(0x24830260, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24830260>); + m_dsmap.SetAt(0x26402200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402200>); + m_dsmap.SetAt(0x26402c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402c00>); + m_dsmap.SetAt(0x26403c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403c00>); + m_dsmap.SetAt(0x26403c20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403c20>); + m_dsmap.SetAt(0x26433c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26433c00>); + m_dsmap.SetAt(0x26433c20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26433c20>); + m_dsmap.SetAt(0x2ff02200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02200>); + m_dsmap.SetAt(0x4ff02210, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02210>); + m_dsmap.SetAt(0x4ff0221a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0221a>); + m_dsmap.SetAt(0x6445a260, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6445a260>); + m_dsmap.SetAt(0x6447a260, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6447a260>); + m_dsmap.SetAt(0x66403c20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66403c20>); + m_dsmap.SetAt(0x66433c20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66433c20>); + m_dsmap.SetAt(0xa0903440, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa0903440>); + m_dsmap.SetAt(0xa0931460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa0931460>); + m_dsmap.SetAt(0xa4271460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4271460>); + m_dsmap.SetAt(0xa4403440, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403440>); + m_dsmap.SetAt(0xa4471470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4471470>); + m_dsmap.SetAt(0xa4831440, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4831440>); + m_dsmap.SetAt(0xa4831460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4831460>); + m_dsmap.SetAt(0xa4871460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4871460>); + m_dsmap.SetAt(0xa8191460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa8191460>); + m_dsmap.SetAt(0xe441b460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441b460>); + m_dsmap.SetAt(0xe443b460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443b460>); + m_dsmap.SetAt(0xe445b460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445b460>); + m_dsmap.SetAt(0xe445d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445d460>); + m_dsmap.SetAt(0xe447b460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe447b460>); + m_dsmap.SetAt(0xe447d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe447d460>); // shadow of the colossus - m_dsmap.SetAt(0x0ff02805, &GSDrawScanline::DrawScanlineExT<0x0ff02805>); - m_dsmap.SetAt(0x0ff10214, &GSDrawScanline::DrawScanlineExT<0x0ff10214>); - m_dsmap.SetAt(0x0ff10224, &GSDrawScanline::DrawScanlineExT<0x0ff10224>); - m_dsmap.SetAt(0x0ff10254, &GSDrawScanline::DrawScanlineExT<0x0ff10254>); - m_dsmap.SetAt(0x0ff10264, &GSDrawScanline::DrawScanlineExT<0x0ff10264>); - m_dsmap.SetAt(0x0ff10c14, &GSDrawScanline::DrawScanlineExT<0x0ff10c14>); - m_dsmap.SetAt(0x0ff11c15, &GSDrawScanline::DrawScanlineExT<0x0ff11c15>); - m_dsmap.SetAt(0x24411814, &GSDrawScanline::DrawScanlineExT<0x24411814>); - m_dsmap.SetAt(0x24411c14, &GSDrawScanline::DrawScanlineExT<0x24411c14>); - m_dsmap.SetAt(0x24411c64, &GSDrawScanline::DrawScanlineExT<0x24411c64>); - m_dsmap.SetAt(0x24451064, &GSDrawScanline::DrawScanlineExT<0x24451064>); - m_dsmap.SetAt(0x24491c24, &GSDrawScanline::DrawScanlineExT<0x24491c24>); - m_dsmap.SetAt(0x24810214, &GSDrawScanline::DrawScanlineExT<0x24810214>); - m_dsmap.SetAt(0x24810254, &GSDrawScanline::DrawScanlineExT<0x24810254>); - m_dsmap.SetAt(0x24811c14, &GSDrawScanline::DrawScanlineExT<0x24811c14>); - m_dsmap.SetAt(0x25411814, &GSDrawScanline::DrawScanlineExT<0x25411814>); - m_dsmap.SetAt(0x26410214, &GSDrawScanline::DrawScanlineExT<0x26410214>); - m_dsmap.SetAt(0x26810224, &GSDrawScanline::DrawScanlineExT<0x26810224>); - m_dsmap.SetAt(0x34451464, &GSDrawScanline::DrawScanlineExT<0x34451464>); - m_dsmap.SetAt(0x4ff0c224, &GSDrawScanline::DrawScanlineExT<0x4ff0c224>); - m_dsmap.SetAt(0x64453464, &GSDrawScanline::DrawScanlineExT<0x64453464>); - m_dsmap.SetAt(0x6445a264, &GSDrawScanline::DrawScanlineExT<0x6445a264>); - m_dsmap.SetAt(0x6445b464, &GSDrawScanline::DrawScanlineExT<0x6445b464>); - m_dsmap.SetAt(0xa4251464, &GSDrawScanline::DrawScanlineExT<0xa4251464>); - m_dsmap.SetAt(0xa4451464, &GSDrawScanline::DrawScanlineExT<0xa4451464>); - m_dsmap.SetAt(0xa4851464, &GSDrawScanline::DrawScanlineExT<0xa4851464>); - m_dsmap.SetAt(0xe441cc64, &GSDrawScanline::DrawScanlineExT<0xe441cc64>); - m_dsmap.SetAt(0xe441dc24, &GSDrawScanline::DrawScanlineExT<0xe441dc24>); - m_dsmap.SetAt(0xe441dc64, &GSDrawScanline::DrawScanlineExT<0xe441dc64>); - m_dsmap.SetAt(0xe4453464, &GSDrawScanline::DrawScanlineExT<0xe4453464>); - m_dsmap.SetAt(0xe445a464, &GSDrawScanline::DrawScanlineExT<0xe445a464>); - m_dsmap.SetAt(0xe485a464, &GSDrawScanline::DrawScanlineExT<0xe485a464>); - m_dsmap.SetAt(0xa4843464, &GSDrawScanline::DrawScanlineExT<0xa4843464>); - m_dsmap.SetAt(0xe441b454, &GSDrawScanline::DrawScanlineExT<0xe441b454>); - m_dsmap.SetAt(0xe481b464, &GSDrawScanline::DrawScanlineExT<0xe481b464>); + m_dsmap.SetAt(0x0ff02805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02805>); + m_dsmap.SetAt(0x0ff10214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10214>); + m_dsmap.SetAt(0x0ff10224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10224>); + m_dsmap.SetAt(0x0ff10254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10254>); + m_dsmap.SetAt(0x0ff10264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10264>); + m_dsmap.SetAt(0x0ff10c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10c14>); + m_dsmap.SetAt(0x0ff11c15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff11c15>); + m_dsmap.SetAt(0x24411814, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411814>); + m_dsmap.SetAt(0x24411c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411c14>); + m_dsmap.SetAt(0x24411c64, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411c64>); + m_dsmap.SetAt(0x24451064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24451064>); + m_dsmap.SetAt(0x24491c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24491c24>); + m_dsmap.SetAt(0x24810214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24810214>); + m_dsmap.SetAt(0x24810254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24810254>); + m_dsmap.SetAt(0x24811c14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24811c14>); + m_dsmap.SetAt(0x25411814, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25411814>); + m_dsmap.SetAt(0x26410214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26410214>); + m_dsmap.SetAt(0x26810224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26810224>); + m_dsmap.SetAt(0x34451464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x34451464>); + m_dsmap.SetAt(0x4ff0c224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0c224>); + m_dsmap.SetAt(0x64453464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64453464>); + m_dsmap.SetAt(0x6445a264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6445a264>); + m_dsmap.SetAt(0x6445b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6445b464>); + m_dsmap.SetAt(0xa4251464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4251464>); + m_dsmap.SetAt(0xa4451464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4451464>); + m_dsmap.SetAt(0xa4851464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4851464>); + m_dsmap.SetAt(0xe441cc64, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441cc64>); + m_dsmap.SetAt(0xe441dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441dc24>); + m_dsmap.SetAt(0xe441dc64, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441dc64>); + m_dsmap.SetAt(0xe4453464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4453464>); + m_dsmap.SetAt(0xe445a464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445a464>); + m_dsmap.SetAt(0xe485a464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe485a464>); + m_dsmap.SetAt(0xa4843464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4843464>); + m_dsmap.SetAt(0xe441b454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441b454>); + m_dsmap.SetAt(0xe481b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481b464>); // dq8 - m_dsmap.SetAt(0x0ff02244, &GSDrawScanline::DrawScanlineExT<0x0ff02244>); - m_dsmap.SetAt(0x0ff02c04, &GSDrawScanline::DrawScanlineExT<0x0ff02c04>); - m_dsmap.SetAt(0x0ff02c85, &GSDrawScanline::DrawScanlineExT<0x0ff02c85>); - m_dsmap.SetAt(0x0ff0dc04, &GSDrawScanline::DrawScanlineExT<0x0ff0dc04>); - m_dsmap.SetAt(0x22a02c04, &GSDrawScanline::DrawScanlineExT<0x22a02c04>); - m_dsmap.SetAt(0x24202204, &GSDrawScanline::DrawScanlineExT<0x24202204>); - m_dsmap.SetAt(0x2420a264, &GSDrawScanline::DrawScanlineExT<0x2420a264>); - m_dsmap.SetAt(0x24402244, &GSDrawScanline::DrawScanlineExT<0x24402244>); - m_dsmap.SetAt(0x2440bc04, &GSDrawScanline::DrawScanlineExT<0x2440bc04>); - m_dsmap.SetAt(0x2440dc04, &GSDrawScanline::DrawScanlineExT<0x2440dc04>); - m_dsmap.SetAt(0x2444b464, &GSDrawScanline::DrawScanlineExT<0x2444b464>); - m_dsmap.SetAt(0x24603c04, &GSDrawScanline::DrawScanlineExT<0x24603c04>); - m_dsmap.SetAt(0x2480a264, &GSDrawScanline::DrawScanlineExT<0x2480a264>); - m_dsmap.SetAt(0x2484b464, &GSDrawScanline::DrawScanlineExT<0x2484b464>); - m_dsmap.SetAt(0x26203c04, &GSDrawScanline::DrawScanlineExT<0x26203c04>); - m_dsmap.SetAt(0x2640bc04, &GSDrawScanline::DrawScanlineExT<0x2640bc04>); - m_dsmap.SetAt(0x28803c04, &GSDrawScanline::DrawScanlineExT<0x28803c04>); - m_dsmap.SetAt(0x28803d84, &GSDrawScanline::DrawScanlineExT<0x28803d84>); - m_dsmap.SetAt(0x2ff03c06, &GSDrawScanline::DrawScanlineExT<0x2ff03c06>); - m_dsmap.SetAt(0x6440a264, &GSDrawScanline::DrawScanlineExT<0x6440a264>); - m_dsmap.SetAt(0x6444b064, &GSDrawScanline::DrawScanlineExT<0x6444b064>); - m_dsmap.SetAt(0x6444b464, &GSDrawScanline::DrawScanlineExT<0x6444b464>); - m_dsmap.SetAt(0x6484b464, &GSDrawScanline::DrawScanlineExT<0x6484b464>); - m_dsmap.SetAt(0x8ff03c04, &GSDrawScanline::DrawScanlineExT<0x8ff03c04>); - m_dsmap.SetAt(0x8ff03c05, &GSDrawScanline::DrawScanlineExT<0x8ff03c05>); - m_dsmap.SetAt(0xa4203c05, &GSDrawScanline::DrawScanlineExT<0xa4203c05>); - m_dsmap.SetAt(0xa4402c04, &GSDrawScanline::DrawScanlineExT<0xa4402c04>); - m_dsmap.SetAt(0xa4803c04, &GSDrawScanline::DrawScanlineExT<0xa4803c04>); - m_dsmap.SetAt(0xa480b464, &GSDrawScanline::DrawScanlineExT<0xa480b464>); - m_dsmap.SetAt(0xe444b454, &GSDrawScanline::DrawScanlineExT<0xe444b454>); - m_dsmap.SetAt(0xe484b464, &GSDrawScanline::DrawScanlineExT<0xe484b464>); - m_dsmap.SetAt(0xa4403c24, &GSDrawScanline::DrawScanlineExT<0xa4403c24>); - m_dsmap.SetAt(0xa4803c24, &GSDrawScanline::DrawScanlineExT<0xa4803c24>); + m_dsmap.SetAt(0x0ff02244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02244>); + m_dsmap.SetAt(0x0ff02c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c04>); + m_dsmap.SetAt(0x0ff02c85, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c85>); + m_dsmap.SetAt(0x0ff0dc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff0dc04>); + m_dsmap.SetAt(0x22a02c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x22a02c04>); + m_dsmap.SetAt(0x24202204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24202204>); + m_dsmap.SetAt(0x2420a264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2420a264>); + m_dsmap.SetAt(0x24402244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402244>); + m_dsmap.SetAt(0x2440bc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440bc04>); + m_dsmap.SetAt(0x2440dc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440dc04>); + m_dsmap.SetAt(0x2444b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2444b464>); + m_dsmap.SetAt(0x24603c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24603c04>); + m_dsmap.SetAt(0x2480a264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480a264>); + m_dsmap.SetAt(0x2484b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2484b464>); + m_dsmap.SetAt(0x26203c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26203c04>); + m_dsmap.SetAt(0x2640bc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2640bc04>); + m_dsmap.SetAt(0x28803c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x28803c04>); + m_dsmap.SetAt(0x28803d84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x28803d84>); + m_dsmap.SetAt(0x2ff03c06, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03c06>); + m_dsmap.SetAt(0x6440a264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440a264>); + m_dsmap.SetAt(0x6444b064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444b064>); + m_dsmap.SetAt(0x6444b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444b464>); + m_dsmap.SetAt(0x6484b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6484b464>); + m_dsmap.SetAt(0x8ff03c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff03c04>); + m_dsmap.SetAt(0x8ff03c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff03c05>); + m_dsmap.SetAt(0xa4203c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4203c05>); + m_dsmap.SetAt(0xa4402c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c04>); + m_dsmap.SetAt(0xa4803c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4803c04>); + m_dsmap.SetAt(0xa480b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480b464>); + m_dsmap.SetAt(0xe444b454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444b454>); + m_dsmap.SetAt(0xe484b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe484b464>); + m_dsmap.SetAt(0xa4403c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403c24>); + m_dsmap.SetAt(0xa4803c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4803c24>); // suikoden 5 - m_dsmap.SetAt(0x2441b448, &GSDrawScanline::DrawScanlineExT<0x2441b448>); - m_dsmap.SetAt(0x60203468, &GSDrawScanline::DrawScanlineExT<0x60203468>); - m_dsmap.SetAt(0x64402258, &GSDrawScanline::DrawScanlineExT<0x64402258>); - m_dsmap.SetAt(0x6441a468, &GSDrawScanline::DrawScanlineExT<0x6441a468>); - m_dsmap.SetAt(0x6441b468, &GSDrawScanline::DrawScanlineExT<0x6441b468>); - m_dsmap.SetAt(0x64803468, &GSDrawScanline::DrawScanlineExT<0x64803468>); - m_dsmap.SetAt(0xa421b448, &GSDrawScanline::DrawScanlineExT<0xa421b448>); - m_dsmap.SetAt(0xe6803468, &GSDrawScanline::DrawScanlineExT<0xe6803468>); + m_dsmap.SetAt(0x2441b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441b448>); + m_dsmap.SetAt(0x60203468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x60203468>); + m_dsmap.SetAt(0x64402258, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402258>); + m_dsmap.SetAt(0x6441a468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6441a468>); + m_dsmap.SetAt(0x6441b468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6441b468>); + m_dsmap.SetAt(0x64803468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64803468>); + m_dsmap.SetAt(0xa421b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa421b448>); + m_dsmap.SetAt(0xe6803468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe6803468>); // culdcept - m_dsmap.SetAt(0x0ff02200, &GSDrawScanline::DrawScanlineExT<0x0ff02200>); - m_dsmap.SetAt(0x0ff03880, &GSDrawScanline::DrawScanlineExT<0x0ff03880>); - m_dsmap.SetAt(0x2440e266, &GSDrawScanline::DrawScanlineExT<0x2440e266>); - m_dsmap.SetAt(0x2440e466, &GSDrawScanline::DrawScanlineExT<0x2440e466>); - m_dsmap.SetAt(0x2440ec26, &GSDrawScanline::DrawScanlineExT<0x2440ec26>); - m_dsmap.SetAt(0x2440f466, &GSDrawScanline::DrawScanlineExT<0x2440f466>); - m_dsmap.SetAt(0x2480e266, &GSDrawScanline::DrawScanlineExT<0x2480e266>); - m_dsmap.SetAt(0x2680e266, &GSDrawScanline::DrawScanlineExT<0x2680e266>); - m_dsmap.SetAt(0x2680f566, &GSDrawScanline::DrawScanlineExT<0x2680f566>); - m_dsmap.SetAt(0x2680fc26, &GSDrawScanline::DrawScanlineExT<0x2680fc26>); - m_dsmap.SetAt(0x2a10f566, &GSDrawScanline::DrawScanlineExT<0x2a10f566>); - m_dsmap.SetAt(0x4ff0e266, &GSDrawScanline::DrawScanlineExT<0x4ff0e266>); - m_dsmap.SetAt(0x4ff0e466, &GSDrawScanline::DrawScanlineExT<0x4ff0e466>); - m_dsmap.SetAt(0x4ff0ec26, &GSDrawScanline::DrawScanlineExT<0x4ff0ec26>); - m_dsmap.SetAt(0x4ff0f526, &GSDrawScanline::DrawScanlineExT<0x4ff0f526>); - m_dsmap.SetAt(0x4ff0f566, &GSDrawScanline::DrawScanlineExT<0x4ff0f566>); - m_dsmap.SetAt(0x4ff0fc26, &GSDrawScanline::DrawScanlineExT<0x4ff0fc26>); - m_dsmap.SetAt(0x4ff4ec26, &GSDrawScanline::DrawScanlineExT<0x4ff4ec26>); - m_dsmap.SetAt(0x4ff4f526, &GSDrawScanline::DrawScanlineExT<0x4ff4f526>); - m_dsmap.SetAt(0x4ff4f566, &GSDrawScanline::DrawScanlineExT<0x4ff4f566>); - m_dsmap.SetAt(0x4ff4fc26, &GSDrawScanline::DrawScanlineExT<0x4ff4fc26>); - m_dsmap.SetAt(0x6440ec26, &GSDrawScanline::DrawScanlineExT<0x6440ec26>); - m_dsmap.SetAt(0x6440f466, &GSDrawScanline::DrawScanlineExT<0x6440f466>); - m_dsmap.SetAt(0x6440fc26, &GSDrawScanline::DrawScanlineExT<0x6440fc26>); - m_dsmap.SetAt(0x6444fc26, &GSDrawScanline::DrawScanlineExT<0x6444fc26>); - m_dsmap.SetAt(0xa440ec26, &GSDrawScanline::DrawScanlineExT<0xa440ec26>); - m_dsmap.SetAt(0xcff0ec26, &GSDrawScanline::DrawScanlineExT<0xcff0ec26>); - m_dsmap.SetAt(0xcff0fc26, &GSDrawScanline::DrawScanlineExT<0xcff0fc26>); - m_dsmap.SetAt(0xcff4ec26, &GSDrawScanline::DrawScanlineExT<0xcff4ec26>); - m_dsmap.SetAt(0xcff4fc26, &GSDrawScanline::DrawScanlineExT<0xcff4fc26>); + m_dsmap.SetAt(0x0ff02200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02200>); + m_dsmap.SetAt(0x0ff03880, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03880>); + m_dsmap.SetAt(0x2440e266, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440e266>); + m_dsmap.SetAt(0x2440e466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440e466>); + m_dsmap.SetAt(0x2440ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440ec26>); + m_dsmap.SetAt(0x2440f466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440f466>); + m_dsmap.SetAt(0x2480e266, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480e266>); + m_dsmap.SetAt(0x2680e266, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680e266>); + m_dsmap.SetAt(0x2680f566, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680f566>); + m_dsmap.SetAt(0x2680fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680fc26>); + m_dsmap.SetAt(0x2a10f566, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a10f566>); + m_dsmap.SetAt(0x4ff0e266, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0e266>); + m_dsmap.SetAt(0x4ff0e466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0e466>); + m_dsmap.SetAt(0x4ff0ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0ec26>); + m_dsmap.SetAt(0x4ff0f526, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0f526>); + m_dsmap.SetAt(0x4ff0f566, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0f566>); + m_dsmap.SetAt(0x4ff0fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0fc26>); + m_dsmap.SetAt(0x4ff4ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4ec26>); + m_dsmap.SetAt(0x4ff4f526, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4f526>); + m_dsmap.SetAt(0x4ff4f566, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4f566>); + m_dsmap.SetAt(0x4ff4fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4fc26>); + m_dsmap.SetAt(0x6440ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440ec26>); + m_dsmap.SetAt(0x6440f466, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440f466>); + m_dsmap.SetAt(0x6440fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440fc26>); + m_dsmap.SetAt(0x6444fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444fc26>); + m_dsmap.SetAt(0xa440ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440ec26>); + m_dsmap.SetAt(0xcff0ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0ec26>); + m_dsmap.SetAt(0xcff0fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0fc26>); + m_dsmap.SetAt(0xcff4ec26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4ec26>); + m_dsmap.SetAt(0xcff4fc26, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4fc26>); // resident evil 4 - m_dsmap.SetAt(0x0ff02c24, &GSDrawScanline::DrawScanlineExT<0x0ff02c24>); - m_dsmap.SetAt(0x0ff02c84, &GSDrawScanline::DrawScanlineExT<0x0ff02c84>); - m_dsmap.SetAt(0x0ff03884, &GSDrawScanline::DrawScanlineExT<0x0ff03884>); - m_dsmap.SetAt(0x0ff03c00, &GSDrawScanline::DrawScanlineExT<0x0ff03c00>); - m_dsmap.SetAt(0x22a03c84, &GSDrawScanline::DrawScanlineExT<0x22a03c84>); - m_dsmap.SetAt(0x2440c204, &GSDrawScanline::DrawScanlineExT<0x2440c204>); - m_dsmap.SetAt(0x2440d404, &GSDrawScanline::DrawScanlineExT<0x2440d404>); - m_dsmap.SetAt(0x24802204, &GSDrawScanline::DrawScanlineExT<0x24802204>); - m_dsmap.SetAt(0x24803c04, &GSDrawScanline::DrawScanlineExT<0x24803c04>); - m_dsmap.SetAt(0x2480c224, &GSDrawScanline::DrawScanlineExT<0x2480c224>); - m_dsmap.SetAt(0x2481c264, &GSDrawScanline::DrawScanlineExT<0x2481c264>); - m_dsmap.SetAt(0x26403c84, &GSDrawScanline::DrawScanlineExT<0x26403c84>); - m_dsmap.SetAt(0x2640c224, &GSDrawScanline::DrawScanlineExT<0x2640c224>); - m_dsmap.SetAt(0x26802224, &GSDrawScanline::DrawScanlineExT<0x26802224>); - m_dsmap.SetAt(0x26803c84, &GSDrawScanline::DrawScanlineExT<0x26803c84>); - m_dsmap.SetAt(0x28902204, &GSDrawScanline::DrawScanlineExT<0x28902204>); - m_dsmap.SetAt(0x2a403c84, &GSDrawScanline::DrawScanlineExT<0x2a403c84>); - m_dsmap.SetAt(0x6640d464, &GSDrawScanline::DrawScanlineExT<0x6640d464>); - m_dsmap.SetAt(0x66420214, &GSDrawScanline::DrawScanlineExT<0x66420214>); - m_dsmap.SetAt(0xa2a02c84, &GSDrawScanline::DrawScanlineExT<0xa2a02c84>); - m_dsmap.SetAt(0xa440d444, &GSDrawScanline::DrawScanlineExT<0xa440d444>); - m_dsmap.SetAt(0xa480d444, &GSDrawScanline::DrawScanlineExT<0xa480d444>); - m_dsmap.SetAt(0xa480d464, &GSDrawScanline::DrawScanlineExT<0xa480d464>); - m_dsmap.SetAt(0xa680d444, &GSDrawScanline::DrawScanlineExT<0xa680d444>); - m_dsmap.SetAt(0xaff02c84, &GSDrawScanline::DrawScanlineExT<0xaff02c84>); - m_dsmap.SetAt(0xaff03484, &GSDrawScanline::DrawScanlineExT<0xaff03484>); - m_dsmap.SetAt(0xe580d464, &GSDrawScanline::DrawScanlineExT<0xe580d464>); + m_dsmap.SetAt(0x0ff02c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c24>); + m_dsmap.SetAt(0x0ff02c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c84>); + m_dsmap.SetAt(0x0ff03884, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03884>); + m_dsmap.SetAt(0x0ff03c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c00>); + m_dsmap.SetAt(0x22a03c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x22a03c84>); + m_dsmap.SetAt(0x2440c204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440c204>); + m_dsmap.SetAt(0x2440d404, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440d404>); + m_dsmap.SetAt(0x24802204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802204>); + m_dsmap.SetAt(0x24803c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24803c04>); + m_dsmap.SetAt(0x2480c224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480c224>); + m_dsmap.SetAt(0x2481c264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2481c264>); + m_dsmap.SetAt(0x26403c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403c84>); + m_dsmap.SetAt(0x2640c224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2640c224>); + m_dsmap.SetAt(0x26802224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26802224>); + m_dsmap.SetAt(0x26803c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803c84>); + m_dsmap.SetAt(0x28902204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x28902204>); + m_dsmap.SetAt(0x2a403c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a403c84>); + m_dsmap.SetAt(0x6640d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6640d464>); + m_dsmap.SetAt(0x66420214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66420214>); + m_dsmap.SetAt(0xa2a02c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa2a02c84>); + m_dsmap.SetAt(0xa440d444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d444>); + m_dsmap.SetAt(0xa480d444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d444>); + m_dsmap.SetAt(0xa480d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d464>); + m_dsmap.SetAt(0xa680d444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa680d444>); + m_dsmap.SetAt(0xaff02c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02c84>); + m_dsmap.SetAt(0xaff03484, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff03484>); + m_dsmap.SetAt(0xe580d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe580d464>); // persona 3 - m_dsmap.SetAt(0x0ff02248, &GSDrawScanline::DrawScanlineExT<0x0ff02248>); - m_dsmap.SetAt(0x24402268, &GSDrawScanline::DrawScanlineExT<0x24402268>); - m_dsmap.SetAt(0x24410448, &GSDrawScanline::DrawScanlineExT<0x24410448>); - m_dsmap.SetAt(0x2441a448, &GSDrawScanline::DrawScanlineExT<0x2441a448>); - m_dsmap.SetAt(0x2445a468, &GSDrawScanline::DrawScanlineExT<0x2445a468>); - m_dsmap.SetAt(0x4ff02268, &GSDrawScanline::DrawScanlineExT<0x4ff02268>); - m_dsmap.SetAt(0xa4811448, &GSDrawScanline::DrawScanlineExT<0xa4811448>); - m_dsmap.SetAt(0xa581b448, &GSDrawScanline::DrawScanlineExT<0xa581b448>); - m_dsmap.SetAt(0xa6a1b448, &GSDrawScanline::DrawScanlineExT<0xa6a1b448>); - m_dsmap.SetAt(0xe4461468, &GSDrawScanline::DrawScanlineExT<0xe4461468>); + m_dsmap.SetAt(0x0ff02248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02248>); + m_dsmap.SetAt(0x24402268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402268>); + m_dsmap.SetAt(0x24410448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410448>); + m_dsmap.SetAt(0x2441a448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2441a448>); + m_dsmap.SetAt(0x2445a468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2445a468>); + m_dsmap.SetAt(0x4ff02268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02268>); + m_dsmap.SetAt(0xa4811448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4811448>); + m_dsmap.SetAt(0xa581b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa581b448>); + m_dsmap.SetAt(0xa6a1b448, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6a1b448>); + m_dsmap.SetAt(0xe4461468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4461468>); // bully - m_dsmap.SetAt(0x24802804, &GSDrawScanline::DrawScanlineExT<0x24802804>); - m_dsmap.SetAt(0x25403c84, &GSDrawScanline::DrawScanlineExT<0x25403c84>); - m_dsmap.SetAt(0x26102204, &GSDrawScanline::DrawScanlineExT<0x26102204>); - m_dsmap.SetAt(0x26803884, &GSDrawScanline::DrawScanlineExT<0x26803884>); - m_dsmap.SetAt(0x2a402205, &GSDrawScanline::DrawScanlineExT<0x2a402205>); - m_dsmap.SetAt(0x2a802c86, &GSDrawScanline::DrawScanlineExT<0x2a802c86>); - m_dsmap.SetAt(0x2ff03884, &GSDrawScanline::DrawScanlineExT<0x2ff03884>); - m_dsmap.SetAt(0x4ff02264, &GSDrawScanline::DrawScanlineExT<0x4ff02264>); - m_dsmap.SetAt(0x64402264, &GSDrawScanline::DrawScanlineExT<0x64402264>); - m_dsmap.SetAt(0x64a02214, &GSDrawScanline::DrawScanlineExT<0x64a02214>); - m_dsmap.SetAt(0x6ff20235, &GSDrawScanline::DrawScanlineExT<0x6ff20235>); - m_dsmap.SetAt(0xa441b424, &GSDrawScanline::DrawScanlineExT<0xa441b424>); - m_dsmap.SetAt(0xa441b464, &GSDrawScanline::DrawScanlineExT<0xa441b464>); - m_dsmap.SetAt(0xa441bc24, &GSDrawScanline::DrawScanlineExT<0xa441bc24>); - m_dsmap.SetAt(0xa441bc44, &GSDrawScanline::DrawScanlineExT<0xa441bc44>); - m_dsmap.SetAt(0xa445b464, &GSDrawScanline::DrawScanlineExT<0xa445b464>); - m_dsmap.SetAt(0xa681b464, &GSDrawScanline::DrawScanlineExT<0xa681b464>); - m_dsmap.SetAt(0xa681bc04, &GSDrawScanline::DrawScanlineExT<0xa681bc04>); - m_dsmap.SetAt(0xa681bc24, &GSDrawScanline::DrawScanlineExT<0xa681bc24>); - m_dsmap.SetAt(0xa681bc44, &GSDrawScanline::DrawScanlineExT<0xa681bc44>); - m_dsmap.SetAt(0xa681bc64, &GSDrawScanline::DrawScanlineExT<0xa681bc64>); - m_dsmap.SetAt(0xe4a53464, &GSDrawScanline::DrawScanlineExT<0xe4a53464>); - m_dsmap.SetAt(0xe884d464, &GSDrawScanline::DrawScanlineExT<0xe884d464>); + m_dsmap.SetAt(0x24802804, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802804>); + m_dsmap.SetAt(0x25403c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25403c84>); + m_dsmap.SetAt(0x26102204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26102204>); + m_dsmap.SetAt(0x26803884, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803884>); + m_dsmap.SetAt(0x2a402205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a402205>); + m_dsmap.SetAt(0x2a802c86, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a802c86>); + m_dsmap.SetAt(0x2ff03884, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03884>); + m_dsmap.SetAt(0x4ff02264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02264>); + m_dsmap.SetAt(0x64402264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402264>); + m_dsmap.SetAt(0x64a02214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64a02214>); + m_dsmap.SetAt(0x6ff20235, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff20235>); + m_dsmap.SetAt(0xa441b424, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441b424>); + m_dsmap.SetAt(0xa441b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441b464>); + m_dsmap.SetAt(0xa441bc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441bc24>); + m_dsmap.SetAt(0xa441bc44, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441bc44>); + m_dsmap.SetAt(0xa445b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa445b464>); + m_dsmap.SetAt(0xa681b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa681b464>); + m_dsmap.SetAt(0xa681bc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa681bc04>); + m_dsmap.SetAt(0xa681bc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa681bc24>); + m_dsmap.SetAt(0xa681bc44, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa681bc44>); + m_dsmap.SetAt(0xa681bc64, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa681bc64>); + m_dsmap.SetAt(0xe4a53464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4a53464>); + m_dsmap.SetAt(0xe884d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe884d464>); // tomoyo after - m_dsmap.SetAt(0x0ff0220a, &GSDrawScanline::DrawScanlineExT<0x0ff0220a>); - m_dsmap.SetAt(0x4ff02c19, &GSDrawScanline::DrawScanlineExT<0x4ff02c19>); - m_dsmap.SetAt(0x4ff03c19, &GSDrawScanline::DrawScanlineExT<0x4ff03c19>); - m_dsmap.SetAt(0x64202268, &GSDrawScanline::DrawScanlineExT<0x64202268>); - m_dsmap.SetAt(0x64402c68, &GSDrawScanline::DrawScanlineExT<0x64402c68>); - m_dsmap.SetAt(0xe4203c68, &GSDrawScanline::DrawScanlineExT<0xe4203c68>); - m_dsmap.SetAt(0xe4402c68, &GSDrawScanline::DrawScanlineExT<0xe4402c68>); - m_dsmap.SetAt(0xe4403c68, &GSDrawScanline::DrawScanlineExT<0xe4403c68>); - m_dsmap.SetAt(0xe4802c68, &GSDrawScanline::DrawScanlineExT<0xe4802c68>); - m_dsmap.SetAt(0xe5402c68, &GSDrawScanline::DrawScanlineExT<0xe5402c68>); + m_dsmap.SetAt(0x0ff0220a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff0220a>); + m_dsmap.SetAt(0x4ff02c19, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02c19>); + m_dsmap.SetAt(0x4ff03c19, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03c19>); + m_dsmap.SetAt(0x64202268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64202268>); + m_dsmap.SetAt(0x64402c68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402c68>); + m_dsmap.SetAt(0xe4203c68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4203c68>); + m_dsmap.SetAt(0xe4402c68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4402c68>); + m_dsmap.SetAt(0xe4403c68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403c68>); + m_dsmap.SetAt(0xe4802c68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4802c68>); + m_dsmap.SetAt(0xe5402c68, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe5402c68>); // okami - m_dsmap.SetAt(0x0ff02c88, &GSDrawScanline::DrawScanlineExT<0x0ff02c88>); - m_dsmap.SetAt(0x24402c08, &GSDrawScanline::DrawScanlineExT<0x24402c08>); - m_dsmap.SetAt(0x24403c88, &GSDrawScanline::DrawScanlineExT<0x24403c88>); - m_dsmap.SetAt(0x24411468, &GSDrawScanline::DrawScanlineExT<0x24411468>); - m_dsmap.SetAt(0x25403c08, &GSDrawScanline::DrawScanlineExT<0x25403c08>); - m_dsmap.SetAt(0x26203c88, &GSDrawScanline::DrawScanlineExT<0x26203c88>); - m_dsmap.SetAt(0x26403888, &GSDrawScanline::DrawScanlineExT<0x26403888>); - m_dsmap.SetAt(0x26403c88, &GSDrawScanline::DrawScanlineExT<0x26403c88>); - m_dsmap.SetAt(0x26803888, &GSDrawScanline::DrawScanlineExT<0x26803888>); - m_dsmap.SetAt(0x2ff02c88, &GSDrawScanline::DrawScanlineExT<0x2ff02c88>); - m_dsmap.SetAt(0x4ff02c18, &GSDrawScanline::DrawScanlineExT<0x4ff02c18>); - m_dsmap.SetAt(0x62902c18, &GSDrawScanline::DrawScanlineExT<0x62902c18>); - m_dsmap.SetAt(0x64402218, &GSDrawScanline::DrawScanlineExT<0x64402218>); - m_dsmap.SetAt(0x64402238, &GSDrawScanline::DrawScanlineExT<0x64402238>); - m_dsmap.SetAt(0x6440dc18, &GSDrawScanline::DrawScanlineExT<0x6440dc18>); - m_dsmap.SetAt(0x6444c268, &GSDrawScanline::DrawScanlineExT<0x6444c268>); - m_dsmap.SetAt(0xa440d428, &GSDrawScanline::DrawScanlineExT<0xa440d428>); - m_dsmap.SetAt(0xa480d428, &GSDrawScanline::DrawScanlineExT<0xa480d428>); - m_dsmap.SetAt(0xa8903c88, &GSDrawScanline::DrawScanlineExT<0xa8903c88>); - m_dsmap.SetAt(0xaff02ca8, &GSDrawScanline::DrawScanlineExT<0xaff02ca8>); - m_dsmap.SetAt(0xaff03888, &GSDrawScanline::DrawScanlineExT<0xaff03888>); - m_dsmap.SetAt(0xe4403418, &GSDrawScanline::DrawScanlineExT<0xe4403418>); - m_dsmap.SetAt(0xe440d418, &GSDrawScanline::DrawScanlineExT<0xe440d418>); - m_dsmap.SetAt(0xe440d428, &GSDrawScanline::DrawScanlineExT<0xe440d428>); - m_dsmap.SetAt(0xe440dc18, &GSDrawScanline::DrawScanlineExT<0xe440dc18>); - m_dsmap.SetAt(0xe440dc28, &GSDrawScanline::DrawScanlineExT<0xe440dc28>); - m_dsmap.SetAt(0xe444d468, &GSDrawScanline::DrawScanlineExT<0xe444d468>); + m_dsmap.SetAt(0x0ff02c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c88>); + m_dsmap.SetAt(0x24402c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402c08>); + m_dsmap.SetAt(0x24403c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403c88>); + m_dsmap.SetAt(0x24411468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24411468>); + m_dsmap.SetAt(0x25403c08, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25403c08>); + m_dsmap.SetAt(0x26203c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26203c88>); + m_dsmap.SetAt(0x26403888, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403888>); + m_dsmap.SetAt(0x26403c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403c88>); + m_dsmap.SetAt(0x26803888, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803888>); + m_dsmap.SetAt(0x2ff02c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02c88>); + m_dsmap.SetAt(0x4ff02c18, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02c18>); + m_dsmap.SetAt(0x62902c18, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x62902c18>); + m_dsmap.SetAt(0x64402218, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402218>); + m_dsmap.SetAt(0x64402238, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402238>); + m_dsmap.SetAt(0x6440dc18, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440dc18>); + m_dsmap.SetAt(0x6444c268, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444c268>); + m_dsmap.SetAt(0xa440d428, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d428>); + m_dsmap.SetAt(0xa480d428, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d428>); + m_dsmap.SetAt(0xa8903c88, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa8903c88>); + m_dsmap.SetAt(0xaff02ca8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02ca8>); + m_dsmap.SetAt(0xaff03888, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff03888>); + m_dsmap.SetAt(0xe4403418, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403418>); + m_dsmap.SetAt(0xe440d418, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d418>); + m_dsmap.SetAt(0xe440d428, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d428>); + m_dsmap.SetAt(0xe440dc18, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc18>); + m_dsmap.SetAt(0xe440dc28, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc28>); + m_dsmap.SetAt(0xe444d468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444d468>); // sfex3 - m_dsmap.SetAt(0x0ff0280a, &GSDrawScanline::DrawScanlineExT<0x0ff0280a>); - m_dsmap.SetAt(0x0ff0380a, &GSDrawScanline::DrawScanlineExT<0x0ff0380a>); - m_dsmap.SetAt(0x0ff0c278, &GSDrawScanline::DrawScanlineExT<0x0ff0c278>); - m_dsmap.SetAt(0x2428e248, &GSDrawScanline::DrawScanlineExT<0x2428e248>); - m_dsmap.SetAt(0x2440280a, &GSDrawScanline::DrawScanlineExT<0x2440280a>); - m_dsmap.SetAt(0x24802278, &GSDrawScanline::DrawScanlineExT<0x24802278>); - m_dsmap.SetAt(0x2480e278, &GSDrawScanline::DrawScanlineExT<0x2480e278>); - m_dsmap.SetAt(0x4ff02258, &GSDrawScanline::DrawScanlineExT<0x4ff02258>); - m_dsmap.SetAt(0x66402258, &GSDrawScanline::DrawScanlineExT<0x66402258>); - m_dsmap.SetAt(0x66a02218, &GSDrawScanline::DrawScanlineExT<0x66a02218>); - m_dsmap.SetAt(0x6a90c238, &GSDrawScanline::DrawScanlineExT<0x6a90c238>); - m_dsmap.SetAt(0xa428e5c8, &GSDrawScanline::DrawScanlineExT<0xa428e5c8>); - m_dsmap.SetAt(0xa4402cb8, &GSDrawScanline::DrawScanlineExT<0xa4402cb8>); - m_dsmap.SetAt(0xa4803438, &GSDrawScanline::DrawScanlineExT<0xa4803438>); - m_dsmap.SetAt(0xa480d478, &GSDrawScanline::DrawScanlineExT<0xa480d478>); - m_dsmap.SetAt(0xa480dc38, &GSDrawScanline::DrawScanlineExT<0xa480dc38>); - m_dsmap.SetAt(0xa480fc38, &GSDrawScanline::DrawScanlineExT<0xa480fc38>); - m_dsmap.SetAt(0xcff0c5e8, &GSDrawScanline::DrawScanlineExT<0xcff0c5e8>); - m_dsmap.SetAt(0xe4402c18, &GSDrawScanline::DrawScanlineExT<0xe4402c18>); - m_dsmap.SetAt(0xe4403468, &GSDrawScanline::DrawScanlineExT<0xe4403468>); - m_dsmap.SetAt(0xe440c5e8, &GSDrawScanline::DrawScanlineExT<0xe440c5e8>); - m_dsmap.SetAt(0xe440cc18, &GSDrawScanline::DrawScanlineExT<0xe440cc18>); - m_dsmap.SetAt(0xe440d5f8, &GSDrawScanline::DrawScanlineExT<0xe440d5f8>); + m_dsmap.SetAt(0x0ff0280a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff0280a>); + m_dsmap.SetAt(0x0ff0380a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff0380a>); + m_dsmap.SetAt(0x0ff0c278, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff0c278>); + m_dsmap.SetAt(0x2428e248, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2428e248>); + m_dsmap.SetAt(0x2440280a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440280a>); + m_dsmap.SetAt(0x24802278, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802278>); + m_dsmap.SetAt(0x2480e278, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480e278>); + m_dsmap.SetAt(0x4ff02258, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02258>); + m_dsmap.SetAt(0x66402258, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402258>); + m_dsmap.SetAt(0x66a02218, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66a02218>); + m_dsmap.SetAt(0x6a90c238, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a90c238>); + m_dsmap.SetAt(0xa428e5c8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa428e5c8>); + m_dsmap.SetAt(0xa4402cb8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402cb8>); + m_dsmap.SetAt(0xa4803438, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4803438>); + m_dsmap.SetAt(0xa480d478, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d478>); + m_dsmap.SetAt(0xa480dc38, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480dc38>); + m_dsmap.SetAt(0xa480fc38, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480fc38>); + m_dsmap.SetAt(0xcff0c5e8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0c5e8>); + m_dsmap.SetAt(0xe4402c18, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4402c18>); + m_dsmap.SetAt(0xe4403468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403468>); + m_dsmap.SetAt(0xe440c5e8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440c5e8>); + m_dsmap.SetAt(0xe440cc18, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440cc18>); + m_dsmap.SetAt(0xe440d5f8, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d5f8>); // tokyo bus guide - m_dsmap.SetAt(0x2444f470, &GSDrawScanline::DrawScanlineExT<0x2444f470>); - m_dsmap.SetAt(0x4ff0e230, &GSDrawScanline::DrawScanlineExT<0x4ff0e230>); - m_dsmap.SetAt(0x4ff0e270, &GSDrawScanline::DrawScanlineExT<0x4ff0e270>); - m_dsmap.SetAt(0x4ff4f470, &GSDrawScanline::DrawScanlineExT<0x4ff4f470>); - m_dsmap.SetAt(0x6440e230, &GSDrawScanline::DrawScanlineExT<0x6440e230>); - m_dsmap.SetAt(0x6440e270, &GSDrawScanline::DrawScanlineExT<0x6440e270>); - m_dsmap.SetAt(0x64420210, &GSDrawScanline::DrawScanlineExT<0x64420210>); - m_dsmap.SetAt(0x64453450, &GSDrawScanline::DrawScanlineExT<0x64453450>); - m_dsmap.SetAt(0x8ff4d470, &GSDrawScanline::DrawScanlineExT<0x8ff4d470>); - m_dsmap.SetAt(0x8ff4f470, &GSDrawScanline::DrawScanlineExT<0x8ff4f470>); - m_dsmap.SetAt(0xa4411450, &GSDrawScanline::DrawScanlineExT<0xa4411450>); - m_dsmap.SetAt(0xcff4d470, &GSDrawScanline::DrawScanlineExT<0xcff4d470>); - m_dsmap.SetAt(0xcff4f470, &GSDrawScanline::DrawScanlineExT<0xcff4f470>); - m_dsmap.SetAt(0xe440d470, &GSDrawScanline::DrawScanlineExT<0xe440d470>); - m_dsmap.SetAt(0xe440f430, &GSDrawScanline::DrawScanlineExT<0xe440f430>); - m_dsmap.SetAt(0xe440fc30, &GSDrawScanline::DrawScanlineExT<0xe440fc30>); - m_dsmap.SetAt(0xe444f470, &GSDrawScanline::DrawScanlineExT<0xe444f470>); + m_dsmap.SetAt(0x2444f470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2444f470>); + m_dsmap.SetAt(0x4ff0e230, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0e230>); + m_dsmap.SetAt(0x4ff0e270, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0e270>); + m_dsmap.SetAt(0x4ff4f470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff4f470>); + m_dsmap.SetAt(0x6440e230, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e230>); + m_dsmap.SetAt(0x6440e270, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e270>); + m_dsmap.SetAt(0x64420210, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64420210>); + m_dsmap.SetAt(0x64453450, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64453450>); + m_dsmap.SetAt(0x8ff4d470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff4d470>); + m_dsmap.SetAt(0x8ff4f470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff4f470>); + m_dsmap.SetAt(0xa4411450, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411450>); + m_dsmap.SetAt(0xcff4d470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4d470>); + m_dsmap.SetAt(0xcff4f470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4f470>); + m_dsmap.SetAt(0xe440d470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d470>); + m_dsmap.SetAt(0xe440f430, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440f430>); + m_dsmap.SetAt(0xe440fc30, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440fc30>); + m_dsmap.SetAt(0xe444f470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444f470>); // katamary damacy - m_dsmap.SetAt(0x24402c05, &GSDrawScanline::DrawScanlineExT<0x24402c05>); - m_dsmap.SetAt(0x2440ec04, &GSDrawScanline::DrawScanlineExT<0x2440ec04>); - m_dsmap.SetAt(0x2440f805, &GSDrawScanline::DrawScanlineExT<0x2440f805>); - m_dsmap.SetAt(0x2440f824, &GSDrawScanline::DrawScanlineExT<0x2440f824>); - m_dsmap.SetAt(0x24410204, &GSDrawScanline::DrawScanlineExT<0x24410204>); - m_dsmap.SetAt(0x24410802, &GSDrawScanline::DrawScanlineExT<0x24410802>); - m_dsmap.SetAt(0x24410816, &GSDrawScanline::DrawScanlineExT<0x24410816>); - m_dsmap.SetAt(0x24442264, &GSDrawScanline::DrawScanlineExT<0x24442264>); - m_dsmap.SetAt(0x6440e214, &GSDrawScanline::DrawScanlineExT<0x6440e214>); - m_dsmap.SetAt(0x6440e224, &GSDrawScanline::DrawScanlineExT<0x6440e224>); - m_dsmap.SetAt(0x6440ec24, &GSDrawScanline::DrawScanlineExT<0x6440ec24>); - m_dsmap.SetAt(0x6442e214, &GSDrawScanline::DrawScanlineExT<0x6442e214>); - m_dsmap.SetAt(0x644a0214, &GSDrawScanline::DrawScanlineExT<0x644a0214>); - m_dsmap.SetAt(0x6484f064, &GSDrawScanline::DrawScanlineExT<0x6484f064>); - m_dsmap.SetAt(0x6ff02214, &GSDrawScanline::DrawScanlineExT<0x6ff02214>); - m_dsmap.SetAt(0xa440ec24, &GSDrawScanline::DrawScanlineExT<0xa440ec24>); - m_dsmap.SetAt(0xa44cf444, &GSDrawScanline::DrawScanlineExT<0xa44cf444>); - m_dsmap.SetAt(0xa480f464, &GSDrawScanline::DrawScanlineExT<0xa480f464>); - m_dsmap.SetAt(0xe440ec14, &GSDrawScanline::DrawScanlineExT<0xe440ec14>); - m_dsmap.SetAt(0xe440ec24, &GSDrawScanline::DrawScanlineExT<0xe440ec24>); - m_dsmap.SetAt(0xe440f464, &GSDrawScanline::DrawScanlineExT<0xe440f464>); - m_dsmap.SetAt(0xe444f464, &GSDrawScanline::DrawScanlineExT<0xe444f464>); - m_dsmap.SetAt(0xe480ec24, &GSDrawScanline::DrawScanlineExT<0xe480ec24>); - m_dsmap.SetAt(0xe480f464, &GSDrawScanline::DrawScanlineExT<0xe480f464>); - m_dsmap.SetAt(0xe484f464, &GSDrawScanline::DrawScanlineExT<0xe484f464>); - m_dsmap.SetAt(0xe810cc14, &GSDrawScanline::DrawScanlineExT<0xe810cc14>); + m_dsmap.SetAt(0x24402c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402c05>); + m_dsmap.SetAt(0x2440ec04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440ec04>); + m_dsmap.SetAt(0x2440f805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440f805>); + m_dsmap.SetAt(0x2440f824, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440f824>); + m_dsmap.SetAt(0x24410204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410204>); + m_dsmap.SetAt(0x24410802, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410802>); + m_dsmap.SetAt(0x24410816, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24410816>); + m_dsmap.SetAt(0x24442264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24442264>); + m_dsmap.SetAt(0x6440e214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e214>); + m_dsmap.SetAt(0x6440e224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e224>); + m_dsmap.SetAt(0x6440ec24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440ec24>); + m_dsmap.SetAt(0x6442e214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6442e214>); + m_dsmap.SetAt(0x644a0214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x644a0214>); + m_dsmap.SetAt(0x6484f064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6484f064>); + m_dsmap.SetAt(0x6ff02214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff02214>); + m_dsmap.SetAt(0xa440ec24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440ec24>); + m_dsmap.SetAt(0xa44cf444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa44cf444>); + m_dsmap.SetAt(0xa480f464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480f464>); + m_dsmap.SetAt(0xe440ec14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ec14>); + m_dsmap.SetAt(0xe440ec24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ec24>); + m_dsmap.SetAt(0xe440f464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440f464>); + m_dsmap.SetAt(0xe444f464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe444f464>); + m_dsmap.SetAt(0xe480ec24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480ec24>); + m_dsmap.SetAt(0xe480f464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480f464>); + m_dsmap.SetAt(0xe484f464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe484f464>); + m_dsmap.SetAt(0xe810cc14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe810cc14>); // kh2 - m_dsmap.SetAt(0x0ff0dc05, &GSDrawScanline::DrawScanlineExT<0x0ff0dc05>); - m_dsmap.SetAt(0x2440dc00, &GSDrawScanline::DrawScanlineExT<0x2440dc00>); - m_dsmap.SetAt(0x2480c274, &GSDrawScanline::DrawScanlineExT<0x2480c274>); - m_dsmap.SetAt(0x26403805, &GSDrawScanline::DrawScanlineExT<0x26403805>); - m_dsmap.SetAt(0x26803805, &GSDrawScanline::DrawScanlineExT<0x26803805>); - m_dsmap.SetAt(0x4ff03894, &GSDrawScanline::DrawScanlineExT<0x4ff03894>); - m_dsmap.SetAt(0x64402814, &GSDrawScanline::DrawScanlineExT<0x64402814>); - m_dsmap.SetAt(0x6440c220, &GSDrawScanline::DrawScanlineExT<0x6440c220>); - m_dsmap.SetAt(0x6444d464, &GSDrawScanline::DrawScanlineExT<0x6444d464>); - m_dsmap.SetAt(0x64802214, &GSDrawScanline::DrawScanlineExT<0x64802214>); - m_dsmap.SetAt(0xa4402c45, &GSDrawScanline::DrawScanlineExT<0xa4402c45>); - m_dsmap.SetAt(0xa4447464, &GSDrawScanline::DrawScanlineExT<0xa4447464>); - m_dsmap.SetAt(0xe2a4d464, &GSDrawScanline::DrawScanlineExT<0xe2a4d464>); - m_dsmap.SetAt(0xe4803c54, &GSDrawScanline::DrawScanlineExT<0xe4803c54>); + m_dsmap.SetAt(0x0ff0dc05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff0dc05>); + m_dsmap.SetAt(0x2440dc00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440dc00>); + m_dsmap.SetAt(0x2480c274, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480c274>); + m_dsmap.SetAt(0x26403805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403805>); + m_dsmap.SetAt(0x26803805, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803805>); + m_dsmap.SetAt(0x4ff03894, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03894>); + m_dsmap.SetAt(0x64402814, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402814>); + m_dsmap.SetAt(0x6440c220, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440c220>); + m_dsmap.SetAt(0x6444d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444d464>); + m_dsmap.SetAt(0x64802214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64802214>); + m_dsmap.SetAt(0xa4402c45, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c45>); + m_dsmap.SetAt(0xa4447464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4447464>); + m_dsmap.SetAt(0xe2a4d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe2a4d464>); + m_dsmap.SetAt(0xe4803c54, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4803c54>); // the punisher - m_dsmap.SetAt(0x2423d064, &GSDrawScanline::DrawScanlineExT<0x2423d064>); - m_dsmap.SetAt(0x2423d464, &GSDrawScanline::DrawScanlineExT<0x2423d464>); - m_dsmap.SetAt(0x2443c204, &GSDrawScanline::DrawScanlineExT<0x2443c204>); - m_dsmap.SetAt(0x2443c206, &GSDrawScanline::DrawScanlineExT<0x2443c206>); - m_dsmap.SetAt(0x2443dc24, &GSDrawScanline::DrawScanlineExT<0x2443dc24>); - m_dsmap.SetAt(0x2483dc24, &GSDrawScanline::DrawScanlineExT<0x2483dc24>); - m_dsmap.SetAt(0x2683c204, &GSDrawScanline::DrawScanlineExT<0x2683c204>); - m_dsmap.SetAt(0x2a83c246, &GSDrawScanline::DrawScanlineExT<0x2a83c246>); - m_dsmap.SetAt(0x6443d5e4, &GSDrawScanline::DrawScanlineExT<0x6443d5e4>); - m_dsmap.SetAt(0x6a83d464, &GSDrawScanline::DrawScanlineExT<0x6a83d464>); - m_dsmap.SetAt(0x6a83d564, &GSDrawScanline::DrawScanlineExT<0x6a83d564>); - m_dsmap.SetAt(0xa423d464, &GSDrawScanline::DrawScanlineExT<0xa423d464>); - m_dsmap.SetAt(0xa443cc04, &GSDrawScanline::DrawScanlineExT<0xa443cc04>); - m_dsmap.SetAt(0xa443d464, &GSDrawScanline::DrawScanlineExT<0xa443d464>); - m_dsmap.SetAt(0xa443dc04, &GSDrawScanline::DrawScanlineExT<0xa443dc04>); - m_dsmap.SetAt(0xa443dc24, &GSDrawScanline::DrawScanlineExT<0xa443dc24>); - m_dsmap.SetAt(0xa483d444, &GSDrawScanline::DrawScanlineExT<0xa483d444>); - m_dsmap.SetAt(0xa483d464, &GSDrawScanline::DrawScanlineExT<0xa483d464>); - m_dsmap.SetAt(0xa483dc24, &GSDrawScanline::DrawScanlineExT<0xa483dc24>); - m_dsmap.SetAt(0xa683d464, &GSDrawScanline::DrawScanlineExT<0xa683d464>); - m_dsmap.SetAt(0xe443d464, &GSDrawScanline::DrawScanlineExT<0xe443d464>); - m_dsmap.SetAt(0xe443d564, &GSDrawScanline::DrawScanlineExT<0xe443d564>); - m_dsmap.SetAt(0xea83d464, &GSDrawScanline::DrawScanlineExT<0xea83d464>); - m_dsmap.SetAt(0xea83d564, &GSDrawScanline::DrawScanlineExT<0xea83d564>); + m_dsmap.SetAt(0x2423d064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2423d064>); + m_dsmap.SetAt(0x2423d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2423d464>); + m_dsmap.SetAt(0x2443c204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2443c204>); + m_dsmap.SetAt(0x2443c206, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2443c206>); + m_dsmap.SetAt(0x2443dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2443dc24>); + m_dsmap.SetAt(0x2483dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2483dc24>); + m_dsmap.SetAt(0x2683c204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2683c204>); + m_dsmap.SetAt(0x2a83c246, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a83c246>); + m_dsmap.SetAt(0x6443d5e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6443d5e4>); + m_dsmap.SetAt(0x6a83d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a83d464>); + m_dsmap.SetAt(0x6a83d564, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6a83d564>); + m_dsmap.SetAt(0xa423d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa423d464>); + m_dsmap.SetAt(0xa443cc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa443cc04>); + m_dsmap.SetAt(0xa443d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa443d464>); + m_dsmap.SetAt(0xa443dc04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa443dc04>); + m_dsmap.SetAt(0xa443dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa443dc24>); + m_dsmap.SetAt(0xa483d444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa483d444>); + m_dsmap.SetAt(0xa483d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa483d464>); + m_dsmap.SetAt(0xa483dc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa483dc24>); + m_dsmap.SetAt(0xa683d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa683d464>); + m_dsmap.SetAt(0xe443d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443d464>); + m_dsmap.SetAt(0xe443d564, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443d564>); + m_dsmap.SetAt(0xea83d464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xea83d464>); + m_dsmap.SetAt(0xea83d564, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xea83d564>); // gt4 - m_dsmap.SetAt(0x0ff02201, &GSDrawScanline::DrawScanlineExT<0x0ff02201>); - m_dsmap.SetAt(0x0ff02c05, &GSDrawScanline::DrawScanlineExT<0x0ff02c05>); - m_dsmap.SetAt(0x0ff03c44, &GSDrawScanline::DrawScanlineExT<0x0ff03c44>); - m_dsmap.SetAt(0x24402241, &GSDrawScanline::DrawScanlineExT<0x24402241>); - m_dsmap.SetAt(0x24402441, &GSDrawScanline::DrawScanlineExT<0x24402441>); - m_dsmap.SetAt(0x25803c04, &GSDrawScanline::DrawScanlineExT<0x25803c04>); - m_dsmap.SetAt(0x25843464, &GSDrawScanline::DrawScanlineExT<0x25843464>); - m_dsmap.SetAt(0x258c3464, &GSDrawScanline::DrawScanlineExT<0x258c3464>); - m_dsmap.SetAt(0x26402205, &GSDrawScanline::DrawScanlineExT<0x26402205>); - m_dsmap.SetAt(0x26402245, &GSDrawScanline::DrawScanlineExT<0x26402245>); - m_dsmap.SetAt(0x26403c05, &GSDrawScanline::DrawScanlineExT<0x26403c05>); - m_dsmap.SetAt(0x2a902204, &GSDrawScanline::DrawScanlineExT<0x2a902204>); - m_dsmap.SetAt(0x2ff02201, &GSDrawScanline::DrawScanlineExT<0x2ff02201>); - m_dsmap.SetAt(0x2ff03446, &GSDrawScanline::DrawScanlineExT<0x2ff03446>); - m_dsmap.SetAt(0x2ff42264, &GSDrawScanline::DrawScanlineExT<0x2ff42264>); - m_dsmap.SetAt(0x6440ec14, &GSDrawScanline::DrawScanlineExT<0x6440ec14>); - m_dsmap.SetAt(0x64443464, &GSDrawScanline::DrawScanlineExT<0x64443464>); - m_dsmap.SetAt(0x8ff03c01, &GSDrawScanline::DrawScanlineExT<0x8ff03c01>); - m_dsmap.SetAt(0x8ff03c44, &GSDrawScanline::DrawScanlineExT<0x8ff03c44>); - m_dsmap.SetAt(0xa4402445, &GSDrawScanline::DrawScanlineExT<0xa4402445>); - m_dsmap.SetAt(0xa4403441, &GSDrawScanline::DrawScanlineExT<0xa4403441>); - m_dsmap.SetAt(0xa440d445, &GSDrawScanline::DrawScanlineExT<0xa440d445>); - m_dsmap.SetAt(0xa44435e4, &GSDrawScanline::DrawScanlineExT<0xa44435e4>); - m_dsmap.SetAt(0xa5843464, &GSDrawScanline::DrawScanlineExT<0xa5843464>); - m_dsmap.SetAt(0xa6802c00, &GSDrawScanline::DrawScanlineExT<0xa6802c00>); - m_dsmap.SetAt(0xaff02c00, &GSDrawScanline::DrawScanlineExT<0xaff02c00>); - m_dsmap.SetAt(0xaff02c81, &GSDrawScanline::DrawScanlineExT<0xaff02c81>); - m_dsmap.SetAt(0xaff43464, &GSDrawScanline::DrawScanlineExT<0xaff43464>); - m_dsmap.SetAt(0xcff4c464, &GSDrawScanline::DrawScanlineExT<0xcff4c464>); - m_dsmap.SetAt(0x24802244, &GSDrawScanline::DrawScanlineExT<0x24802244>); - m_dsmap.SetAt(0xa4403465, &GSDrawScanline::DrawScanlineExT<0xa4403465>); - m_dsmap.SetAt(0xa4442464, &GSDrawScanline::DrawScanlineExT<0xa4442464>); + m_dsmap.SetAt(0x0ff02201, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02201>); + m_dsmap.SetAt(0x0ff02c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c05>); + m_dsmap.SetAt(0x0ff03c44, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c44>); + m_dsmap.SetAt(0x24402241, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402241>); + m_dsmap.SetAt(0x24402441, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402441>); + m_dsmap.SetAt(0x25803c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25803c04>); + m_dsmap.SetAt(0x25843464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25843464>); + m_dsmap.SetAt(0x258c3464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x258c3464>); + m_dsmap.SetAt(0x26402205, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402205>); + m_dsmap.SetAt(0x26402245, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26402245>); + m_dsmap.SetAt(0x26403c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403c05>); + m_dsmap.SetAt(0x2a902204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a902204>); + m_dsmap.SetAt(0x2ff02201, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff02201>); + m_dsmap.SetAt(0x2ff03446, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03446>); + m_dsmap.SetAt(0x2ff42264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff42264>); + m_dsmap.SetAt(0x6440ec14, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440ec14>); + m_dsmap.SetAt(0x64443464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64443464>); + m_dsmap.SetAt(0x8ff03c01, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff03c01>); + m_dsmap.SetAt(0x8ff03c44, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x8ff03c44>); + m_dsmap.SetAt(0xa4402445, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402445>); + m_dsmap.SetAt(0xa4403441, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403441>); + m_dsmap.SetAt(0xa440d445, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d445>); + m_dsmap.SetAt(0xa44435e4, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa44435e4>); + m_dsmap.SetAt(0xa5843464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa5843464>); + m_dsmap.SetAt(0xa6802c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6802c00>); + m_dsmap.SetAt(0xaff02c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02c00>); + m_dsmap.SetAt(0xaff02c81, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff02c81>); + m_dsmap.SetAt(0xaff43464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xaff43464>); + m_dsmap.SetAt(0xcff4c464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4c464>); + m_dsmap.SetAt(0x24802244, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802244>); + m_dsmap.SetAt(0xa4403465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403465>); + m_dsmap.SetAt(0xa4442464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4442464>); // ico - m_dsmap.SetAt(0x0ff03d00, &GSDrawScanline::DrawScanlineExT<0x0ff03d00>); - m_dsmap.SetAt(0x0ff05c00, &GSDrawScanline::DrawScanlineExT<0x0ff05c00>); - m_dsmap.SetAt(0x24402200, &GSDrawScanline::DrawScanlineExT<0x24402200>); - m_dsmap.SetAt(0x24403c00, &GSDrawScanline::DrawScanlineExT<0x24403c00>); - m_dsmap.SetAt(0x2448dc00, &GSDrawScanline::DrawScanlineExT<0x2448dc00>); - m_dsmap.SetAt(0x24802200, &GSDrawScanline::DrawScanlineExT<0x24802200>); - m_dsmap.SetAt(0x24802220, &GSDrawScanline::DrawScanlineExT<0x24802220>); - m_dsmap.SetAt(0x26802200, &GSDrawScanline::DrawScanlineExT<0x26802200>); - m_dsmap.SetAt(0x26802220, &GSDrawScanline::DrawScanlineExT<0x26802220>); - m_dsmap.SetAt(0x26803c00, &GSDrawScanline::DrawScanlineExT<0x26803c00>); - m_dsmap.SetAt(0x4ff02220, &GSDrawScanline::DrawScanlineExT<0x4ff02220>); - m_dsmap.SetAt(0x64402210, &GSDrawScanline::DrawScanlineExT<0x64402210>); - m_dsmap.SetAt(0x64802260, &GSDrawScanline::DrawScanlineExT<0x64802260>); - m_dsmap.SetAt(0xa4402c20, &GSDrawScanline::DrawScanlineExT<0xa4402c20>); - m_dsmap.SetAt(0xa4403c00, &GSDrawScanline::DrawScanlineExT<0xa4403c00>); - m_dsmap.SetAt(0xa441dc20, &GSDrawScanline::DrawScanlineExT<0xa441dc20>); - m_dsmap.SetAt(0xa481d460, &GSDrawScanline::DrawScanlineExT<0xa481d460>); - m_dsmap.SetAt(0xa621d460, &GSDrawScanline::DrawScanlineExT<0xa621d460>); - m_dsmap.SetAt(0xa681d460, &GSDrawScanline::DrawScanlineExT<0xa681d460>); - m_dsmap.SetAt(0xcff1d460, &GSDrawScanline::DrawScanlineExT<0xcff1d460>); - m_dsmap.SetAt(0xe441d460, &GSDrawScanline::DrawScanlineExT<0xe441d460>); - m_dsmap.SetAt(0xe481d460, &GSDrawScanline::DrawScanlineExT<0xe481d460>); + m_dsmap.SetAt(0x0ff03d00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03d00>); + m_dsmap.SetAt(0x0ff05c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff05c00>); + m_dsmap.SetAt(0x24402200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402200>); + m_dsmap.SetAt(0x24403c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403c00>); + m_dsmap.SetAt(0x2448dc00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2448dc00>); + m_dsmap.SetAt(0x24802200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802200>); + m_dsmap.SetAt(0x24802220, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24802220>); + m_dsmap.SetAt(0x26802200, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26802200>); + m_dsmap.SetAt(0x26802220, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26802220>); + m_dsmap.SetAt(0x26803c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803c00>); + m_dsmap.SetAt(0x4ff02220, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02220>); + m_dsmap.SetAt(0x64402210, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402210>); + m_dsmap.SetAt(0x64802260, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64802260>); + m_dsmap.SetAt(0xa4402c20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c20>); + m_dsmap.SetAt(0xa4403c00, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403c00>); + m_dsmap.SetAt(0xa441dc20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa441dc20>); + m_dsmap.SetAt(0xa481d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa481d460>); + m_dsmap.SetAt(0xa621d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa621d460>); + m_dsmap.SetAt(0xa681d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa681d460>); + m_dsmap.SetAt(0xcff1d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff1d460>); + m_dsmap.SetAt(0xe441d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441d460>); + m_dsmap.SetAt(0xe481d460, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe481d460>); // kuon - m_dsmap.SetAt(0x0ff02202, &GSDrawScanline::DrawScanlineExT<0x0ff02202>); - m_dsmap.SetAt(0x24402202, &GSDrawScanline::DrawScanlineExT<0x24402202>); - m_dsmap.SetAt(0x24430215, &GSDrawScanline::DrawScanlineExT<0x24430215>); - m_dsmap.SetAt(0x26203465, &GSDrawScanline::DrawScanlineExT<0x26203465>); - m_dsmap.SetAt(0x2a403801, &GSDrawScanline::DrawScanlineExT<0x2a403801>); - m_dsmap.SetAt(0x2ff03801, &GSDrawScanline::DrawScanlineExT<0x2ff03801>); - m_dsmap.SetAt(0x2ff03c02, &GSDrawScanline::DrawScanlineExT<0x2ff03c02>); - m_dsmap.SetAt(0x2ff31c05, &GSDrawScanline::DrawScanlineExT<0x2ff31c05>); - m_dsmap.SetAt(0x66403c15, &GSDrawScanline::DrawScanlineExT<0x66403c15>); - m_dsmap.SetAt(0x66803815, &GSDrawScanline::DrawScanlineExT<0x66803815>); - m_dsmap.SetAt(0x6ff02215, &GSDrawScanline::DrawScanlineExT<0x6ff02215>); - m_dsmap.SetAt(0xa4411c15, &GSDrawScanline::DrawScanlineExT<0xa4411c15>); - m_dsmap.SetAt(0xa4431815, &GSDrawScanline::DrawScanlineExT<0xa4431815>); - m_dsmap.SetAt(0xa4831065, &GSDrawScanline::DrawScanlineExT<0xa4831065>); - m_dsmap.SetAt(0xa4831455, &GSDrawScanline::DrawScanlineExT<0xa4831455>); - m_dsmap.SetAt(0xe445d065, &GSDrawScanline::DrawScanlineExT<0xe445d065>); - m_dsmap.SetAt(0xe445d465, &GSDrawScanline::DrawScanlineExT<0xe445d465>); - m_dsmap.SetAt(0xeff5d065, &GSDrawScanline::DrawScanlineExT<0xeff5d065>); + m_dsmap.SetAt(0x0ff02202, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02202>); + m_dsmap.SetAt(0x24402202, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402202>); + m_dsmap.SetAt(0x24430215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24430215>); + m_dsmap.SetAt(0x26203465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26203465>); + m_dsmap.SetAt(0x2a403801, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a403801>); + m_dsmap.SetAt(0x2ff03801, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03801>); + m_dsmap.SetAt(0x2ff03c02, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff03c02>); + m_dsmap.SetAt(0x2ff31c05, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff31c05>); + m_dsmap.SetAt(0x66403c15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66403c15>); + m_dsmap.SetAt(0x66803815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66803815>); + m_dsmap.SetAt(0x6ff02215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff02215>); + m_dsmap.SetAt(0xa4411c15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4411c15>); + m_dsmap.SetAt(0xa4431815, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4431815>); + m_dsmap.SetAt(0xa4831065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4831065>); + m_dsmap.SetAt(0xa4831455, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4831455>); + m_dsmap.SetAt(0xe445d065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445d065>); + m_dsmap.SetAt(0xe445d465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445d465>); + m_dsmap.SetAt(0xeff5d065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xeff5d065>); // guitar hero - m_dsmap.SetAt(0x0ff038aa, &GSDrawScanline::DrawScanlineExT<0x0ff038aa>); - m_dsmap.SetAt(0x2442c24a, &GSDrawScanline::DrawScanlineExT<0x2442c24a>); - m_dsmap.SetAt(0x2442c26a, &GSDrawScanline::DrawScanlineExT<0x2442c26a>); - m_dsmap.SetAt(0x2442d44a, &GSDrawScanline::DrawScanlineExT<0x2442d44a>); - m_dsmap.SetAt(0x2480226a, &GSDrawScanline::DrawScanlineExT<0x2480226a>); - m_dsmap.SetAt(0x2680224a, &GSDrawScanline::DrawScanlineExT<0x2680224a>); - m_dsmap.SetAt(0x2680226a, &GSDrawScanline::DrawScanlineExT<0x2680226a>); - m_dsmap.SetAt(0x2680390a, &GSDrawScanline::DrawScanlineExT<0x2680390a>); - m_dsmap.SetAt(0x2a80390a, &GSDrawScanline::DrawScanlineExT<0x2a80390a>); - m_dsmap.SetAt(0x4ff03c9a, &GSDrawScanline::DrawScanlineExT<0x4ff03c9a>); - m_dsmap.SetAt(0x6442c27a, &GSDrawScanline::DrawScanlineExT<0x6442c27a>); - m_dsmap.SetAt(0x6444d47a, &GSDrawScanline::DrawScanlineExT<0x6444d47a>); - m_dsmap.SetAt(0x6446c27a, &GSDrawScanline::DrawScanlineExT<0x6446c27a>); - m_dsmap.SetAt(0xa440d46a, &GSDrawScanline::DrawScanlineExT<0xa440d46a>); - m_dsmap.SetAt(0xa442d44a, &GSDrawScanline::DrawScanlineExT<0xa442d44a>); - m_dsmap.SetAt(0xa442d46a, &GSDrawScanline::DrawScanlineExT<0xa442d46a>); - m_dsmap.SetAt(0xa446d46a, &GSDrawScanline::DrawScanlineExT<0xa446d46a>); - m_dsmap.SetAt(0xa480344a, &GSDrawScanline::DrawScanlineExT<0xa480344a>); - m_dsmap.SetAt(0xa480346a, &GSDrawScanline::DrawScanlineExT<0xa480346a>); - m_dsmap.SetAt(0xa48034ea, &GSDrawScanline::DrawScanlineExT<0xa48034ea>); - m_dsmap.SetAt(0xa480d46a, &GSDrawScanline::DrawScanlineExT<0xa480d46a>); - m_dsmap.SetAt(0xa680344a, &GSDrawScanline::DrawScanlineExT<0xa680344a>); - m_dsmap.SetAt(0xa68034ea, &GSDrawScanline::DrawScanlineExT<0xa68034ea>); - m_dsmap.SetAt(0xa680356a, &GSDrawScanline::DrawScanlineExT<0xa680356a>); - m_dsmap.SetAt(0xa6803c2a, &GSDrawScanline::DrawScanlineExT<0xa6803c2a>); - m_dsmap.SetAt(0xa680d44a, &GSDrawScanline::DrawScanlineExT<0xa680d44a>); - m_dsmap.SetAt(0xa684356a, &GSDrawScanline::DrawScanlineExT<0xa684356a>); - m_dsmap.SetAt(0xcff0347a, &GSDrawScanline::DrawScanlineExT<0xcff0347a>); - m_dsmap.SetAt(0xcff034ea, &GSDrawScanline::DrawScanlineExT<0xcff034ea>); - m_dsmap.SetAt(0xcff034fa, &GSDrawScanline::DrawScanlineExT<0xcff034fa>); - m_dsmap.SetAt(0xcff0d47a, &GSDrawScanline::DrawScanlineExT<0xcff0d47a>); - m_dsmap.SetAt(0xe440d45a, &GSDrawScanline::DrawScanlineExT<0xe440d45a>); - m_dsmap.SetAt(0xe442d45a, &GSDrawScanline::DrawScanlineExT<0xe442d45a>); - m_dsmap.SetAt(0xe442d46a, &GSDrawScanline::DrawScanlineExT<0xe442d46a>); - m_dsmap.SetAt(0xe442d47a, &GSDrawScanline::DrawScanlineExT<0xe442d47a>); - m_dsmap.SetAt(0xe446d47a, &GSDrawScanline::DrawScanlineExT<0xe446d47a>); - m_dsmap.SetAt(0xe480345a, &GSDrawScanline::DrawScanlineExT<0xe480345a>); + m_dsmap.SetAt(0x0ff038aa, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff038aa>); + m_dsmap.SetAt(0x2442c24a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2442c24a>); + m_dsmap.SetAt(0x2442c26a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2442c26a>); + m_dsmap.SetAt(0x2442d44a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2442d44a>); + m_dsmap.SetAt(0x2480226a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2480226a>); + m_dsmap.SetAt(0x2680224a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680224a>); + m_dsmap.SetAt(0x2680226a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680226a>); + m_dsmap.SetAt(0x2680390a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2680390a>); + m_dsmap.SetAt(0x2a80390a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2a80390a>); + m_dsmap.SetAt(0x4ff03c9a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03c9a>); + m_dsmap.SetAt(0x6442c27a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6442c27a>); + m_dsmap.SetAt(0x6444d47a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6444d47a>); + m_dsmap.SetAt(0x6446c27a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6446c27a>); + m_dsmap.SetAt(0xa440d46a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa440d46a>); + m_dsmap.SetAt(0xa442d44a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa442d44a>); + m_dsmap.SetAt(0xa442d46a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa442d46a>); + m_dsmap.SetAt(0xa446d46a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa446d46a>); + m_dsmap.SetAt(0xa480344a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480344a>); + m_dsmap.SetAt(0xa480346a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480346a>); + m_dsmap.SetAt(0xa48034ea, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa48034ea>); + m_dsmap.SetAt(0xa480d46a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa480d46a>); + m_dsmap.SetAt(0xa680344a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa680344a>); + m_dsmap.SetAt(0xa68034ea, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa68034ea>); + m_dsmap.SetAt(0xa680356a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa680356a>); + m_dsmap.SetAt(0xa6803c2a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa6803c2a>); + m_dsmap.SetAt(0xa680d44a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa680d44a>); + m_dsmap.SetAt(0xa684356a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa684356a>); + m_dsmap.SetAt(0xcff0347a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0347a>); + m_dsmap.SetAt(0xcff034ea, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff034ea>); + m_dsmap.SetAt(0xcff034fa, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff034fa>); + m_dsmap.SetAt(0xcff0d47a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0d47a>); + m_dsmap.SetAt(0xe440d45a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440d45a>); + m_dsmap.SetAt(0xe442d45a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe442d45a>); + m_dsmap.SetAt(0xe442d46a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe442d46a>); + m_dsmap.SetAt(0xe442d47a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe442d47a>); + m_dsmap.SetAt(0xe446d47a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe446d47a>); + m_dsmap.SetAt(0xe480345a, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe480345a>); // virtual tennis 2 - m_dsmap.SetAt(0x0ff10215, &GSDrawScanline::DrawScanlineExT<0x0ff10215>); - m_dsmap.SetAt(0x24231065, &GSDrawScanline::DrawScanlineExT<0x24231065>); - m_dsmap.SetAt(0x28830215, &GSDrawScanline::DrawScanlineExT<0x28830215>); - m_dsmap.SetAt(0x2aa30215, &GSDrawScanline::DrawScanlineExT<0x2aa30215>); - m_dsmap.SetAt(0x4ff0e265, &GSDrawScanline::DrawScanlineExT<0x4ff0e265>); - m_dsmap.SetAt(0x4ff20215, &GSDrawScanline::DrawScanlineExT<0x4ff20215>); - m_dsmap.SetAt(0x6440e265, &GSDrawScanline::DrawScanlineExT<0x6440e265>); - m_dsmap.SetAt(0x6480e265, &GSDrawScanline::DrawScanlineExT<0x6480e265>); - m_dsmap.SetAt(0x66402c15, &GSDrawScanline::DrawScanlineExT<0x66402c15>); - m_dsmap.SetAt(0xa680f445, &GSDrawScanline::DrawScanlineExT<0xa680f445>); - m_dsmap.SetAt(0xcff0f475, &GSDrawScanline::DrawScanlineExT<0xcff0f475>); - m_dsmap.SetAt(0xe440ec65, &GSDrawScanline::DrawScanlineExT<0xe440ec65>); - m_dsmap.SetAt(0xe440ede5, &GSDrawScanline::DrawScanlineExT<0xe440ede5>); - m_dsmap.SetAt(0xe440f465, &GSDrawScanline::DrawScanlineExT<0xe440f465>); - m_dsmap.SetAt(0xe440f475, &GSDrawScanline::DrawScanlineExT<0xe440f475>); - m_dsmap.SetAt(0xe640f475, &GSDrawScanline::DrawScanlineExT<0xe640f475>); - m_dsmap.SetAt(0xe680f475, &GSDrawScanline::DrawScanlineExT<0xe680f475>); + m_dsmap.SetAt(0x0ff10215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff10215>); + m_dsmap.SetAt(0x24231065, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24231065>); + m_dsmap.SetAt(0x28830215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x28830215>); + m_dsmap.SetAt(0x2aa30215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2aa30215>); + m_dsmap.SetAt(0x4ff0e265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff0e265>); + m_dsmap.SetAt(0x4ff20215, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff20215>); + m_dsmap.SetAt(0x6440e265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6440e265>); + m_dsmap.SetAt(0x6480e265, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6480e265>); + m_dsmap.SetAt(0x66402c15, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402c15>); + m_dsmap.SetAt(0xa680f445, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa680f445>); + m_dsmap.SetAt(0xcff0f475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0f475>); + m_dsmap.SetAt(0xe440ec65, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ec65>); + m_dsmap.SetAt(0xe440ede5, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440ede5>); + m_dsmap.SetAt(0xe440f465, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440f465>); + m_dsmap.SetAt(0xe440f475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440f475>); + m_dsmap.SetAt(0xe640f475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe640f475>); + m_dsmap.SetAt(0xe680f475, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe680f475>); // bios - m_dsmap.SetAt(0x0ff03404, &GSDrawScanline::DrawScanlineExT<0x0ff03404>); - m_dsmap.SetAt(0x0ff03c24, &GSDrawScanline::DrawScanlineExT<0x0ff03c24>); - m_dsmap.SetAt(0x24403c24, &GSDrawScanline::DrawScanlineExT<0x24403c24>); - m_dsmap.SetAt(0x24803404, &GSDrawScanline::DrawScanlineExT<0x24803404>); - m_dsmap.SetAt(0x24803444, &GSDrawScanline::DrawScanlineExT<0x24803444>); - m_dsmap.SetAt(0x25803404, &GSDrawScanline::DrawScanlineExT<0x25803404>); - m_dsmap.SetAt(0x26202204, &GSDrawScanline::DrawScanlineExT<0x26202204>); - m_dsmap.SetAt(0x26403c04, &GSDrawScanline::DrawScanlineExT<0x26403c04>); - m_dsmap.SetAt(0x26803464, &GSDrawScanline::DrawScanlineExT<0x26803464>); - m_dsmap.SetAt(0x4ff02230, &GSDrawScanline::DrawScanlineExT<0x4ff02230>); - m_dsmap.SetAt(0x4ff02250, &GSDrawScanline::DrawScanlineExT<0x4ff02250>); - m_dsmap.SetAt(0x4ff02260, &GSDrawScanline::DrawScanlineExT<0x4ff02260>); - m_dsmap.SetAt(0x4ff03020, &GSDrawScanline::DrawScanlineExT<0x4ff03020>); - m_dsmap.SetAt(0x4ff03060, &GSDrawScanline::DrawScanlineExT<0x4ff03060>); - m_dsmap.SetAt(0x4ff03464, &GSDrawScanline::DrawScanlineExT<0x4ff03464>); - m_dsmap.SetAt(0x4ff03470, &GSDrawScanline::DrawScanlineExT<0x4ff03470>); - m_dsmap.SetAt(0x4ff03c10, &GSDrawScanline::DrawScanlineExT<0x4ff03c10>); - m_dsmap.SetAt(0x4ff03c20, &GSDrawScanline::DrawScanlineExT<0x4ff03c20>); - m_dsmap.SetAt(0x4ff03c30, &GSDrawScanline::DrawScanlineExT<0x4ff03c30>); - m_dsmap.SetAt(0x60002060, &GSDrawScanline::DrawScanlineExT<0x60002060>); - m_dsmap.SetAt(0x64203410, &GSDrawScanline::DrawScanlineExT<0x64203410>); - m_dsmap.SetAt(0x64203420, &GSDrawScanline::DrawScanlineExT<0x64203420>); - m_dsmap.SetAt(0x64402260, &GSDrawScanline::DrawScanlineExT<0x64402260>); - m_dsmap.SetAt(0x64403c10, &GSDrawScanline::DrawScanlineExT<0x64403c10>); - m_dsmap.SetAt(0x64803420, &GSDrawScanline::DrawScanlineExT<0x64803420>); - m_dsmap.SetAt(0x64803c10, &GSDrawScanline::DrawScanlineExT<0x64803c10>); - m_dsmap.SetAt(0x66202c10, &GSDrawScanline::DrawScanlineExT<0x66202c10>); - m_dsmap.SetAt(0x66402210, &GSDrawScanline::DrawScanlineExT<0x66402210>); - m_dsmap.SetAt(0x66402250, &GSDrawScanline::DrawScanlineExT<0x66402250>); - m_dsmap.SetAt(0x66802c10, &GSDrawScanline::DrawScanlineExT<0x66802c10>); - m_dsmap.SetAt(0xe440dc10, &GSDrawScanline::DrawScanlineExT<0xe440dc10>); + m_dsmap.SetAt(0x0ff03404, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03404>); + m_dsmap.SetAt(0x0ff03c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff03c24>); + m_dsmap.SetAt(0x24403c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403c24>); + m_dsmap.SetAt(0x24803404, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24803404>); + m_dsmap.SetAt(0x24803444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24803444>); + m_dsmap.SetAt(0x25803404, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25803404>); + m_dsmap.SetAt(0x26202204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26202204>); + m_dsmap.SetAt(0x26403c04, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26403c04>); + m_dsmap.SetAt(0x26803464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26803464>); + m_dsmap.SetAt(0x4ff02230, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02230>); + m_dsmap.SetAt(0x4ff02250, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02250>); + m_dsmap.SetAt(0x4ff02260, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02260>); + m_dsmap.SetAt(0x4ff03020, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03020>); + m_dsmap.SetAt(0x4ff03060, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03060>); + m_dsmap.SetAt(0x4ff03464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03464>); + m_dsmap.SetAt(0x4ff03470, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03470>); + m_dsmap.SetAt(0x4ff03c10, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03c10>); + m_dsmap.SetAt(0x4ff03c20, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03c20>); + m_dsmap.SetAt(0x4ff03c30, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff03c30>); + m_dsmap.SetAt(0x60002060, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x60002060>); + m_dsmap.SetAt(0x64203410, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64203410>); + m_dsmap.SetAt(0x64203420, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64203420>); + m_dsmap.SetAt(0x64402260, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402260>); + m_dsmap.SetAt(0x64403c10, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64403c10>); + m_dsmap.SetAt(0x64803420, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64803420>); + m_dsmap.SetAt(0x64803c10, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64803c10>); + m_dsmap.SetAt(0x66202c10, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66202c10>); + m_dsmap.SetAt(0x66402210, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402210>); + m_dsmap.SetAt(0x66402250, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66402250>); + m_dsmap.SetAt(0x66802c10, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66802c10>); + m_dsmap.SetAt(0xe440dc10, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe440dc10>); // one piece grand battle 3 - m_dsmap.SetAt(0x0ff02c86, &GSDrawScanline::DrawScanlineExT<0x0ff02c86>); - m_dsmap.SetAt(0x2440c264, &GSDrawScanline::DrawScanlineExT<0x2440c264>); - m_dsmap.SetAt(0x25602204, &GSDrawScanline::DrawScanlineExT<0x25602204>); - m_dsmap.SetAt(0x26202c84, &GSDrawScanline::DrawScanlineExT<0x26202c84>); - m_dsmap.SetAt(0x26204c84, &GSDrawScanline::DrawScanlineExT<0x26204c84>); - m_dsmap.SetAt(0x2990cc84, &GSDrawScanline::DrawScanlineExT<0x2990cc84>); - m_dsmap.SetAt(0x64402254, &GSDrawScanline::DrawScanlineExT<0x64402254>); - m_dsmap.SetAt(0x64403454, &GSDrawScanline::DrawScanlineExT<0x64403454>); - m_dsmap.SetAt(0x64482254, &GSDrawScanline::DrawScanlineExT<0x64482254>); - m_dsmap.SetAt(0x65402254, &GSDrawScanline::DrawScanlineExT<0x65402254>); - m_dsmap.SetAt(0x66220214, &GSDrawScanline::DrawScanlineExT<0x66220214>); - m_dsmap.SetAt(0x6ff02254, &GSDrawScanline::DrawScanlineExT<0x6ff02254>); - m_dsmap.SetAt(0xa4403444, &GSDrawScanline::DrawScanlineExT<0xa4403444>); - m_dsmap.SetAt(0xe0a03464, &GSDrawScanline::DrawScanlineExT<0xe0a03464>); - m_dsmap.SetAt(0xe4403454, &GSDrawScanline::DrawScanlineExT<0xe4403454>); - m_dsmap.SetAt(0xe4483454, &GSDrawScanline::DrawScanlineExT<0xe4483454>); - m_dsmap.SetAt(0xe4803454, &GSDrawScanline::DrawScanlineExT<0xe4803454>); - m_dsmap.SetAt(0xeff03454, &GSDrawScanline::DrawScanlineExT<0xeff03454>); + m_dsmap.SetAt(0x0ff02c86, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff02c86>); + m_dsmap.SetAt(0x2440c264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2440c264>); + m_dsmap.SetAt(0x25602204, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25602204>); + m_dsmap.SetAt(0x26202c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26202c84>); + m_dsmap.SetAt(0x26204c84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26204c84>); + m_dsmap.SetAt(0x2990cc84, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2990cc84>); + m_dsmap.SetAt(0x64402254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402254>); + m_dsmap.SetAt(0x64403454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64403454>); + m_dsmap.SetAt(0x64482254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64482254>); + m_dsmap.SetAt(0x65402254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x65402254>); + m_dsmap.SetAt(0x66220214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x66220214>); + m_dsmap.SetAt(0x6ff02254, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6ff02254>); + m_dsmap.SetAt(0xa4403444, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403444>); + m_dsmap.SetAt(0xe0a03464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe0a03464>); + m_dsmap.SetAt(0xe4403454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4403454>); + m_dsmap.SetAt(0xe4483454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4483454>); + m_dsmap.SetAt(0xe4803454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4803454>); + m_dsmap.SetAt(0xeff03454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xeff03454>); // mana khemia - m_dsmap.SetAt(0x24402209, &GSDrawScanline::DrawScanlineExT<0x24402209>); - m_dsmap.SetAt(0x24402c09, &GSDrawScanline::DrawScanlineExT<0x24402c09>); - m_dsmap.SetAt(0x24403c02, &GSDrawScanline::DrawScanlineExT<0x24403c02>); - m_dsmap.SetAt(0x4ff02219, &GSDrawScanline::DrawScanlineExT<0x4ff02219>); - m_dsmap.SetAt(0x64402c19, &GSDrawScanline::DrawScanlineExT<0x64402c19>); - m_dsmap.SetAt(0x64403c29, &GSDrawScanline::DrawScanlineExT<0x64403c29>); - m_dsmap.SetAt(0xa4402c09, &GSDrawScanline::DrawScanlineExT<0xa4402c09>); - m_dsmap.SetAt(0xa4403c09, &GSDrawScanline::DrawScanlineExT<0xa4403c09>); - m_dsmap.SetAt(0xa4442c09, &GSDrawScanline::DrawScanlineExT<0xa4442c09>); - m_dsmap.SetAt(0xe445b469, &GSDrawScanline::DrawScanlineExT<0xe445b469>); - m_dsmap.SetAt(0xe445bc29, &GSDrawScanline::DrawScanlineExT<0xe445bc29>); + m_dsmap.SetAt(0x24402209, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402209>); + m_dsmap.SetAt(0x24402c09, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24402c09>); + m_dsmap.SetAt(0x24403c02, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403c02>); + m_dsmap.SetAt(0x4ff02219, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff02219>); + m_dsmap.SetAt(0x64402c19, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64402c19>); + m_dsmap.SetAt(0x64403c29, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64403c29>); + m_dsmap.SetAt(0xa4402c09, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4402c09>); + m_dsmap.SetAt(0xa4403c09, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4403c09>); + m_dsmap.SetAt(0xa4442c09, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4442c09>); + m_dsmap.SetAt(0xe445b469, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445b469>); + m_dsmap.SetAt(0xe445bc29, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe445bc29>); // enthusai - m_dsmap.SetAt(0x0ff11894, &GSDrawScanline::DrawScanlineExT<0x0ff11894>); - m_dsmap.SetAt(0x24403801, &GSDrawScanline::DrawScanlineExT<0x24403801>); - m_dsmap.SetAt(0x24430224, &GSDrawScanline::DrawScanlineExT<0x24430224>); - m_dsmap.SetAt(0x24831064, &GSDrawScanline::DrawScanlineExT<0x24831064>); - m_dsmap.SetAt(0x25831064, &GSDrawScanline::DrawScanlineExT<0x25831064>); - m_dsmap.SetAt(0x258b1064, &GSDrawScanline::DrawScanlineExT<0x258b1064>); - m_dsmap.SetAt(0x26a10214, &GSDrawScanline::DrawScanlineExT<0x26a10214>); - m_dsmap.SetAt(0x2ff31098, &GSDrawScanline::DrawScanlineExT<0x2ff31098>); - m_dsmap.SetAt(0x4ff42224, &GSDrawScanline::DrawScanlineExT<0x4ff42224>); - m_dsmap.SetAt(0x6441a224, &GSDrawScanline::DrawScanlineExT<0x6441a224>); - m_dsmap.SetAt(0x6441a264, &GSDrawScanline::DrawScanlineExT<0x6441a264>); - m_dsmap.SetAt(0x64434224, &GSDrawScanline::DrawScanlineExT<0x64434224>); - m_dsmap.SetAt(0x64434264, &GSDrawScanline::DrawScanlineExT<0x64434264>); - m_dsmap.SetAt(0xa4430c24, &GSDrawScanline::DrawScanlineExT<0xa4430c24>); - m_dsmap.SetAt(0xa4471064, &GSDrawScanline::DrawScanlineExT<0xa4471064>); - m_dsmap.SetAt(0xa4471464, &GSDrawScanline::DrawScanlineExT<0xa4471464>); - m_dsmap.SetAt(0xa4831064, &GSDrawScanline::DrawScanlineExT<0xa4831064>); - m_dsmap.SetAt(0xa5231454, &GSDrawScanline::DrawScanlineExT<0xa5231454>); - m_dsmap.SetAt(0xa5831064, &GSDrawScanline::DrawScanlineExT<0xa5831064>); - m_dsmap.SetAt(0xa5831454, &GSDrawScanline::DrawScanlineExT<0xa5831454>); - m_dsmap.SetAt(0xcff02468, &GSDrawScanline::DrawScanlineExT<0xcff02468>); - m_dsmap.SetAt(0xcff0a068, &GSDrawScanline::DrawScanlineExT<0xcff0a068>); - m_dsmap.SetAt(0xcff1bc24, &GSDrawScanline::DrawScanlineExT<0xcff1bc24>); - m_dsmap.SetAt(0xcff42468, &GSDrawScanline::DrawScanlineExT<0xcff42468>); - m_dsmap.SetAt(0xcff4a068, &GSDrawScanline::DrawScanlineExT<0xcff4a068>); - m_dsmap.SetAt(0xcff4b064, &GSDrawScanline::DrawScanlineExT<0xcff4b064>); - m_dsmap.SetAt(0xe441bc24, &GSDrawScanline::DrawScanlineExT<0xe441bc24>); - m_dsmap.SetAt(0xe4434c24, &GSDrawScanline::DrawScanlineExT<0xe4434c24>); - m_dsmap.SetAt(0xe443a468, &GSDrawScanline::DrawScanlineExT<0xe443a468>); - m_dsmap.SetAt(0xe443b064, &GSDrawScanline::DrawScanlineExT<0xe443b064>); - m_dsmap.SetAt(0xe447b064, &GSDrawScanline::DrawScanlineExT<0xe447b064>); - m_dsmap.SetAt(0xe447b464, &GSDrawScanline::DrawScanlineExT<0xe447b464>); + m_dsmap.SetAt(0x0ff11894, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x0ff11894>); + m_dsmap.SetAt(0x24403801, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24403801>); + m_dsmap.SetAt(0x24430224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24430224>); + m_dsmap.SetAt(0x24831064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x24831064>); + m_dsmap.SetAt(0x25831064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x25831064>); + m_dsmap.SetAt(0x258b1064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x258b1064>); + m_dsmap.SetAt(0x26a10214, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x26a10214>); + m_dsmap.SetAt(0x2ff31098, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x2ff31098>); + m_dsmap.SetAt(0x4ff42224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x4ff42224>); + m_dsmap.SetAt(0x6441a224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6441a224>); + m_dsmap.SetAt(0x6441a264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x6441a264>); + m_dsmap.SetAt(0x64434224, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64434224>); + m_dsmap.SetAt(0x64434264, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0x64434264>); + m_dsmap.SetAt(0xa4430c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4430c24>); + m_dsmap.SetAt(0xa4471064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4471064>); + m_dsmap.SetAt(0xa4471464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4471464>); + m_dsmap.SetAt(0xa4831064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4831064>); + m_dsmap.SetAt(0xa5231454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa5231454>); + m_dsmap.SetAt(0xa5831064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa5831064>); + m_dsmap.SetAt(0xa5831454, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa5831454>); + m_dsmap.SetAt(0xcff02468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff02468>); + m_dsmap.SetAt(0xcff0a068, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff0a068>); + m_dsmap.SetAt(0xcff1bc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff1bc24>); + m_dsmap.SetAt(0xcff42468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff42468>); + m_dsmap.SetAt(0xcff4a068, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4a068>); + m_dsmap.SetAt(0xcff4b064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xcff4b064>); + m_dsmap.SetAt(0xe441bc24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441bc24>); + m_dsmap.SetAt(0xe4434c24, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe4434c24>); + m_dsmap.SetAt(0xe443a468, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443a468>); + m_dsmap.SetAt(0xe443b064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe443b064>); + m_dsmap.SetAt(0xe447b064, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe447b064>); + m_dsmap.SetAt(0xe447b464, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe447b464>); // ar tonelico - m_dsmap.SetAt(0xa4802c09, &GSDrawScanline::DrawScanlineExT<0xa4802c09>); - m_dsmap.SetAt(0xa485bc29, &GSDrawScanline::DrawScanlineExT<0xa485bc29>); - m_dsmap.SetAt(0xe441bc29, &GSDrawScanline::DrawScanlineExT<0xe441bc29>); + m_dsmap.SetAt(0xa4802c09, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa4802c09>); + m_dsmap.SetAt(0xa485bc29, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xa485bc29>); + m_dsmap.SetAt(0xe441bc29, (DrawScanlinePtr)&GSDrawScanline::DrawScanlineExT<0xe441bc29>); /* // dmc (fixme) @@ -2351,8 +2170,212 @@ void GSDrawScanline::InitEx() */ } +template +void GSDrawScanline::DrawScanlineT(int top, int left, int right, const Vertex& v) +{ + GSVector4i fa_base = m_slenv.fbr[top]; + GSVector4i* fa_offset = (GSVector4i*)&m_slenv.fbc[left & 3][left]; + + GSVector4i za_base = m_slenv.zbr[top]; + GSVector4i* za_offset = (GSVector4i*)&m_slenv.zbc[left & 3][left]; + + GSVector4 ps0123 = GSVector4::ps0123(); + + GSVector4 vp = v.p; + GSVector4 dp = m_slenv.dp; + GSVector4 z = vp.zzzz(); z += dp.zzzz() * ps0123; + GSVector4 f = vp.wwww(); f += dp.wwww() * ps0123; + + GSVector4 vt = v.t; + GSVector4 dt = m_slenv.dt; + GSVector4 s = vt.xxxx(); s += dt.xxxx() * ps0123; + GSVector4 t = vt.yyyy(); t += dt.yyyy() * ps0123; + GSVector4 q = vt.zzzz(); q += dt.zzzz() * ps0123; + + GSVector4 vc = v.c; + GSVector4 dc = m_slenv.dc; + GSVector4 r = vc.xxxx(); if(iip) r += dc.xxxx() * ps0123; + GSVector4 g = vc.yyyy(); if(iip) g += dc.yyyy() * ps0123; + GSVector4 b = vc.zzzz(); if(iip) b += dc.zzzz() * ps0123; + GSVector4 a = vc.wwww(); if(iip) a += dc.wwww() * ps0123; + + int steps = right - left; + + while(1) + { + do + { + GSVector4i za = za_base + GSVector4i::load(za_offset); + + GSVector4i zs = (GSVector4i(z * 0.5f) << 1) | (GSVector4i(z) & GSVector4i::x00000001(za)); + + GSVector4i test; + + if(!TestZ(zpsm, ztst, zs, za, test)) + { + continue; + } + + int pixels = GSVector4i::store(GSVector4i::load(steps).min_i16(GSVector4i::load(4))); + + GSVector4 c[12]; + + if(m_sel.tfx != TFX_NONE) + { + GSVector4 u = s; + GSVector4 v = t; + + if(!m_sel.fst) + { + GSVector4 w = q.rcp(); + + u *= w; + v *= w; + + if(m_sel.ltf) + { + u -= 0.5f; + v -= 0.5f; + } + } + + SampleTexture(pixels, ztst, m_sel.ltf, m_sel.tlu, test, u, v, c); + } + + AlphaTFX(m_sel.tfx, m_sel.tcc, a, c[3]); + + GSVector4i fm = m_slenv.fm; + GSVector4i zm = m_slenv.zm; + + if(!TestAlpha(m_sel.atst, m_sel.afail, c[3], fm, zm, test)) + { + continue; + } + + ColorTFX(m_sel.tfx, r, g, b, a, c[0], c[1], c[2]); + + if(m_sel.fge) + { + Fog(f, c[0], c[1], c[2]); + } + + GSVector4i fa = fa_base + GSVector4i::load(fa_offset); + + GSVector4i d = GSVector4i::zero(); + + if(m_sel.rfb) + { + d = ReadFrameX(fpsm == 1 ? 0 : fpsm, fa); + + if(fpsm != 1 && m_sel.date) + { + test |= (d ^ m_slenv.datm).sra32(31); + + if(test.alltrue()) + { + continue; + } + } + } + + fm |= test; + zm |= test; + + if(m_sel.abe != 255) + { + // GSVector4::expand(d, c[4], c[5], c[6], c[7]); + + c[4] = (d << 24) >> 24; + c[5] = (d << 16) >> 24; + c[6] = (d << 8) >> 24; + c[7] = (d >> 24); + + if(fpsm == 1) + { + c[7] = GSVector4(128.0f); + } + + c[8] = GSVector4::zero(); + c[9] = GSVector4::zero(); + c[10] = GSVector4::zero(); + c[11] = m_slenv.afix; + + DWORD abea = m_sel.abea; + DWORD abeb = m_sel.abeb; + DWORD abec = m_sel.abec; + DWORD abed = m_sel.abed; + + GSVector4 r = (c[abea*4 + 0] - c[abeb*4 + 0]).mod2x(c[abec*4 + 3]) + c[abed*4 + 0]; + GSVector4 g = (c[abea*4 + 1] - c[abeb*4 + 1]).mod2x(c[abec*4 + 3]) + c[abed*4 + 1]; + GSVector4 b = (c[abea*4 + 2] - c[abeb*4 + 2]).mod2x(c[abec*4 + 3]) + c[abed*4 + 2]; + + if(m_sel.pabe) + { + GSVector4 mask = c[3] >= GSVector4(128.0f); + + c[0] = c[0].blend8(r, mask); + c[1] = c[1].blend8(g, mask); + c[2] = c[2].blend8(b, mask); + } + else + { + c[0] = r; + c[1] = g; + c[2] = b; + } + } + + GSVector4i rb = GSVector4i(c[0]).ps32(GSVector4i(c[2])); + GSVector4i ga = GSVector4i(c[1]).ps32(GSVector4i(c[3])); + + GSVector4i rg = rb.upl16(ga) & m_slenv.colclamp; + GSVector4i ba = rb.uph16(ga) & m_slenv.colclamp; + + GSVector4i s = rg.upl32(ba).pu16(rg.uph32(ba)); + + if(fpsm != 1) + { + s |= m_slenv.fba; + } + + if(m_sel.rfb) + { + s = s.blend(d, fm); + } + + WriteFrameAndZBufX(fpsm, fa, fm, s, ztst > 0 ? zpsm : 3, za, zm, zs, pixels); + } + while(0); + + if(steps <= 4) break; + + steps -= 4; + + fa_offset++; + za_offset++; + + GSVector4 dp4 = m_slenv.dp4; + + z += dp4.zzzz(); + f += dp4.wwww(); + + GSVector4 dt4 = m_slenv.dt4; + + s += dt4.xxxx(); + t += dt4.yyyy(); + q += dt4.zzzz(); + + GSVector4 dc4 = m_slenv.dc4; + + if(iip) r += dc4.xxxx(); + if(iip) g += dc4.yyyy(); + if(iip) b += dc4.zzzz(); + if(iip) a += dc4.wwww(); + } +} + template -void GSDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex& v, const Vertex& dv) +void GSDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex& v) { const DWORD fpsm = (sel >> 0) & 3; const DWORD zpsm = (sel >> 2) & 3; @@ -2385,18 +2408,18 @@ void GSDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex& GSVector4 ps0123 = GSVector4::ps0123(); GSVector4 vp = v.p; - GSVector4 dp = dv.p; + GSVector4 dp = m_slenv.dp; GSVector4 z = vp.zzzz(); z += dp.zzzz() * ps0123; GSVector4 f = vp.wwww(); f += dp.wwww() * ps0123; GSVector4 vt = v.t; - GSVector4 dt = dv.t; + GSVector4 dt = m_slenv.dt; GSVector4 s = vt.xxxx(); s += dt.xxxx() * ps0123; GSVector4 t = vt.yyyy(); t += dt.yyyy() * ps0123; GSVector4 q = vt.zzzz(); q += dt.zzzz() * ps0123; GSVector4 vc = v.c; - GSVector4 dc = dv.c; + GSVector4 dc = m_slenv.dc; GSVector4 r = vc.xxxx(); if(iip) r += dc.xxxx() * ps0123; GSVector4 g = vc.yyyy(); if(iip) g += dc.yyyy() * ps0123; GSVector4 b = vc.zzzz(); if(iip) b += dc.zzzz() * ps0123; @@ -2599,18 +2622,18 @@ void GSDrawScanline::DrawScanlineExT(int top, int left, int right, const Vertex& fa_offset++; za_offset++; - GSVector4 dp4 = dv.p * 4.0f; + GSVector4 dp4 = m_slenv.dp4; z += dp4.zzzz(); f += dp4.wwww(); - GSVector4 dt4 = dv.t * 4.0f; + GSVector4 dt4 = m_slenv.dt4; s += dt4.xxxx(); t += dt4.yyyy(); q += dt4.zzzz(); - GSVector4 dc4 = dv.c * 4.0f; + GSVector4 dc4 = m_slenv.dc4; if(iip) r += dc4.xxxx(); if(iip) g += dc4.yyyy(); diff --git a/gsdx/GSDrawScanline.h b/gsdx/GSDrawScanline.h index 43fcc02..85d9e03 100644 --- a/gsdx/GSDrawScanline.h +++ b/gsdx/GSDrawScanline.h @@ -87,6 +87,10 @@ class GSDrawScanline : public GSAlignedClass<16>, public IDrawScanline GSVector4 afix; GSVector4 afix2; GSVector4 fc; + + GSVector4 dp, dp4; + GSVector4 dt, dt4; + GSVector4 dc, dc4; }; struct Offset @@ -106,18 +110,16 @@ class GSDrawScanline : public GSAlignedClass<16>, public IDrawScanline void SetupOffset(Offset*& co, DWORD bp, DWORD bw, DWORD psm); void FreeOffsets(); - typedef void (GSDrawScanline::*DrawScanlinePtr)(int top, int left, int right, const Vertex& v, const Vertex& dv); - DrawScanlinePtr m_ds[4][4][4][2], m_dsf; CRBMap m_dsmap, m_dsmap2; - template - void DrawScanlineT(int top, int left, int right, const Vertex& v, const Vertex& dv); + void Init(); - void InitEx(); + template + void DrawScanlineT(int top, int left, int right, const Vertex& v); template - void DrawScanlineExT(int top, int left, int right, const Vertex& v, const Vertex& dv); + void DrawScanlineExT(int top, int left, int right, const Vertex& v); __forceinline GSVector4i Wrap(const GSVector4i& t); @@ -149,6 +151,8 @@ public: // IDrawScanline void SetupDraw(Vertex* vertices, int count, const void* texture); - void DrawScanline(int top, int left, int right, const Vertex& v, const Vertex& dv); + void SetupScanline(const Vertex& dv); + void DrawScanline(int top, int left, int right, const Vertex& v); void FillRect(const GSVector4i& r, const Vertex& v); + DrawScanlinePtr GetDrawScanlinePtr(); }; diff --git a/gsdx/GSRasterizer.cpp b/gsdx/GSRasterizer.cpp index 8a4ccba..98e8430 100644 --- a/gsdx/GSRasterizer.cpp +++ b/gsdx/GSRasterizer.cpp @@ -30,6 +30,11 @@ GSRasterizer::GSRasterizer(IDrawScanline* ds, int id, int threads) { } +GSRasterizer::~GSRasterizer() +{ + delete m_ds; +} + void GSRasterizer::DrawPoint(Vertex* v, const GSVector4i& scissor) { // TODO: round to closest for point, prestep for line @@ -40,7 +45,7 @@ void GSRasterizer::DrawPoint(Vertex* v, const GSVector4i& scissor) { if((p.y % m_threads) == m_id) { - m_ds->DrawScanline(p.y, p.x, p.x + 1, *v, *v); + m_ds->DrawScanline(p.y, p.x, p.x + 1, *v); m_pixels++; } @@ -163,6 +168,8 @@ void GSRasterizer::DrawTriangleTop(Vertex* v, const GSVector4i& scissor) r += dr * dy; } + m_ds->SetupScanline(dscan); + DrawTriangleSection(top, bottom, l, dl, r, dr, dscan, scissor); } } @@ -209,6 +216,8 @@ void GSRasterizer::DrawTriangleBottom(Vertex* v, const GSVector4i& scissor) r += dr * dy; } + m_ds->SetupScanline(dscan); + DrawTriangleSection(top, bottom, l, dl, r, dr, dscan, scissor); } } @@ -229,6 +238,8 @@ void GSRasterizer::DrawTriangleTopBottom(Vertex* v, const GSVector4i& scissor) Vertex dscan = longest * longest.p.xxxx().rcp(); + m_ds->SetupScanline(dscan); + Vertex& l = v[0]; GSVector4 r = v[0].p; @@ -312,6 +323,8 @@ void GSRasterizer::DrawTriangleSection(int top, int bottom, Vertex& l, const Ver { ASSERT(top < bottom); + IDrawScanline::DrawScanlinePtr dsf = m_ds->GetDrawScanlinePtr(); + while(1) { do @@ -354,7 +367,7 @@ void GSRasterizer::DrawTriangleSection(int top, int bottom, Vertex& l, const Ver if(px > 0) scan += dscan * px; - m_ds->DrawScanline(top, left, right, scan, dscan); + (m_ds->*dsf)(top, left, right, scan); } } } @@ -433,11 +446,15 @@ void GSRasterizer::DrawSprite(Vertex* vertices, const GSVector4i& scissor, bool if(scan.p.y < (float)top) scan.t += dedge.t * ((float)top - scan.p.y); if(scan.p.x < (float)left) scan.t += dscan.t * ((float)left - scan.p.x); + m_ds->SetupScanline(dscan); + + IDrawScanline::DrawScanlinePtr dsf = m_ds->GetDrawScanlinePtr(); + for(; top < bottom; top++, scan.t += dedge.t) { if((top % m_threads) == m_id) { - m_ds->DrawScanline(top, left, right, scan, dscan); + (m_ds->*dsf)(top, left, right, scan); m_pixels += right - left; } @@ -472,8 +489,10 @@ GSRasterizerMT::~GSRasterizerMT() } } -void GSRasterizerMT::Run() +void GSRasterizerMT::Run(Vertex* vertices, int count, const void* texture) { + m_ds->SetupDraw(vertices, count, texture); + InterlockedBitTestAndSet(m_sync, m_id); } diff --git a/gsdx/GSRasterizer.h b/gsdx/GSRasterizer.h index 8927a57..0ed722f 100644 --- a/gsdx/GSRasterizer.h +++ b/gsdx/GSRasterizer.h @@ -23,14 +23,19 @@ #include "GSVertexSW.h" -interface IDrawScanline +class IDrawScanline { public: typedef GSVertexSW Vertex; + typedef void (IDrawScanline::*DrawScanlinePtr)(int top, int left, int right, const Vertex& v); + + virtual ~IDrawScanline() {} virtual void SetupDraw(Vertex* vertices, int count, const void* texture) = 0; - virtual void DrawScanline(int top, int left, int right, const Vertex& v, const Vertex& dv) = 0; + virtual void SetupScanline(const Vertex& dv) = 0; + virtual void DrawScanline(int top, int left, int right, const Vertex& v) = 0; virtual void FillRect(const GSVector4i& r, const Vertex& v) = 0; + virtual DrawScanlinePtr GetDrawScanlinePtr() = 0; }; class GSRasterizer @@ -51,12 +56,14 @@ protected: public: GSRasterizer(IDrawScanline* ds, int id = 0, int threads = 0); + virtual ~GSRasterizer(); void DrawPoint(Vertex* v, const GSVector4i& scissor); void DrawLine(Vertex* v, const GSVector4i& scissor); void DrawTriangle(Vertex* v, const GSVector4i& scissor); void DrawSprite(Vertex* v, const GSVector4i& scissor, bool solid); + IDrawScanline* GetDrawScanline() {return m_ds;} int GetPixels() {int pixels = m_pixels; m_pixels = 0; return pixels;} }; @@ -82,5 +89,5 @@ public: GSRasterizerMT(IDrawScanline* ds, int id, int threads, IDrawAsync* da, long* sync); virtual ~GSRasterizerMT(); - void Run(); + void Run(Vertex* vertices, int count, const void* texture); }; diff --git a/gsdx/GSRenderer.h b/gsdx/GSRenderer.h index be39217..3bdc853 100644 --- a/gsdx/GSRenderer.h +++ b/gsdx/GSRenderer.h @@ -402,36 +402,11 @@ public: // - static const int ar[][2] = {{0, 0}, {4, 3}, {16, 9}}; - - int arx = ar[m_aspectratio][0]; - int ary = ar[m_aspectratio][1]; - - CRect cr; + CRect r; - m_wnd.GetClientRect(&cr); + m_wnd.GetClientRect(&r); - CRect r = cr; - - if(arx > 0 && ary > 0) - { - if(r.Width() * ary > r.Height() * arx) - { - int w = r.Height() * arx / ary; - r.left = r.CenterPoint().x - w / 2; - if(r.left & 1) r.left++; - r.right = r.left + w; - } - else - { - int h = r.Width() * ary / arx; - r.top = r.CenterPoint().y - h / 2; - if(r.top & 1) r.top++; - r.bottom = r.top + h; - } - } - - r &= cr; + GSUtil::FitRect(r, m_aspectratio); m_dev.Present(r); diff --git a/gsdx/GSRendererSW.h b/gsdx/GSRendererSW.h index 8a90a1f..a456af1 100644 --- a/gsdx/GSRendererSW.h +++ b/gsdx/GSRendererSW.h @@ -36,7 +36,6 @@ protected: long* m_sync; long m_threads; GSTextureCacheSW* m_tc; - GSDrawScanline* m_ds; GSRasterizer* m_rst; CAtlList m_rmt; Texture m_texture[2]; @@ -312,7 +311,7 @@ protected: // - m_ds->SetupDraw(m_vertices, m_count, texture); + m_rst->GetDrawScanline()->SetupDraw(m_vertices, m_count, texture); // @@ -322,7 +321,7 @@ protected: while(pos) { - m_rmt.GetNext(pos)->Run(); + m_rmt.GetNext(pos)->Run(m_vertices, m_count, texture); } // 1st thread is this thread @@ -478,12 +477,11 @@ public: m_threads = AfxGetApp()->GetProfileInt(_T("Settings"), _T("swthreads"), 1); m_tc = new GSTextureCacheSW(this); - m_ds = new GSDrawScanline(this); - m_rst = new GSRasterizer(m_ds, 0, m_threads); + m_rst = new GSRasterizer(new GSDrawScanline(this), 0, m_threads); for(int i = 1; i < m_threads; i++) { - m_rmt.AddTail(new GSRasterizerMT(m_ds, i, m_threads, this, m_sync)); + m_rmt.AddTail(new GSRasterizerMT(new GSDrawScanline(this), i, m_threads, this, m_sync)); } m_fpDrawingKickHandlers[GS_POINTLIST] = (DrawingKickHandler)&GSRendererSW::DrawingKickPoint; @@ -498,7 +496,6 @@ public: virtual ~GSRendererSW() { delete m_tc; - delete m_ds; delete m_rst; while(!m_rmt.IsEmpty()) diff --git a/gsdx/GSUtil.cpp b/gsdx/GSUtil.cpp index 2e2ed0b..9a4f09c 100644 --- a/gsdx/GSUtil.cpp +++ b/gsdx/GSUtil.cpp @@ -126,6 +126,41 @@ bool GSUtil::IsRectInRectV(const CRect& inner, const CRect& outer) return outer.left <= inner.left && inner.right <= outer.right; } +void GSUtil::FitRect(CRect& r, int aspectratio) +{ + static const int ar[][2] = {{0, 0}, {4, 3}, {16, 9}}; + + if(aspectratio <= 0 || aspectratio >= countof(ar)) + { + return; + } + + int arx = ar[aspectratio][0]; + int ary = ar[aspectratio][1]; + + CRect r2 = r; + + if(arx > 0 && ary > 0) + { + if(r.Width() * ary > r.Height() * arx) + { + int w = r.Height() * arx / ary; + r.left = r.CenterPoint().x - w / 2; + if(r.left & 1) r.left++; + r.right = r.left + w; + } + else + { + int h = r.Width() * ary / arx; + r.top = r.CenterPoint().y - h / 2; + if(r.top & 1) r.top++; + r.bottom = r.top + h; + } + } + + r &= r2; +} + bool GSUtil::CheckDirectX() { CString str; diff --git a/gsdx/GSUtil.h b/gsdx/GSUtil.h index f9277b5..a506394 100644 --- a/gsdx/GSUtil.h +++ b/gsdx/GSUtil.h @@ -36,6 +36,8 @@ public: static bool IsRectInRect(const CRect& inner, const CRect& outer); static bool IsRectInRectH(const CRect& inner, const CRect& outer); static bool IsRectInRectV(const CRect& inner, const CRect& outer); + + static void FitRect(CRect& r, int aspectratio); static int EncodePSM(int psm) { diff --git a/gsdx/GSdx_vs2008.vcproj b/gsdx/GSdx_vs2008.vcproj index 8f46c88..ff55395 100644 --- a/gsdx/GSdx_vs2008.vcproj +++ b/gsdx/GSdx_vs2008.vcproj @@ -1075,10 +1075,6 @@ RelativePath=".\GPUState.cpp" > - - @@ -1625,18 +1621,10 @@ RelativePath=".\GPUState.h" > - - - -