GS: Only allocate valid page array when needed

This commit is contained in:
Connor McLaughlin 2022-01-23 16:07:40 +10:00 committed by lightningterror
parent b3a2d3c1e4
commit b389c6e103
2 changed files with 6 additions and 5 deletions

View File

@ -760,9 +760,9 @@ void GSTextureCache::InvalidateVideoMem(const GSOffset& off, const GSVector4i& r
}
else
{
u32* RESTRICT valid = s->m_valid;
u32* RESTRICT valid = s->m_valid.get();
if (!s->CanPreload())
if (valid && !s->CanPreload())
{
// Invalidate data of input texture
if (s->m_repeating)
@ -1729,8 +1729,6 @@ GSTextureCache::Source::Source(GSRenderer* r, const GIFRegTEX0& TEX0, const GIFR
memset(m_layer_TEX0, 0, sizeof(m_layer_TEX0));
memset(m_layer_hash, 0, sizeof(m_layer_hash));
memset(m_valid, 0, sizeof(m_valid));
m_write.rect = (GSVector4i*)_aligned_malloc(3 * sizeof(GSVector4i), 32);
m_write.count = 0;
@ -1776,6 +1774,9 @@ void GSTextureCache::Source::Update(const GSVector4i& rect, int level)
u32 blocks = 0;
if (!m_valid)
m_valid = std::make_unique<u32[]>(MAX_PAGES);
if (m_repeating)
{
for (int y = r.top; y < r.bottom; y += bs.y, bn.nextBlockY())

View File

@ -153,8 +153,8 @@ public:
public:
std::shared_ptr<Palette> m_palette_obj;
std::unique_ptr<u32[]> m_valid;// each u32 bits map to the 32 blocks of that page
GSTexture* m_palette;
u32 m_valid[MAX_PAGES]; // each u32 bits map to the 32 blocks of that page
GSVector4i m_valid_rect;
u8 m_valid_hashes = 0;
u8 m_complete_layers = 0;