From 80d1056ddf6dca7dbcd86a2ec34e8f5760800455 Mon Sep 17 00:00:00 2001
From: Stenzek <stenzek@gmail.com>
Date: Sun, 24 Mar 2024 19:57:18 +1000
Subject: [PATCH] GPU: Add virtual call when buffers are swapped

---
 src/core/gpu.cpp    | 5 +++++
 src/core/gpu.h      | 1 +
 src/core/gpu_hw.cpp | 5 +++++
 src/core/gpu_hw.h   | 1 +
 4 files changed, 12 insertions(+)

diff --git a/src/core/gpu.cpp b/src/core/gpu.cpp
index 1ca56caad..3c25aac2d 100644
--- a/src/core/gpu.cpp
+++ b/src/core/gpu.cpp
@@ -1291,6 +1291,7 @@ void GPU::WriteGP1(u32 value)
         SynchronizeCRTC();
         m_crtc_state.regs.display_address_start = new_value;
         UpdateCRTCDisplayParameters();
+        OnBufferSwapped();
       }
     }
     break;
@@ -2833,6 +2834,10 @@ void GPU::DrawRendererStats()
 {
 }
 
+void GPU::OnBufferSwapped()
+{
+}
+
 void GPU::GetStatsString(SmallStringBase& str)
 {
   if (IsHardwareRenderer())
diff --git a/src/core/gpu.h b/src/core/gpu.h
index 5f141a643..c6e2cc491 100644
--- a/src/core/gpu.h
+++ b/src/core/gpu.h
@@ -318,6 +318,7 @@ protected:
   virtual void UpdateCLUT(GPUTexturePaletteReg reg, bool clut_is_8bit) = 0;
   virtual void UpdateDisplay() = 0;
   virtual void DrawRendererStats();
+  virtual void OnBufferSwapped();
 
   ALWAYS_INLINE_RELEASE void AddDrawTriangleTicks(s32 x1, s32 y1, s32 x2, s32 y2, s32 x3, s32 y3, bool shaded,
                                                   bool textured, bool semitransparent)
diff --git a/src/core/gpu_hw.cpp b/src/core/gpu_hw.cpp
index b2bac5056..ed53f6b6c 100644
--- a/src/core/gpu_hw.cpp
+++ b/src/core/gpu_hw.cpp
@@ -3412,6 +3412,11 @@ void GPU_HW::UpdateDownsamplingLevels()
   g_gpu_device->RecycleTexture(std::move(m_downsample_texture));
 }
 
+void GPU_HW::OnBufferSwapped()
+{
+  GL_INS("OnBufferSwapped()");
+}
+
 void GPU_HW::DownsampleFramebuffer()
 {
   GPUTexture* source = m_display_texture;
diff --git a/src/core/gpu_hw.h b/src/core/gpu_hw.h
index a2907f335..9b3ba8fa0 100644
--- a/src/core/gpu_hw.h
+++ b/src/core/gpu_hw.h
@@ -200,6 +200,7 @@ private:
   void UpdateCLUT(GPUTexturePaletteReg reg, bool clut_is_8bit) override;
   void FlushRender() override;
   void DrawRendererStats() override;
+  void OnBufferSwapped() override;
 
   bool BlitVRAMReplacementTexture(const TextureReplacementTexture* tex, u32 dst_x, u32 dst_y, u32 width, u32 height);