diff --git a/Common/GPU/Vulkan/thin3d_vulkan.cpp b/Common/GPU/Vulkan/thin3d_vulkan.cpp index 88c4ee90d5..41edd287c4 100644 --- a/Common/GPU/Vulkan/thin3d_vulkan.cpp +++ b/Common/GPU/Vulkan/thin3d_vulkan.cpp @@ -825,6 +825,14 @@ VKContext::VKContext(VulkanContext *vulkan, bool splitSubmit) bugs_.Infest(Bugs::EQUAL_WZ_CORRUPTS_DEPTH); // At least one driver at the upper end of the range is known to be likely to suffer from the bug causing issue #13833 (Midnight Club map broken). bugs_.Infest(Bugs::MALI_STENCIL_DISCARD_BUG); + + // This started in driver 31 or 32. + if (VK_API_VERSION_MAJOR(deviceProps.driverVersion) >= 32) { + NOTICE_LOG(G3D, "Driver version %08x infested: major=%d", deviceProps.driverVersion, VK_API_VERSION_MAJOR(deviceProps.driverVersion)); + bugs_.Infest(Bugs::MALI_CONSTANT_LOAD_BUG); // See issue #15661 + } else { + NOTICE_LOG(G3D, "Driver version %08x not infested: major=%d", deviceProps.driverVersion, VK_API_VERSION_MAJOR(deviceProps.driverVersion)); + } } caps_.deviceID = deviceProps.deviceID; diff --git a/Common/GPU/thin3d.cpp b/Common/GPU/thin3d.cpp index 42349b4991..b5a2b89c2c 100644 --- a/Common/GPU/thin3d.cpp +++ b/Common/GPU/thin3d.cpp @@ -630,6 +630,7 @@ const char *Bugs::GetBugName(uint32_t bug) { case EQUAL_WZ_CORRUPTS_DEPTH: return "EQUAL_WZ_CORRUPTS_DEPTH"; case MALI_STENCIL_DISCARD_BUG: return "MALI_STENCIL_DISCARD_BUG"; case RASPBERRY_SHADER_COMP_HANG: return "RASPBERRY_SHADER_COMP_HANG"; + case MALI_CONSTANT_LOAD_BUG: return "MALI_CONSTANT_LOAD_BUG"; default: return "(N/A)"; } } diff --git a/Common/GPU/thin3d.h b/Common/GPU/thin3d.h index 45de0cc10c..7cccf0fd55 100644 --- a/Common/GPU/thin3d.h +++ b/Common/GPU/thin3d.h @@ -324,6 +324,7 @@ public: EQUAL_WZ_CORRUPTS_DEPTH = 7, MALI_STENCIL_DISCARD_BUG = 8, RASPBERRY_SHADER_COMP_HANG = 9, + MALI_CONSTANT_LOAD_BUG = 10, MAX_BUG, }; diff --git a/GPU/Common/VertexShaderGenerator.cpp b/GPU/Common/VertexShaderGenerator.cpp index a8f56be181..52624b6dcc 100644 --- a/GPU/Common/VertexShaderGenerator.cpp +++ b/GPU/Common/VertexShaderGenerator.cpp @@ -1052,6 +1052,9 @@ bool GenerateVertexShader(const VShaderID &id, char *buffer, const ShaderLanguag WRITE(p, " %sv_color0 = color0;\n", compat.vsOutPrefix); } else { WRITE(p, " %sv_color0 = u_matambientalpha;\n", compat.vsOutPrefix); + if (bugs.Has(Draw::Bugs::MALI_CONSTANT_LOAD_BUG) && g_Config.bVendorBugChecksEnabled) { + WRITE(p, " %sv_color0.r += 0.000001;\n", compat.vsOutPrefix); + } } if (lmode) WRITE(p, " %sv_color1 = splat3(0.0);\n", compat.vsOutPrefix);