GPU: Maintain a bit more state in inner-prim loop.

Trying to make dumps properly trigger this optimization, but they still
sometimes get flattened and don't.
This commit is contained in:
Unknown W. Brackets 2018-11-29 19:28:10 -08:00
parent 1517d66d4e
commit d3db565344

View File

@ -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;