From e76a5b1d3da256f7952146147891cf6a89546315 Mon Sep 17 00:00:00 2001 From: Lubos Date: Fri, 10 May 2024 19:40:13 +0200 Subject: [PATCH] OpenXR - Gran Turismo projection hack --- Common/VR/PPSSPPVR.cpp | 4 +++- Core/Compatibility.cpp | 1 + Core/Compatibility.h | 1 + assets/compatvr.ini | 11 +++++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Common/VR/PPSSPPVR.cpp b/Common/VR/PPSSPPVR.cpp index b16a57a9c7..a3a735d10c 100644 --- a/Common/VR/PPSSPPVR.cpp +++ b/Common/VR/PPSSPPVR.cpp @@ -811,7 +811,9 @@ void UpdateVRParams(float* projMatrix) { void UpdateVRProjection(float* projMatrix, float* leftEye, float* rightEye) { float output[16]; for (int i = 0; i < 16; i++) { - if (fabs(projMatrix[i]) > 0) { + if (PSP_CoreParameter().compat.vrCompat().ProjectionHack && ((i == 8) || (i == 9))) { + output[i] = 0; + } else if (fabs(projMatrix[i]) > 0) { output[i] = vrMatrix[VR_PROJECTION_MATRIX][i]; if ((output[i] > 0) != (projMatrix[i] > 0)) { output[i] *= -1.0f; diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index 6494760a24..bbc1e34c42 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -145,6 +145,7 @@ void Compatibility::CheckVRSettings(IniFile &iniFile, const std::string &gameID) CheckSetting(iniFile, gameID, "ForceMono", &vrCompat_.ForceMono); CheckSetting(iniFile, gameID, "IdentityViewHack", &vrCompat_.IdentityViewHack); CheckSetting(iniFile, gameID, "MirroringVariant", &vrCompat_.MirroringVariant); + CheckSetting(iniFile, gameID, "ProjectionHack", &vrCompat_.ProjectionHack); CheckSetting(iniFile, gameID, "Skyplane", &vrCompat_.Skyplane); CheckSetting(iniFile, gameID, "UnitsPerMeter", &vrCompat_.UnitsPerMeter); diff --git a/Core/Compatibility.h b/Core/Compatibility.h index 1739112d36..82cbabbf4f 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -115,6 +115,7 @@ struct VRCompat { bool ForceFlatScreen; bool IdentityViewHack; int MirroringVariant; + bool ProjectionHack; bool Skyplane; float UnitsPerMeter; }; diff --git a/assets/compatvr.ini b/assets/compatvr.ini index 84fac0d978..e05251c5a5 100644 --- a/assets/compatvr.ini +++ b/assets/compatvr.ini @@ -110,6 +110,17 @@ ULES00035 = 3 ULUS10014 = 3 +[ProjectionHack] +# Forces ignoring of projection matrix pivot point. + +# Gran Turismo: The Real Driving Simulator +NPJG00027 = true +UCAS40265 = true +UCES01245 = true +UCJS10100 = true +UCUS98632 = true + + [Skyplane] # Workaround to remove the background skyplane and add clearing framebuffer with a fog color.