diff --git a/src/pse-sdl/sdl_interface.cpp b/src/pse-sdl/sdl_interface.cpp index e3ea5f356..7e90f252f 100644 --- a/src/pse-sdl/sdl_interface.cpp +++ b/src/pse-sdl/sdl_interface.cpp @@ -390,6 +390,8 @@ void SDLInterface::RenderImGui() RenderMainMenuBar(); RenderOSDMessages(); + m_system->RenderUI(); + ImGui::Render(); } diff --git a/src/pse/gpu.cpp b/src/pse/gpu.cpp index f512d0f83..7a8b4a79a 100644 --- a/src/pse/gpu.cpp +++ b/src/pse/gpu.cpp @@ -126,6 +126,8 @@ bool GPU::DoState(StateWrapper& sw) return !sw.HasError(); } +void GPU::RenderUI() {} + void GPU::UpdateGPUSTAT() { m_GPUSTAT.ready_to_send_vram = !m_GPUREAD_buffer.empty(); diff --git a/src/pse/gpu.h b/src/pse/gpu.h index c601b5fff..5b1c72c66 100644 --- a/src/pse/gpu.h +++ b/src/pse/gpu.h @@ -22,6 +22,7 @@ public: virtual bool Initialize(System* system, DMA* dma, InterruptController* interrupt_controller, Timers* timers); virtual void Reset(); virtual bool DoState(StateWrapper& sw); + virtual void RenderUI(); u32 ReadRegister(u32 offset); void WriteRegister(u32 offset, u32 value); diff --git a/src/pse/gpu_hw_opengl.cpp b/src/pse/gpu_hw_opengl.cpp index 6921f420d..65e0af9ec 100644 --- a/src/pse/gpu_hw_opengl.cpp +++ b/src/pse/gpu_hw_opengl.cpp @@ -2,6 +2,7 @@ #include "YBaseLib/Assert.h" #include "YBaseLib/Log.h" #include "host_interface.h" +#include "imgui.h" #include "system.h" Log_SetChannel(GPU_HW_OpenGL); @@ -32,6 +33,37 @@ void GPU_HW_OpenGL::Reset() ClearFramebuffer(); } +void GPU_HW_OpenGL::RenderUI() +{ + GPU_HW::RenderUI(); + + if (ImGui::Begin("GL Render Statistics")) + { + ImGui::Columns(2); + + ImGui::TextUnformatted("Texture Page Updates:"); + ImGui::NextColumn(); + ImGui::Text("%u", m_stats.num_texture_page_updates); + ImGui::NextColumn(); + + ImGui::TextUnformatted("Batches Drawn:"); + ImGui::NextColumn(); + ImGui::Text("%u", m_stats.num_batches); + ImGui::NextColumn(); + + ImGui::TextUnformatted("Vertices Drawn: "); + ImGui::NextColumn(); + ImGui::Text("%u", m_stats.num_vertices); + ImGui::NextColumn(); + + ImGui::Columns(1); + } + + ImGui::End(); + + m_stats = {}; +} + std::tuple GPU_HW_OpenGL::ConvertToFramebufferCoordinates(s32 x, s32 y) { return std::make_tuple(x, static_cast(static_cast(VRAM_HEIGHT) - y)); @@ -319,6 +351,8 @@ void GPU_HW_OpenGL::CopyVRAM(u32 src_x, u32 src_y, u32 dst_x, u32 dst_y, u32 wid void GPU_HW_OpenGL::UpdateTexturePageTexture() { + m_stats.num_texture_page_updates++; + glBindFramebuffer(GL_FRAMEBUFFER, m_texture_page_fbo_id); m_framebuffer_texture->Bind(); @@ -345,6 +379,9 @@ void GPU_HW_OpenGL::FlushRender() if (m_batch.vertices.empty()) return; + m_stats.num_batches++; + m_stats.num_vertices += static_cast(m_batch.vertices.size()); + glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glEnable(GL_SCISSOR_TEST); diff --git a/src/pse/gpu_hw_opengl.h b/src/pse/gpu_hw_opengl.h index 8287706f1..ebfef049d 100644 --- a/src/pse/gpu_hw_opengl.h +++ b/src/pse/gpu_hw_opengl.h @@ -15,6 +15,7 @@ public: bool Initialize(System* system, DMA* dma, InterruptController* interrupt_controller, Timers* timers) override; void Reset() override; + void RenderUI() override; protected: void UpdateDisplay() override; @@ -26,6 +27,13 @@ protected: void FlushRender() override; private: + struct GLStats + { + u32 num_texture_page_updates; + u32 num_batches; + u32 num_vertices; + }; + std::tuple ConvertToFramebufferCoordinates(s32 x, s32 y); void CreateFramebuffer(); @@ -56,4 +64,6 @@ private: GL::Program m_color_program; GL::Program m_blended_texture_program; std::array m_texture_page_programs; + + GLStats m_stats = {}; }; diff --git a/src/pse/pse.vcxproj b/src/pse/pse.vcxproj index d2d7adbab..49142f50d 100644 --- a/src/pse/pse.vcxproj +++ b/src/pse/pse.vcxproj @@ -238,7 +238,7 @@ ENABLE_VOODOO=1;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) true ProgramDatabase - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) true false stdcpp17 @@ -259,7 +259,7 @@ ENABLE_VOODOO=1;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) true ProgramDatabase - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) true false stdcpp17 @@ -280,7 +280,7 @@ ENABLE_VOODOO=1;_ITERATOR_DEBUG_LEVEL=1;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUGFAST;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) true ProgramDatabase - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) Default true false @@ -303,7 +303,7 @@ ENABLE_VOODOO=1;_ITERATOR_DEBUG_LEVEL=1;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUGFAST;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) true ProgramDatabase - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) Default true false @@ -325,7 +325,7 @@ MaxSpeed true ENABLE_VOODOO=1;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) true false stdcpp17 @@ -347,7 +347,7 @@ MaxSpeed true ENABLE_VOODOO=1;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) true true stdcpp17 @@ -370,7 +370,7 @@ MaxSpeed true ENABLE_VOODOO=1;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) true false stdcpp17 @@ -392,7 +392,7 @@ MaxSpeed true ENABLE_VOODOO=1;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) + $(SolutionDir)dep\msvc\include;$(SolutionDir)dep\YBaseLib\Include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\imgui\include;$(SolutionDir)src;%(AdditionalIncludeDirectories) true true stdcpp17 diff --git a/src/pse/system.cpp b/src/pse/system.cpp index 2b9f2bfd4..3c4390e90 100644 --- a/src/pse/system.cpp +++ b/src/pse/system.cpp @@ -135,6 +135,11 @@ void System::RunFrame() } } +void System::RenderUI() +{ + m_gpu->RenderUI(); +} + bool System::LoadEXE(const char* filename) { #pragma pack(push, 1) diff --git a/src/pse/system.h b/src/pse/system.h index 560ad2444..3bd18ba43 100644 --- a/src/pse/system.h +++ b/src/pse/system.h @@ -40,6 +40,7 @@ public: bool SaveState(ByteStream* state); void RunFrame(); + void RenderUI(); bool LoadEXE(const char* filename); bool SetExpansionROM(const char* filename);