mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-07-10 00:58:41 +12:00
Nyom 3: The final nyom
This commit is contained in:
parent
a903e1b2a4
commit
f46163006a
2 changed files with 13 additions and 12 deletions
|
@ -197,12 +197,12 @@ namespace PICA {
|
||||||
return std::memcmp(this, &config, sizeof(FragmentConfig)) == 0;
|
return std::memcmp(this, &config, sizeof(FragmentConfig)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FragmentConfig(const std::array<u32, 0x300>& regs) : lighting(regs)
|
FragmentConfig(const std::array<u32, 0x300>& regs) : lighting(regs) {
|
||||||
{
|
|
||||||
auto alphaTestConfig = regs[InternalRegs::AlphaTestConfig];
|
auto alphaTestConfig = regs[InternalRegs::AlphaTestConfig];
|
||||||
auto alphaTestFunction = Helpers::getBits<4, 3>(alphaTestConfig);
|
auto alphaTestFunction = Helpers::getBits<4, 3>(alphaTestConfig);
|
||||||
|
|
||||||
outConfig.alphaTestFunction = (alphaTestConfig & 1) ? static_cast<PICA::CompareFunction>(alphaTestFunction) : PICA::CompareFunction::Always;
|
outConfig.alphaTestFunction =
|
||||||
|
(alphaTestConfig & 1) ? static_cast<PICA::CompareFunction>(alphaTestFunction) : PICA::CompareFunction::Always;
|
||||||
outConfig.depthMapEnable = regs[InternalRegs::DepthmapEnable] & 1;
|
outConfig.depthMapEnable = regs[InternalRegs::DepthmapEnable] & 1;
|
||||||
|
|
||||||
texConfig.texUnitConfig = regs[InternalRegs::TexUnitCfg];
|
texConfig.texUnitConfig = regs[InternalRegs::TexUnitCfg];
|
||||||
|
@ -210,9 +210,9 @@ namespace PICA {
|
||||||
|
|
||||||
// Set up TEV stages. Annoyingly we can't just memcpy as the TEV registers are arranged like
|
// Set up TEV stages. Annoyingly we can't just memcpy as the TEV registers are arranged like
|
||||||
// {Source, Operand, Combiner, Color, Scale} and we want to skip the color register since it's uploaded via UBO
|
// {Source, Operand, Combiner, Color, Scale} and we want to skip the color register since it's uploaded via UBO
|
||||||
#define setupTevStage(stage) \
|
#define setupTevStage(stage) \
|
||||||
std::memcpy(&texConfig.tevConfigs[stage * 4], ®s[InternalRegs::TexEnv##stage##Source], 3 * sizeof(u32)); \
|
std::memcpy(&texConfig.tevConfigs[stage * 4], ®s[InternalRegs::TexEnv##stage##Source], 3 * sizeof(u32)); \
|
||||||
texConfig.tevConfigs[stage * 4 + 3] = regs[InternalRegs::TexEnv##stage##Source + 5];
|
texConfig.tevConfigs[stage * 4 + 3] = regs[InternalRegs::TexEnv##stage##Source + 5];
|
||||||
|
|
||||||
setupTevStage(0);
|
setupTevStage(0);
|
||||||
setupTevStage(1);
|
setupTevStage(1);
|
||||||
|
@ -220,7 +220,7 @@ namespace PICA {
|
||||||
setupTevStage(3);
|
setupTevStage(3);
|
||||||
setupTevStage(4);
|
setupTevStage(4);
|
||||||
setupTevStage(5);
|
setupTevStage(5);
|
||||||
#undef setupTevStage
|
#undef setupTevStage
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -594,23 +594,24 @@ bool FragmentGenerator::isSamplerEnabled(u32 environmentID, u32 lutID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FragmentGenerator::compileLUTLookup(std::string& shader, const PICA::FragmentConfig& config, u32 lightIndex, u32 lutID) {
|
void FragmentGenerator::compileLUTLookup(std::string& shader, const PICA::FragmentConfig& config, u32 lightIndex, u32 lutID) {
|
||||||
|
const LightingLUTConfig& lut = config.lighting.luts[lutID];
|
||||||
uint lutIndex = 0;
|
uint lutIndex = 0;
|
||||||
bool spotAttenuationEnable = true;
|
bool lutEnabled = false;
|
||||||
|
|
||||||
if (lutID == spotlightLutIndex) {
|
if (lutID == spotlightLutIndex) {
|
||||||
// These are the spotlight attenuation LUTs
|
// These are the spotlight attenuation LUTs
|
||||||
lutIndex = 8u + lightIndex;
|
lutIndex = 8u + lightIndex;
|
||||||
spotAttenuationEnable = config.lighting.lights[lightIndex].spotAttenuationEnable;
|
lutEnabled = config.lighting.lights[lightIndex].spotAttenuationEnable;
|
||||||
} else if (lutID <= 6) {
|
} else if (lutID <= 6) {
|
||||||
lutIndex = lutID;
|
lutIndex = lutID;
|
||||||
|
lutEnabled = lut.enable;
|
||||||
} else {
|
} else {
|
||||||
Helpers::warn("Shadergen: Unimplemented LUT value");
|
Helpers::warn("Shadergen: Unimplemented LUT value");
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool samplerEnabled = isSamplerEnabled(config.lighting.config, lutID);
|
const bool samplerEnabled = isSamplerEnabled(config.lighting.config, lutID);
|
||||||
const LightingLUTConfig& lut = config.lighting.luts[lutID];
|
|
||||||
|
|
||||||
if (!samplerEnabled || !lut.enable || !spotAttenuationEnable) {
|
if (!samplerEnabled || !lutEnabled) {
|
||||||
shader += "lut_lookup_result = 1.0;\n";
|
shader += "lut_lookup_result = 1.0;\n";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue