From 9fa26624b02562fb8626c93c45acf2015fc06f40 Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sun, 10 Oct 2021 08:16:15 +1300 Subject: BPMemory: Refactor/consolidate TexUnit Addressing Currently the logic for addressing the individual TexUnits is splattered all across dolphin's codebase, this commit attempts to consolidate it all into a single place and formalise it using our new TexUnitAddress struct. --- .../Core/VideoBackends/Software/TextureSampler.cpp | 25 +++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'Source/Core/VideoBackends/Software/TextureSampler.cpp') diff --git a/Source/Core/VideoBackends/Software/TextureSampler.cpp b/Source/Core/VideoBackends/Software/TextureSampler.cpp index f54002bdb5..064e9df41c 100644 --- a/Source/Core/VideoBackends/Software/TextureSampler.cpp +++ b/Source/Core/VideoBackends/Software/TextureSampler.cpp @@ -74,8 +74,8 @@ void Sample(s32 s, s32 t, s32 lod, bool linear, u8 texmap, u8* sample) bool mipLinear = false; #if (ALLOW_MIPMAP) - const FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - const TexMode0& tm0 = texUnit.texMode0[texmap & 3]; + auto texUnit = bpmem.tex.GetUnit(texmap); + const TexMode0& tm0 = texUnit.texMode0; const s32 lodFract = lod & 0xf; @@ -115,26 +115,25 @@ void Sample(s32 s, s32 t, s32 lod, bool linear, u8 texmap, u8* sample) void SampleMip(s32 s, s32 t, s32 mip, bool linear, u8 texmap, u8* sample) { - const FourTexUnits& texUnit = bpmem.tex[(texmap >> 2) & 1]; - const u8 subTexmap = texmap & 3; + auto texUnit = bpmem.tex.GetUnit(texmap); - const TexMode0& tm0 = texUnit.texMode0[subTexmap]; - const TexImage0& ti0 = texUnit.texImage0[subTexmap]; - const TexTLUT& texTlut = texUnit.texTlut[subTexmap]; + const TexMode0& tm0 = texUnit.texMode0; + const TexImage0& ti0 = texUnit.texImage0; + const TexTLUT& texTlut = texUnit.texTlut; const TextureFormat texfmt = ti0.format; const TLUTFormat tlutfmt = texTlut.tlut_format; const u8* imageSrc; const u8* imageSrcOdd = nullptr; - if (texUnit.texImage1[subTexmap].cache_manually_managed) + if (texUnit.texImage1.cache_manually_managed) { - imageSrc = &texMem[texUnit.texImage1[subTexmap].tmem_even * TMEM_LINE_SIZE]; + imageSrc = &texMem[texUnit.texImage1.tmem_even * TMEM_LINE_SIZE]; if (texfmt == TextureFormat::RGBA8) - imageSrcOdd = &texMem[texUnit.texImage2[subTexmap].tmem_odd * TMEM_LINE_SIZE]; + imageSrcOdd = &texMem[texUnit.texImage2.tmem_odd * TMEM_LINE_SIZE]; } else { - const u32 imageBase = texUnit.texImage3[subTexmap].image_base << 5; + const u32 imageBase = texUnit.texImage3.image_base << 5; imageSrc = Memory::GetPointer(imageBase); } @@ -198,7 +197,7 @@ void SampleMip(s32 s, s32 t, s32 mip, bool linear, u8 texmap, u8* sample) WrapCoord(&imageSPlus1, tm0.wrap_s, image_width_minus_1 + 1); WrapCoord(&imageTPlus1, tm0.wrap_t, image_height_minus_1 + 1); - if (!(texfmt == TextureFormat::RGBA8 && texUnit.texImage1[subTexmap].cache_manually_managed)) + if (!(texfmt == TextureFormat::RGBA8 && texUnit.texImage1.cache_manually_managed)) { TexDecoder_DecodeTexel(sampledTex, imageSrc, imageS, imageT, image_width_minus_1, texfmt, tlut, tlutfmt); @@ -250,7 +249,7 @@ void SampleMip(s32 s, s32 t, s32 mip, bool linear, u8 texmap, u8* sample) WrapCoord(&imageS, tm0.wrap_s, image_width_minus_1 + 1); WrapCoord(&imageT, tm0.wrap_t, image_height_minus_1 + 1); - if (!(texfmt == TextureFormat::RGBA8 && texUnit.texImage1[subTexmap].cache_manually_managed)) + if (!(texfmt == TextureFormat::RGBA8 && texUnit.texImage1.cache_manually_managed)) TexDecoder_DecodeTexel(sample, imageSrc, imageS, imageT, image_width_minus_1, texfmt, tlut, tlutfmt); else -- cgit v1.2.3