From 810eb70f0ec94bf2d1de5cbff52ddc04551fb227 Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Sat, 6 May 2023 17:18:17 -0700 Subject: [PATCH] DolphinAnalytics: Add READS_BOUNDING_BOX game quirk --- Source/Core/Core/DolphinAnalytics.cpp | 3 ++- Source/Core/Core/DolphinAnalytics.h | 5 +++++ Source/Core/VideoCommon/VideoBackendBase.cpp | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/DolphinAnalytics.cpp b/Source/Core/Core/DolphinAnalytics.cpp index b999b55e2a..4edb936343 100644 --- a/Source/Core/Core/DolphinAnalytics.cpp +++ b/Source/Core/Core/DolphinAnalytics.cpp @@ -136,7 +136,7 @@ void DolphinAnalytics::ReportGameStart() } // Keep in sync with enum class GameQuirk definition. -constexpr std::array GAME_QUIRKS_NAMES{ +constexpr std::array GAME_QUIRKS_NAMES{ "directly-reads-wiimote-input", "uses-DVDLowStopLaser", "uses-DVDLowOffset", @@ -164,6 +164,7 @@ constexpr std::array GAME_QUIRKS_NAMES{ "mismatched-gpu-normals-between-cp-and-xf", "mismatched-gpu-tex-coords-between-cp-and-xf", "mismatched-gpu-matrix-indices-between-cp-and-xf", + "reads-bounding-box", }; static_assert(GAME_QUIRKS_NAMES.size() == static_cast(GameQuirk::COUNT), "Game quirks names and enum definition are out of sync."); diff --git a/Source/Core/Core/DolphinAnalytics.h b/Source/Core/Core/DolphinAnalytics.h index 98c7d4a973..76e69f49c2 100644 --- a/Source/Core/Core/DolphinAnalytics.h +++ b/Source/Core/Core/DolphinAnalytics.h @@ -89,6 +89,11 @@ enum class GameQuirk // but testing is needed to find out which of these is actually used for what. MISMATCHED_GPU_MATRIX_INDICES_BETWEEN_CP_AND_XF, + // Only a few games use the Bounding Box feature. Note that every game initializes the bounding + // box registers (using BPMEM_CLEARBBOX1/BPMEM_CLEARBBOX2) on startup, as part of the SDK, but + // only a few read them (from PE_BBOX_LEFT etc.) + READS_BOUNDING_BOX, + COUNT, }; diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp index b6f4fee2f3..9d6ff70664 100644 --- a/Source/Core/VideoCommon/VideoBackendBase.cpp +++ b/Source/Core/VideoCommon/VideoBackendBase.cpp @@ -20,6 +20,7 @@ #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/Core.h" +#include "Core/DolphinAnalytics.h" #include "Core/System.h" // TODO: ugly @@ -171,6 +172,8 @@ u32 VideoBackendBase::Video_GetQueryResult(PerfQueryType type) u16 VideoBackendBase::Video_GetBoundingBox(int index) { + DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::READS_BOUNDING_BOX); + if (!g_ActiveConfig.bBBoxEnable) { static bool warn_once = true;