diff --git a/gsdx/GSClut.cpp b/gsdx/GSClut.cpp index ad1ccda..06b6f5f 100644 --- a/gsdx/GSClut.cpp +++ b/gsdx/GSClut.cpp @@ -104,8 +104,8 @@ bool GSClut::WriteTest(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT) case 1: break; case 2: m_CBP[0] = TEX0.CBP; break; case 3: m_CBP[1] = TEX0.CBP; break; - case 4: if(m_CBP[0] == TEX0.CBP) return false; break; - case 5: if(m_CBP[1] == TEX0.CBP) return false; break; + case 4: if(m_CBP[0] == TEX0.CBP) return false; m_CBP[0] = TEX0.CBP; break; + case 5: if(m_CBP[1] == TEX0.CBP) return false; m_CBP[1] = TEX0.CBP; break; case 6: ASSERT(0); return false; case 7: ASSERT(0); return false; default: __assume(0); diff --git a/gsdx/GSDrawScanline.cpp b/gsdx/GSDrawScanline.cpp index 80b9aa6..725eee4 100644 --- a/gsdx/GSDrawScanline.cpp +++ b/gsdx/GSDrawScanline.cpp @@ -2568,6 +2568,22 @@ GSDrawScanline::GSDrawScanlineMap::GSDrawScanlineMap() // xenosaga + InitDS_Sel(0x1fe38054); // 60.59% + InitDS_Sel(0x1fe38074); // 25.26% + InitDS_Sel(0x4c468064); // 23.70% + InitDS_Sel(0x4c818134); // 7.20% + InitDS_Sel(0x4c868864); // 11.57% + InitDS_Sel(0x4c938064); // 53.69% + InitDS_Sel(0x4d004864); // 8.70% + InitDS_Sel(0x4d084864); // 13.85% + InitDS_Sel(0x5fe04074); // 52.81% + InitDS_Sel(0x9fe19074); // 16.94% + InitDS_Sel(0x9fe39174); // 21.89% + InitDS_Sel(0xcc819074); // 20.62% + InitDS_Sel(0xcc839074); // 26.80% + InitDS_Sel(0xd5204064); // 14.16% + InitDS_Sel(0xdfe04074); // 14.86% + // mgs3s1 InitDS_Sel(0x484e8864); // 14.51% diff --git a/gsdx/GSRendererSW.h b/gsdx/GSRendererSW.h index 5b243fc..0612a7f 100644 --- a/gsdx/GSRendererSW.h +++ b/gsdx/GSRendererSW.h @@ -247,12 +247,10 @@ protected: return true; } - void GetScanlineParam(GSScanlineParam& p) + void GetScanlineParam(GSScanlineParam& p, GS_PRIM_CLASS primclass) { const GSDrawingEnvironment& env = m_env; const GSDrawingContext* context = m_context; - const GS_PRIM prim = (GS_PRIM)PRIM->PRIM; - const GS_PRIM_CLASS primclass = GSUtil::GetPrimClass(prim); p.vm = m_mem.m_vm32; @@ -350,7 +348,7 @@ protected: m_vtrace.max.t *= w; } } - else if(prim == GS_SPRITE) + else if(primclass == GS_SPRITE_CLASS) { p.sel.fst = 1; @@ -486,9 +484,11 @@ protected: { m_vtrace.Update(); + GS_PRIM_CLASS primclass = GSUtil::GetPrimClass(PRIM->PRIM); + GSScanlineParam p; - GetScanlineParam(p); + GetScanlineParam(p, primclass); if((p.fm & p.zm) != 0xffffffff) { @@ -507,7 +507,7 @@ protected: data.scissor = GSVector4i(m_context->scissor.in); data.scissor.z = min(data.scissor.z, (int)m_context->FRAME.FBW * 64); // TODO: find a game that overflows and check which one is the right behaviour - data.primclass = GSUtil::GetPrimClass(PRIM->PRIM); + data.primclass = primclass; data.vertices = m_vertices; data.count = m_count; data.param = &p;