This commit is contained in:
gabest
2008-12-30 08:03:41 +00:00
parent 957e7046d0
commit 6e880a6b07
10 changed files with 1565 additions and 1741 deletions

View File

@@ -35,7 +35,7 @@ GPUDrawScanline::~GPUDrawScanline()
// IDrawScanline
bool GPUDrawScanline::BeginDraw(const GSRasterizerData* data)
void GPUDrawScanline::BeginDraw(const GSRasterizerData* data, DrawScanlinePtr* dsf, DrawSolidRectPtr* dsrf)
{
GPUDrawingEnvironment& env = m_state->m_env;
@@ -71,9 +71,8 @@ bool GPUDrawScanline::BeginDraw(const GSRasterizerData* data)
m_env.a = GSVector4i(env.PRIM.ABE ? 0xffffffff : 0);
m_env.md = GSVector4i(env.STATUS.MD ? 0x80008000 : 0);
m_dsf = m_ds[m_env.sel];
return false;
*dsf = m_ds[m_env.sel];
*dsrf = NULL; // TODO
}
void GPUDrawScanline::SetupPrim(GS_PRIM_CLASS primclass, const GSVertexSW* vertices, const GSVertexSW& dscan)
@@ -118,20 +117,6 @@ void GPUDrawScanline::SetupPrim(GS_PRIM_CLASS primclass, const GSVertexSW* verti
m_env.dc8 = dtc8.uph16(dtc8);
}
void GPUDrawScanline::DrawScanline(int top, int left, int right, const GSVertexSW& v)
{
(this->*m_dsf)(top, left, right, v);
}
void GPUDrawScanline::DrawSolidRect(const GSVector4i& r, const GSVertexSW& v)
{
ASSERT(0);
}
IDrawScanline::DrawScanlinePtr GPUDrawScanline::GetDrawScanlinePtr()
{
return m_dsf;
}
void GPUDrawScanline::SampleTexture(int pixels, DWORD ltf, DWORD tlu, DWORD twin, GSVector4i& test, const GSVector4i& s, const GSVector4i& t, GSVector4i* c)
{
@@ -443,267 +428,267 @@ void GPUDrawScanline::Init()
{
for(int i = 0; i < countof(m_ds); i++)
{
m_ds[i] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineT;
m_ds[i] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanline;
}
#ifdef FAST_DRAWSCANLINE
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>;
m_ds[0x00] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x00>;
m_ds[0x01] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x01>;
m_ds[0x02] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x02>;
m_ds[0x03] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x03>;
m_ds[0x04] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x04>;
m_ds[0x05] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x05>;
m_ds[0x06] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x06>;
m_ds[0x07] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x07>;
m_ds[0x08] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x08>;
m_ds[0x09] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x09>;
m_ds[0x0a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x0a>;
m_ds[0x0b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x0b>;
m_ds[0x0c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x0c>;
m_ds[0x0d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x0d>;
m_ds[0x0e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x0e>;
m_ds[0x0f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x0f>;
m_ds[0x10] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x10>;
m_ds[0x11] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x11>;
m_ds[0x12] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x12>;
m_ds[0x13] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x13>;
m_ds[0x14] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x14>;
m_ds[0x15] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x15>;
m_ds[0x16] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x16>;
m_ds[0x17] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x17>;
m_ds[0x18] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x18>;
m_ds[0x19] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x19>;
m_ds[0x1a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x1a>;
m_ds[0x1b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x1b>;
m_ds[0x1c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x1c>;
m_ds[0x1d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x1d>;
m_ds[0x1e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x1e>;
m_ds[0x1f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x1f>;
m_ds[0x20] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x20>;
m_ds[0x21] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x21>;
m_ds[0x22] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x22>;
m_ds[0x23] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x23>;
m_ds[0x24] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x24>;
m_ds[0x25] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x25>;
m_ds[0x26] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x26>;
m_ds[0x27] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x27>;
m_ds[0x28] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x28>;
m_ds[0x29] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x29>;
m_ds[0x2a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x2a>;
m_ds[0x2b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x2b>;
m_ds[0x2c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x2c>;
m_ds[0x2d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x2d>;
m_ds[0x2e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x2e>;
m_ds[0x2f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x2f>;
m_ds[0x30] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x30>;
m_ds[0x31] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x31>;
m_ds[0x32] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x32>;
m_ds[0x33] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x33>;
m_ds[0x34] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x34>;
m_ds[0x35] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x35>;
m_ds[0x36] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x36>;
m_ds[0x37] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x37>;
m_ds[0x38] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x38>;
m_ds[0x39] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x39>;
m_ds[0x3a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x3a>;
m_ds[0x3b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x3b>;
m_ds[0x3c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x3c>;
m_ds[0x3d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x3d>;
m_ds[0x3e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x3e>;
m_ds[0x3f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x3f>;
m_ds[0x40] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x40>;
m_ds[0x41] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x41>;
m_ds[0x42] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x42>;
m_ds[0x43] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x43>;
m_ds[0x44] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x44>;
m_ds[0x45] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x45>;
m_ds[0x46] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x46>;
m_ds[0x47] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x47>;
m_ds[0x48] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x48>;
m_ds[0x49] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x49>;
m_ds[0x4a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x4a>;
m_ds[0x4b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x4b>;
m_ds[0x4c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x4c>;
m_ds[0x4d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x4d>;
m_ds[0x4e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x4e>;
m_ds[0x4f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x4f>;
m_ds[0x50] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x50>;
m_ds[0x51] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x51>;
m_ds[0x52] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x52>;
m_ds[0x53] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x53>;
m_ds[0x54] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x54>;
m_ds[0x55] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x55>;
m_ds[0x56] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x56>;
m_ds[0x57] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x57>;
m_ds[0x58] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x58>;
m_ds[0x59] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x59>;
m_ds[0x5a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x5a>;
m_ds[0x5b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x5b>;
m_ds[0x5c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x5c>;
m_ds[0x5d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x5d>;
m_ds[0x5e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x5e>;
m_ds[0x5f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x5f>;
m_ds[0x60] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x60>;
m_ds[0x61] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x61>;
m_ds[0x62] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x62>;
m_ds[0x63] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x63>;
m_ds[0x64] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x64>;
m_ds[0x65] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x65>;
m_ds[0x66] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x66>;
m_ds[0x67] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x67>;
m_ds[0x68] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x68>;
m_ds[0x69] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x69>;
m_ds[0x6a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x6a>;
m_ds[0x6b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x6b>;
m_ds[0x6c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x6c>;
m_ds[0x6d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x6d>;
m_ds[0x6e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x6e>;
m_ds[0x6f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x6f>;
m_ds[0x70] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x70>;
m_ds[0x71] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x71>;
m_ds[0x72] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x72>;
m_ds[0x73] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x73>;
m_ds[0x74] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x74>;
m_ds[0x75] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x75>;
m_ds[0x76] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x76>;
m_ds[0x77] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x77>;
m_ds[0x78] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x78>;
m_ds[0x79] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x79>;
m_ds[0x7a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x7a>;
m_ds[0x7b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x7b>;
m_ds[0x7c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x7c>;
m_ds[0x7d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x7d>;
m_ds[0x7e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x7e>;
m_ds[0x7f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x7f>;
m_ds[0x80] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x80>;
m_ds[0x81] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x81>;
m_ds[0x82] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x82>;
m_ds[0x83] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x83>;
m_ds[0x84] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x84>;
m_ds[0x85] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x85>;
m_ds[0x86] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x86>;
m_ds[0x87] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x87>;
m_ds[0x88] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x88>;
m_ds[0x89] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x89>;
m_ds[0x8a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x8a>;
m_ds[0x8b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x8b>;
m_ds[0x8c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x8c>;
m_ds[0x8d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x8d>;
m_ds[0x8e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x8e>;
m_ds[0x8f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x8f>;
m_ds[0x90] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x90>;
m_ds[0x91] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x91>;
m_ds[0x92] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x92>;
m_ds[0x93] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x93>;
m_ds[0x94] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x94>;
m_ds[0x95] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x95>;
m_ds[0x96] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x96>;
m_ds[0x97] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x97>;
m_ds[0x98] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x98>;
m_ds[0x99] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x99>;
m_ds[0x9a] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x9a>;
m_ds[0x9b] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x9b>;
m_ds[0x9c] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x9c>;
m_ds[0x9d] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x9d>;
m_ds[0x9e] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x9e>;
m_ds[0x9f] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0x9f>;
m_ds[0xa0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa0>;
m_ds[0xa1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa1>;
m_ds[0xa2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa2>;
m_ds[0xa3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa3>;
m_ds[0xa4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa4>;
m_ds[0xa5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa5>;
m_ds[0xa6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa6>;
m_ds[0xa7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa7>;
m_ds[0xa8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa8>;
m_ds[0xa9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xa9>;
m_ds[0xaa] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xaa>;
m_ds[0xab] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xab>;
m_ds[0xac] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xac>;
m_ds[0xad] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xad>;
m_ds[0xae] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xae>;
m_ds[0xaf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xaf>;
m_ds[0xb0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb0>;
m_ds[0xb1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb1>;
m_ds[0xb2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb2>;
m_ds[0xb3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb3>;
m_ds[0xb4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb4>;
m_ds[0xb5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb5>;
m_ds[0xb6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb6>;
m_ds[0xb7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb7>;
m_ds[0xb8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb8>;
m_ds[0xb9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xb9>;
m_ds[0xba] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xba>;
m_ds[0xbb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xbb>;
m_ds[0xbc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xbc>;
m_ds[0xbd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xbd>;
m_ds[0xbe] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xbe>;
m_ds[0xbf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xbf>;
m_ds[0xc0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc0>;
m_ds[0xc1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc1>;
m_ds[0xc2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc2>;
m_ds[0xc3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc3>;
m_ds[0xc4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc4>;
m_ds[0xc5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc5>;
m_ds[0xc6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc6>;
m_ds[0xc7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc7>;
m_ds[0xc8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc8>;
m_ds[0xc9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xc9>;
m_ds[0xca] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xca>;
m_ds[0xcb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xcb>;
m_ds[0xcc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xcc>;
m_ds[0xcd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xcd>;
m_ds[0xce] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xce>;
m_ds[0xcf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xcf>;
m_ds[0xd0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd0>;
m_ds[0xd1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd1>;
m_ds[0xd2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd2>;
m_ds[0xd3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd3>;
m_ds[0xd4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd4>;
m_ds[0xd5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd5>;
m_ds[0xd6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd6>;
m_ds[0xd7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd7>;
m_ds[0xd8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd8>;
m_ds[0xd9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xd9>;
m_ds[0xda] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xda>;
m_ds[0xdb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xdb>;
m_ds[0xdc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xdc>;
m_ds[0xdd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xdd>;
m_ds[0xde] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xde>;
m_ds[0xdf] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xdf>;
m_ds[0xe0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe0>;
m_ds[0xe1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe1>;
m_ds[0xe2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe2>;
m_ds[0xe3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe3>;
m_ds[0xe4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe4>;
m_ds[0xe5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe5>;
m_ds[0xe6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe6>;
m_ds[0xe7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe7>;
m_ds[0xe8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe8>;
m_ds[0xe9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xe9>;
m_ds[0xea] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xea>;
m_ds[0xeb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xeb>;
m_ds[0xec] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xec>;
m_ds[0xed] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xed>;
m_ds[0xee] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xee>;
m_ds[0xef] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xef>;
m_ds[0xf0] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf0>;
m_ds[0xf1] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf1>;
m_ds[0xf2] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf2>;
m_ds[0xf3] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf3>;
m_ds[0xf4] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf4>;
m_ds[0xf5] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf5>;
m_ds[0xf6] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf6>;
m_ds[0xf7] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf7>;
m_ds[0xf8] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf8>;
m_ds[0xf9] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xf9>;
m_ds[0xfa] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xfa>;
m_ds[0xfb] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xfb>;
m_ds[0xfc] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xfc>;
m_ds[0xfd] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xfd>;
m_ds[0xfe] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xfe>;
m_ds[0xff] = (DrawScanlinePtr)&GPUDrawScanline::DrawScanlineEx<0xff>;
#endif
}
@@ -716,7 +701,7 @@ __declspec(align(16)) static WORD s_dither[4][16] =
{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 GSVertexSW& v)
void GPUDrawScanline::DrawScanline(int top, int left, int right, const GSVertexSW& v)
{
GSVector4i s, t;
GSVector4i r, g, b;
@@ -829,7 +814,7 @@ void GPUDrawScanline::DrawScanlineT(int top, int left, int right, const GSVertex
}
template<DWORD sel>
void GPUDrawScanline::DrawScanlineExT(int top, int left, int right, const GSVertexSW& v)
void GPUDrawScanline::DrawScanlineEx(int top, int left, int right, const GSVertexSW& v)
{
DWORD iip = (sel >> 0) & 1;
DWORD me = (sel >> 1) & 1;

View File

@@ -89,10 +89,10 @@ class GPUDrawScanline : public GSAlignedClass<16>, public IDrawScanline
void Init();
void DrawScanlineT(int top, int left, int right, const GSVertexSW& v);
void DrawScanline(int top, int left, int right, const GSVertexSW& v);
template<DWORD sel>
void DrawScanlineExT(int top, int left, int right, const GSVertexSW& v);
void DrawScanlineEx(int top, int left, int right, const GSVertexSW& v);
__forceinline void SampleTexture(int pixels, DWORD ltf, DWORD tlu, DWORD twin, GSVector4i& test, const GSVector4i& s, const GSVector4i& t, GSVector4i* c);
__forceinline void ColorTFX(DWORD tfx, const GSVector4i& r, const GSVector4i& g, const GSVector4i& b, GSVector4i* c);
@@ -109,12 +109,8 @@ public:
// IDrawScanline
bool BeginDraw(const GSRasterizerData* data);
void BeginDraw(const GSRasterizerData* data, DrawScanlinePtr* dsf, DrawSolidRectPtr* dsrf);
void EndDraw(const GSRasterizerStats& stats) {}
void SetupPrim(GS_PRIM_CLASS primclass, const GSVertexSW* vertices, const GSVertexSW& dscan);
void DrawScanline(int top, int left, int right, const GSVertexSW& v);
void DrawSolidRect(const GSVector4i& r, const GSVertexSW& v);
DrawScanlinePtr GetDrawScanlinePtr();
void PrintStats() {}
};

View File

@@ -544,123 +544,6 @@ EXPORT_C GSBenchmark(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow
_aligned_free(ptr);
}
if(0)
{
BYTE regs[0x2000];
GSsetBaseMem(regs);
HWND hWnd = NULL;
GSopen(&hWnd, _T(""), true, 6);
s_gs->m_env.COLCLAMP.CLAMP = 1;
s_gs->m_env.PRIM.ABE = 0;
s_gs->m_env.PRIM.FST = 1;
s_gs->m_env.PRIM.TME = 1;
s_gs->m_env.PRIM.IIP = 0;
s_gs->m_env.TEXA.TA0 = 0;
s_gs->m_env.TEXA.TA1 = 0x80;
s_gs->m_env.TEXA.AEM = 0;
s_gs->m_context->ALPHA.A = 0;
s_gs->m_context->ALPHA.B = 1;
s_gs->m_context->ALPHA.C = 0;
s_gs->m_context->ALPHA.D = 1;
s_gs->m_context->CLAMP.WMS = 1;
s_gs->m_context->CLAMP.WMT = 1;
s_gs->m_context->CLAMP.MINU = 0;
s_gs->m_context->CLAMP.MINV = 0;
s_gs->m_context->CLAMP.MAXU = 511;
s_gs->m_context->CLAMP.MAXV = 511;
s_gs->m_context->FRAME.FBP = 0 >> 5;
s_gs->m_context->FRAME.FBW = 8;
s_gs->m_context->FRAME.PSM = PSM_PSMCT16S;
s_gs->m_context->SCISSOR.SCAX0 = 0;
s_gs->m_context->SCISSOR.SCAY0 = 0;
s_gs->m_context->SCISSOR.SCAX1 = 511;
s_gs->m_context->SCISSOR.SCAY1 = 511;
s_gs->m_context->TEST.ZTE = 0;
s_gs->m_context->TEST.ZTST = 2;
s_gs->m_context->TEX0.TBP0 = 0x2000;
s_gs->m_context->TEX0.TBW = 8;
s_gs->m_context->TEX0.PSM = PSM_PSMCT32;
s_gs->m_context->TEX0.TFX = 1;
s_gs->m_context->TEX0.TCC = 0;
s_gs->m_context->TEX0.TW = 9;
s_gs->m_context->TEX0.TH = 9;
s_gs->m_context->TEX1.MMAG = 0;
s_gs->m_context->TEX1.MMIN = 0;
s_gs->m_context->ZBUF.ZBP = 0x1000 >> 5;
s_gs->m_context->ZBUF.PSM = PSM_PSMZ24;
GSRasterizer* ras = ((GSRendererSW<GSDeviceNull>*)s_gs)->GetRasterizer();
int count = 512 * 512;
GSVertexSW* vertices = (GSVertexSW*)_aligned_malloc(count * sizeof(GSVertexSW), 16);
/*
// point
for(int j = 0; j < 512; j++)
{
for(int i = 0; i < 512; i++)
{
GSVertexSW& v = vertices[(j << 7) + i];
v.p = GSVector4(i, j, 0, 0);
v.t = GSVector4((float)i + 0.5, (float)j + 0.5, 1.0f, 0.0f);
v.c = GSVector4(128.0f);
}
}
s_gs->PRIM->PRIM = GS_POINTLIST;
ras->Draw(vertices, count);
vertices[0].p = GSVector4(0, 0, 0, 0);
vertices[0].t = GSVector4(0.5, 0.5, 1.0f, 0.0f);
vertices[0].c = GSVector4(128.0f);
vertices[1].p = GSVector4(512, 512, 0, 0);
vertices[1].t = GSVector4(512.5f, 512.5f, 1.0f, 0.0f);
vertices[1].c = GSVector4(128.0f);
for(int i = 2; i < 512 * 512; i += 2)
{
memcpy(&vertices[i], &vertices[0], sizeof(vertices[0]) * 2);
}
// sprite
s_gs->PRIM->PRIM = GS_SPRITE;
ras->Draw(vertices, count);
// triangle
vertices[0].p = GSVector4(0, 0, 0, 0);
vertices[0].t = GSVector4(0.5, 0.5, 1.0f, 0.0f);
vertices[0].c = GSVector4(128.0f);
vertices[1].p = GSVector4(512, 0, 0, 0);
vertices[1].t = GSVector4(512.5f, 0.5f, 1.0f, 0.0f);
vertices[1].c = GSVector4(128.0f);
vertices[2].p = GSVector4(512, 512, 0, 0);
vertices[2].t = GSVector4(512.5f, 512.5f, 1.0f, 0.0f);
vertices[2].c = GSVector4(128.0f);
for(int i = 3; i < 512 * 512 - 2; i += 3)
{
memcpy(&vertices[i], &vertices[0], sizeof(vertices[0]) * 3);
}
s_gs->PRIM->PRIM = GS_TRIANGLELIST;
ras->Draw(vertices, 999);
*/
//
_aligned_free(vertices);
GSclose();
}
//
if(0)

View File

@@ -61,6 +61,7 @@ CRC::Game CRC::m_games[] =
{0xAA31B5BF, MetalGearSolid3, Unknown, false},
{0x9F185CE1, MetalGearSolid3, Unknown, false},
{0x98D4BC93, MetalGearSolid3, EU, false},
{0x86BC3040, MetalGearSolid3, US, false}, //Subsistance disc 1
{0x278722BF, DBZBT2, US, false},
{0xFE961D28, DBZBT2, US, false},
{0x0393B6BE, DBZBT2, EU, false},
@@ -84,6 +85,7 @@ CRC::Game CRC::m_games[] =
{0xC164550A, WildArms5, JPUNDUB, false},
{0xC1640D2C, WildArms5, US, false},
{0x0FCF8FE4, WildArms5, EU, false},
{0x2294D322, WildArms5, JP, false},
{0x8B029334, Manhunt2, Unknown, false},
{0x09F49E37, CrashBandicootWoC, Unknown, false},
{0x013E349D, ResidentEvil4, US, false},
@@ -108,6 +110,7 @@ CRC::Game CRC::m_games[] =
{0xF442260C, MajokkoALaMode2, JP, false},
{0x14FE77F7, TalesOfAbyss, US, false},
{0x045D77E9, TalesOfAbyss, US, false}, // undub
{0xAA5EC3A3, TalesOfAbyss, JP, false},
};
CAtlMap<DWORD, CRC::Game*> CRC::m_map;

File diff suppressed because it is too large Load Diff

View File

@@ -127,10 +127,10 @@ class GSDrawScanline : public GSAlignedClass<16>, public IDrawScanline
void Init();
template<DWORD fpsm, DWORD zpsm, DWORD ztst, DWORD iip>
void DrawScanlineT(int top, int left, int right, const GSVertexSW& v);
void DrawScanline(int top, int left, int right, const GSVertexSW& v);
template<DWORD sel>
void DrawScanlineExT(int top, int left, int right, const GSVertexSW& v);
void DrawScanlineEx(int top, int left, int right, const GSVertexSW& v);
__forceinline GSVector4i Wrap(const GSVector4i& t);
@@ -153,6 +153,8 @@ class GSDrawScanline : public GSAlignedClass<16>, public IDrawScanline
__forceinline GSVector4i ReadZBufX(int psm, const GSVector4i& addr) const;
__forceinline void WriteFrameAndZBufX(int fpsm, const GSVector4i& fa, const GSVector4i& fm, const GSVector4i& f, int zpsm, const GSVector4i& za, const GSVector4i& zm, const GSVector4i& z, int pixels);
void DrawSolidRect(const GSVector4i& r, const GSVertexSW& v);
template<class T, bool masked>
void DrawSolidRectT(const GSVector4i* row, int* col, const GSVector4i& r, DWORD c, DWORD m);
@@ -172,12 +174,8 @@ public:
// IDrawScanline
bool BeginDraw(const GSRasterizerData* data);
void BeginDraw(const GSRasterizerData* data, DrawScanlinePtr* dsf, DrawSolidRectPtr* dsrf);
void EndDraw(const GSRasterizerStats& stats);
void SetupPrim(GS_PRIM_CLASS primclass, const GSVertexSW* vertices, const GSVertexSW& dscan);
void DrawScanline(int top, int left, int right, const GSVertexSW& v);
void DrawSolidRect(const GSVector4i& r, const GSVertexSW& v);
DrawScanlinePtr GetDrawScanlinePtr();
void PrintStats();
};

View File

@@ -36,7 +36,10 @@ GSRasterizer::~GSRasterizer()
void GSRasterizer::Draw(const GSRasterizerData* data)
{
bool solid = m_ds->BeginDraw(data);
m_dsf = NULL;
m_dsrf = NULL;
m_ds->BeginDraw(data, &m_dsf, &m_dsrf);
const GSVector4i scissor = data->scissor;
const GSVertexSW* vertices = data->vertices;
@@ -65,7 +68,7 @@ void GSRasterizer::Draw(const GSRasterizerData* data)
case GS_SPRITE_CLASS:
ASSERT(!(count & 1));
m_stats.prims = count / 2;
for(int i = 0; i < count; i += 2) DrawSprite(&vertices[i], scissor, solid);
for(int i = 0; i < count; i += 2) DrawSprite(&vertices[i], scissor);
break;
default:
__assume(0);
@@ -91,7 +94,7 @@ void GSRasterizer::DrawPoint(const GSVertexSW* v, const GSVector4i& scissor)
{
if((p.y % m_threads) == m_id)
{
m_ds->DrawScanline(p.y, p.x, p.x + 1, *v);
(m_ds->*m_dsf)(p.y, p.x, p.x + 1, *v);
m_stats.pixels++;
}
@@ -400,8 +403,6 @@ void GSRasterizer::DrawTriangleSection(int top, int bottom, GSVertexSW& l, const
{
ASSERT(top < bottom);
IDrawScanline::DrawScanlinePtr dsf = m_ds->GetDrawScanlinePtr();
while(1)
{
do
@@ -444,7 +445,7 @@ void GSRasterizer::DrawTriangleSection(int top, int bottom, GSVertexSW& l, const
if(px > 0) scan += dscan * px;
(m_ds->*dsf)(top, left, right, scan);
(m_ds->*m_dsf)(top, left, right, scan);
}
}
}
@@ -457,18 +458,18 @@ void GSRasterizer::DrawTriangleSection(int top, int bottom, GSVertexSW& l, const
}
}
void GSRasterizer::DrawSprite(const GSVertexSW* vertices, const GSVector4i& scissor, bool solid)
void GSRasterizer::DrawSprite(const GSVertexSW* vertices, const GSVector4i& scissor)
{
GSVertexSW v[2];
GSVector4 mask = vertices[0].p > vertices[1].p;
GSVector4 mask = (vertices[0].p < vertices[1].p).xyzw(GSVector4::zero());
v[0].p = vertices[0].p.blend8(vertices[1].p, mask).xyzw(vertices[1].p);
v[0].t = vertices[0].t.blend8(vertices[1].t, mask).xyzw(vertices[1].t);
v[0].p = vertices[1].p.blend8(vertices[0].p, mask);
v[0].t = vertices[1].t.blend8(vertices[0].t, mask);
v[0].c = vertices[1].c;
v[1].p = vertices[1].p.blend8(vertices[0].p, mask);
v[1].t = vertices[1].t.blend8(vertices[0].t, mask);
v[1].p = vertices[0].p.blend8(vertices[1].p, mask);
v[1].t = vertices[0].t.blend8(vertices[1].t, mask);
GSVector4i r(v[0].p.xyxy(v[1].p).ceil());
@@ -498,11 +499,11 @@ void GSRasterizer::DrawSprite(const GSVertexSW* vertices, const GSVector4i& scis
GSVertexSW scan = v[0];
if(solid)
if(m_dsrf)
{
if(m_id == 0)
{
m_ds->DrawSolidRect(r, scan);
(m_ds->*m_dsrf)(r, scan);
m_stats.pixels += (r.z - r.x) * (r.w - r.y);
}
@@ -527,13 +528,11 @@ void GSRasterizer::DrawSprite(const GSVertexSW* vertices, const GSVector4i& scis
m_ds->SetupPrim(GS_SPRITE_CLASS, v, dscan);
IDrawScanline::DrawScanlinePtr dsf = m_ds->GetDrawScanlinePtr();
for(; top < bottom; top++, scan.t += dedge.t)
{
if((top % m_threads) == m_id)
{
(m_ds->*dsf)(top, left, right, scan);
(m_ds->*m_dsf)(top, left, right, scan);
m_stats.pixels += right - left;
}
@@ -674,3 +673,11 @@ void GSRasterizerList::GetStats(GSRasterizerStats& stats)
{
stats = m_stats;
}
void GSRasterizerList::PrintStats()
{
if(!IsEmpty())
{
GetHead()->PrintStats();
}
}

View File

@@ -50,24 +50,24 @@ struct GSRasterizerStats
class IRasterizer
{
public:
virtual ~IRasterizer() {}
virtual void Draw(const GSRasterizerData* data) = 0;
virtual void GetStats(GSRasterizerStats& stats) = 0;
virtual void PrintStats() = 0;
};
class IDrawScanline
{
public:
typedef void (IDrawScanline::*DrawScanlinePtr)(int top, int left, int right, const GSVertexSW& v);
typedef void (IDrawScanline::*DrawSolidRectPtr)(const GSVector4i& r, const GSVertexSW& v);
virtual ~IDrawScanline() {}
virtual bool BeginDraw(const GSRasterizerData* data) = 0;
virtual void BeginDraw(const GSRasterizerData* data, DrawScanlinePtr* dsf, DrawSolidRectPtr* dsrf) = 0;
virtual void EndDraw(const GSRasterizerStats& stats) = 0;
virtual void SetupPrim(GS_PRIM_CLASS primclass, const GSVertexSW* vertices, const GSVertexSW& dscan) = 0;
virtual void DrawScanline(int top, int left, int right, const GSVertexSW& v) = 0;
virtual void DrawSolidRect(const GSVector4i& r, const GSVertexSW& v) = 0;
virtual DrawScanlinePtr GetDrawScanlinePtr() = 0;
virtual void PrintStats() = 0;
};
@@ -75,6 +75,8 @@ class GSRasterizer : public IRasterizer
{
protected:
IDrawScanline* m_ds;
IDrawScanline::DrawScanlinePtr m_dsf;
IDrawScanline::DrawSolidRectPtr m_dsrf;
int m_id;
int m_threads;
GSRasterizerStats m_stats;
@@ -82,7 +84,7 @@ protected:
void DrawPoint(const GSVertexSW* v, const GSVector4i& scissor);
void DrawLine(const GSVertexSW* v, const GSVector4i& scissor);
void DrawTriangle(const GSVertexSW* v, const GSVector4i& scissor);
void DrawSprite(const GSVertexSW* v, const GSVector4i& scissor, bool solid);
void DrawSprite(const GSVertexSW* v, const GSVector4i& scissor);
void DrawTriangleTop(GSVertexSW* v, const GSVector4i& scissor);
void DrawTriangleBottom(GSVertexSW* v, const GSVector4i& scissor);
@@ -98,7 +100,6 @@ public:
void Draw(const GSRasterizerData* data);
void GetStats(GSRasterizerStats& stats);
void PrintStats() {m_ds->PrintStats();}
};
@@ -123,7 +124,7 @@ public:
void Draw(const GSRasterizerData* data);
};
class GSRasterizerList : public CAtlList<GSRasterizerMT*>, public IRasterizer
class GSRasterizerList : protected CAtlList<IRasterizer*>, public IRasterizer
{
long* m_sync;
GSRasterizerStats m_stats;
@@ -150,6 +151,5 @@ public:
void Draw(const GSRasterizerData* data);
void GetStats(GSRasterizerStats& stats);
void PrintStats() {GetHead()->PrintStats();}
void PrintStats();
};

View File

@@ -86,7 +86,8 @@ protected:
m_reset = false;
}
// if((m_perfmon.GetFrame() & 255) == 0) m_rl.PrintStats();
//
if((m_perfmon.GetFrame() & 255) == 0) m_rl.PrintStats();
}
void ResetDevice()
@@ -681,9 +682,4 @@ public:
{
delete m_tc;
}
GSRasterizer* GetRasterizer()
{
return m_rl.GetHead();
}
};

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Version="9,00"
Name="GSdx"
ProjectGUID="{18E42F6F-3A62-41EE-B42F-79366C4F1E95}"
RootNamespace="GSdx"
@@ -1110,14 +1110,6 @@
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="4"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\GSCaptureDlg.cpp"
@@ -1126,14 +1118,6 @@
<File
RelativePath=".\GSClut.cpp"
>
<FileConfiguration
Name="Release SSE4|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="4"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\GSCrc.cpp"
@@ -1222,14 +1206,6 @@
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|x64"
>
@@ -1262,14 +1238,6 @@
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|x64"
>
@@ -1306,14 +1274,6 @@
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="4"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\GSRendererHW9.cpp"
@@ -1334,14 +1294,6 @@
AssemblerOutput="4"
/>
</FileConfiguration>
<FileConfiguration
Name="Release SSE4|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="4"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\GSRendererNull.cpp"