VideoCommon: Treat invalid normal count as NormalTangentBinormal

See https://bugs.dolphin-emu.org/issues/13070.
This commit is contained in:
Pokechu22 2022-10-24 22:36:43 -07:00
parent 4787b25a7f
commit 574939b683
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;
break;
case NormalCount::NormalTangentBinormal:
case NormalCount::Invalid: // see https://bugs.dolphin-emu.org/issues/13070
num_xf_normals = 3;
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 ||

View File

@ -45,12 +45,21 @@ enum class NormalCount : u32
{
None = 0,
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 <>
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