mirror of https://github.com/PrimeDecomp/prime.git
CTevCombiners: Fix CTevPass (un)inlining
This commit is contained in:
parent
a6e929208f
commit
205947ebdf
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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) {}
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue