mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-27 12:21:11 +00:00
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.
This commit is contained in:
@@ -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) \
|
||||
|
||||
@@ -34,7 +34,8 @@ std::vector<GPUCounter> GLReplay::EnumerateCounters()
|
||||
{
|
||||
std::vector<GPUCounter> 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<CounterResult> GLReplay::FetchCounters(const std::vector<GPUCounter>
|
||||
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<CounterResult> GLReplay::FetchCounters(const std::vector<GPUCounter>
|
||||
}
|
||||
}
|
||||
|
||||
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++)
|
||||
|
||||
Reference in New Issue
Block a user