From b818adbf6d23f3458848a284ae5684fa5f779c39 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Sun, 15 Mar 2015 01:18:00 -0700 Subject: [PATCH] SET_CONSTANT for the other types. I think. --- src/xenia/gpu/gl4/command_processor.cc | 31 +++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/xenia/gpu/gl4/command_processor.cc b/src/xenia/gpu/gl4/command_processor.cc index 7d98677a0..1e850ffe7 100644 --- a/src/xenia/gpu/gl4/command_processor.cc +++ b/src/xenia/gpu/gl4/command_processor.cc @@ -1295,7 +1295,35 @@ bool CommandProcessor::ExecutePacketType3_SET_CONSTANT(RingbufferReader* reader, uint32_t index = offset_type & 0x7FF; uint32_t type = (offset_type >> 16) & 0xFF; switch (type) { - case 0x4: // REGISTER + case 0: // ALU + index += 0x4000; + for (uint32_t n = 0; n < count - 1; n++, index++) { + uint32_t data = reader->Read(); + WriteRegister(index, data); + } + break; + case 1: // FETCH + index += 0x4800; + for (uint32_t n = 0; n < count - 1; n++, index++) { + uint32_t data = reader->Read(); + WriteRegister(index, data); + } + break; + case 2: // BOOL + index += 0x4900; + for (uint32_t n = 0; n < count - 1; n++, index++) { + uint32_t data = reader->Read(); + WriteRegister(index, data); + } + break; + case 3: // LOOP + index += 0x4908; + for (uint32_t n = 0; n < count - 1; n++, index++) { + uint32_t data = reader->Read(); + WriteRegister(index, data); + } + break; + case 4: // REGISTER index += 0x2000; // registers for (uint32_t n = 0; n < count - 1; n++, index++) { uint32_t data = reader->Read(); @@ -1304,6 +1332,7 @@ bool CommandProcessor::ExecutePacketType3_SET_CONSTANT(RingbufferReader* reader, break; default: assert_always(); + reader->Skip(count - 1); break; } return true;