From eaac8656f0c81c2c492f93cc36c563f6e0b34487 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Sun, 26 Nov 2023 10:33:43 +0800 Subject: [PATCH 1/2] Try to fix sceGeDrawSync timing Not EatCycles when SDK < 6.60 fix #15224 --- Core/HLE/sceGe.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/sceGe.cpp b/Core/HLE/sceGe.cpp index 639791f687be..bc0b9aa8f2e5 100644 --- a/Core/HLE/sceGe.cpp +++ b/Core/HLE/sceGe.cpp @@ -391,7 +391,7 @@ static u32 sceGeDrawSync(u32 mode) { //wait/check entire drawing state if (PSP_CoreParameter().compat.flags().DrawSyncEatCycles) hleEatCycles(500000); //HACK(?) : Potential fix for Crash Tag Team Racing and a few Gundam games - else + else if (sceKernelGetCompiledSdkVersion() < 0x06060010) hleEatCycles(1240); DEBUG_LOG(SCEGE, "sceGeDrawSync(mode=%d) (0=wait for completion, 1=peek)", mode); return gpu->DrawSync(mode); From 5833057a8d094bf4d16c8230938246834a24db46 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 28 Nov 2023 20:56:20 +0800 Subject: [PATCH 2/2] Change to compat --- Core/Compatibility.cpp | 1 + Core/Compatibility.h | 1 + Core/HLE/sceGe.cpp | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index 29a8874039a4..9a46b1f56785 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -134,6 +134,7 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { CheckSetting(iniFile, gameID, "Fontltn12Hack", &flags_.Fontltn12Hack); CheckSetting(iniFile, gameID, "LoadCLUTFromCurrentFrameOnly", &flags_.LoadCLUTFromCurrentFrameOnly); CheckSetting(iniFile, gameID, "ForceUMDReadSpeed", &flags_.ForceUMDReadSpeed); + CheckSetting(iniFile, gameID, "DrawSyncEatFewCycles", &flags_.DrawSyncEatFewCycles); } void Compatibility::CheckVRSettings(IniFile &iniFile, const std::string &gameID) { diff --git a/Core/Compatibility.h b/Core/Compatibility.h index a917d17e5e22..9e1a476bc7e8 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -104,6 +104,7 @@ struct CompatFlags { bool Fontltn12Hack; bool LoadCLUTFromCurrentFrameOnly; bool ForceUMDReadSpeed; + bool DrawSyncEatFewCycles; }; struct VRCompat { diff --git a/Core/HLE/sceGe.cpp b/Core/HLE/sceGe.cpp index bc0b9aa8f2e5..68ca519ae836 100644 --- a/Core/HLE/sceGe.cpp +++ b/Core/HLE/sceGe.cpp @@ -391,7 +391,9 @@ static u32 sceGeDrawSync(u32 mode) { //wait/check entire drawing state if (PSP_CoreParameter().compat.flags().DrawSyncEatCycles) hleEatCycles(500000); //HACK(?) : Potential fix for Crash Tag Team Racing and a few Gundam games - else if (sceKernelGetCompiledSdkVersion() < 0x06060010) + else if (PSP_CoreParameter().compat.flags().DrawSyncEatFewCycles) + hleEatCycles(31); + else hleEatCycles(1240); DEBUG_LOG(SCEGE, "sceGeDrawSync(mode=%d) (0=wait for completion, 1=peek)", mode); return gpu->DrawSync(mode);