This commit is contained in:
gabest
2008-08-03 22:25:00 +00:00
parent f831741bd6
commit fe2e833daf
3 changed files with 43 additions and 3 deletions

View File

@@ -233,6 +233,11 @@ int GSRasterizer::Draw(Vertex* vertices, int count)
m_slenv.f.g = GSVector4((float)(int)env.FOGCOL.FCG);
m_slenv.f.b = GSVector4((float)(int)env.FOGCOL.FCB);
if(m_sel.fpsm == 1)
{
m_slenv.fm |= GSVector4i::xff000000();
}
if(PRIM->TME)
{
DWORD hash = context->TEX0.ai32[0]; // TBP0, TBW, PSM
@@ -887,7 +892,7 @@ void GSRasterizer::DrawScanline(int top, int left, int right, const Vertex& v)
GSVector4i zm = m_slenv.zm;
GSVector4i test = GSVector4i::zero();
GSVector4i zs = (GSVector4i(z * 0.5f) << 1) | (GSVector4i(z) & GSVector4i::one(test));
GSVector4i zs = (GSVector4i(z * 0.5f) << 1) | (GSVector4i(z) & GSVector4i::one(fa));
if(ztst > 1)
{

View File

@@ -861,7 +861,7 @@ void GSRasterizer::DrawScanlineEx(int top, int left, int right, const Vertex& v)
GSVector4i zm = m_slenv.zm;
GSVector4i test = GSVector4i::zero();
GSVector4i zs = (GSVector4i(z * 0.5f) << 1) | (GSVector4i(z) & GSVector4i::one(test));
GSVector4i zs = (GSVector4i(z * 0.5f) << 1) | (GSVector4i(z) & GSVector4i::one(fa));
if(ztst > 1)
{
@@ -1124,7 +1124,7 @@ void GSRasterizer::DrawScanlineEx(int top, int left, int right, const Vertex& v)
s = s.blend(d, fm);
}
m_state->m_mem.WriteFrameAndZBufX(fpsm, fa, fm, s, ztst > 0 && !(atst == 0 && afail != 2) ? zpsm : 3, za, zm, zs, pixels);
m_state->m_mem.WriteFrameAndZBufX(fpsm == 1 && rfb ? 0 : fpsm, fa, fm, s, ztst > 0 && !(atst == 0 && afail != 2) ? zpsm : 3, za, zm, zs, pixels);
}
while(0);

View File

@@ -1066,6 +1066,41 @@ public:
return zero() == zero();
}
static GSVector4i one()
{
return invzero().srl32(31);
}
static GSVector4i x0001()
{
return invzero().srl16(15);
}
static GSVector4i x000000ff()
{
return invzero().srl32(24);
}
static GSVector4i x80000000()
{
return invzero().sll32(31);
}
static GSVector4i xff000000()
{
return invzero().sll32(24);
}
static GSVector4i x00ffffff()
{
return invzero().srl32(8);
}
static GSVector4i x00003fff()
{
return invzero().srl32(18);
}
static GSVector4i invzero(const GSVector4i& v)
{
// - vc can't generate a simple pxor xmm0, xmm0 / pcmpeqd xmm0, xmm0