CTevCombiners: Fix CTevPass (un)inlining

This commit is contained in:
Luke Street 2022-12-02 12:33:10 -05:00
parent a6e929208f
commit 205947ebdf
8 changed files with 32 additions and 73 deletions

View File

@ -23,8 +23,8 @@ sNumEnabledPasses__13CTevCombiners:
.section .sbss, "wa"
.balign 8
.global sUniquePass__13CTevCombiners
sUniquePass__13CTevCombiners:
.global sNextUniquePass__13CTevCombiners
sNextUniquePass__13CTevCombiners:
.skip 0x4
.global skAlphaOne__13CTevCombiners
skAlphaOne__13CTevCombiners:
@ -303,13 +303,11 @@ __sinit_CTevCombiners_cpp:
/* 8030924C 003061AC 38 21 00 70 */ addi r1, r1, 0x70
/* 80309250 003061B0 4E 80 00 20 */ blr
.if 0
# TODO: Figure out why this doesn't inline and get rid of the fake TU
.global __ct__Q213CTevCombiners8CTevPassFRCQ213CTevCombiners9ColorPassRCQ213CTevCombiners9AlphaPassRCQ213CTevCombiners6CTevOpRCQ213CTevCombiners6CTevOp
__ct__Q213CTevCombiners8CTevPassFRCQ213CTevCombiners9ColorPassRCQ213CTevCombiners9AlphaPassRCQ213CTevCombiners6CTevOpRCQ213CTevCombiners6CTevOp:
/* 80309254 003061B4 81 0D A7 98 */ lwz r8, sUniquePass__13CTevCombiners@sda21(r13)
/* 80309254 003061B4 81 0D A7 98 */ lwz r8, sNextUniquePass__13CTevCombiners@sda21(r13)
/* 80309258 003061B8 38 08 00 01 */ addi r0, r8, 1
/* 8030925C 003061BC 90 0D A7 98 */ stw r0, sUniquePass__13CTevCombiners@sda21(r13)
/* 8030925C 003061BC 90 0D A7 98 */ stw r0, sNextUniquePass__13CTevCombiners@sda21(r13)
/* 80309260 003061C0 91 03 00 00 */ stw r8, 0(r3)
/* 80309264 003061C4 80 04 00 00 */ lwz r0, 0(r4)
/* 80309268 003061C8 90 03 00 04 */ stw r0, 4(r3)
@ -348,4 +346,3 @@ __ct__Q213CTevCombiners8CTevPassFRCQ213CTevCombiners9ColorPassRCQ213CTevCombiner
/* 803092EC 0030624C 80 07 00 10 */ lwz r0, 0x10(r7)
/* 803092F0 00306250 90 03 00 48 */ stw r0, 0x48(r3)
/* 803092F4 00306254 4E 80 00 20 */ blr
.endif

View File

