TextureCache: Remove deleted textures from bound_textures
Fixes issue where vulkan might crash trying to bind a deleted texture.
This commit is contained in:
parent
d771bee0fe
commit
edb66dab84
|
@ -2552,13 +2552,21 @@ TextureCacheBase::InvalidateTexture(TexAddrCache::iterator iter, bool discard_pe
|
|||
|
||||
for (size_t i = 0; i < bound_textures.size(); ++i)
|
||||
{
|
||||
// If the entry is currently bound and tmem has it recorded as cached, keep it, but mark it as
|
||||
// invalidated. This way it can still be used via tmem cache emulation, but nothing else.
|
||||
// Spyro: A Hero's Tail is known for using such overwritten textures.
|
||||
if (bound_textures[i] == entry && TMEM::IsCached(static_cast<u32>(i)))
|
||||
if (bound_textures[i] == entry)
|
||||
{
|
||||
bound_textures[i]->tmem_only = true;
|
||||
return ++iter;
|
||||
if (TMEM::IsCached(static_cast<u32>(i)))
|
||||
{
|
||||
// If the entry is currently bound and tmem has it recorded as cached, keep it, but mark it
|
||||
// as invalidated. This way it can still be used via tmem cache emulation, but nothing else.
|
||||
// Spyro: A Hero's Tail is known for using such overwritten textures.
|
||||
bound_textures[i]->tmem_only = true;
|
||||
return ++iter;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, delete the reference to it from bound_textures
|
||||
bound_textures[i] = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue