From 4de6b769d382c9c59d015f6623a3cd3a9a9aa7f0 Mon Sep 17 00:00:00 2001 From: Emile Belanger Date: Tue, 21 Sep 2021 17:32:15 +0100 Subject: [PATCH] GLES: Only use GPU sync if necessary and available. If there are complaints of reduced performance, or visual artefacts compared to 4.6.1, it may be worth increasing HW_MAX_PIPELINE_BUFFERS to 4 again. --- src/common/rendering/gles/gles_buffers.cpp | 30 +++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/common/rendering/gles/gles_buffers.cpp b/src/common/rendering/gles/gles_buffers.cpp index 58fe0e016..f3ffcfcc6 100644 --- a/src/common/rendering/gles/gles_buffers.cpp +++ b/src/common/rendering/gles/gles_buffers.cpp @@ -235,28 +235,34 @@ void GLBuffer::Resize(size_t newsize) void GLBuffer::GPUDropSync() { #if !(USE_GLES2) // Only applicable when running on desktop for now - if (mGLSync != NULL) + if (gles.useMappedBuffers && glFenceSync && glClientWaitSync) { - glDeleteSync(mGLSync); - } + if (mGLSync != NULL) + { + glDeleteSync(mGLSync); + } - mGLSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + mGLSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + } #endif } void GLBuffer::GPUWaitSync() { #if !(USE_GLES2) // Only applicable when running on desktop for now - GLenum status = glClientWaitSync(mGLSync, GL_SYNC_FLUSH_COMMANDS_BIT, 1000 * 1000 * 50); // Wait for a max of 50ms... - - if (status != GL_ALREADY_SIGNALED && status != GL_CONDITION_SATISFIED) + if (gles.useMappedBuffers && glFenceSync && glClientWaitSync) { - //Printf("Error on glClientWaitSync: %d\n", status); + GLenum status = glClientWaitSync(mGLSync, GL_SYNC_FLUSH_COMMANDS_BIT, 1000 * 1000 * 50); // Wait for a max of 50ms... + + if (status != GL_ALREADY_SIGNALED && status != GL_CONDITION_SATISFIED) + { + //Printf("Error on glClientWaitSync: %d\n", status); + } + + glDeleteSync(mGLSync); + + mGLSync = NULL; } - - glDeleteSync(mGLSync); - - mGLSync = NULL; #endif }