@ -1,48 +0,0 @@
.include "macros.inc"
.section .text, "ax"
# TODO: Figure out why this doesn't inline and get rid of this fake TU
.global __ct__Q213CTevCombiners8CTevPassFRCQ213CTevCombiners9ColorPassRCQ213CTevCombiners9AlphaPassRCQ213CTevCombiners6CTevOpRCQ213CTevCombiners6CTevOp
__ct__Q213CTevCombiners8CTevPassFRCQ213CTevCombiners9ColorPassRCQ213CTevCombiners9AlphaPassRCQ213CTevCombiners6CTevOpRCQ213CTevCombiners6CTevOp:
/* 80309254 003061B4 81 0D A7 98 */ lwz r8, sUniquePass__13CTevCombiners@sda21(r13)
/* 80309258 003061B8 38 08 00 01 */ addi r0, r8, 1
/* 8030925C 003061BC 90 0D A7 98 */ stw r0, sUniquePass__13CTevCombiners@sda21(r13)
/* 80309260 003061C0 91 03 00 00 */ stw r8, 0(r3)
/* 80309264 003061C4 80 04 00 00 */ lwz r0, 0(r4)
/* 80309268 003061C8 90 03 00 04 */ stw r0, 4(r3)
/* 8030926C 003061CC 80 04 00 04 */ lwz r0, 4(r4)
/* 80309270 003061D0 90 03 00 08 */ stw r0, 8(r3)
/* 80309274 003061D4 80 04 00 08 */ lwz r0, 8(r4)
/* 80309278 003061D8 90 03 00 0C */ stw r0, 0xc(r3)
/* 8030927C 003061DC 80 04 00 0C */ lwz r0, 0xc(r4)
/* 80309280 003061E0 90 03 00 10 */ stw r0, 0x10(r3)
/* 80309284 003061E4 80 05 00 00 */ lwz r0, 0(r5)
/* 80309288 003061E8 90 03 00 14 */ stw r0, 0x14(r3)
/* 8030928C 003061EC 80 05 00 04 */ lwz r0, 4(r5)
/* 80309290 003061F0 90 03 00 18 */ stw r0, 0x18(r3)
/* 80309294 003061F4 80 05 00 08 */ lwz r0, 8(r5)
/* 80309298 003061F8 90 03 00 1C */ stw r0, 0x1c(r3)
/* 8030929C 003061FC 80 05 00 0C */ lwz r0, 0xc(r5)
/* 803092A0 00306200 90 03 00 20 */ stw r0, 0x20(r3)
/* 803092A4 00306204 88 06 00 00 */ lbz r0, 0(r6)
/* 803092A8 00306208 98 03 00 24 */ stb r0, 0x24(r3)
/* 803092AC 0030620C 80 06 00 04 */ lwz r0, 4(r6)
/* 803092B0 00306210 90 03 00 28 */ stw r0, 0x28(r3)
/* 803092B4 00306214 80 06 00 08 */ lwz r0, 8(r6)
/* 803092B8 00306218 90 03 00 2C */ stw r0, 0x2c(r3)
/* 803092BC 0030621C 80 06 00 0C */ lwz r0, 0xc(r6)
/* 803092C0 00306220 90 03 00 30 */ stw r0, 0x30(r3)
/* 803092C4 00306224 80 06 00 10 */ lwz r0, 0x10(r6)
/* 803092C8 00306228 90 03 00 34 */ stw r0, 0x34(r3)
/* 803092CC 0030622C 88 07 00 00 */ lbz r0, 0(r7)
/* 803092D0 00306230 98 03 00 38 */ stb r0, 0x38(r3)
/* 803092D4 00306234 80 07 00 04 */ lwz r0, 4(r7)
/* 803092D8 00306238 90 03 00 3C */ stw r0, 0x3c(r3)
/* 803092DC 0030623C 80 07 00 08 */ lwz r0, 8(r7)
/* 803092E0 00306240 90 03 00 40 */ stw r0, 0x40(r3)
/* 803092E4 00306244 80 07 00 0C */ lwz r0, 0xc(r7)
/* 803092E8 00306248 90 03 00 44 */ stw r0, 0x44(r3)
/* 803092EC 0030624C 80 07 00 10 */ lwz r0, 0x10(r7)
/* 803092F0 00306250 90 03 00 48 */ stw r0, 0x48(r3)
/* 803092F4 00306254 4E 80 00 20 */ blr

View File

