summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/TextureSampler.cpp
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2021-10-10 08:16:15 +1300
committerScott Mansell <phiren@gmail.com>2021-10-10 09:09:43 +1300
commit9fa26624b02562fb8626c93c45acf2015fc06f40 (patch)
tree870bffe166ba60ef71dc8c19b89de59ca438d337 /Source/Core/VideoBackends/Software/TextureSampler.cpp
parentef0e401708dc534e8bfac52e5e43086b4255c22d (diff)
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.
Diffstat (limited to 'Source/Core/VideoBackends/Software/TextureSampler.cpp')
-rw-r--r--Source/Core/VideoBackends/Software/TextureSampler.cpp25
1 files changed, 12 insertions, 13 deletions
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