mirror of https://github.com/PCSX2/pcsx2.git
Fixed a bug in the newVif unpack dynarec with filling writes...
(was some optimization i had, but only was working correctly for skipping writes...) Fixes half-life... git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2732 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
a24e08fe83
commit
c53ecee572
|
@ -57,8 +57,8 @@ _f void VifUnpackSSE_Dynarec::SetMasks(int cS) const {
|
||||||
u32 m3 = (m1>>1) & ~m0;
|
u32 m3 = (m1>>1) & ~m0;
|
||||||
u32* row = (v.idx) ? g_vifmask.Row1 : g_vifmask.Row0;
|
u32* row = (v.idx) ? g_vifmask.Row1 : g_vifmask.Row0;
|
||||||
u32* col = (v.idx) ? g_vifmask.Col1 : g_vifmask.Col0;
|
u32* col = (v.idx) ? g_vifmask.Col1 : g_vifmask.Col0;
|
||||||
if((m2&&doMask) || doMode) { xMOVAPS(xmmRow, ptr32[row]); }
|
if (isFill||(m2&&doMask)||doMode) { xMOVAPS(xmmRow, ptr32[row]); }
|
||||||
if (m3&&doMask) {
|
if (isFill||(m3&&doMask)) {
|
||||||
xMOVAPS(xmmCol0, ptr32[col]);
|
xMOVAPS(xmmCol0, ptr32[col]);
|
||||||
if ((cS>=2) && (m3&0x0000ff00)) xPSHUF.D(xmmCol1, xmmCol0, _v1);
|
if ((cS>=2) && (m3&0x0000ff00)) xPSHUF.D(xmmCol1, xmmCol0, _v1);
|
||||||
if ((cS>=3) && (m3&0x00ff0000)) xPSHUF.D(xmmCol2, xmmCol0, _v2);
|
if ((cS>=3) && (m3&0x00ff0000)) xPSHUF.D(xmmCol2, xmmCol0, _v2);
|
||||||
|
@ -135,7 +135,8 @@ void VifUnpackSSE_Dynarec::CompileRoutine() {
|
||||||
vCL = v.vif->cl;
|
vCL = v.vif->cl;
|
||||||
doMode = upkNum == 0xf ? 0 : doMode;
|
doMode = upkNum == 0xf ? 0 : doMode;
|
||||||
|
|
||||||
SetMasks(cycleSize);
|
// Value passed determines # of col regs we need to load
|
||||||
|
SetMasks(isFill ? blockSize : cycleSize);
|
||||||
|
|
||||||
while (vNum) {
|
while (vNum) {
|
||||||
|
|
||||||
|
|
|
@ -127,10 +127,10 @@ int nVifUnpack(int idx, u8* data) {
|
||||||
data = v.buffer;
|
data = v.buffer;
|
||||||
size = v.bSize;
|
size = v.bSize;
|
||||||
}
|
}
|
||||||
if (size > 0) {
|
if (size > 0 || isFill) {
|
||||||
if (newVifDynaRec) dVifUnpack(idx, data, size, isFill);
|
if (newVifDynaRec) dVifUnpack(idx, data, size, isFill);
|
||||||
else _nVifUnpack(idx, data, size, isFill);
|
else _nVifUnpack(idx, data, size, isFill);
|
||||||
} else if (isFill) _nVifUnpack(idx, data, size, isFill);
|
}
|
||||||
vif->tag.size = 0;
|
vif->tag.size = 0;
|
||||||
vif->cmd = 0;
|
vif->cmd = 0;
|
||||||
v.bSize = 0;
|
v.bSize = 0;
|
||||||
|
|
Loading…
Reference in New Issue