Adapt to new GPU register write style

This commit is contained in:
fincs 2015-03-05 17:56:33 +01:00
parent cd57cf8d3f
commit 009afa6ef5
7 changed files with 46 additions and 47 deletions

View File

@ -57,9 +57,8 @@ void C3D_SetAttrInfo(C3D_AttrInfo* info)
void C3Di_AttrInfoBind(C3D_AttrInfo* info) void C3Di_AttrInfoBind(C3D_AttrInfo* info)
{ {
GPUCMD_Add(0x800F0201, (u32*)&info->cfg, sizeof(C3D_AttrCfg)/sizeof(u32)); GPUCMD_AddIncrementalWrites(GPUREG_ATTRIBBUFFERS_FORMAT_LOW, (u32*)&info->cfg, sizeof(C3D_AttrCfg)/sizeof(u32));
GPUCMD_AddSingleParam(0x000B02B9, 0xA0000000 | (info->attrCount - 1)); GPUCMD_AddMaskedWrite(GPUREG_VSH_INPUTBUFFER_CONFIG, 0xB, 0xA0000000 | (info->attrCount - 1));
GPUCMD_AddSingleParam(0x000F0242, info->attrCount - 1); GPUCMD_AddWrite(GPUREG_0242, info->attrCount - 1);
GPUCMD_AddSingleParam(0x000F02BB, info->permutation & 0xFFFFFFFF); GPUCMD_AddIncrementalWrites(GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW, (u32*)&info->permutation, 2);
GPUCMD_AddSingleParam(0x000F02BC, info->permutation >> 32);
} }

View File

@ -25,22 +25,22 @@ static void C3Di_SetTex(GPU_TEXUNIT unit, C3D_Tex* tex)
switch (unit) switch (unit)
{ {
case GPU_TEXUNIT0: case GPU_TEXUNIT0:
GPUCMD_AddSingleParam(0x000F008E, reg[0]); GPUCMD_AddWrite(GPUREG_TEXUNIT0_TYPE, reg[0]);
GPUCMD_AddSingleParam(0x000F0085, reg[1]); GPUCMD_AddWrite(GPUREG_TEXUNIT0_LOC, reg[1]);
GPUCMD_AddSingleParam(0x000F0082, reg[2]); GPUCMD_AddWrite(GPUREG_TEXUNIT0_DIM, reg[2]);
GPUCMD_AddSingleParam(0x000F0083, reg[3]); GPUCMD_AddWrite(GPUREG_TEXUNIT0_PARAM, reg[3]);
break; break;
case GPU_TEXUNIT1: case GPU_TEXUNIT1:
GPUCMD_AddSingleParam(0x000F0096, reg[0]); GPUCMD_AddWrite(GPUREG_TEXUNIT1_TYPE, reg[0]);
GPUCMD_AddSingleParam(0x000F0095, reg[1]); GPUCMD_AddWrite(GPUREG_TEXUNIT1_LOC, reg[1]);
GPUCMD_AddSingleParam(0x000F0092, reg[2]); GPUCMD_AddWrite(GPUREG_TEXUNIT1_DIM, reg[2]);
GPUCMD_AddSingleParam(0x000F0093, reg[3]); GPUCMD_AddWrite(GPUREG_TEXUNIT1_PARAM, reg[3]);
break; break;
case GPU_TEXUNIT2: case GPU_TEXUNIT2:
GPUCMD_AddSingleParam(0x000F009E, reg[0]); GPUCMD_AddWrite(GPUREG_TEXUNIT2_TYPE, reg[0]);
GPUCMD_AddSingleParam(0x000F009D, reg[1]); GPUCMD_AddWrite(GPUREG_TEXUNIT2_LOC, reg[1]);
GPUCMD_AddSingleParam(0x000F009A, reg[2]); GPUCMD_AddWrite(GPUREG_TEXUNIT2_DIM, reg[2]);
GPUCMD_AddSingleParam(0x000F009B, reg[3]); GPUCMD_AddWrite(GPUREG_TEXUNIT2_PARAM, reg[3]);
break; break;
} }
} }

View File

@ -6,20 +6,20 @@ void C3D_DrawArray(C3D_VBO* vbo, GPU_Primitive_t primitive)
C3Di_UpdateContext(); C3Di_UpdateContext();
// Set primitive type // Set primitive type
GPUCMD_AddSingleParam(0x0002025E, primitive); GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 2, primitive);
GPUCMD_AddSingleParam(0x0002025F, 0x00000001); GPUCMD_AddMaskedWrite(GPUREG_025F, 2, 0x00000001);
// The index buffer is not used, but 0x000F0227 is still required // The index buffer is not used, but 0x000F0227 is still required
GPUCMD_AddSingleParam(0x000F0227, 0x80000000); GPUCMD_AddWrite(GPUREG_INDEXBUFFER_CONFIG, 0x80000000);
// Number of vertices // Number of vertices
GPUCMD_AddSingleParam(0x000F0228, vbo->vertexCount); GPUCMD_AddWrite(GPUREG_NUMVERTICES, vbo->vertexCount);
// Unknown commands // Unknown commands
GPUCMD_AddSingleParam(0x00010253, 0x00000001); GPUCMD_AddMaskedWrite(GPUREG_0253, 1, 0x00000001);
GPUCMD_AddSingleParam(0x00010245, 0x00000000); GPUCMD_AddMaskedWrite(GPUREG_0245, 1, 0x00000000);
GPUCMD_AddSingleParam(0x000F022E, 0x00000001); GPUCMD_AddWrite(GPUREG_DRAWARRAYS, 0x00000001);
GPUCMD_AddSingleParam(0x00010245, 0x00000001); GPUCMD_AddMaskedWrite(GPUREG_0245, 1, 0x00000001);
GPUCMD_AddSingleParam(0x000F0231, 0x00000001); GPUCMD_AddWrite(GPUREG_0231, 0x00000001);
C3Di_GetContext()->flags |= C3DiF_NeedFinishDrawing; C3Di_GetContext()->flags |= C3DiF_NeedFinishDrawing;
} }

