mirror of https://github.com/PCSX2/pcsx2.git
gsdx sw: rcp introduce bad rounding on the grandient
Division is slower but more accurate. Fix rendering issue on Xenosaga (batte slot)/Jak3 (skin color) Coauthor:pseudonym Fix issue #1769
This commit is contained in:
parent
ae8aa358e4
commit
438fbf31cf
|
@ -451,8 +451,6 @@ void GSRasterizer::DrawTriangle(const GSVertexSW* vertex, const uint32* index)
|
||||||
|
|
||||||
m2 &= 1;
|
m2 &= 1;
|
||||||
|
|
||||||
cross = cross.rcpnr();
|
|
||||||
|
|
||||||
GSVector4 dxy01 = dv[0].p.xyxy(dv[1].p);
|
GSVector4 dxy01 = dv[0].p.xyxy(dv[1].p);
|
||||||
|
|
||||||
GSVector4 dx = dxy01.xzxy(dv[2].p);
|
GSVector4 dx = dxy01.xzxy(dv[2].p);
|
||||||
|
@ -464,7 +462,8 @@ void GSRasterizer::DrawTriangle(const GSVertexSW* vertex, const uint32* index)
|
||||||
ddx[1] = ddx[0].yxzw();
|
ddx[1] = ddx[0].yxzw();
|
||||||
ddx[2] = ddx[0].xzyw();
|
ddx[2] = ddx[0].xzyw();
|
||||||
|
|
||||||
GSVector8 _dxy01c(dxy01 * cross);
|
// Precision is important here. Don't use reciprocal, it will break Jak3/Xenosaga1
|
||||||
|
GSVector8 _dxy01c(dxy01 / cross);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
dscan = dv[1] * dxy01c.yyyy() - dv[0] * dxy01c.wwww();
|
dscan = dv[1] * dxy01c.yyyy() - dv[0] * dxy01c.wwww();
|
||||||
|
@ -639,8 +638,6 @@ void GSRasterizer::DrawTriangle(const GSVertexSW* vertex, const uint32* index)
|
||||||
|
|
||||||
m2 &= 1;
|
m2 &= 1;
|
||||||
|
|
||||||
cross = cross.rcpnr();
|
|
||||||
|
|
||||||
GSVector4 dxy01 = dv[0].p.xyxy(dv[1].p);
|
GSVector4 dxy01 = dv[0].p.xyxy(dv[1].p);
|
||||||
|
|
||||||
GSVector4 dx = dxy01.xzxy(dv[2].p);
|
GSVector4 dx = dxy01.xzxy(dv[2].p);
|
||||||
|
@ -652,7 +649,8 @@ void GSRasterizer::DrawTriangle(const GSVertexSW* vertex, const uint32* index)
|
||||||
ddx[1] = ddx[0].yxzw();
|
ddx[1] = ddx[0].yxzw();
|
||||||
ddx[2] = ddx[0].xzyw();
|
ddx[2] = ddx[0].xzyw();
|
||||||
|
|
||||||
GSVector4 dxy01c = dxy01 * cross;
|
// Precision is important here. Don't use reciprocal, it will break Jak3/Xenosaga1
|
||||||
|
GSVector4 dxy01c = dxy01 / cross;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
dscan = dv[1] * dxy01c.yyyy() - dv[0] * dxy01c.wwww();
|
dscan = dv[1] * dxy01c.yyyy() - dv[0] * dxy01c.wwww();
|
||||||
|
|
Loading…
Reference in New Issue