From 009afa6ef5e4ae4c8ced07089a88644349ccd425 Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 5 Mar 2015 17:56:33 +0100 Subject: [PATCH] Adapt to new GPU register write style --- source/attribs.c | 9 ++++----- source/base.c | 24 ++++++++++++------------ source/drawArray.c | 18 +++++++++--------- source/drawElements.c | 18 +++++++++--------- source/effect.c | 18 +++++++++--------- source/texenv.c | 2 +- source/uniforms.c | 4 ++-- 7 files changed, 46 insertions(+), 47 deletions(-) diff --git a/source/attribs.c b/source/attribs.c index c66c5df..32b0ac9 100644 --- a/source/attribs.c +++ b/source/attribs.c @@ -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); } diff --git a/source/base.c b/source/base.c index fcf584f..f76c551 100644 --- a/source/base.c +++ b/source/base.c @@ -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; } } diff --git a/source/drawArray.c b/source/drawArray.c index 10188e2..c349529 100644 --- a/source/drawArray.c +++ b/source/drawArray.c @@ -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; } diff --git a/source/drawElements.c b/source/drawElements.c index 99596e0..fd3a329 100644 --- a/source/drawElements.c +++ b/source/drawElements.c @@ -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; } diff --git a/source/effect.c b/source/effect.c index 5049c91..f0418ad 100644 --- a/source/effect.c +++ b/source/effect.c @@ -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); } diff --git a/source/texenv.c b/source/texenv.c index a40fb14..e7ac8b9 100644 --- a/source/texenv.c +++ b/source/texenv.c @@ -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)); } diff --git a/source/uniforms.c b/source/uniforms.c index ac06c24..49cb988 100644 --- a/source/uniforms.c +++ b/source/uniforms.c @@ -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; } }