From e696c86170e785ef2f4b5e1c2cedb68e1d650e53 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 5 Jul 2019 14:02:33 +0100 Subject: [PATCH] Fix checks for extensions in GL counters. Closes #1442 * GLES doesn't support ARB_occlusion_query2 at all, and ARB_timer_query (or equivalent) may not be available for durations. * Check for ARB_query_buffer_object before pushing or popping query buffer binding. --- renderdoc/driver/gl/gl_common.h | 5 ++++- renderdoc/driver/gl/gl_counters.cpp | 13 +++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/gl/gl_common.h b/renderdoc/driver/gl/gl_common.h index 48a074d29..e6fbdf83b 100644 --- a/renderdoc/driver/gl/gl_common.h +++ b/renderdoc/driver/gl/gl_common.h @@ -687,7 +687,8 @@ extern bool IsGLES; EXT_TO_CHECK(33, 30, ARB_explicit_attrib_location) \ EXT_TO_CHECK(33, 30, ARB_sampler_objects) \ EXT_TO_CHECK(33, 30, ARB_texture_swizzle) \ - EXT_TO_CHECK(33, 30, ARB_occlusion_query2) \ + EXT_TO_CHECK(33, 99, ARB_occlusion_query2) \ + EXT_TO_CHECK(33, 99, ARB_timer_query) \ EXT_TO_CHECK(40, 32, ARB_draw_buffers_blend) \ EXT_TO_CHECK(40, 31, ARB_draw_indirect) \ EXT_TO_CHECK(40, 32, ARB_gpu_shader5) \ @@ -787,6 +788,8 @@ extern bool IsGLES; EXT_COMP_CHECK(ARB_texture_storage_multisample, OES_texture_storage_multisample_2d_array) \ EXT_COMP_CHECK(ARB_texture_view, EXT_texture_view) \ EXT_COMP_CHECK(ARB_texture_view, OES_texture_view) \ + EXT_COMP_CHECK(ARB_timer_query, EXT_timer_query) \ + EXT_COMP_CHECK(ARB_timer_query, EXT_disjoint_timer_query) \ EXT_COMP_CHECK(ARB_viewport_array, NV_viewport_array) \ EXT_COMP_CHECK(ARB_viewport_array, OES_viewport_array) \ EXT_COMP_CHECK(ARB_texture_buffer_object, EXT_texture_buffer) \ diff --git a/renderdoc/driver/gl/gl_counters.cpp b/renderdoc/driver/gl/gl_counters.cpp index ef8ef5298..cde995d31 100644 --- a/renderdoc/driver/gl/gl_counters.cpp +++ b/renderdoc/driver/gl/gl_counters.cpp @@ -34,7 +34,8 @@ std::vector GLReplay::EnumerateCounters() { std::vector ret; - ret.push_back(GPUCounter::EventGPUDuration); + if(HasExt[ARB_timer_query]) + ret.push_back(GPUCounter::EventGPUDuration); if(HasExt[ARB_occlusion_query2]) ret.push_back(GPUCounter::SamplesPassed); @@ -523,8 +524,11 @@ std::vector GLReplay::FetchCounters(const std::vector double nanosToSecs = 1.0 / 1000000000.0; GLuint prevbind = 0; - m_pDriver->glGetIntegerv(eGL_QUERY_BUFFER_BINDING, (GLint *)&prevbind); - m_pDriver->glBindBuffer(eGL_QUERY_BUFFER, 0); + if(HasExt[ARB_query_buffer_object]) + { + m_pDriver->glGetIntegerv(eGL_QUERY_BUFFER_BINDING, (GLint *)&prevbind); + m_pDriver->glBindBuffer(eGL_QUERY_BUFFER, 0); + } for(size_t i = 0; i < ctx.queries.size(); i++) { @@ -556,7 +560,8 @@ std::vector GLReplay::FetchCounters(const std::vector } } - m_pDriver->glBindBuffer(eGL_QUERY_BUFFER, prevbind); + if(HasExt[ARB_query_buffer_object]) + m_pDriver->glBindBuffer(eGL_QUERY_BUFFER, prevbind); for(size_t i = 0; i < ctx.queries.size(); i++) for(uint32_t c = 0; c < counters.size(); c++)