diff --git a/plugins/GSdx/GSLocalMemory.cpp b/plugins/GSdx/GSLocalMemory.cpp index 23ec84197a..a4e2789a7a 100644 --- a/plugins/GSdx/GSLocalMemory.cpp +++ b/plugins/GSdx/GSLocalMemory.cpp @@ -645,12 +645,9 @@ vector* GSLocalMemory::GetPage2TileMap(const GIFRegTEX0& TEX0) 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) { - 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]; - uint32 col = 1 << (n & 31); + row |= col; - if((row & col) == 0) - { - row |= col; - - *p++ = n; - } + *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) { - 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); } } diff --git a/plugins/GSdx/GSTextureCacheSW.cpp b/plugins/GSdx/GSTextureCacheSW.cpp index 54811b3c0c..87d58f5e64 100644 --- a/plugins/GSdx/GSTextureCacheSW.cpp +++ b/plugins/GSdx/GSTextureCacheSW.cpp @@ -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) { - 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; - uint32 col = 1 << (i & 31); + m_valid[row] |= col; - if((m_valid[row] & col) == 0) - { - m_valid[row] |= col; + (mem.*rtxbP)(block, &dst[x << shift], pitch, m_TEXA); - (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) { - 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; - uint32 col = 1 << (block & 31); + m_valid[row] |= col; - if((m_valid[row] & col) == 0) - { - m_valid[row] |= col; + (mem.*rtxbP)(block, &dst[x << shift], pitch, m_TEXA); - (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; -} \ No newline at end of file +}