Revert original fix for Realta Nua as Pseudonym found the proper fix. This should get rid of the regression on Agressive Inline and one of the Matt Hoffman games having textureless graphics.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5277 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2012-06-07 21:41:00 +00:00
parent faa463b95c
commit cb7f27cd76
2 changed files with 24 additions and 33 deletions

View File

@ -57,7 +57,9 @@ __fi void gifInterrupt()
if(vif1Regs.stat.VGW) if(vif1Regs.stat.VGW)
{ {
CPU_INT(DMAC_VIF1, 1); //Check if VIF is in a cycle or is currently "idle" waiting for GIF to come back.
if(!cpuRegs.interrupt & (1<<DMAC_VIF1))
CPU_INT(DMAC_VIF1, 1);
CPU_INT(DMAC_GIF, 16); CPU_INT(DMAC_GIF, 16);
return; return;

View File

@ -71,7 +71,7 @@ void vif1TransferToMemory()
pMem += size; pMem += size;
if(pMem < pMemEnd) { if(pMem < pMemEnd) {
DevCon.Warning("GS Transfer < VIF QWC, Clearing end of space"); //DevCon.Warning("GS Transfer < VIF QWC, Clearing end of space");
__m128 zeroreg = _mm_setzero_ps(); __m128 zeroreg = _mm_setzero_ps();
do { do {
@ -313,41 +313,30 @@ __fi void vif1Interrupt()
vif1Regs.stat.VPS = VPS_IDLE; vif1Regs.stat.VPS = VPS_IDLE;
} }
if (!vif1.done)
{
if (!(dmacRegs.ctrl.DMAE))
{
Console.WriteLn("vif1 dma masked");
return;
}
if ((vif1.inprogress & 0x1) == 0) vif1SetupTransfer();
if (vif1ch.chcr.DIR) vif1Regs.stat.FQC = min(vif1ch.qwc, (u16)16);
if(vif1.waitforvu == true)
{
//DevCon.Warning("Waiting on VU1");
return;
}
}
if (vif1.inprogress & 0x1) if (vif1.inprogress & 0x1)
{ {
_VIF1chain(); _VIF1chain();
// VIF_NORMAL_FROM_MEM_MODE is a very slow operation. // VIF_NORMAL_FROM_MEM_MODE is a very slow operation.
// Timesplitters 2 depends on this being a bit higher than 128. // Timesplitters 2 depends on this beeing a bit higher than 128.
if (vif1ch.chcr.DIR) vif1Regs.stat.FQC = min(vif1ch.qwc, (u16)16); if (vif1ch.chcr.DIR) vif1Regs.stat.FQC = min(vif1ch.qwc, (u16)16);
} CPU_INT(DMAC_VIF1, g_vif1Cycles);
return;
}
if(g_vif1Cycles > 0 || vif1ch.qwc) if (!vif1.done)
{ {
if(!(vif1Regs.stat.VGW && gifUnit.gifPath[GIF_PATH_3].state != GIF_PATH_IDLE)) //If we're waiting on GIF, stop looping, (can be over 1000 loops!)
CPU_INT(DMAC_VIF1, max((int)g_vif1Cycles, 8));
return; if (!(dmacRegs.ctrl.DMAE))
{
Console.WriteLn("vif1 dma masked");
return;
}
if ((vif1.inprogress & 0x1) == 0) vif1SetupTransfer();
if (vif1ch.chcr.DIR) vif1Regs.stat.FQC = min(vif1ch.qwc, (u16)16);
CPU_INT(DMAC_VIF1, g_vif1Cycles);
return;
} }
else if(vif1Regs.stat.VPS == VPS_TRANSFERRING) DevCon.Warning("Cycles %x, cmd %x, qwc %x, waitonvu %x", g_vif1Cycles, vif1.cmd, vif1ch.qwc, vif1.waitforvu);
if (vif1.vifstalled && vif1.irq) if (vif1.vifstalled && vif1.irq)
{ {