Avoid changing video state on useless BP writes
When a game writes the same value that was already configured to a BP register, Dolphin previously flushed the GPU pipeline and reconfigured the internal video state (calling SetScissor/SetLineWidth/SetDepthMode). Some of these useless writes still need to perform actions, for example writes to the EFB copy trigger or the texture preload registers (which need to reload the texture from memory).
This commit is contained in:
parent
7cccb4baa7
commit
c95baf614d
|
@ -130,14 +130,24 @@ void BPWritten(const BPCmd& bp)
|
|||
} // END ZTP SPEEDUP HACK
|
||||
else
|
||||
{
|
||||
if (((s32*)&bpmem)[bp.address] != bp.newvalue)
|
||||
if (((s32*)&bpmem)[bp.address] == bp.newvalue)
|
||||
{
|
||||
FlushPipeline();
|
||||
if (!(bp.address == BPMEM_TRIGGER_EFB_COPY
|
||||
|| bp.address == BPMEM_CLEARBBOX1
|
||||
|| bp.address == BPMEM_CLEARBBOX2
|
||||
|| bp.address == BPMEM_SETDRAWDONE
|
||||
|| bp.address == BPMEM_PE_TOKEN_ID
|
||||
|| bp.address == BPMEM_PE_TOKEN_INT_ID
|
||||
|| bp.address == BPMEM_LOADTLUT0
|
||||
|| bp.address == BPMEM_LOADTLUT1
|
||||
|| bp.address == BPMEM_TEXINVALIDATE
|
||||
|| bp.address == BPMEM_PRELOAD_MODE))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (bp.address == BPMEM_TRIGGER_EFB_COPY
|
||||
|| bp.address == BPMEM_CLEARBBOX1
|
||||
|| bp.address == BPMEM_CLEARBBOX2)
|
||||
FlushPipeline();
|
||||
|
||||
FlushPipeline();
|
||||
}
|
||||
|
||||
((u32*)&bpmem)[bp.address] = bp.newvalue;
|
||||
|
|
Loading…
Reference in New Issue