Merge pull request #11207 from Pokechu22/invalid-normal-count

VideoCommon: Treat invalid normal count as NormalTangentBinormal
This commit is contained in:
JMC47 2022-10-25 03:17:19 -04:00 committed by GitHub
commit 9ef7a3b44c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 6 deletions

View File

@ -270,11 +270,9 @@ static void CheckCPConfiguration(int vtx_attr_group)
num_xf_normals = 1; num_xf_normals = 1;
break; break;
case NormalCount::NormalTangentBinormal: case NormalCount::NormalTangentBinormal:
case NormalCount::Invalid: // see https://bugs.dolphin-emu.org/issues/13070
num_xf_normals = 3; num_xf_normals = 3;
break; break;
default:
PanicAlertFmt("xfmem.invtxspec.numnormals is invalid: {}", xfmem.invtxspec.numnormals);
break;
} }
if (num_cp_colors != xfmem.invtxspec.numcolors || num_cp_normals != num_xf_normals || if (num_cp_colors != xfmem.invtxspec.numcolors || num_cp_normals != num_xf_normals ||

View File

@ -45,12 +45,21 @@ enum class NormalCount : u32
{ {
None = 0, None = 0,
Normal = 1, Normal = 1,
NormalTangentBinormal = 2 NormalTangentBinormal = 2,
// Hardware testing indicates that this beahves the same as NormalTangentBinormal.
// Call of Duty: Black Ops uses this in some cases; see https://bugs.dolphin-emu.org/issues/13070
Invalid = 3,
}; };
template <> template <>
struct fmt::formatter<NormalCount> : EnumFormatter<NormalCount::NormalTangentBinormal> struct fmt::formatter<NormalCount> : EnumFormatter<NormalCount::Invalid>
{ {
constexpr formatter() : EnumFormatter({"None", "Normal only", "Normal, tangent, and binormal"}) {} static constexpr array_type names = {
"None",
"Normal only",
"Normal, tangent, and binormal",
"Invalid (Normal, tangent, and binormal)",
};
constexpr formatter() : EnumFormatter(names) {}
}; };
// Texture generation type // Texture generation type