Merge pull request #12157 from Dentomologist/texturecachebase_add_m_prefix
TextureCacheBase: Add m_ prefix to member variables
This commit is contained in:
commit
6d04618921
|
@ -81,23 +81,23 @@ TCacheEntry::~TCacheEntry()
|
||||||
|
|
||||||
void TextureCacheBase::CheckTempSize(size_t required_size)
|
void TextureCacheBase::CheckTempSize(size_t required_size)
|
||||||
{
|
{
|
||||||
if (required_size <= temp_size)
|
if (required_size <= m_temp_size)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
temp_size = required_size;
|
m_temp_size = required_size;
|
||||||
Common::FreeAlignedMemory(temp);
|
Common::FreeAlignedMemory(m_temp);
|
||||||
temp = static_cast<u8*>(Common::AllocateAlignedMemory(temp_size, 16));
|
m_temp = static_cast<u8*>(Common::AllocateAlignedMemory(m_temp_size, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureCacheBase::TextureCacheBase()
|
TextureCacheBase::TextureCacheBase()
|
||||||
{
|
{
|
||||||
SetBackupConfig(g_ActiveConfig);
|
SetBackupConfig(g_ActiveConfig);
|
||||||
|
|
||||||
temp_size = 2048 * 2048 * 4;
|
m_temp_size = 2048 * 2048 * 4;
|
||||||
temp = static_cast<u8*>(Common::AllocateAlignedMemory(temp_size, 16));
|
m_temp = static_cast<u8*>(Common::AllocateAlignedMemory(m_temp_size, 16));
|
||||||
|
|
||||||
TexDecoder_SetTexFmtOverlayOptions(backup_config.texfmt_overlay,
|
TexDecoder_SetTexFmtOverlayOptions(m_backup_config.texfmt_overlay,
|
||||||
backup_config.texfmt_overlay_center);
|
m_backup_config.texfmt_overlay_center);
|
||||||
|
|
||||||
HiresTexture::Init();
|
HiresTexture::Init();
|
||||||
|
|
||||||
|
@ -117,8 +117,8 @@ void TextureCacheBase::Shutdown()
|
||||||
|
|
||||||
TextureCacheBase::~TextureCacheBase()
|
TextureCacheBase::~TextureCacheBase()
|
||||||
{
|
{
|
||||||
Common::FreeAlignedMemory(temp);
|
Common::FreeAlignedMemory(m_temp);
|
||||||
temp = nullptr;
|
m_temp = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextureCacheBase::Initialize()
|
bool TextureCacheBase::Initialize()
|
||||||
|
@ -137,18 +137,18 @@ void TextureCacheBase::Invalidate()
|
||||||
FlushEFBCopies();
|
FlushEFBCopies();
|
||||||
TMEM::InvalidateAll();
|
TMEM::InvalidateAll();
|
||||||
|
|
||||||
for (auto& bind : bound_textures)
|
for (auto& bind : m_bound_textures)
|
||||||
bind.reset();
|
bind.reset();
|
||||||
textures_by_hash.clear();
|
m_textures_by_hash.clear();
|
||||||
textures_by_address.clear();
|
m_textures_by_address.clear();
|
||||||
|
|
||||||
texture_pool.clear();
|
m_texture_pool.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextureCacheBase::OnConfigChanged(const VideoConfig& config)
|
void TextureCacheBase::OnConfigChanged(const VideoConfig& config)
|
||||||
{
|
{
|
||||||
if (config.bHiresTextures != backup_config.hires_textures ||
|
if (config.bHiresTextures != m_backup_config.hires_textures ||
|
||||||
config.bCacheHiresTextures != backup_config.cache_hires_textures)
|
config.bCacheHiresTextures != m_backup_config.cache_hires_textures)
|
||||||
{
|
{
|
||||||
HiresTexture::Update();
|
HiresTexture::Update();
|
||||||
}
|
}
|
||||||
|
@ -157,15 +157,15 @@ void TextureCacheBase::OnConfigChanged(const VideoConfig& config)
|
||||||
config.graphics_mod_config ? config.graphics_mod_config->GetChangeCount() : 0;
|
config.graphics_mod_config ? config.graphics_mod_config->GetChangeCount() : 0;
|
||||||
|
|
||||||
// TODO: Invalidating texcache is really stupid in some of these cases
|
// TODO: Invalidating texcache is really stupid in some of these cases
|
||||||
if (config.iSafeTextureCache_ColorSamples != backup_config.color_samples ||
|
if (config.iSafeTextureCache_ColorSamples != m_backup_config.color_samples ||
|
||||||
config.bTexFmtOverlayEnable != backup_config.texfmt_overlay ||
|
config.bTexFmtOverlayEnable != m_backup_config.texfmt_overlay ||
|
||||||
config.bTexFmtOverlayCenter != backup_config.texfmt_overlay_center ||
|
config.bTexFmtOverlayCenter != m_backup_config.texfmt_overlay_center ||
|
||||||
config.bHiresTextures != backup_config.hires_textures ||
|
config.bHiresTextures != m_backup_config.hires_textures ||
|
||||||
config.bEnableGPUTextureDecoding != backup_config.gpu_texture_decoding ||
|
config.bEnableGPUTextureDecoding != m_backup_config.gpu_texture_decoding ||
|
||||||
config.bDisableCopyToVRAM != backup_config.disable_vram_copies ||
|
config.bDisableCopyToVRAM != m_backup_config.disable_vram_copies ||
|
||||||
config.bArbitraryMipmapDetection != backup_config.arbitrary_mipmap_detection ||
|
config.bArbitraryMipmapDetection != m_backup_config.arbitrary_mipmap_detection ||
|
||||||
config.bGraphicMods != backup_config.graphics_mods ||
|
config.bGraphicMods != m_backup_config.graphics_mods ||
|
||||||
change_count != backup_config.graphics_mod_change_count)
|
change_count != m_backup_config.graphics_mod_change_count)
|
||||||
{
|
{
|
||||||
Invalidate();
|
Invalidate();
|
||||||
TexDecoder_SetTexFmtOverlayOptions(config.bTexFmtOverlayEnable, config.bTexFmtOverlayCenter);
|
TexDecoder_SetTexFmtOverlayOptions(config.bTexFmtOverlayEnable, config.bTexFmtOverlayCenter);
|
||||||
|
@ -176,8 +176,8 @@ void TextureCacheBase::OnConfigChanged(const VideoConfig& config)
|
||||||
|
|
||||||
void TextureCacheBase::Cleanup(int _frameCount)
|
void TextureCacheBase::Cleanup(int _frameCount)
|
||||||
{
|
{
|
||||||
TexAddrCache::iterator iter = textures_by_address.begin();
|
TexAddrCache::iterator iter = m_textures_by_address.begin();
|
||||||
TexAddrCache::iterator tcend = textures_by_address.end();
|
TexAddrCache::iterator tcend = m_textures_by_address.end();
|
||||||
while (iter != tcend)
|
while (iter != tcend)
|
||||||
{
|
{
|
||||||
if (iter->second->frameCount == FRAMECOUNT_INVALID)
|
if (iter->second->frameCount == FRAMECOUNT_INVALID)
|
||||||
|
@ -214,8 +214,8 @@ void TextureCacheBase::Cleanup(int _frameCount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TexPool::iterator iter2 = texture_pool.begin();
|
TexPool::iterator iter2 = m_texture_pool.begin();
|
||||||
TexPool::iterator tcend2 = texture_pool.end();
|
TexPool::iterator tcend2 = m_texture_pool.end();
|
||||||
while (iter2 != tcend2)
|
while (iter2 != tcend2)
|
||||||
{
|
{
|
||||||
if (iter2->second.frameCount == FRAMECOUNT_INVALID)
|
if (iter2->second.frameCount == FRAMECOUNT_INVALID)
|
||||||
|
@ -224,7 +224,7 @@ void TextureCacheBase::Cleanup(int _frameCount)
|
||||||
}
|
}
|
||||||
if (_frameCount > TEXTURE_POOL_KILL_THRESHOLD + iter2->second.frameCount)
|
if (_frameCount > TEXTURE_POOL_KILL_THRESHOLD + iter2->second.frameCount)
|
||||||
{
|
{
|
||||||
iter2 = texture_pool.erase(iter2);
|
iter2 = m_texture_pool.erase(iter2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -246,18 +246,18 @@ bool TCacheEntry::OverlapsMemoryRange(u32 range_address, u32 range_size) const
|
||||||
|
|
||||||
void TextureCacheBase::SetBackupConfig(const VideoConfig& config)
|
void TextureCacheBase::SetBackupConfig(const VideoConfig& config)
|
||||||
{
|
{
|
||||||
backup_config.color_samples = config.iSafeTextureCache_ColorSamples;
|
m_backup_config.color_samples = config.iSafeTextureCache_ColorSamples;
|
||||||
backup_config.texfmt_overlay = config.bTexFmtOverlayEnable;
|
m_backup_config.texfmt_overlay = config.bTexFmtOverlayEnable;
|
||||||
backup_config.texfmt_overlay_center = config.bTexFmtOverlayCenter;
|
m_backup_config.texfmt_overlay_center = config.bTexFmtOverlayCenter;
|
||||||
backup_config.hires_textures = config.bHiresTextures;
|
m_backup_config.hires_textures = config.bHiresTextures;
|
||||||
backup_config.cache_hires_textures = config.bCacheHiresTextures;
|
m_backup_config.cache_hires_textures = config.bCacheHiresTextures;
|
||||||
backup_config.stereo_3d = config.stereo_mode != StereoMode::Off;
|
m_backup_config.stereo_3d = config.stereo_mode != StereoMode::Off;
|
||||||
backup_config.efb_mono_depth = config.bStereoEFBMonoDepth;
|
m_backup_config.efb_mono_depth = config.bStereoEFBMonoDepth;
|
||||||
backup_config.gpu_texture_decoding = config.bEnableGPUTextureDecoding;
|
m_backup_config.gpu_texture_decoding = config.bEnableGPUTextureDecoding;
|
||||||
backup_config.disable_vram_copies = config.bDisableCopyToVRAM;
|
m_backup_config.disable_vram_copies = config.bDisableCopyToVRAM;
|
||||||
backup_config.arbitrary_mipmap_detection = config.bArbitraryMipmapDetection;
|
m_backup_config.arbitrary_mipmap_detection = config.bArbitraryMipmapDetection;
|
||||||
backup_config.graphics_mods = config.bGraphicMods;
|
m_backup_config.graphics_mods = config.bGraphicMods;
|
||||||
backup_config.graphics_mod_change_count =
|
m_backup_config.graphics_mod_change_count =
|
||||||
config.graphics_mod_config ? config.graphics_mod_config->GetChangeCount() : 0;
|
config.graphics_mod_config ? config.graphics_mod_config->GetChangeCount() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,7 +348,7 @@ RcTcacheEntry TextureCacheBase::ApplyPaletteToEntry(RcTcacheEntry& entry, const
|
||||||
g_gfx->EndUtilityDrawing();
|
g_gfx->EndUtilityDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
textures_by_address.emplace(decoded_entry->addr, decoded_entry);
|
m_textures_by_address.emplace(decoded_entry->addr, decoded_entry);
|
||||||
|
|
||||||
return decoded_entry;
|
return decoded_entry;
|
||||||
}
|
}
|
||||||
|
@ -394,7 +394,7 @@ RcTcacheEntry TextureCacheBase::ReinterpretEntry(const RcTcacheEntry& existing_e
|
||||||
g_gfx->EndUtilityDrawing();
|
g_gfx->EndUtilityDrawing();
|
||||||
reinterpreted_entry->texture->FinishedRendering();
|
reinterpreted_entry->texture->FinishedRendering();
|
||||||
|
|
||||||
textures_by_address.emplace(reinterpreted_entry->addr, reinterpreted_entry);
|
m_textures_by_address.emplace(reinterpreted_entry->addr, reinterpreted_entry);
|
||||||
|
|
||||||
return reinterpreted_entry;
|
return reinterpreted_entry;
|
||||||
}
|
}
|
||||||
|
@ -431,7 +431,7 @@ void TextureCacheBase::ScaleTextureCacheEntryTo(RcTcacheEntry& entry, u32 new_wi
|
||||||
// At this point new_texture has the old texture in it,
|
// At this point new_texture has the old texture in it,
|
||||||
// we can potentially reuse this, so let's move it back to the pool
|
// we can potentially reuse this, so let's move it back to the pool
|
||||||
auto config = new_texture->texture->GetConfig();
|
auto config = new_texture->texture->GetConfig();
|
||||||
texture_pool.emplace(
|
m_texture_pool.emplace(
|
||||||
config, TexPoolEntry(std::move(new_texture->texture), std::move(new_texture->framebuffer)));
|
config, TexPoolEntry(std::move(new_texture->texture), std::move(new_texture->framebuffer)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,7 +562,7 @@ void TextureCacheBase::DoState(PointerWrap& p)
|
||||||
// Flush all pending XFB copies before either loading or saving.
|
// Flush all pending XFB copies before either loading or saving.
|
||||||
FlushEFBCopies();
|
FlushEFBCopies();
|
||||||
|
|
||||||
p.Do(last_entry_id);
|
p.Do(m_last_entry_id);
|
||||||
|
|
||||||
if (p.IsWriteMode() || p.IsMeasureMode())
|
if (p.IsWriteMode() || p.IsMeasureMode())
|
||||||
DoSaveState(p);
|
DoSaveState(p);
|
||||||
|
@ -601,14 +601,14 @@ void TextureCacheBase::DoSaveState(PointerWrap& p)
|
||||||
return iter != entry_map.end() ? std::make_optional(iter->second) : std::nullopt;
|
return iter != entry_map.end() ? std::make_optional(iter->second) : std::nullopt;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Transform the textures_by_address and textures_by_hash maps to a mapping
|
// Transform the m_textures_by_address and m_textures_by_hash maps to a mapping
|
||||||
// of address/hash to entry ID.
|
// of address/hash to entry ID.
|
||||||
std::vector<std::pair<u32, u32>> textures_by_address_list;
|
std::vector<std::pair<u32, u32>> textures_by_address_list;
|
||||||
std::vector<std::pair<u64, u32>> textures_by_hash_list;
|
std::vector<std::pair<u64, u32>> textures_by_hash_list;
|
||||||
std::vector<std::pair<u32, u32>> bound_textures_list;
|
std::vector<std::pair<u32, u32>> bound_textures_list;
|
||||||
if (Config::Get(Config::GFX_SAVE_TEXTURE_CACHE_TO_STATE))
|
if (Config::Get(Config::GFX_SAVE_TEXTURE_CACHE_TO_STATE))
|
||||||
{
|
{
|
||||||
for (const auto& it : textures_by_address)
|
for (const auto& it : m_textures_by_address)
|
||||||
{
|
{
|
||||||
if (ShouldSaveEntry(it.second))
|
if (ShouldSaveEntry(it.second))
|
||||||
{
|
{
|
||||||
|
@ -616,7 +616,7 @@ void TextureCacheBase::DoSaveState(PointerWrap& p)
|
||||||
textures_by_address_list.emplace_back(it.first, id);
|
textures_by_address_list.emplace_back(it.first, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const auto& it : textures_by_hash)
|
for (const auto& it : m_textures_by_hash)
|
||||||
{
|
{
|
||||||
if (ShouldSaveEntry(it.second))
|
if (ShouldSaveEntry(it.second))
|
||||||
{
|
{
|
||||||
|
@ -624,10 +624,10 @@ void TextureCacheBase::DoSaveState(PointerWrap& p)
|
||||||
textures_by_hash_list.emplace_back(it.first, id);
|
textures_by_hash_list.emplace_back(it.first, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < bound_textures.size(); i++)
|
for (u32 i = 0; i < m_bound_textures.size(); i++)
|
||||||
{
|
{
|
||||||
const auto& tentry = bound_textures[i];
|
const auto& tentry = m_bound_textures[i];
|
||||||
if (bound_textures[i] && ShouldSaveEntry(tentry))
|
if (m_bound_textures[i] && ShouldSaveEntry(tentry))
|
||||||
{
|
{
|
||||||
const u32 id = AddCacheEntryToMap(tentry);
|
const u32 id = AddCacheEntryToMap(tentry);
|
||||||
bound_textures_list.emplace_back(i, id);
|
bound_textures_list.emplace_back(i, id);
|
||||||
|
@ -715,7 +715,7 @@ void TextureCacheBase::DoLoadState(PointerWrap& p)
|
||||||
auto tex = DeserializeTexture(p);
|
auto tex = DeserializeTexture(p);
|
||||||
auto entry =
|
auto entry =
|
||||||
std::make_shared<TCacheEntry>(std::move(tex->texture), std::move(tex->framebuffer));
|
std::make_shared<TCacheEntry>(std::move(tex->texture), std::move(tex->framebuffer));
|
||||||
entry->textures_by_hash_iter = textures_by_hash.end();
|
entry->textures_by_hash_iter = m_textures_by_hash.end();
|
||||||
entry->DoState(p);
|
entry->DoState(p);
|
||||||
if (entry->texture && commit_state)
|
if (entry->texture && commit_state)
|
||||||
id_map.emplace(i, entry);
|
id_map.emplace(i, entry);
|
||||||
|
@ -746,7 +746,7 @@ void TextureCacheBase::DoLoadState(PointerWrap& p)
|
||||||
|
|
||||||
auto& entry = GetEntry(id);
|
auto& entry = GetEntry(id);
|
||||||
if (entry)
|
if (entry)
|
||||||
textures_by_address.emplace(addr, entry);
|
m_textures_by_address.emplace(addr, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill in hash map.
|
// Fill in hash map.
|
||||||
|
@ -760,12 +760,12 @@ void TextureCacheBase::DoLoadState(PointerWrap& p)
|
||||||
|
|
||||||
auto& entry = GetEntry(id);
|
auto& entry = GetEntry(id);
|
||||||
if (entry)
|
if (entry)
|
||||||
entry->textures_by_hash_iter = textures_by_hash.emplace(hash, entry);
|
entry->textures_by_hash_iter = m_textures_by_hash.emplace(hash, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear bound textures
|
// Clear bound textures
|
||||||
for (u32 i = 0; i < bound_textures.size(); i++)
|
for (u32 i = 0; i < m_bound_textures.size(); i++)
|
||||||
bound_textures[i].reset();
|
m_bound_textures[i].reset();
|
||||||
|
|
||||||
// Fill in bound textures
|
// Fill in bound textures
|
||||||
p.Do(size);
|
p.Do(size);
|
||||||
|
@ -778,7 +778,7 @@ void TextureCacheBase::DoLoadState(PointerWrap& p)
|
||||||
|
|
||||||
auto& entry = GetEntry(id);
|
auto& entry = GetEntry(id);
|
||||||
if (entry)
|
if (entry)
|
||||||
bound_textures[index] = entry;
|
m_bound_textures[index] = entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1114,9 +1114,9 @@ void TextureCacheBase::BindTextures(BitSet32 used_textures)
|
||||||
{
|
{
|
||||||
auto& system = Core::System::GetInstance();
|
auto& system = Core::System::GetInstance();
|
||||||
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
auto& pixel_shader_manager = system.GetPixelShaderManager();
|
||||||
for (u32 i = 0; i < bound_textures.size(); i++)
|
for (u32 i = 0; i < m_bound_textures.size(); i++)
|
||||||
{
|
{
|
||||||
const RcTcacheEntry& tentry = bound_textures[i];
|
const RcTcacheEntry& tentry = m_bound_textures[i];
|
||||||
if (used_textures[i] && tentry)
|
if (used_textures[i] && tentry)
|
||||||
{
|
{
|
||||||
g_gfx->SetTexture(i, tentry->texture.get());
|
g_gfx->SetTexture(i, tentry->texture.get());
|
||||||
|
@ -1295,9 +1295,9 @@ TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool fo
|
||||||
{
|
{
|
||||||
// if this stage was not invalidated by changes to texture registers, keep the current texture
|
// if this stage was not invalidated by changes to texture registers, keep the current texture
|
||||||
if (!force_reload && TMEM::IsValid(texture_info.GetStage()) &&
|
if (!force_reload && TMEM::IsValid(texture_info.GetStage()) &&
|
||||||
bound_textures[texture_info.GetStage()])
|
m_bound_textures[texture_info.GetStage()])
|
||||||
{
|
{
|
||||||
TCacheEntry* entry = bound_textures[texture_info.GetStage()].get();
|
TCacheEntry* entry = m_bound_textures[texture_info.GetStage()].get();
|
||||||
// If the TMEM configuration is such that this texture is more or less guaranteed to still
|
// If the TMEM configuration is such that this texture is more or less guaranteed to still
|
||||||
// be in TMEM, then we know we can reuse the old entry without even hashing the memory
|
// be in TMEM, then we know we can reuse the old entry without even hashing the memory
|
||||||
//
|
//
|
||||||
|
@ -1337,7 +1337,7 @@ TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool fo
|
||||||
action->OnTextureLoad(&texture_load);
|
action->OnTextureLoad(&texture_load);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bound_textures[texture_info.GetStage()] = entry;
|
m_bound_textures[texture_info.GetStage()] = entry;
|
||||||
|
|
||||||
// We need to keep track of invalided textures until they have actually been replaced or
|
// We need to keep track of invalided textures until they have actually been replaced or
|
||||||
// re-loaded
|
// re-loaded
|
||||||
|
@ -1427,12 +1427,12 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
//
|
//
|
||||||
// For efb copies, the entry created in CopyRenderTargetToTexture always has to be used, or else
|
// For efb copies, the entry created in CopyRenderTargetToTexture always has to be used, or else
|
||||||
// it was done in vain.
|
// it was done in vain.
|
||||||
auto iter_range = textures_by_address.equal_range(texture_info.GetRawAddress());
|
auto iter_range = m_textures_by_address.equal_range(texture_info.GetRawAddress());
|
||||||
TexAddrCache::iterator iter = iter_range.first;
|
TexAddrCache::iterator iter = iter_range.first;
|
||||||
TexAddrCache::iterator oldest_entry = iter;
|
TexAddrCache::iterator oldest_entry = iter;
|
||||||
int temp_frameCount = 0x7fffffff;
|
int temp_frameCount = 0x7fffffff;
|
||||||
TexAddrCache::iterator unconverted_copy = textures_by_address.end();
|
TexAddrCache::iterator unconverted_copy = m_textures_by_address.end();
|
||||||
TexAddrCache::iterator unreinterpreted_copy = textures_by_address.end();
|
TexAddrCache::iterator unreinterpreted_copy = m_textures_by_address.end();
|
||||||
|
|
||||||
while (iter != iter_range.second)
|
while (iter != iter_range.second)
|
||||||
{
|
{
|
||||||
|
@ -1482,7 +1482,7 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Prefer the already-converted copy.
|
// Prefer the already-converted copy.
|
||||||
unconverted_copy = textures_by_address.end();
|
unconverted_copy = m_textures_by_address.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: We should check width/height/levels for EFB copies. I'm not sure what effect
|
// TODO: We should check width/height/levels for EFB copies. I'm not sure what effect
|
||||||
|
@ -1540,7 +1540,7 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unreinterpreted_copy != textures_by_address.end())
|
if (unreinterpreted_copy != m_textures_by_address.end())
|
||||||
{
|
{
|
||||||
auto decoded_entry =
|
auto decoded_entry =
|
||||||
ReinterpretEntry(unreinterpreted_copy->second, texture_info.GetTextureFormat());
|
ReinterpretEntry(unreinterpreted_copy->second, texture_info.GetTextureFormat());
|
||||||
|
@ -1554,7 +1554,7 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
return decoded_entry;
|
return decoded_entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unconverted_copy != textures_by_address.end())
|
if (unconverted_copy != m_textures_by_address.end())
|
||||||
{
|
{
|
||||||
auto decoded_entry = ApplyPaletteToEntry(
|
auto decoded_entry = ApplyPaletteToEntry(
|
||||||
unconverted_copy->second, texture_info.GetTlutAddress(), texture_info.GetTlutFormat());
|
unconverted_copy->second, texture_info.GetTlutAddress(), texture_info.GetTlutFormat());
|
||||||
|
@ -1575,7 +1575,7 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
std::max(texture_info.GetTextureSize(), palette_size) <=
|
std::max(texture_info.GetTextureSize(), palette_size) <=
|
||||||
(u32)textureCacheSafetyColorSampleSize * 8)
|
(u32)textureCacheSafetyColorSampleSize * 8)
|
||||||
{
|
{
|
||||||
auto hash_range = textures_by_hash.equal_range(full_hash);
|
auto hash_range = m_textures_by_hash.equal_range(full_hash);
|
||||||
TexHashCache::iterator hash_iter = hash_range.first;
|
TexHashCache::iterator hash_iter = hash_range.first;
|
||||||
while (hash_iter != hash_range.second)
|
while (hash_iter != hash_range.second)
|
||||||
{
|
{
|
||||||
|
@ -1777,7 +1777,7 @@ RcTcacheEntry TextureCacheBase::CreateTextureEntry(
|
||||||
total_texture_size += mip_downsample_buffer_size;
|
total_texture_size += mip_downsample_buffer_size;
|
||||||
|
|
||||||
CheckTempSize(total_texture_size);
|
CheckTempSize(total_texture_size);
|
||||||
dst_buffer = temp;
|
dst_buffer = m_temp;
|
||||||
if (!(texture_info.GetTextureFormat() == TextureFormat::RGBA8 && texture_info.IsFromTmem()))
|
if (!(texture_info.GetTextureFormat() == TextureFormat::RGBA8 && texture_info.IsFromTmem()))
|
||||||
{
|
{
|
||||||
TexDecoder_Decode(dst_buffer, texture_info.GetData(), expanded_width, expanded_height,
|
TexDecoder_Decode(dst_buffer, texture_info.GetData(), expanded_width, expanded_height,
|
||||||
|
@ -1841,12 +1841,12 @@ RcTcacheEntry TextureCacheBase::CreateTextureEntry(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto iter = textures_by_address.emplace(texture_info.GetRawAddress(), entry);
|
const auto iter = m_textures_by_address.emplace(texture_info.GetRawAddress(), entry);
|
||||||
if (safety_color_sample_size == 0 ||
|
if (safety_color_sample_size == 0 ||
|
||||||
std::max(texture_info.GetTextureSize(), creation_info.palette_size) <=
|
std::max(texture_info.GetTextureSize(), creation_info.palette_size) <=
|
||||||
(u32)safety_color_sample_size * 8)
|
(u32)safety_color_sample_size * 8)
|
||||||
{
|
{
|
||||||
entry->textures_by_hash_iter = textures_by_hash.emplace(creation_info.full_hash, entry);
|
entry->textures_by_hash_iter = m_textures_by_hash.emplace(creation_info.full_hash, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TextureAndTLUTFormat full_format(texture_info.GetTextureFormat(),
|
const TextureAndTLUTFormat full_format(texture_info.GetTextureFormat(),
|
||||||
|
@ -1860,7 +1860,7 @@ RcTcacheEntry TextureCacheBase::CreateTextureEntry(
|
||||||
entry->SetNotCopy();
|
entry->SetNotCopy();
|
||||||
|
|
||||||
INCSTAT(g_stats.num_textures_uploaded);
|
INCSTAT(g_stats.num_textures_uploaded);
|
||||||
SETSTAT(g_stats.num_textures_alive, static_cast<int>(textures_by_address.size()));
|
SETSTAT(g_stats.num_textures_alive, static_cast<int>(m_textures_by_address.size()));
|
||||||
|
|
||||||
entry = DoPartialTextureUpdates(iter->second, texture_info.GetTlutAddress(),
|
entry = DoPartialTextureUpdates(iter->second, texture_info.GetTlutAddress(),
|
||||||
texture_info.GetTlutFormat());
|
texture_info.GetTlutFormat());
|
||||||
|
@ -1930,8 +1930,8 @@ RcTcacheEntry TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height
|
||||||
{
|
{
|
||||||
const u32 decoded_size = width * height * sizeof(u32);
|
const u32 decoded_size = width * height * sizeof(u32);
|
||||||
CheckTempSize(decoded_size);
|
CheckTempSize(decoded_size);
|
||||||
TexDecoder_DecodeXFB(temp, src_data, width, height, stride);
|
TexDecoder_DecodeXFB(m_temp, src_data, width, height, stride);
|
||||||
entry->texture->Load(0, width, height, width, temp, decoded_size);
|
entry->texture->Load(0, width, height, width, m_temp, decoded_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stitch any VRAM copies into the new RAM copy.
|
// Stitch any VRAM copies into the new RAM copy.
|
||||||
|
@ -1939,8 +1939,8 @@ RcTcacheEntry TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height
|
||||||
entry->texture->FinishedRendering();
|
entry->texture->FinishedRendering();
|
||||||
|
|
||||||
// Insert into the texture cache so we can re-use it next frame, if needed.
|
// Insert into the texture cache so we can re-use it next frame, if needed.
|
||||||
textures_by_address.emplace(entry->addr, entry);
|
m_textures_by_address.emplace(entry->addr, entry);
|
||||||
SETSTAT(g_stats.num_textures_alive, static_cast<int>(textures_by_address.size()));
|
SETSTAT(g_stats.num_textures_alive, static_cast<int>(m_textures_by_address.size()));
|
||||||
INCSTAT(g_stats.num_textures_uploaded);
|
INCSTAT(g_stats.num_textures_uploaded);
|
||||||
|
|
||||||
if (g_ActiveConfig.bDumpXFBTarget || g_ActiveConfig.bGraphicMods)
|
if (g_ActiveConfig.bDumpXFBTarget || g_ActiveConfig.bGraphicMods)
|
||||||
|
@ -1965,7 +1965,7 @@ RcTcacheEntry TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height
|
||||||
|
|
||||||
RcTcacheEntry TextureCacheBase::GetXFBFromCache(u32 address, u32 width, u32 height, u32 stride)
|
RcTcacheEntry TextureCacheBase::GetXFBFromCache(u32 address, u32 width, u32 height, u32 stride)
|
||||||
{
|
{
|
||||||
auto iter_range = textures_by_address.equal_range(address);
|
auto iter_range = m_textures_by_address.equal_range(address);
|
||||||
TexAddrCache::iterator iter = iter_range.first;
|
TexAddrCache::iterator iter = iter_range.first;
|
||||||
|
|
||||||
while (iter != iter_range.second)
|
while (iter != iter_range.second)
|
||||||
|
@ -2526,10 +2526,10 @@ void TextureCacheBase::CopyRenderTargetToTexture(
|
||||||
|
|
||||||
// Do not load textures by hash, if they were at least partly overwritten by an efb copy.
|
// Do not load textures by hash, if they were at least partly overwritten by an efb copy.
|
||||||
// In this case, comparing the hash is not enough to check, if two textures are identical.
|
// In this case, comparing the hash is not enough to check, if two textures are identical.
|
||||||
if (overlapping_entry->textures_by_hash_iter != textures_by_hash.end())
|
if (overlapping_entry->textures_by_hash_iter != m_textures_by_hash.end())
|
||||||
{
|
{
|
||||||
textures_by_hash.erase(overlapping_entry->textures_by_hash_iter);
|
m_textures_by_hash.erase(overlapping_entry->textures_by_hash_iter);
|
||||||
overlapping_entry->textures_by_hash_iter = textures_by_hash.end();
|
overlapping_entry->textures_by_hash_iter = m_textures_by_hash.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++iter.first;
|
++iter.first;
|
||||||
|
@ -2553,7 +2553,7 @@ void TextureCacheBase::CopyRenderTargetToTexture(
|
||||||
{
|
{
|
||||||
const u64 hash = entry->CalculateHash();
|
const u64 hash = entry->CalculateHash();
|
||||||
entry->SetHashes(hash, hash);
|
entry->SetHashes(hash, hash);
|
||||||
textures_by_address.emplace(dstAddr, std::move(entry));
|
m_textures_by_address.emplace(dstAddr, std::move(entry));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2569,10 +2569,10 @@ void TextureCacheBase::FlushEFBCopies()
|
||||||
|
|
||||||
void TextureCacheBase::FlushStaleBinds()
|
void TextureCacheBase::FlushStaleBinds()
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < bound_textures.size(); i++)
|
for (u32 i = 0; i < m_bound_textures.size(); i++)
|
||||||
{
|
{
|
||||||
if (!TMEM::IsCached(i))
|
if (!TMEM::IsCached(i))
|
||||||
bound_textures[i].reset();
|
m_bound_textures[i].reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2709,8 +2709,8 @@ RcTcacheEntry TextureCacheBase::AllocateCacheEntry(const TextureConfig& config)
|
||||||
|
|
||||||
auto cacheEntry =
|
auto cacheEntry =
|
||||||
std::make_shared<TCacheEntry>(std::move(alloc->texture), std::move(alloc->framebuffer));
|
std::make_shared<TCacheEntry>(std::move(alloc->texture), std::move(alloc->framebuffer));
|
||||||
cacheEntry->textures_by_hash_iter = textures_by_hash.end();
|
cacheEntry->textures_by_hash_iter = m_textures_by_hash.end();
|
||||||
cacheEntry->id = last_entry_id++;
|
cacheEntry->id = m_last_entry_id++;
|
||||||
return cacheEntry;
|
return cacheEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2718,10 +2718,10 @@ std::optional<TextureCacheBase::TexPoolEntry>
|
||||||
TextureCacheBase::AllocateTexture(const TextureConfig& config)
|
TextureCacheBase::AllocateTexture(const TextureConfig& config)
|
||||||
{
|
{
|
||||||
TexPool::iterator iter = FindMatchingTextureFromPool(config);
|
TexPool::iterator iter = FindMatchingTextureFromPool(config);
|
||||||
if (iter != texture_pool.end())
|
if (iter != m_texture_pool.end())
|
||||||
{
|
{
|
||||||
auto entry = std::move(iter->second);
|
auto entry = std::move(iter->second);
|
||||||
texture_pool.erase(iter);
|
m_texture_pool.erase(iter);
|
||||||
return std::move(entry);
|
return std::move(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2757,16 +2757,16 @@ TextureCacheBase::FindMatchingTextureFromPool(const TextureConfig& config)
|
||||||
// which potentially means that a driver has to maintain two copies of the texture anyway.
|
// which potentially means that a driver has to maintain two copies of the texture anyway.
|
||||||
// Render-target textures are fine through, as they have to be generated in a seperated pass.
|
// Render-target textures are fine through, as they have to be generated in a seperated pass.
|
||||||
// As non-render-target textures are usually static, this should not matter much.
|
// As non-render-target textures are usually static, this should not matter much.
|
||||||
auto range = texture_pool.equal_range(config);
|
auto range = m_texture_pool.equal_range(config);
|
||||||
auto matching_iter = std::find_if(range.first, range.second, [](const auto& iter) {
|
auto matching_iter = std::find_if(range.first, range.second, [](const auto& iter) {
|
||||||
return iter.first.IsRenderTarget() || iter.second.frameCount != FRAMECOUNT_INVALID;
|
return iter.first.IsRenderTarget() || iter.second.frameCount != FRAMECOUNT_INVALID;
|
||||||
});
|
});
|
||||||
return matching_iter != range.second ? matching_iter : texture_pool.end();
|
return matching_iter != range.second ? matching_iter : m_texture_pool.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureCacheBase::TexAddrCache::iterator TextureCacheBase::GetTexCacheIter(TCacheEntry* entry)
|
TextureCacheBase::TexAddrCache::iterator TextureCacheBase::GetTexCacheIter(TCacheEntry* entry)
|
||||||
{
|
{
|
||||||
auto iter_range = textures_by_address.equal_range(entry->addr);
|
auto iter_range = m_textures_by_address.equal_range(entry->addr);
|
||||||
TexAddrCache::iterator iter = iter_range.first;
|
TexAddrCache::iterator iter = iter_range.first;
|
||||||
while (iter != iter_range.second)
|
while (iter != iter_range.second)
|
||||||
{
|
{
|
||||||
|
@ -2776,7 +2776,7 @@ TextureCacheBase::TexAddrCache::iterator TextureCacheBase::GetTexCacheIter(TCach
|
||||||
}
|
}
|
||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
return textures_by_address.end();
|
return m_textures_by_address.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<TextureCacheBase::TexAddrCache::iterator, TextureCacheBase::TexAddrCache::iterator>
|
std::pair<TextureCacheBase::TexAddrCache::iterator, TextureCacheBase::TexAddrCache::iterator>
|
||||||
|
@ -2790,8 +2790,8 @@ TextureCacheBase::FindOverlappingTextures(u32 addr, u32 size_in_bytes)
|
||||||
// 1024 x 1024 texel times 8 nibbles per texel
|
// 1024 x 1024 texel times 8 nibbles per texel
|
||||||
constexpr u32 max_texture_size = 1024 * 1024 * 4;
|
constexpr u32 max_texture_size = 1024 * 1024 * 4;
|
||||||
u32 lower_addr = addr > max_texture_size ? addr - max_texture_size : 0;
|
u32 lower_addr = addr > max_texture_size ? addr - max_texture_size : 0;
|
||||||
auto begin = textures_by_address.lower_bound(lower_addr);
|
auto begin = m_textures_by_address.lower_bound(lower_addr);
|
||||||
auto end = textures_by_address.upper_bound(addr + size_in_bytes);
|
auto end = m_textures_by_address.upper_bound(addr + size_in_bytes);
|
||||||
|
|
||||||
return std::make_pair(begin, end);
|
return std::make_pair(begin, end);
|
||||||
}
|
}
|
||||||
|
@ -2799,15 +2799,15 @@ TextureCacheBase::FindOverlappingTextures(u32 addr, u32 size_in_bytes)
|
||||||
TextureCacheBase::TexAddrCache::iterator
|
TextureCacheBase::TexAddrCache::iterator
|
||||||
TextureCacheBase::InvalidateTexture(TexAddrCache::iterator iter, bool discard_pending_efb_copy)
|
TextureCacheBase::InvalidateTexture(TexAddrCache::iterator iter, bool discard_pending_efb_copy)
|
||||||
{
|
{
|
||||||
if (iter == textures_by_address.end())
|
if (iter == m_textures_by_address.end())
|
||||||
return textures_by_address.end();
|
return m_textures_by_address.end();
|
||||||
|
|
||||||
RcTcacheEntry& entry = iter->second;
|
RcTcacheEntry& entry = iter->second;
|
||||||
|
|
||||||
if (entry->textures_by_hash_iter != textures_by_hash.end())
|
if (entry->textures_by_hash_iter != m_textures_by_hash.end())
|
||||||
{
|
{
|
||||||
textures_by_hash.erase(entry->textures_by_hash_iter);
|
m_textures_by_hash.erase(entry->textures_by_hash_iter);
|
||||||
entry->textures_by_hash_iter = textures_by_hash.end();
|
entry->textures_by_hash_iter = m_textures_by_hash.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this is a pending EFB copy, we don't want to flush it here.
|
// If this is a pending EFB copy, we don't want to flush it here.
|
||||||
|
@ -2840,7 +2840,7 @@ TextureCacheBase::InvalidateTexture(TexAddrCache::iterator iter, bool discard_pe
|
||||||
}
|
}
|
||||||
entry->invalidated = true;
|
entry->invalidated = true;
|
||||||
|
|
||||||
return textures_by_address.erase(iter);
|
return m_textures_by_address.erase(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextureCacheBase::ReleaseToPool(TCacheEntry* entry)
|
void TextureCacheBase::ReleaseToPool(TCacheEntry* entry)
|
||||||
|
@ -2848,8 +2848,8 @@ void TextureCacheBase::ReleaseToPool(TCacheEntry* entry)
|
||||||
if (!entry->texture)
|
if (!entry->texture)
|
||||||
return;
|
return;
|
||||||
auto config = entry->texture->GetConfig();
|
auto config = entry->texture->GetConfig();
|
||||||
texture_pool.emplace(config,
|
m_texture_pool.emplace(config,
|
||||||
TexPoolEntry(std::move(entry->texture), std::move(entry->framebuffer)));
|
TexPoolEntry(std::move(entry->texture), std::move(entry->framebuffer)));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextureCacheBase::CreateUtilityTextures()
|
bool TextureCacheBase::CreateUtilityTextures()
|
||||||
|
|
|
@ -138,7 +138,7 @@ struct TCacheEntry
|
||||||
u64 id = 0;
|
u64 id = 0;
|
||||||
u32 content_semaphore = 0; // Counts up
|
u32 content_semaphore = 0; // Counts up
|
||||||
|
|
||||||
// Indicates that this TCacheEntry has been invalided from textures_by_address
|
// Indicates that this TCacheEntry has been invalided from m_textures_by_address
|
||||||
bool invalidated = false;
|
bool invalidated = false;
|
||||||
|
|
||||||
bool reference_changed = false; // used by xfb to determine when a reference xfb changed
|
bool reference_changed = false; // used by xfb to determine when a reference xfb changed
|
||||||
|
@ -151,7 +151,7 @@ struct TCacheEntry
|
||||||
// used to delete textures which haven't been used for TEXTURE_KILL_THRESHOLD frames
|
// used to delete textures which haven't been used for TEXTURE_KILL_THRESHOLD frames
|
||||||
int frameCount = FRAMECOUNT_INVALID;
|
int frameCount = FRAMECOUNT_INVALID;
|
||||||
|
|
||||||
// Keep an iterator to the entry in textures_by_hash, so it does not need to be searched when
|
// Keep an iterator to the entry in m_textures_by_hash, so it does not need to be searched when
|
||||||
// removing the cache entry
|
// removing the cache entry
|
||||||
std::multimap<u64, std::shared_ptr<TCacheEntry>>::iterator textures_by_hash_iter;
|
std::multimap<u64, std::shared_ptr<TCacheEntry>>::iterator textures_by_hash_iter;
|
||||||
|
|
||||||
|
@ -330,8 +330,8 @@ protected:
|
||||||
float gamma, bool clamp_top, bool clamp_bottom,
|
float gamma, bool clamp_top, bool clamp_bottom,
|
||||||
const std::array<u32, 3>& filter_coefficients);
|
const std::array<u32, 3>& filter_coefficients);
|
||||||
|
|
||||||
alignas(16) u8* temp = nullptr;
|
alignas(16) u8* m_temp = nullptr;
|
||||||
size_t temp_size = 0;
|
size_t m_temp_size = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
using TexAddrCache = std::multimap<u32, RcTcacheEntry>;
|
using TexAddrCache = std::multimap<u32, RcTcacheEntry>;
|
||||||
|
@ -405,20 +405,20 @@ private:
|
||||||
void DoSaveState(PointerWrap& p);
|
void DoSaveState(PointerWrap& p);
|
||||||
void DoLoadState(PointerWrap& p);
|
void DoLoadState(PointerWrap& p);
|
||||||
|
|
||||||
// textures_by_address is the authoritive version of what's actually "in" the texture cache
|
// m_textures_by_address is the authoritive version of what's actually "in" the texture cache
|
||||||
// but it's possible for invalidated TCache entries to live on elsewhere
|
// but it's possible for invalidated TCache entries to live on elsewhere
|
||||||
TexAddrCache textures_by_address;
|
TexAddrCache m_textures_by_address;
|
||||||
|
|
||||||
// textures_by_hash is an alternative view of the texture cache
|
// m_textures_by_hash is an alternative view of the texture cache
|
||||||
// All textures in here will also be in textures_by_address
|
// All textures in here will also be in m_textures_by_address
|
||||||
TexHashCache textures_by_hash;
|
TexHashCache m_textures_by_hash;
|
||||||
|
|
||||||
// bound_textures are actually active in the current draw
|
// m_bound_textures are actually active in the current draw
|
||||||
// It's valid for textures to be in here after they've been invalidated
|
// It's valid for textures to be in here after they've been invalidated
|
||||||
std::array<RcTcacheEntry, 8> bound_textures{};
|
std::array<RcTcacheEntry, 8> m_bound_textures{};
|
||||||
|
|
||||||
TexPool texture_pool;
|
TexPool m_texture_pool;
|
||||||
u64 last_entry_id = 0;
|
u64 m_last_entry_id = 0;
|
||||||
|
|
||||||
// Backup configuration values
|
// Backup configuration values
|
||||||
struct BackupConfig
|
struct BackupConfig
|
||||||
|
@ -437,7 +437,7 @@ private:
|
||||||
bool graphics_mods;
|
bool graphics_mods;
|
||||||
u32 graphics_mod_change_count;
|
u32 graphics_mod_change_count;
|
||||||
};
|
};
|
||||||
BackupConfig backup_config = {};
|
BackupConfig m_backup_config = {};
|
||||||
|
|
||||||
// Encoding texture used for EFB copies to RAM.
|
// Encoding texture used for EFB copies to RAM.
|
||||||
std::unique_ptr<AbstractTexture> m_efb_encoding_texture;
|
std::unique_ptr<AbstractTexture> m_efb_encoding_texture;
|
||||||
|
|
Loading…
Reference in New Issue