summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2022-10-25 03:17:19 -0400
committerGitHub <noreply@github.com>2022-10-25 03:17:19 -0400
commit9ef7a3b44c378ee4e51e5fbc1d75903a85f15b5c (patch)
treebf450ee7813c94f5bf941738359907fe79f26392 /Source/Core
parentb66793194e7b9e34080764e5985d49055ccaa37d (diff)
parent574939b6831517857d46dffc7fad4ca259e88183 (diff)
Merge pull request #11207 from Pokechu22/invalid-normal-count
VideoCommon: Treat invalid normal count as NormalTangentBinormal
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/VideoCommon/VertexLoaderManager.cpp4
-rw-r--r--Source/Core/VideoCommon/XFMemory.h15
2 files changed, 13 insertions, 6 deletions
diff --git a/Source/Core/VideoCommon/VertexLoaderManager.cpp b/Source/Core/VideoCommon/VertexLoaderManager.cpp
index 08dbe8a4d5..55f3514486 100644
--- a/Source/Core/VideoCommon/VertexLoaderManager.cpp
+++ b/Source/Core/VideoCommon/VertexLoaderManager.cpp
@@ -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 ||
diff --git a/Source/Core/VideoCommon/XFMemory.h b/Source/Core/VideoCommon/XFMemory.h
index aa8a28a608..71d38cb8bd 100644
--- a/Source/Core/VideoCommon/XFMemory.h
+++ b/Source/Core/VideoCommon/XFMemory.h
@@ -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