From 12c9b36ded7d233057268533f11c281c7bc0ec43 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Tue, 10 Sep 2024 14:27:45 +0200 Subject: [PATCH] gfx: wait for idle if rendering doesn't support explicit sync --- src/gfx_apis/gl/egl/display.rs | 4 ++++ src/gfx_apis/gl/gl/sys.rs | 2 +- src/gfx_apis/gl/renderer/framebuffer.rs | 2 +- src/gfx_apis/vulkan/renderer.rs | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gfx_apis/gl/egl/display.rs b/src/gfx_apis/gl/egl/display.rs index 7d139c41..fa7d5d52 100644 --- a/src/gfx_apis/gl/egl/display.rs +++ b/src/gfx_apis/gl/egl/display.rs @@ -129,6 +129,10 @@ impl EglDisplay { .exts .contains(KHR_FENCE_SYNC | KHR_WAIT_SYNC | ANDROID_NATIVE_FENCE_SYNC); + if !dpy.explicit_sync { + log::error!("Driver does not support explicit sync. Rendering will block.") + } + Ok(Rc::new(dpy)) } } diff --git a/src/gfx_apis/gl/gl/sys.rs b/src/gfx_apis/gl/gl/sys.rs index f36650e4..84b81b86 100644 --- a/src/gfx_apis/gl/gl/sys.rs +++ b/src/gfx_apis/gl/gl/sys.rs @@ -66,7 +66,7 @@ dynload! { glClear: unsafe fn(mask: GLbitfield), glBlendFunc: unsafe fn(sfactor: GLenum, dfactor: GLenum), glClearColor: unsafe fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), - glFlush: unsafe fn(), + glFinish: unsafe fn(), glReadnPixels: unsafe fn( x: GLint, diff --git a/src/gfx_apis/gl/renderer/framebuffer.rs b/src/gfx_apis/gl/renderer/framebuffer.rs index 0f0c07cf..67fe9b63 100644 --- a/src/gfx_apis/gl/renderer/framebuffer.rs +++ b/src/gfx_apis/gl/renderer/framebuffer.rs @@ -86,7 +86,7 @@ impl Framebuffer { let fd = run_ops(self, ops); if fd.is_none() { unsafe { - (gles.glFlush)(); + (gles.glFinish)(); } } Ok(fd) diff --git a/src/gfx_apis/vulkan/renderer.rs b/src/gfx_apis/vulkan/renderer.rs index 0018700b..7021744c 100644 --- a/src/gfx_apis/vulkan/renderer.rs +++ b/src/gfx_apis/vulkan/renderer.rs @@ -747,6 +747,7 @@ impl VulkanRenderer { Ok(s) => Some(s), Err(e) => { log::error!("Could not export sync file from fence: {}", ErrorFmt(e)); + self.block(); None } };