diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index dc53f28cd..2030f23f0 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -1627,8 +1627,13 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { break; } case GE_CMD_VADDR: + gstate.cmdmem[data >> 24] = data; gstate_c.vertexAddr = gstate_c.getRelativeAddress(data & 0x00FFFFFF); break; + case GE_CMD_IADDR: + gstate.cmdmem[data >> 24] = data; + gstate_c.indexAddr = gstate_c.getRelativeAddress(data & 0x00FFFFFF); + break; case GE_CMD_OFFSETADDR: gstate.cmdmem[GE_CMD_OFFSETADDR] = data; gstate_c.offsetAddr = data << 8; @@ -1646,8 +1651,10 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { // flip face by indices for triangles cullMode = data & 1; break; + case GE_CMD_TEXFLUSH: case GE_CMD_NOP: case GE_CMD_NOP_FF: + gstate.cmdmem[data >> 24] = data; break; case GE_CMD_BONEMATRIXNUMBER: gstate.cmdmem[GE_CMD_BONEMATRIXNUMBER] = data; @@ -1690,6 +1697,12 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { break; } + case GE_CMD_TEXBUFWIDTH0: + case GE_CMD_TEXADDR0: + if (data != gstate.cmdmem[data >> 24]) + goto bail; + break; + default: // All other commands might need a flush or something, stop this inner loop. goto bail;