- Disabling the "pitch conversion" again. Don't ask. :p

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2611 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
ramapcsx2 2010-02-20 02:50:58 +00:00
parent 2b4bb88526
commit c509869535
1 changed files with 30 additions and 29 deletions

View File

@ -579,48 +579,49 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con
if(dst->m_TEX0.TBW != TEX0.TBW) // && dst->m_TEX0.PSM == TEX0.PSM if(dst->m_TEX0.TBW != TEX0.TBW) // && dst->m_TEX0.PSM == TEX0.PSM
{ {
//Better not do the code below, "fixes" like every game that ever gets here.. // This is so broken :p
//Edit: Ratchet and Clank needs this to show most of it's graphics at all. ////Better not do the code below, "fixes" like every game that ever gets here..
//Someone else fix this please, I can't :p ////Edit: Ratchet and Clank needs this to show most of it's graphics at all.
//delete src; return NULL; ////Someone else fix this please, I can't :p
////delete src; return NULL;
// sfex3 uses this trick (bw: 10 -> 5, wraps the right side below the left) //// sfex3 uses this trick (bw: 10 -> 5, wraps the right side below the left)
ASSERT(dst->m_TEX0.TBW > TEX0.TBW); // otherwise scale.x need to be reduced to make the larger texture fit (TODO) //ASSERT(dst->m_TEX0.TBW > TEX0.TBW); // otherwise scale.x need to be reduced to make the larger texture fit (TODO)
src->m_texture = m_renderer->m_dev->CreateRenderTarget(dstsize.x, dstsize.y, false); //src->m_texture = m_renderer->m_dev->CreateRenderTarget(dstsize.x, dstsize.y, false);
GSVector4 size = GSVector4(dstsize).xyxy(); //GSVector4 size = GSVector4(dstsize).xyxy();
GSVector4 scale = GSVector4(dst->m_texture->GetScale()).xyxy(); //GSVector4 scale = GSVector4(dst->m_texture->GetScale()).xyxy();
int blockWidth = 64; //int blockWidth = 64;
int blockHeight = TEX0.PSM == PSM_PSMCT32 || TEX0.PSM == PSM_PSMCT24 ? 32 : 64; //int blockHeight = TEX0.PSM == PSM_PSMCT32 || TEX0.PSM == PSM_PSMCT24 ? 32 : 64;
GSVector4i br(0, 0, blockWidth, blockHeight); //GSVector4i br(0, 0, blockWidth, blockHeight);
int sw = (int)dst->m_TEX0.TBW << 6; //int sw = (int)dst->m_TEX0.TBW << 6;
int dw = (int)TEX0.TBW << 6; //int dw = (int)TEX0.TBW << 6;
int dh = 1 << TEX0.TH; //int dh = 1 << TEX0.TH;
if(sw != 0) //if(sw != 0)
for(int dy = 0; dy < dh; dy += blockHeight) //for(int dy = 0; dy < dh; dy += blockHeight)
{ //{
for(int dx = 0; dx < dw; dx += blockWidth) // for(int dx = 0; dx < dw; dx += blockWidth)
{ // {
int o = dy * dw / blockHeight + dx; // int o = dy * dw / blockHeight + dx;
int sx = o % sw; // int sx = o % sw;
int sy = o / sw; // int sy = o / sw;
GSVector4 sr = GSVector4(GSVector4i(sx, sy).xyxy() + br) * scale / size; // GSVector4 sr = GSVector4(GSVector4i(sx, sy).xyxy() + br) * scale / size;
GSVector4 dr = GSVector4(GSVector4i(dx, dy).xyxy() + br) * scale; // GSVector4 dr = GSVector4(GSVector4i(dx, dy).xyxy() + br) * scale;
m_renderer->m_dev->StretchRect(dst->m_texture, sr, src->m_texture, dr); // m_renderer->m_dev->StretchRect(dst->m_texture, sr, src->m_texture, dr);
// TODO: this is quite a lot of StretchRect, do it with one Draw // // TODO: this is quite a lot of StretchRect, do it with one Draw
} // }
} //}
} }
else if(tw < tp) else if(tw < tp)
{ {