summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/Rasterizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/Software/Rasterizer.cpp')
-rw-r--r--Source/Core/VideoBackends/Software/Rasterizer.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/Source/Core/VideoBackends/Software/Rasterizer.cpp b/Source/Core/VideoBackends/Software/Rasterizer.cpp
index df04ab5a31..f886858124 100644
--- a/Source/Core/VideoBackends/Software/Rasterizer.cpp
+++ b/Source/Core/VideoBackends/Software/Rasterizer.cpp
@@ -171,22 +171,25 @@ static inline void CalculateLOD(s32* lodp, bool* linear, u32 texmap, u32 texcoor
const TexMode1& tm1 = texUnit.texMode1;
float sDelta, tDelta;
+
+ float* uv00 = rasterBlock.Pixel[0][0].Uv[texcoord];
+ float* uv10 = rasterBlock.Pixel[1][0].Uv[texcoord];
+ float* uv01 = rasterBlock.Pixel[0][1].Uv[texcoord];
+
+ float dudx = fabsf(uv00[0] - uv10[0]);
+ float dvdx = fabsf(uv00[1] - uv10[1]);
+ float dudy = fabsf(uv00[0] - uv01[0]);
+ float dvdy = fabsf(uv00[1] - uv01[1]);
+
if (tm0.diag_lod == LODType::Diagonal)
{
- float* uv0 = rasterBlock.Pixel[0][0].Uv[texcoord];
- float* uv1 = rasterBlock.Pixel[1][1].Uv[texcoord];
-
- sDelta = fabsf(uv0[0] - uv1[0]);
- tDelta = fabsf(uv0[1] - uv1[1]);
+ sDelta = dudx + dudy;
+ tDelta = dvdx + dvdy;
}
else
{
- float* uv0 = rasterBlock.Pixel[0][0].Uv[texcoord];
- float* uv1 = rasterBlock.Pixel[1][0].Uv[texcoord];
- float* uv2 = rasterBlock.Pixel[0][1].Uv[texcoord];
-
- sDelta = std::max(fabsf(uv0[0] - uv1[0]), fabsf(uv0[0] - uv2[0]));
- tDelta = std::max(fabsf(uv0[1] - uv1[1]), fabsf(uv0[1] - uv2[1]));
+ sDelta = std::max(dudx, dudy);
+ tDelta = std::max(dvdx, dvdy);
}
// get LOD in s28.4