From da8e990a0a511cd3fe58efdc939ceaaecd6613c8 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Mon, 7 Jul 2025 22:29:49 +0200 Subject: [PATCH] rusticl: specify FD type when importing fences Acked-by: Alyssa Rosenzweig Part-of: --- src/gallium/frontends/rusticl/api/memory.rs | 3 ++- src/gallium/frontends/rusticl/core/device.rs | 8 +++++--- src/gallium/frontends/rusticl/core/gl.rs | 5 ++++- src/gallium/frontends/rusticl/mesa/pipe/context.rs | 5 ++--- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/gallium/frontends/rusticl/api/memory.rs b/src/gallium/frontends/rusticl/api/memory.rs index 02b2e1488ec..cc14b1962e8 100644 --- a/src/gallium/frontends/rusticl/api/memory.rs +++ b/src/gallium/frontends/rusticl/api/memory.rs @@ -12,6 +12,7 @@ use crate::core::gl::*; use crate::core::memory::*; use crate::core::queue::*; +use mesa_rust_gen::pipe_fd_type; use mesa_rust_util::properties::Properties; use mesa_rust_util::ptr::*; use mesa_rust_util::static_assert; @@ -3326,7 +3327,7 @@ fn enqueue_acquire_gl_objects( false, Box::new(move |_, ctx| { if let Some(fence_fd) = fence_fd { - ctx.import_fence(&fence_fd) + ctx.import_fence(&fence_fd, pipe_fd_type::PIPE_FD_TYPE_NATIVE_SYNC) .ok_or(CL_OUT_OF_RESOURCES)? .gpu_wait(ctx) } diff --git a/src/gallium/frontends/rusticl/core/device.rs b/src/gallium/frontends/rusticl/core/device.rs index 8e5ff466ef5..479d3726896 100644 --- a/src/gallium/frontends/rusticl/core/device.rs +++ b/src/gallium/frontends/rusticl/core/device.rs @@ -151,7 +151,7 @@ pub trait HelperContextWrapper { ) -> Option; fn is_create_fence_fd_supported(&self) -> bool; - fn import_fence(&self, fence_fd: &FenceFd) -> CLResult; + fn import_fence(&self, fence_fd: &FenceFd, fence_type: pipe_fd_type) -> CLResult; } pub struct HelperContext<'a> { @@ -246,8 +246,10 @@ impl HelperContextWrapper for HelperContext<'_> { self.lock.is_create_fence_fd_supported() } - fn import_fence(&self, fd: &FenceFd) -> CLResult { - self.lock.import_fence(fd).ok_or(CL_OUT_OF_HOST_MEMORY) + fn import_fence(&self, fd: &FenceFd, fence_type: pipe_fd_type) -> CLResult { + self.lock + .import_fence(fd, fence_type) + .ok_or(CL_OUT_OF_HOST_MEMORY) } } diff --git a/src/gallium/frontends/rusticl/core/gl.rs b/src/gallium/frontends/rusticl/core/gl.rs index fe06f604c74..58fa69788a5 100644 --- a/src/gallium/frontends/rusticl/core/gl.rs +++ b/src/gallium/frontends/rusticl/core/gl.rs @@ -9,6 +9,7 @@ use crate::core::util::*; use libc_rust_gen::{close, dlsym}; use mesa_rust::pipe::context::RWFlags; +use mesa_rust_gen::pipe_fd_type; use rusticl_opencl_gen::*; use mesa_rust::pipe::fence::*; @@ -285,7 +286,9 @@ impl GLCtxManager { if let Some(fence_fd) = self.do_flush(&mut [export_in])? { for dev in &cl_ctx.devs { - let fence = dev.helper_ctx().import_fence(&fence_fd)?; + let fence = dev + .helper_ctx() + .import_fence(&fence_fd, pipe_fd_type::PIPE_FD_TYPE_NATIVE_SYNC)?; fence.wait(); } } diff --git a/src/gallium/frontends/rusticl/mesa/pipe/context.rs b/src/gallium/frontends/rusticl/mesa/pipe/context.rs index f709636ff40..f223884e65c 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/context.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/context.rs @@ -4,7 +4,6 @@ use crate::pipe::resource::*; use crate::pipe::screen::*; use crate::pipe::transfer::*; -use mesa_rust_gen::pipe_fd_type::*; use mesa_rust_gen::*; use mesa_rust_util::has_required_feature; @@ -637,14 +636,14 @@ impl PipeContext { } } - pub fn import_fence(&self, fence_fd: &FenceFd) -> Option { + pub fn import_fence(&self, fence_fd: &FenceFd, fence_type: pipe_fd_type) -> Option { unsafe { let mut fence = ptr::null_mut(); self.pipe.as_ref().create_fence_fd.unwrap()( self.pipe.as_ptr(), &mut fence, fence_fd.fd, - PIPE_FD_TYPE_NATIVE_SYNC, + fence_type, ); PipeFence::new(fence, &self.screen) }