Skip to content

Commit

Permalink
Merge pull request #9928 from Pokechu22/shadow-the-hedgehog-eyelids-NaN
Browse files Browse the repository at this point in the history
Convert NaN to 1 when generating texture coordinates
  • Loading branch information
leoetlino committed Aug 4, 2021
2 parents 45cddda + 3a4d837 commit c9c5f7a
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
9 changes: 9 additions & 0 deletions Source/Core/VideoBackends/Software/TransformUnit.cpp
Expand Up @@ -137,6 +137,15 @@ static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum,
}
}

// Convert NaNs to 1 - needed to fix eyelids in Shadow the Hedgehog during cutscenes
// See https://bugs.dolphin-emu.org/issues/11458
if (std::isnan(src.x))
src.x = 1;
if (std::isnan(src.y))
src.y = 1;
if (std::isnan(src.z))
src.z = 1;

const float* mat = &xfmem.posMatrices[srcVertex->texMtx[coordNum] * 4];
Vec3* dst = &dstVertex->texCoords[coordNum];

Expand Down
7 changes: 7 additions & 0 deletions Source/Core/VideoCommon/UberShaderVertex.cpp
Expand Up @@ -435,6 +435,13 @@ static void GenVertexShaderTexGens(APIType api_type, u32 num_texgen, ShaderCode&
out.Write(" coord.z = 1.0f;\n"
"\n");

// Convert NaNs to 1 - needed to fix eyelids in Shadow the Hedgehog during cutscenes
// See https://bugs.dolphin-emu.org/issues/11458
out.Write(" // Convert NaN to 1\n");
out.Write(" if (isnan(coord.x)) coord.x = 1.0;\n");
out.Write(" if (isnan(coord.y)) coord.y = 1.0;\n");
out.Write(" if (isnan(coord.z)) coord.z = 1.0;\n");

out.Write(" // first transformation\n");
out.Write(" uint texgentype = {};\n", BitfieldExtract<&TexMtxInfo::texgentype>("texMtxInfo"));
out.Write(" float3 output_tex;\n"
Expand Down
7 changes: 7 additions & 0 deletions Source/Core/VideoCommon/VertexShaderGen.cpp
Expand Up @@ -332,6 +332,13 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
if (texinfo.inputform == TexInputForm::AB11)
out.Write("coord.z = 1.0;\n");

// Convert NaNs to 1 - needed to fix eyelids in Shadow the Hedgehog during cutscenes
// See https://bugs.dolphin-emu.org/issues/11458
out.Write("// Convert NaN to 1\n");
out.Write("if (isnan(coord.x)) coord.x = 1.0;\n");
out.Write("if (isnan(coord.y)) coord.y = 1.0;\n");
out.Write("if (isnan(coord.z)) coord.z = 1.0;\n");

// first transformation
switch (texinfo.texgentype)
{
Expand Down

0 comments on commit c9c5f7a

Please sign in to comment.