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)
{
GPUCMD_Add(0x800F0201, (u32*)&info->cfg, sizeof(C3D_AttrCfg)/sizeof(u32));
GPUCMD_AddSingleParam(0x000B02B9, 0xA0000000 | (info->attrCount - 1));
GPUCMD_AddSingleParam(0x000F0242, info->attrCount - 1);
GPUCMD_AddSingleParam(0x000F02BB, info->permutation & 0xFFFFFFFF);
GPUCMD_AddSingleParam(0x000F02BC, info->permutation >> 32);
GPUCMD_AddIncrementalWrites(GPUREG_ATTRIBBUFFERS_FORMAT_LOW, (u32*)&info->cfg, sizeof(C3D_AttrCfg)/sizeof(u32));
GPUCMD_AddMaskedWrite(GPUREG_VSH_INPUTBUFFER_CONFIG, 0xB, 0xA0000000 | (info->attrCount - 1));
GPUCMD_AddWrite(GPUREG_0242, info->attrCount - 1);
GPUCMD_AddIncrementalWrites(GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW, (u32*)&info->permutation, 2);
}

View File

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

View File

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

View File

@ -5,21 +5,21 @@ void C3D_DrawElements(C3D_IBO* ibo, GPU_Primitive_t primitive)
C3Di_UpdateContext();
// Set primitive type
GPUCMD_AddSingleParam(0x0002025E, primitive);
GPUCMD_AddSingleParam(0x0002025F, 0x00000001);
GPUCMD_AddMaskedWrite(GPUREG_PRIMITIVE_CONFIG, 2, primitive);
GPUCMD_AddMaskedWrite(GPUREG_025F, 2, 0x00000001);
// Bind the IBO
C3Di_IBOBind(ibo);
// Number of vertices
GPUCMD_AddSingleParam(0x000F0228, ibo->indexCount);
GPUCMD_AddWrite(GPUREG_NUMVERTICES, ibo->indexCount);
// Unknown commands
GPUCMD_AddSingleParam(0x00020229, 0x00000100);
GPUCMD_AddSingleParam(0x00020253, 0x00000100);
GPUCMD_AddMaskedWrite(GPUREG_GEOSTAGE_CONFIG, 2, 0x00000100);
GPUCMD_AddMaskedWrite(GPUREG_0253, 2, 0x00000100);
GPUCMD_AddSingleParam(0x00010245, 0x00000000);
GPUCMD_AddSingleParam(0x000F022F, 0x00000001);
GPUCMD_AddSingleParam(0x00010245, 0x00000001);
GPUCMD_AddSingleParam(0x000F0231, 0x00000001);
GPUCMD_AddMaskedWrite(GPUREG_0245, 1, 0x00000000);
GPUCMD_AddWrite(GPUREG_DRAWELEMENTS, 0x00000001);
GPUCMD_AddMaskedWrite(GPUREG_0245, 1, 0x00000001);
GPUCMD_AddWrite(GPUREG_0231, 0x00000001);
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)
{
GPUCMD_AddSingleParam(0x000F006D, 0x00000001);
GPUCMD_AddSingleParam(0x000F0040, e->cullMode & 0x3);
GPUCMD_Add(0x800F004D, (u32*)&e->drNear, 2);
GPUCMD_Add(0x800F0104, (u32*)&e->alphaTest, 4);
GPUCMD_AddSingleParam(0x000F0103, e->blendClr);
GPUCMD_AddSingleParam(0x000F0101, e->alphaBlend);
GPUCMD_AddSingleParam(0x00020100, 0x00000100);
GPUCMD_AddWrite(GPUREG_006D, 0x00000001);
GPUCMD_AddWrite(GPUREG_FACECULLING_CONFIG, e->cullMode & 0x3);
GPUCMD_AddIncrementalWrites(GPUREG_DEPTHRANGE_NEAR, (u32*)&e->drNear, 2);
GPUCMD_AddIncrementalWrites(GPUREG_ALPHATEST_CONFIG, (u32*)&e->alphaTest, 4);
GPUCMD_AddWrite(GPUREG_BLEND_COLOR, e->blendClr);
GPUCMD_AddWrite(GPUREG_BLEND_CONFIG, e->alphaBlend);
GPUCMD_AddMaskedWrite(GPUREG_COLOROUTPUT_CONFIG, 2, 0x00000100);
// Wat
GPUCMD_AddSingleParam(0x00010062, 0);
GPUCMD_AddSingleParam(0x000F0118, 0);
GPUCMD_AddMaskedWrite(GPUREG_0062, 1, 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)
{
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;
GPUCMD_AddSingleParam(0x000F02B1+i, C3D_IVUnif[i]);
GPUCMD_AddWrite(GPUREG_VSH_INTUNIFORM_I0+i, C3D_IVUnif[i]);
C3D_IVUnifDirty[i] = false;
}
// Update bool uniforms
if (C3D_BoolUnifsDirty)
{
GPUCMD_AddSingleParam(0x000F02B0, 0x7FFF0000 | (u32)C3D_BoolUnifs);
GPUCMD_AddWrite(GPUREG_VSH_BOOLUNIFORM, 0x7FFF0000 | (u32)C3D_BoolUnifs);
C3D_BoolUnifsDirty = false;
}
}