GPU byte swapping.

A lot of other packets likely do this.
This commit is contained in:
Ben Vanik
2013-10-19 16:29:00 -07:00
parent f15b5dae9d
commit 68d5f33cfa
4 changed files with 29 additions and 8 deletions

View File

@@ -483,13 +483,10 @@ uint32_t RingBufferWorker::ExecutePacket(PacketArgs& args) {
// Write value.
data_value = value;
}
if (!(address & 0xC0000000)) {
XESETUINT32BE(p + TRANSLATE_ADDR(address), data_value);
} else {
// TODO(benvanik): read up on PM4_EVENT_WRITE_SHD.
// No clue. Maybe relative write based on a register base?
XELOGE("UNKNOWN FORM OF PM4_EVENT_WRITE_SHD");
}
uint32_t endianness = address >> 29;
address &= ~0xC0000000;
data_value = GpuSwap(data_value, endianness);
XESETUINT32BE(p + TRANSLATE_ADDR(address), data_value);
}
break;