Merge pull request #3268 from degasus/texturecrash
TextureCache: Fix crash for invalid textures.
This commit is contained in:
commit
2a7c039bd7
|
@ -409,17 +409,23 @@ TextureCacheBase::TCacheEntryBase* TextureCacheBase::Load(const u32 stage)
|
||||||
additional_mips_size += TexDecoder_GetTextureSizeInBytes(expanded_mip_width, expanded_mip_height, texformat);
|
additional_mips_size += TexDecoder_GetTextureSizeInBytes(expanded_mip_width, expanded_mip_height, texformat);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we are recording a FifoLog, keep track of what memory we read.
|
|
||||||
// FifiRecorder does it's own memory modification tracking independant of the texture hashing below.
|
|
||||||
if (g_bRecordFifoData && !from_tmem)
|
|
||||||
FifoRecorder::GetInstance().UseMemory(address, texture_size + additional_mips_size, MemoryUpdate::TEXTURE_MAP);
|
|
||||||
|
|
||||||
const u8* src_data;
|
const u8* src_data;
|
||||||
if (from_tmem)
|
if (from_tmem)
|
||||||
src_data = &texMem[bpmem.tex[stage / 4].texImage1[stage % 4].tmem_even * TMEM_LINE_SIZE];
|
src_data = &texMem[bpmem.tex[stage / 4].texImage1[stage % 4].tmem_even * TMEM_LINE_SIZE];
|
||||||
else
|
else
|
||||||
src_data = Memory::GetPointer(address);
|
src_data = Memory::GetPointer(address);
|
||||||
|
|
||||||
|
if (!src_data)
|
||||||
|
{
|
||||||
|
ERROR_LOG(VIDEO, "Trying to use an invalid texture address 0x%8x", address);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we are recording a FifoLog, keep track of what memory we read.
|
||||||
|
// FifiRecorder does it's own memory modification tracking independant of the texture hashing below.
|
||||||
|
if (g_bRecordFifoData && !from_tmem)
|
||||||
|
FifoRecorder::GetInstance().UseMemory(address, texture_size + additional_mips_size, MemoryUpdate::TEXTURE_MAP);
|
||||||
|
|
||||||
// TODO: This doesn't hash GB tiles for preloaded RGBA8 textures (instead, it's hashing more data from the low tmem bank than it should)
|
// TODO: This doesn't hash GB tiles for preloaded RGBA8 textures (instead, it's hashing more data from the low tmem bank than it should)
|
||||||
base_hash = GetHash64(src_data, texture_size, g_ActiveConfig.iSafeTextureCache_ColorSamples);
|
base_hash = GetHash64(src_data, texture_size, g_ActiveConfig.iSafeTextureCache_ColorSamples);
|
||||||
u32 palette_size = 0;
|
u32 palette_size = 0;
|
||||||
|
|
Loading…
Reference in New Issue