From 02ea4b5efa3289608c783551ad87569fcbb3af82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 10 Apr 2018 14:37:32 +0200 Subject: [PATCH] Inner interpreter safety check - in hw skinning mode, we need to flush if any part of the vertex format changes. --- GPU/GPUCommon.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 0fb4318eb0..66e2dce1fe 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -1553,6 +1553,10 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { goto bail; #endif + uint32_t vtypeCheckMask = ~GE_VTYPE_WEIGHTCOUNT_MASK; + if (!g_Config.bSoftwareSkinning) + vtypeCheckMask = 0xFFFFFFFF; + while (src != stall) { uint32_t data = *src; switch (data >> 24) { @@ -1581,7 +1585,7 @@ void GPUCommon::Execute_Prim(u32 op, u32 diff) { { uint32_t diff = data ^ vertexType; // don't mask upper bits, vertexType is unmasked - if (diff & ~GE_VTYPE_WEIGHTCOUNT_MASK) { + if (diff & vtypeCheckMask) { goto bail; } else { vertexType = data;