aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/command_processor.cpp
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2017-05-24 21:37:42 -0700
committerGitHub <noreply@github.com>2017-05-24 21:37:42 -0700
commit85c524bc459e7059a692d058086d2f5614631358 (patch)
treee4c921df6bf28cdeb50f48d1b7aa4d7a0bc002ed /src/video_core/command_processor.cpp
parentff21dcfadf7f7ef11a2814c0159b2c66c9131cd8 (diff)
parent19583dfd61489f27398314ab5cc2f103a55ddb64 (diff)
Merge pull request #2697 from wwylele/proctex
Implemented Procedural Texture (Texture Unit 3)
Diffstat (limited to 'src/video_core/command_processor.cpp')
-rw-r--r--src/video_core/command_processor.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp
index 8d3f76bdee..4633a1df10 100644
--- a/src/video_core/command_processor.cpp
+++ b/src/video_core/command_processor.cpp
@@ -556,6 +556,37 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
break;
}
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[0], 0xb0):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[1], 0xb1):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[2], 0xb2):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[3], 0xb3):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[4], 0xb4):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[5], 0xb5):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[6], 0xb6):
+ case PICA_REG_INDEX_WORKAROUND(texturing.proctex_lut_data[7], 0xb7): {
+ auto& index = regs.texturing.proctex_lut_config.index;
+ auto& pt = g_state.proctex;
+
+ switch (regs.texturing.proctex_lut_config.ref_table.Value()) {
+ case TexturingRegs::ProcTexLutTable::Noise:
+ pt.noise_table[index % pt.noise_table.size()].raw = value;
+ break;
+ case TexturingRegs::ProcTexLutTable::ColorMap:
+ pt.color_map_table[index % pt.color_map_table.size()].raw = value;
+ break;
+ case TexturingRegs::ProcTexLutTable::AlphaMap:
+ pt.alpha_map_table[index % pt.alpha_map_table.size()].raw = value;
+ break;
+ case TexturingRegs::ProcTexLutTable::Color:
+ pt.color_table[index % pt.color_table.size()].raw = value;
+ break;
+ case TexturingRegs::ProcTexLutTable::ColorDiff:
+ pt.color_diff_table[index % pt.color_diff_table.size()].raw = value;
+ break;
+ }
+ index.Assign(index + 1);
+ break;
+ }
default:
break;
}