Vif: Fix for Warship Gunner 2 geometry holes. Fixes Issue 665

This commit is contained in:
refractionpcsx2 2015-11-08 18:42:55 +00:00
parent 545e47aacc
commit dfd52282a7
3 changed files with 7 additions and 2 deletions

View File

@ -100,6 +100,7 @@ static __fi void vuExecMicro(int idx, u32 addr) {
GetVifX.queued_program = true; GetVifX.queued_program = true;
GetVifX.queued_pc = addr; GetVifX.queued_pc = addr;
GetVifX.unpackcalls = 0;
} }
void ExecuteVU(int idx) void ExecuteVU(int idx)

View File

@ -80,7 +80,7 @@ struct vifStruct {
tVIF_CTRL vifstalled; tVIF_CTRL vifstalled;
bool stallontag; bool stallontag;
bool waitforvu; bool waitforvu;
int unpackcalls;
// GS registers used for calculating the size of the last local->host transfer initiated on the GS // GS registers used for calculating the size of the last local->host transfer initiated on the GS
// Transfer size calculation should be restricted to GS emulation in the future // Transfer size calculation should be restricted to GS emulation in the future
tBITBLTBUF BITBLTBUF; tBITBLTBUF BITBLTBUF;

View File

@ -193,8 +193,12 @@ _vifT void vifUnpackSetup(const u32 *data) {
vifX.cmd = 0; vifX.cmd = 0;
return; // Skipping write and 0 write-cycles, so do nothing! return; // Skipping write and 0 write-cycles, so do nothing!
} }
GetVifX.unpackcalls++;
if (GetVifX.unpackcalls > 3)
{
vifExecQueue(idx);
}
//if (!idx) vif0FLUSH(); // Only VU0? //if (!idx) vif0FLUSH(); // Only VU0?
vifX.usn = (vifXRegs.code >> 14) & 0x01; vifX.usn = (vifXRegs.code >> 14) & 0x01;