diff --git a/.pick_status.json b/.pick_status.json index 53f2334ad94..a63f2ba9dc5 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3024,7 +3024,7 @@ "description": "rusticl/mesa: wire up fence_server", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/frontends/rusticl/mesa/pipe/context.rs b/src/gallium/frontends/rusticl/mesa/pipe/context.rs index ef4feb1a8e1..932e1359815 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/context.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/context.rs @@ -629,6 +629,11 @@ impl PipeContext { } } } + + pub fn has_fence_server(&self) -> bool { + let pipe = unsafe { self.pipe().as_ref() }; + pipe.fence_server_signal.is_some() && pipe.fence_server_sync.is_some() + } } impl Drop for PipeContext { diff --git a/src/gallium/frontends/rusticl/mesa/pipe/fence.rs b/src/gallium/frontends/rusticl/mesa/pipe/fence.rs index 7aeb1b7bea0..70fe65d4a84 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/fence.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/fence.rs @@ -1,4 +1,4 @@ -use crate::pipe::screen::*; +use crate::pipe::{context::PipeContext, screen::*}; use libc_rust_gen::close; use mesa_rust_gen::*; @@ -30,6 +30,20 @@ impl PipeFence { } } + pub fn gpu_signal(&self, ctx: &PipeContext) { + debug_assert!(ctx.has_fence_server()); + unsafe { + ctx.pipe().as_ref().fence_server_signal.unwrap()(ctx.pipe().as_ptr(), self.fence); + } + } + + pub fn gpu_wait(&self, ctx: &PipeContext) { + debug_assert!(ctx.has_fence_server()); + unsafe { + ctx.pipe().as_ref().fence_server_sync.unwrap()(ctx.pipe().as_ptr(), self.fence); + } + } + pub fn wait(&self) { self.screen.fence_finish(self.fence); }