From cf128e42c896d1b969077c9e0b68ceb93b94cd7f Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Thu, 24 Mar 2022 19:28:10 +0100 Subject: [PATCH] Fixed total frame GPU time query --- neo/renderer/NVRHI/RenderBackend_NVRHI.cpp | 5 +++++ neo/renderer/RenderBackend.cpp | 1 - neo/renderer/RenderLog.cpp | 10 ++++++++-- neo/renderer/RenderLog.h | 2 +- neo/renderer/RenderSystem.cpp | 2 +- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp index a22c2b82..a43a7012 100644 --- a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp @@ -673,6 +673,9 @@ void idRenderBackend::GL_StartFrame() deviceManager->BeginFrame(); commandList->open(); + + renderLog.StartFrame( commandList ); + renderLog.OpenMainBlock( MRB_GPU_TIME ); } /* @@ -682,6 +685,8 @@ idRenderBackend::GL_EndFrame */ void idRenderBackend::GL_EndFrame() { + renderLog.CloseMainBlock( MRB_GPU_TIME ); + commandList->close(); deviceManager->GetDevice()->executeCommandList( commandList ); diff --git a/neo/renderer/RenderBackend.cpp b/neo/renderer/RenderBackend.cpp index 4a8d9635..e085451c 100644 --- a/neo/renderer/RenderBackend.cpp +++ b/neo/renderer/RenderBackend.cpp @@ -5911,7 +5911,6 @@ void idRenderBackend::ExecuteBackEndCommands( const emptyCommand_t* cmds ) } GL_StartFrame(); - renderLog.StartFrame( commandList ); void* textureId = globalImages->hierarchicalZbufferImage->GetTextureID(); globalImages->LoadDeferredImages( commandList ); diff --git a/neo/renderer/RenderLog.cpp b/neo/renderer/RenderLog.cpp index b874342d..613cb3ea 100644 --- a/neo/renderer/RenderLog.cpp +++ b/neo/renderer/RenderLog.cpp @@ -406,15 +406,21 @@ void idRenderLog::OpenMainBlock( renderLogMainBlock_t block ) idRenderLog::CloseMainBlock ======================== */ -void idRenderLog::CloseMainBlock() +void idRenderLog::CloseMainBlock( int _block ) { // SRS - Use glConfig.timerQueryAvailable flag to control timestamp capture for all platforms if( glConfig.timerQueryAvailable ) { + renderLogMainBlock_t block = mainBlock; + + if( _block != -1 ) + { + block = renderLogMainBlock_t( _block ); + } #if defined( USE_NVRHI ) - int timerIndex = mainBlock + frameParity * MRB_TOTAL; + int timerIndex = block + frameParity * MRB_TOTAL; commandList->endTimerQuery( timerQueries[ timerIndex ] ); diff --git a/neo/renderer/RenderLog.h b/neo/renderer/RenderLog.h index d9871401..44bbec17 100644 --- a/neo/renderer/RenderLog.h +++ b/neo/renderer/RenderLog.h @@ -109,7 +109,7 @@ public: void OpenBlock( const char* label, const idVec4& color = colorBlack ); void CloseBlock(); void OpenMainBlock( renderLogMainBlock_t block ); - void CloseMainBlock(); + void CloseMainBlock( int block = -1 ); void Printf( VERIFY_FORMAT_STRING const char* fmt, ... ) {} diff --git a/neo/renderer/RenderSystem.cpp b/neo/renderer/RenderSystem.cpp index 42857a91..94c17ff0 100644 --- a/neo/renderer/RenderSystem.cpp +++ b/neo/renderer/RenderSystem.cpp @@ -138,7 +138,7 @@ void idRenderSystemLocal::RenderCommandBuffers( const emptyCommand_t* const cmdH { #if defined(USE_NVRHI) - renderLog.FetchGPUTimers( backend.pc ); + //renderLog.FetchGPUTimers( backend.pc ); // SRS - For OSX skip total rendering time query due to missing GL_TIMESTAMP support in Apple OpenGL 4.1, will calculate it inside SwapCommandBuffers_FinishRendering instead #elif !defined(USE_VULKAN) && !defined(__APPLE__)