From ed6d08b70d775852f4827471814c83eba3606aaa Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 16 Apr 2013 16:39:46 -0700 Subject: [PATCH] fix "traceGpuCompletion" debug feature eglCreateSyncKHR requires a call to glFlush which we were not doing. fixed by moving the code above eglSwapBuffers(), which both fixes the problem and gives us a slightly better idea of when the GPU is done drawing. Change-Id: Ic826ef1fe25a6247742c3d49d0cb69f4031e3593 --- opengl/libs/EGL/eglApi.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index f6bc06901..9a214c267 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -960,6 +960,13 @@ EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw) egl_surface_t const * const s = get_surface(draw); + if (CC_UNLIKELY(dp->traceGpuCompletion)) { + EGLSyncKHR sync = eglCreateSyncKHR(dpy, EGL_SYNC_FENCE_KHR, NULL); + if (sync != EGL_NO_SYNC_KHR) { + FrameCompletionThread::queueSync(sync); + } + } + if (CC_UNLIKELY(dp->finishOnSwap)) { uint32_t pixel; egl_context_t * const c = get_context( egl_tls_t::getContext() ); @@ -970,19 +977,7 @@ EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface draw) } } - EGLBoolean result = s->cnx->egl.eglSwapBuffers(dp->disp.dpy, s->surface); - - if (CC_UNLIKELY(dp->traceGpuCompletion)) { - EGLSyncKHR sync = EGL_NO_SYNC_KHR; - { - sync = eglCreateSyncKHR(dpy, EGL_SYNC_FENCE_KHR, NULL); - } - if (sync != EGL_NO_SYNC_KHR) { - FrameCompletionThread::queueSync(sync); - } - } - - return result; + return s->cnx->egl.eglSwapBuffers(dp->disp.dpy, s->surface); } EGLBoolean eglCopyBuffers( EGLDisplay dpy, EGLSurface surface,