From 36796abc089357a74dc10851190522137bb1d5ed Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Sat, 2 Dec 2023 14:14:58 -0800 Subject: VertexLoader: Fix wrong array being used if color 1 is present but color 0 isn't This worked correctly on the JIT vertex loaders, and for the equivalent case with texture coordinates. I'm not aware of any games this affects (but libogc does mention a semi-related scenario at https://github.com/devkitPro/libogc/blob/6bc0317c7d52063c2d2b48b721520093c76432a9/gc/ogc/gx.h#L1855-L1857.) --- Source/Core/VideoCommon/VertexLoader.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'Source/Core/VideoCommon/VertexLoader.cpp') diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp index c2d3c1bd29..89965f8710 100644 --- a/Source/Core/VideoCommon/VertexLoader.cpp +++ b/Source/Core/VideoCommon/VertexLoader.cpp @@ -149,9 +149,16 @@ void VertexLoader::CompileVertexTranslator() VertexLoader_Color::GetFunction(m_VtxDesc.low.Color[i], m_VtxAttr.GetColorFormat(i)); if (pFunc != nullptr) + { WriteCall(pFunc); + } else + { ASSERT(m_VtxDesc.low.Color[i] == VertexComponentFormat::NotPresent); + // Keep colIndex in sync if color 0 is absent but color 1 is present + if (i == 0 && m_VtxDesc.low.Color[1] != VertexComponentFormat::NotPresent) + WriteCall(VertexLoader_Color::GetDummyFunction()); + } if (m_VtxDesc.low.Color[i] != VertexComponentFormat::NotPresent) { -- cgit v1.2.3