VIF: Always update MTVU thread with Row/Col Changes

Fixes graphical issues in Fatal Frame 2 when swapping to MTVU
This commit is contained in:
refractionpcsx2 2020-12-25 00:09:45 +00:00
parent 9534b2af1d
commit 839b243bf1
2 changed files with 5 additions and 3 deletions

View File

@ -415,7 +415,7 @@ void VU_Thread::WaitVU()
if (IsDone()) if (IsDone())
break; break;
//DevCon.WriteLn("WaitVU()"); //DevCon.WriteLn("WaitVU()");
pxAssert(THREAD_VU1); //pxAssert(THREAD_VU1);
KickStart(); KickStart();
std::this_thread::yield(); // Give a chance to the MTVU thread to actually start std::this_thread::yield(); // Give a chance to the MTVU thread to actually start
ScopedLock lock(mtxBusy); ScopedLock lock(mtxBusy);
@ -463,6 +463,7 @@ void VU_Thread::WriteMicroMem(u32 vu_micro_addr, void* data, u32 size)
Write(size); Write(size);
Write(data, size); Write(data, size);
CommitWritePos(); CommitWritePos();
KickStart();
} }
void VU_Thread::WriteDataMem(u32 vu_data_addr, void* data, u32 size) void VU_Thread::WriteDataMem(u32 vu_data_addr, void* data, u32 size)
@ -474,6 +475,7 @@ void VU_Thread::WriteDataMem(u32 vu_data_addr, void* data, u32 size)
Write(size); Write(size);
Write(data, size); Write(data, size);
CommitWritePos(); CommitWritePos();
KickStart();
} }
void VU_Thread::WriteCol(vifStruct& _vif) void VU_Thread::WriteCol(vifStruct& _vif)

View File

@ -537,7 +537,7 @@ vifOp(vifCode_STCol) {
} }
pass2 { pass2 {
u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskCol._u32[vifX.tag.addr]); u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskCol._u32[vifX.tag.addr]);
if (idx && THREAD_VU1) { vu1Thread.WriteCol(vifX); } if (idx) { vu1Thread.WriteCol(vifX); }
return ret; return ret;
} }
pass3 { VifCodeLog("STCol"); } pass3 { VifCodeLog("STCol"); }
@ -554,7 +554,7 @@ vifOp(vifCode_STRow) {
} }
pass2 { pass2 {
u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskRow._u32[vifX.tag.addr]); u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskRow._u32[vifX.tag.addr]);
if (idx && THREAD_VU1) { vu1Thread.WriteRow(vifX); } if (idx) { vu1Thread.WriteRow(vifX); }
return ret; return ret;
} }
pass3 { VifCodeLog("STRow"); } pass3 { VifCodeLog("STRow"); }