@ -558,7 +558,6 @@ LIBS = [
"Kyoto/Graphics/CCubeModel",
["Kyoto/Graphics/CGX", True],
["Kyoto/Graphics/CTevCombiners", True],
["Kyoto/Graphics/CTevPass", True],
"Kyoto/Graphics/DolphinCGraphics",
"Kyoto/Graphics/DolphinCPalette",
"Kyoto/Graphics/DolphinCTexture",

View File

@ -300,7 +300,7 @@ public:
static void sub_80309564(uint* stretch, uint* xOffset, uint* yOffset);
static void sub_803094b0(uint stretch, uint xOffset, uint yOffset);
static CTevCombiners::CTevPass& kEnvPassthru;
static const CTevCombiners::CTevPass& kEnvPassthru;
static CTevCombiners::CTevPass kEnvModulateConstColor;
static CTevCombiners::CTevPass kEnvConstColor;
static CTevCombiners::CTevPass kEnvModulate;

View File

@ -25,19 +25,25 @@ public:
kCS_Konst,
kCS_Zero,
};
class ColorVar {
public:
ColorVar(EColorSrc src);
ColorVar(const ColorVar& other) : x0_src(other.GetSource()) {}
EColorSrc GetSource() const { return x0_src; }
private:
EColorSrc x0_src;
};
class ColorPass {
public:
ColorPass(const ColorVar& a, const ColorVar& b, const ColorVar& c, const ColorVar& d)
: x0_a(a), x4_b(b), x8_c(c), xc_d(d) {}
ColorPass(const ColorPass& other)
: x0_a(other.GetA()), x4_b(other.GetB()), x8_c(other.GetC()), xc_d(other.GetD()) {}
ColorVar GetA() const { return x0_a; }
ColorVar GetB() const { return x4_b; }
ColorVar GetC() const { return x8_c; }
@ -60,18 +66,24 @@ public:
kAS_Konst,
kAS_Zero,
};
class AlphaVar {
public:
AlphaVar(EAlphaSrc src);
AlphaVar(const AlphaVar& other) : x0_src(other.GetSource()) {}
EAlphaSrc GetSource() const { return x0_src; }
private:
EAlphaSrc x0_src;
};
class AlphaPass {
public:
AlphaPass(const AlphaVar& a, const AlphaVar& b, const AlphaVar& c, const AlphaVar& d)
: x0_a(a), x4_b(b), x8_c(c), xc_d(d) {}
AlphaPass(const AlphaPass& other)
: x0_a(other.GetA()), x4_b(other.GetB()), x8_c(other.GetC()), xc_d(other.GetD()) {}
AlphaVar GetA() const { return x0_a; }
AlphaVar GetB() const { return x4_b; }
@ -89,28 +101,38 @@ public:
kTO_Add,
kTO_Subtract,
};
enum ETevBias {
kTB_Zero,
kTB_AddHalf,
kTB_SubHalf,
};
enum ETevScale {
kTS_Scale1,
kTS_Scale2,
kTS_Scale4,
kTS_Divide2,
};
enum ETevOutput {
kTO_Previous,
kTO_Register0,
kTO_Register1,
kTO_Register2,
};
class CTevOp {
public:
CTevOp(ETevOp op = kTO_Add, ETevBias bias = kTB_Zero, ETevScale scale = kTS_Scale1,
bool clamp = true, ETevOutput output = kTO_Previous)
: x0_clamp(clamp), x4_op(op), x8_bias(bias), xc_scale(scale), x10_output(output) {}
CTevOp(const CTevOp& other)
: x0_clamp(other.GetClamp())
, x4_op(other.GetOp())
, x8_bias(other.GetBias())
, xc_scale(other.GetScale())
, x10_output(other.GetOutput()) {}
bool GetClamp() const { return x0_clamp; }
ETevOp GetOp() const { return x4_op; }
@ -129,13 +151,12 @@ public:
class CTevPass {
public:
CTevPass(const ColorPass& colorPass, const AlphaPass& alphaPass,
const CTevOp& colorOp = CTevOp(), const CTevOp& alphaOp = CTevOp());/*
: x0_id(sUniquePass++)
const CTevOp& colorOp = CTevOp(), const CTevOp& alphaOp = CTevOp())
: x0_id(sNextUniquePass++)
, x4_colorPass(colorPass)
, x14_alphaPass(alphaPass)
, x24_colorOp(colorOp)
, x38_alphaOp(alphaOp) {}
*/
void Execute(int) const;
@ -154,7 +175,7 @@ public:
static bool SetPassCombiners(int stage, const CTevPass& pass);
static void ResetStates();
static int sUniquePass;
static int sNextUniquePass;
static const CTevPass kEnvPassthru;
static const AlphaVar skAlphaOne;
static const ColorVar skColorOne;

View File

@ -5,7 +5,7 @@
#define TEV_MAX_PASSES 2
int CTevCombiners::sUniquePass = 0;
int CTevCombiners::sNextUniquePass = 0;
const CTevCombiners::AlphaVar CTevCombiners::skAlphaOne(CTevCombiners::kAS_Konst);
const CTevCombiners::ColorVar CTevCombiners::skColorOne(CTevCombiners::kCS_One);

View File

@ -1,10 +0,0 @@
#include "Kyoto/Graphics/CTevCombiners.hpp"
// TODO: Figure out why this doesn't inline and get rid of this fake TU
CTevCombiners::CTevPass::CTevPass(const ColorPass& colorPass, const AlphaPass& alphaPass, const CTevOp& colorOp,
const CTevOp& alphaOp)
: x0_id(sUniquePass++)
, x4_colorPass(colorPass)
, x14_alphaPass(alphaPass)
, x24_colorOp(colorOp)
, x38_alphaOp(alphaOp) {}

View File

@ -244,7 +244,7 @@ ELightType CGraphics::mLightTypes[8] = {
kLT_Directional, kLT_Directional, kLT_Directional, kLT_Directional,
};
CTevCombiners::CTevPass& CGraphics::kEnvPassthru = CTevCombiners::kEnvPassthru;
const CTevCombiners::CTevPass& CGraphics::kEnvPassthru = CTevCombiners::kEnvPassthru;
bool CGraphics::mIsBeginSceneClearFb = true;
ERglEnum CGraphics::mDepthFunc = kE_LEqual;
ERglPrimitive CGraphics::mCurrentPrimitive = kP_Points;