View File

@ -5,21 +5,21 @@ void C3D_DrawElements(C3D_IBO* ibo, GPU_Primitive_t primitive)
C3Di_UpdateContext(); C3Di_UpdateContext();
// Set primitive type // Set primitive type
GPUCMD_AddSingleParam(0x0002025E, primitive); GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 2, primitive);
GPUCMD_AddSingleParam(0x0002025F, 0x00000001); GPUCMD_AddMaskedWrite(GPUREG_025F, 2, 0x00000001);
// Bind the IBO // Bind the IBO
C3Di_IBOBind(ibo); C3Di_IBOBind(ibo);
// Number of vertices // Number of vertices
GPUCMD_AddSingleParam(0x000F0228, ibo->indexCount); GPUCMD_AddWrite(GPUREG_NUMVERTICES, ibo->indexCount);
// Unknown commands // Unknown commands
GPUCMD_AddSingleParam(0x00020229, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 2, 0x00000100);
GPUCMD_AddSingleParam(0x00020253, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_0253, 2, 0x00000100);
GPUCMD_AddSingleParam(0x00010245, 0x00000000); GPUCMD_AddMaskedWrite(GPUREG_0245, 1, 0x00000000);
GPUCMD_AddSingleParam(0x000F022F, 0x00000001); GPUCMD_AddWrite(GPUREG_DRAWELEMENTS, 0x00000001);
GPUCMD_AddSingleParam(0x00010245, 0x00000001); GPUCMD_AddMaskedWrite(GPUREG_0245, 1, 0x00000001);
GPUCMD_AddSingleParam(0x000F0231, 0x00000001); GPUCMD_AddWrite(GPUREG_0231, 0x00000001);
C3Di_GetContext()->flags |= C3DiF_NeedFinishDrawing; C3Di_GetContext()->flags |= C3DiF_NeedFinishDrawing;
} }

View File

@ -58,15 +58,15 @@ void C3D_AlphaBlend(GPU_BLENDEQUATION colorEq, GPU_BLENDEQUATION alphaEq, GPU_BL
void C3Di_EffectBind(C3D_Effect* e) void C3Di_EffectBind(C3D_Effect* e)
{ {
GPUCMD_AddSingleParam(0x000F006D, 0x00000001); GPUCMD_AddWrite(GPUREG_006D, 0x00000001);
GPUCMD_AddSingleParam(0x000F0040, e->cullMode & 0x3); GPUCMD_AddWrite(GPUREG_FACECULLING_CONFIG, e->cullMode & 0x3);
GPUCMD_Add(0x800F004D, (u32*)&e->drNear, 2); GPUCMD_AddIncrementalWrites(GPUREG_DEPTHRANGE_NEAR, (u32*)&e->drNear, 2);
GPUCMD_Add(0x800F0104, (u32*)&e->alphaTest, 4); GPUCMD_AddIncrementalWrites(GPUREG_ALPHATEST_CONFIG, (u32*)&e->alphaTest, 4);
GPUCMD_AddSingleParam(0x000F0103, e->blendClr); GPUCMD_AddWrite(GPUREG_BLEND_COLOR, e->blendClr);
GPUCMD_AddSingleParam(0x000F0101, e->alphaBlend); GPUCMD_AddWrite(GPUREG_BLEND_CONFIG, e->alphaBlend);
GPUCMD_AddSingleParam(0x00020100, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_COLOROUTPUT_CONFIG, 2, 0x00000100);
// Wat // Wat
GPUCMD_AddSingleParam(0x00010062, 0); GPUCMD_AddMaskedWrite(GPUREG_0062, 1, 0);
GPUCMD_AddSingleParam(0x000F0118, 0); GPUCMD_AddWrite(GPUREG_0118, 0);
} }

View File

@ -39,5 +39,5 @@ void C3D_SetTexEnv(int id, C3D_TexEnv* env)
void C3Di_TexEnvBind(int id, C3D_TexEnv* env) void C3Di_TexEnvBind(int id, C3D_TexEnv* env)
{ {
if (id >= 4) id += 2; if (id >= 4) id += 2;
GPUCMD_Add(0x800F00C0 + id*8, (u32*)env, sizeof(C3D_TexEnv)/sizeof(u32)); GPUCMD_AddIncrementalWrites(GPUREG_TEXENV0_CONFIG0 + id*8, (u32*)env, sizeof(C3D_TexEnv)/sizeof(u32));
} }

View File

@ -50,14 +50,14 @@ void C3D_UpdateUniforms(void)
{ {
if (!C3D_IVUnifDirty[i]) continue; if (!C3D_IVUnifDirty[i]) continue;
GPUCMD_AddSingleParam(0x000F02B1+i, C3D_IVUnif[i]); GPUCMD_AddWrite(GPUREG_VSH_INTUNIFORM_I0+i, C3D_IVUnif[i]);
C3D_IVUnifDirty[i] = false; C3D_IVUnifDirty[i] = false;
} }
// Update bool uniforms // Update bool uniforms
if (C3D_BoolUnifsDirty) if (C3D_BoolUnifsDirty)
{ {
GPUCMD_AddSingleParam(0x000F02B0, 0x7FFF0000 | (u32)C3D_BoolUnifs); GPUCMD_AddWrite(GPUREG_VSH_BOOLUNIFORM, 0x7FFF0000 | (u32)C3D_BoolUnifs);
C3D_BoolUnifsDirty = false; C3D_BoolUnifsDirty = false;
} }
} }