mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-26 06:18:32 +00:00
VideoCommon: Use GetSpanForAddress safely in texture decoding
Now only VertexLoader remains... But that one might be tricky.
This commit is contained in:
parent
5c9bb80638
commit
3cfa233b63
14 changed files with 220 additions and 101 deletions
|
@ -1319,6 +1319,9 @@ TCacheEntry* TextureCacheBase::LoadImpl(const TextureInfo& texture_info, bool fo
|
|||
RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSampleSize,
|
||||
const TextureInfo& texture_info)
|
||||
{
|
||||
if (!texture_info.IsDataValid())
|
||||
return {};
|
||||
|
||||
// Hash assigned to texcache entry (also used to generate filenames used for texture dumping and
|
||||
// custom texture lookup)
|
||||
u64 base_hash = TEXHASH_INVALID;
|
||||
|
@ -1337,12 +1340,6 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
|||
// TODO: the texture cache lookup is based on address, but a texture from tmem has no reason
|
||||
// to have a unique and valid address. This could result in a regular texture and a tmem
|
||||
// texture aliasing onto the same texture cache entry.
|
||||
if (!texture_info.GetData())
|
||||
{
|
||||
ERROR_LOG_FMT(VIDEO, "Trying to use an invalid texture address {:#010x}",
|
||||
texture_info.GetRawAddress());
|
||||
return {};
|
||||
}
|
||||
|
||||
// If we are recording a FifoLog, keep track of what memory we read. FifoRecorder does
|
||||
// its own memory modification tracking independent of the texture hashing below.
|
||||
|
@ -1916,7 +1913,7 @@ RcTcacheEntry TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height
|
|||
entry->frameCount = FRAMECOUNT_INVALID;
|
||||
if (!g_ActiveConfig.UseGPUTextureDecoding() ||
|
||||
!DecodeTextureOnGPU(entry, 0, src_data, total_size, entry->format.texfmt, width, height,
|
||||
width, height, stride, texMem, entry->format.tlutfmt))
|
||||
width, height, stride, s_tex_mem.data(), entry->format.tlutfmt))
|
||||
{
|
||||
const u32 decoded_size = width * height * sizeof(u32);
|
||||
CheckTempSize(decoded_size);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue