mirror of https://github.com/PCSX2/pcsx2.git
gsdx: wrap gs page/block instead to skip them
Fix FMV of Thrillville when coupled with wrap_gs_mem = 1
This commit is contained in:
parent
db4b4fb166
commit
5dfb7d63dc
|
@ -645,12 +645,9 @@ vector<GSVector2i>* GSLocalMemory::GetPage2TileMap(const GIFRegTEX0& TEX0)
|
||||||
|
|
||||||
for(int x = 0, i = y << 7; x < tw; x += bs.x, i += bs.x)
|
for(int x = 0, i = y << 7; x < tw; x += bs.x, i += bs.x)
|
||||||
{
|
{
|
||||||
uint32 page = (base + off->block.col[x >> 3]) >> 5;
|
uint32 page = ((base + off->block.col[x >> 3]) >> 5) % MAX_PAGES;
|
||||||
|
|
||||||
if(page < MAX_PAGES)
|
tmp[page].insert(i >> 3); // ((y << 7) | x) >> 3
|
||||||
{
|
|
||||||
tmp[page].insert(i >> 3); // ((y << 7) | x) >> 3
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2114,19 +2111,16 @@ uint32* GSOffset::GetPages(const GSVector4i& rect, uint32* pages, GSVector4i* bb
|
||||||
|
|
||||||
for(int x = r.left; x < r.right; x += bs.x)
|
for(int x = r.left; x < r.right; x += bs.x)
|
||||||
{
|
{
|
||||||
uint32 n = (base + block.col[x]) >> 5;
|
uint32 n = ((base + block.col[x]) >> 5) % MAX_PAGES;
|
||||||
|
|
||||||
if(n < MAX_PAGES)
|
uint32& row = tmp[n >> 5];
|
||||||
|
uint32 col = 1 << (n & 31);
|
||||||
|
|
||||||
|
if((row & col) == 0)
|
||||||
{
|
{
|
||||||
uint32& row = tmp[n >> 5];
|
row |= col;
|
||||||
uint32 col = 1 << (n & 31);
|
|
||||||
|
|
||||||
if((row & col) == 0)
|
*p++ = n;
|
||||||
{
|
|
||||||
row |= col;
|
|
||||||
|
|
||||||
*p++ = n;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2167,12 +2161,9 @@ GSVector4i* GSOffset::GetPagesAsBits(const GSVector4i& rect, GSVector4i* pages,
|
||||||
|
|
||||||
for(int x = r.left; x < r.right; x += bs.x)
|
for(int x = r.left; x < r.right; x += bs.x)
|
||||||
{
|
{
|
||||||
uint32 n = (base + block.col[x]) >> 5;
|
uint32 n = ((base + block.col[x]) >> 5) % MAX_PAGES;
|
||||||
|
|
||||||
if(n < MAX_PAGES)
|
((uint32*)pages)[n >> 5] |= 1 << (n & 31);
|
||||||
{
|
|
||||||
((uint32*)pages)[n >> 5] |= 1 << (n & 31);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -278,21 +278,18 @@ bool GSTextureCacheSW::Texture::Update(const GSVector4i& rect)
|
||||||
|
|
||||||
for(int x = r.left, i = (y << 7) + x; x < r.right; x += bs.x, i += bs.x)
|
for(int x = r.left, i = (y << 7) + x; x < r.right; x += bs.x, i += bs.x)
|
||||||
{
|
{
|
||||||
uint32 block = base + off->block.col[x];
|
uint32 block = (base + off->block.col[x]) % MAX_BLOCKS;
|
||||||
|
|
||||||
if(block < MAX_BLOCKS)
|
uint32 row = i >> 5;
|
||||||
|
uint32 col = 1 << (i & 31);
|
||||||
|
|
||||||
|
if((m_valid[row] & col) == 0)
|
||||||
{
|
{
|
||||||
uint32 row = i >> 5;
|
m_valid[row] |= col;
|
||||||
uint32 col = 1 << (i & 31);
|
|
||||||
|
|
||||||
if((m_valid[row] & col) == 0)
|
(mem.*rtxbP)(block, &dst[x << shift], pitch, m_TEXA);
|
||||||
{
|
|
||||||
m_valid[row] |= col;
|
|
||||||
|
|
||||||
(mem.*rtxbP)(block, &dst[x << shift], pitch, m_TEXA);
|
blocks++;
|
||||||
|
|
||||||
blocks++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -305,21 +302,18 @@ bool GSTextureCacheSW::Texture::Update(const GSVector4i& rect)
|
||||||
|
|
||||||
for(int x = r.left; x < r.right; x += bs.x)
|
for(int x = r.left; x < r.right; x += bs.x)
|
||||||
{
|
{
|
||||||
uint32 block = base + off->block.col[x];
|
uint32 block = (base + off->block.col[x]) % MAX_BLOCKS;
|
||||||
|
|
||||||
if(block < MAX_BLOCKS)
|
uint32 row = block >> 5;
|
||||||
|
uint32 col = 1 << (block & 31);
|
||||||
|
|
||||||
|
if((m_valid[row] & col) == 0)
|
||||||
{
|
{
|
||||||
uint32 row = block >> 5;
|
m_valid[row] |= col;
|
||||||
uint32 col = 1 << (block & 31);
|
|
||||||
|
|
||||||
if((m_valid[row] & col) == 0)
|
(mem.*rtxbP)(block, &dst[x << shift], pitch, m_TEXA);
|
||||||
{
|
|
||||||
m_valid[row] |= col;
|
|
||||||
|
|
||||||
(mem.*rtxbP)(block, &dst[x << shift], pitch, m_TEXA);
|
blocks++;
|
||||||
|
|
||||||
blocks++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -374,4 +368,4 @@ bool GSTextureCacheSW::Texture::Save(const string& fn, bool dds) const
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue