Mali driver bug workaround for driver 32+.

See #15661

Hope this small bias won't break things.
This commit is contained in:
Henrik Rydgård 2022-07-17 22:50:37 +02:00
parent 3dd2bd0589
commit 1fd80646cb
4 changed files with 13 additions and 0 deletions

View File

@ -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;

View File

@ -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)";
}
}

View File

@ -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,
};

View File

@ -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);