From e5e6af41a67d6e0301be3d43c9341a94b6842022 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Mon, 7 Aug 2017 15:58:26 +0300 Subject: [PATCH] gl: Fix occlusion statistics clearing --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 14 ++++++++++++-- rpcs3/Emu/RSX/GL/GLGSRender.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 064523406c..8b5cfe7d27 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -532,6 +532,10 @@ void GLGSRender::end() m_draw_calls++; + if (zcull_task_queue.active_query && + zcull_task_queue.active_query->active) + zcull_task_queue.active_query->num_draws++; + synchronize_buffers(); rsx::thread::end(); @@ -1234,6 +1238,7 @@ void GLGSRender::check_zcull_status(bool framebuffer_swap, bool force_read) glBeginQuery(GL_ANY_SAMPLES_PASSED, query->handle); query->active = true; query->result = 0; + query->num_draws = 0; } } } @@ -1243,10 +1248,15 @@ void GLGSRender::clear_zcull_stats(u32 type) if (type == CELL_GCM_ZPASS_PIXEL_CNT) { if (zcull_task_queue.active_query && - zcull_task_queue.active_query->active) + zcull_task_queue.active_query->active && + zcull_task_queue.active_query->num_draws > 0) { - //discard active query if any + //discard active query results check_zcull_status(false, true); + zcull_task_queue.active_query->pending = false; + + //re-enable cull stats if stats are enabled + check_zcull_status(false, false); } current_zcull_stats.clear(); diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.h b/rpcs3/Emu/RSX/GL/GLGSRender.h index 4856dc57ae..321d8f5ced 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.h +++ b/rpcs3/Emu/RSX/GL/GLGSRender.h @@ -108,6 +108,7 @@ private: { GLuint handle; GLint result; + GLint num_draws; bool pending; bool active; };