diff options
| author | Léo Lam <leo@leolam.fr> | 2021-02-11 19:36:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-11 19:36:45 +0100 |
| commit | a3548142402be095d43c62aa3ea4e8e5da964183 (patch) | |
| tree | c49b23efc943b33e513a26c40bf50cde7183bddc /Source/Core/VideoBackends/Software/TransformUnit.cpp | |
| parent | 1fc6fbc2c0c77d5ccde9440b54aba1b007b07136 (diff) | |
| parent | e825af7b1b673bc265e3c865eca4b5b35297a9bc (diff) | |
Merge pull request #9424 from Pokechu22/sw-no-special-case
Software: Remove normalization special case
Diffstat (limited to 'Source/Core/VideoBackends/Software/TransformUnit.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Software/TransformUnit.cpp | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/Source/Core/VideoBackends/Software/TransformUnit.cpp b/Source/Core/VideoBackends/Software/TransformUnit.cpp index 76712c0939..387903f117 100644 --- a/Source/Core/VideoBackends/Software/TransformUnit.cpp +++ b/Source/Core/VideoBackends/Software/TransformUnit.cpp @@ -109,7 +109,7 @@ void TransformNormal(const InputVertexData* src, bool nbt, OutputVertexData* dst } } -static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bool specialCase, +static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, const InputVertexData* srcVertex, OutputVertexData* dstVertex) { Vec3 src; @@ -140,15 +140,13 @@ static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bo if (texinfo.projection == XF_TEXPROJ_ST) { - if (texinfo.inputform == XF_TEXINPUT_AB11 || specialCase) + if (texinfo.inputform == XF_TEXINPUT_AB11) MultiplyVec2Mat24(src, mat, *dst); else MultiplyVec3Mat24(src, mat, *dst); } else // texinfo.projection == XF_TEXPROJ_STQ { - ASSERT(!specialCase); - if (texinfo.inputform == XF_TEXINPUT_AB11) MultiplyVec2Mat34(src, mat, *dst); else @@ -163,27 +161,12 @@ static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bo const PostMtxInfo& postInfo = xfmem.postMtxInfo[coordNum]; const float* postMat = &xfmem.postMatrices[postInfo.index * 4]; - if (specialCase) - { - // no normalization - // q of input is 1 - // q of output is unknown - tempCoord.x = dst->x; - tempCoord.y = dst->y; - - dst->x = postMat[0] * tempCoord.x + postMat[1] * tempCoord.y + postMat[2] + postMat[3]; - dst->y = postMat[4] * tempCoord.x + postMat[5] * tempCoord.y + postMat[6] + postMat[7]; - dst->z = 1.0f; - } + if (postInfo.normalize) + tempCoord = dst->Normalized(); else - { - if (postInfo.normalize) - tempCoord = dst->Normalized(); - else - tempCoord = *dst; + tempCoord = *dst; - MultiplyVec3Mat34(tempCoord, postMat, *dst); - } + MultiplyVec3Mat34(tempCoord, postMat, *dst); } // When q is 0, the GameCube appears to have a special case @@ -406,7 +389,7 @@ void TransformColor(const InputVertexData* src, OutputVertexData* dst) } } -void TransformTexCoord(const InputVertexData* src, OutputVertexData* dst, bool specialCase) +void TransformTexCoord(const InputVertexData* src, OutputVertexData* dst) { for (u32 coordNum = 0; coordNum < xfmem.numTexGen.numTexGens; coordNum++) { @@ -415,7 +398,7 @@ void TransformTexCoord(const InputVertexData* src, OutputVertexData* dst, bool s switch (texinfo.texgentype) { case XF_TEXGEN_REGULAR: - TransformTexCoordRegular(texinfo, coordNum, specialCase, src, dst); + TransformTexCoordRegular(texinfo, coordNum, src, dst); break; case XF_TEXGEN_EMBOSS_MAP: { |
