Merge pull request #9928 from Pokechu22/shadow-the-hedgehog-eyelids-NaN

Convert NaN to 1 when generating texture coordinates
This commit is contained in:
Léo Lam 2021-08-04 03:08:34 +02:00 committed by GitHub
commit c9c5f7a89c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 0 deletions

View File

@ -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]; const float* mat = &xfmem.posMatrices[srcVertex->texMtx[coordNum] * 4];
Vec3* dst = &dstVertex->texCoords[coordNum]; Vec3* dst = &dstVertex->texCoords[coordNum];

View File

@ -435,6 +435,13 @@ static void GenVertexShaderTexGens(APIType api_type, u32 num_texgen, ShaderCode&
out.Write(" coord.z = 1.0f;\n" out.Write(" coord.z = 1.0f;\n"
"\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(" // first transformation\n");
out.Write(" uint texgentype = {};\n", BitfieldExtract<&TexMtxInfo::texgentype>("texMtxInfo")); out.Write(" uint texgentype = {};\n", BitfieldExtract<&TexMtxInfo::texgentype>("texMtxInfo"));
out.Write(" float3 output_tex;\n" out.Write(" float3 output_tex;\n"

View File

@ -332,6 +332,13 @@ ShaderCode GenerateVertexShaderCode(APIType api_type, const ShaderHostConfig& ho
if (texinfo.inputform == TexInputForm::AB11) if (texinfo.inputform == TexInputForm::AB11)
out.Write("coord.z = 1.0;\n"); 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 // first transformation
switch (texinfo.texgentype) switch (texinfo.texgentype)
{ {