Compare commits

..

5 Commits

Author SHA1 Message Date
Marcos Slomp
22abcd272f cosmetic: making things a bit more idiomatic 2026-06-16 11:30:21 -07:00
Marcos Slomp
32b712c120 force inline helper method 2026-06-16 11:24:47 -07:00
Marcos Slomp
704b5c4030 refactor sentinel value 2026-06-16 11:24:27 -07:00
Marcos Slomp
dd6962b42c use queryId arg, not m_tail member 2026-06-16 11:24:12 -07:00
Marcos Slomp
16cfd25320 potentially faster timestamp query result check
Co-authored-by: Sergio Acereda <sergio.acereda@gmail.com>
2026-06-16 08:36:55 -07:00
4 changed files with 35 additions and 21 deletions

View File

@@ -1,13 +0,0 @@
diff --git a/backends/imgui_impl_opengl3.cpp b/backends/imgui_impl_opengl3.cpp
index a9e32b7ac..2cdbc4812 100644
--- a/backends/imgui_impl_opengl3.cpp
+++ b/backends/imgui_impl_opengl3.cpp
@@ -1069,7 +1069,7 @@ bool ImGui_ImplOpenGL3_Init(const char* glsl_version)
bd->HasPolygonMode = (!bd->GlProfileIsES2 && !bd->GlProfileIsES3);
#endif
#ifdef IMGUI_IMPL_OPENGL_MAY_HAVE_BIND_SAMPLER
- bd->HasBindSampler = (bd->GlVersion >= 330 || bd->GlProfileIsES3);
+ //bd->HasBindSampler = (bd->GlVersion >= 330 || bd->GlProfileIsES3);
#endif
bd->HasClipOrigin = (bd->GlVersion >= 450);
#ifdef IMGUI_IMPL_OPENGL_HAS_EXTENSIONS

View File

@@ -142,7 +142,6 @@ CPMAddPackage(
PATCHES
"${CMAKE_CURRENT_LIST_DIR}/imgui-emscripten.patch"
"${CMAKE_CURRENT_LIST_DIR}/imgui-loader.patch"
"${CMAKE_CURRENT_LIST_DIR}/imgui-no-samplers.patch"
)
set(IMGUI_SOURCES
@@ -272,7 +271,7 @@ if(NOT EMSCRIPTEN)
CPMAddPackage(
NAME pugixml
GITHUB_REPOSITORY zeux/pugixml
GIT_TAG v1.16
GIT_TAG v1.15
EXCLUDE_FROM_ALL TRUE
)
add_library(TracyPugixml INTERFACE)

View File

@@ -214,7 +214,6 @@ bool View::DrawConnection()
else
{
auto val = int( p.val );
ImGui::SetNextItemWidth( 100 * GetScale() );
if( ImGui::InputInt( "", &val, 1, 100, ImGuiInputTextFlags_EnterReturnsTrue ) )
{
m_worker.SetParameter( idx, int32_t( val ) );

View File

@@ -102,6 +102,7 @@ public:
: m_context( GetGpuCtxCounter().fetch_add( 1, std::memory_order_relaxed ) )
, m_head( 0 )
, m_tail( 0 )
, m_supportsQueryBufferObject( false )
{
ZoneScopedC( Color::Red4 );
@@ -113,6 +114,14 @@ public:
"OpenGL context does not support GL_ARB_timer_query." );
}
// check for GL_QUERY_RESULT_NO_WAIT support
m_supportsQueryBufferObject = CheckFeature( "GL_ARB_query_buffer_object" );
if( !m_supportsQueryBufferObject )
{
Profiler::LogString( MessageSourceType::Tracy, MessageSeverity::Info, 0, 0,
"OpenGL context does not support GL_ARB_query_buffer_object." );
}
GLint bits;
glGetQueryiv( GL_TIMESTAMP, GL_QUERY_COUNTER_BITS, &bits );
if( bits == 0 )
@@ -197,12 +206,8 @@ public:
while( m_tail != m_head )
{
GLint available;
glGetQueryObjectiv( m_query[m_tail], GL_QUERY_RESULT_AVAILABLE, &available );
if( !available ) return;
uint64_t time;
glGetQueryObjectui64v( m_query[m_tail], GL_QUERY_RESULT, &time );
if( !GetTimestamp(time, m_tail) ) return;
TracyLfqPrepare( QueueType::GpuTime );
MemWrite( &item->gpuTime.gpuTime, (int64_t)time );
@@ -239,6 +244,28 @@ private:
return exts && strstr( exts, feature ) != nullptr;
}
tracy_force_inline bool GetTimestamp( uint64_t& timestamp, unsigned int queryId )
{
if( m_supportsQueryBufferObject )
{
constexpr uint64_t sentinel = ~uint64_t(0);
uint64_t time = sentinel;
glGetQueryObjectui64v( m_query[queryId], GL_QUERY_RESULT_NO_WAIT, &time );
if ( time == sentinel ) return false;
timestamp = time;
}
else
{
GLint available;
glGetQueryObjectiv( m_query[queryId], GL_QUERY_RESULT_AVAILABLE, &available );
if( available == GL_FALSE ) return false;
uint64_t time;
glGetQueryObjectui64v( m_query[queryId], GL_QUERY_RESULT, &time );
timestamp = time;
}
return true;
}
#ifdef TRACY_OPENGL_AUTO_CALIBRATION
// Monotonic host ns for the inter-calibration interval (cpuDelta), kept
// separate from Profiler::GetTime() as in the D3D12/Vulkan backends.
@@ -298,6 +325,8 @@ private:
#ifdef TRACY_OPENGL_AUTO_CALIBRATION
int64_t m_prevCalibration; // host-ns timestamp of the last emitted calibration
#endif
bool m_supportsQueryBufferObject;
};
class GpuCtxScope