diff --git a/src/gallium/frontends/rusticl/core/device.rs b/src/gallium/frontends/rusticl/core/device.rs index cd790c9435b..42ff8f013c4 100644 --- a/src/gallium/frontends/rusticl/core/device.rs +++ b/src/gallium/frontends/rusticl/core/device.rs @@ -13,6 +13,7 @@ use mesa_rust::pipe::device::load_screens; use mesa_rust::pipe::fence::*; use mesa_rust::pipe::resource::*; use mesa_rust::pipe::screen::*; +use mesa_rust::pipe::transfer::PipeTransfer; use mesa_rust_gen::*; use mesa_rust_util::math::SetBitIndices; use mesa_rust_util::static_assert; @@ -109,6 +110,21 @@ pub trait HelperContextWrapper { fn compute_state_info(&self, state: *mut c_void) -> pipe_compute_state_object_info; fn compute_state_subgroup_size(&self, state: *mut c_void, block: &[u32; 3]) -> u32; + fn map_buffer_unsynchronized( + &self, + res: &PipeResource, + offset: i32, + size: i32, + rw: RWFlags, + ) -> Option; + + fn map_texture_unsynchronized( + &self, + res: &PipeResource, + bx: &pipe_box, + rw: RWFlags, + ) -> Option; + fn is_create_fence_fd_supported(&self) -> bool; fn import_fence(&self, fence_fd: &FenceFd) -> PipeFence; } @@ -166,6 +182,31 @@ impl HelperContextWrapper for HelperContext<'_> { self.lock.compute_state_subgroup_size(state, block) } + fn map_buffer_unsynchronized( + &self, + res: &PipeResource, + offset: i32, + size: i32, + rw: RWFlags, + ) -> Option { + self.lock.buffer_map_flags( + res, + offset, + size, + pipe_map_flags::PIPE_MAP_UNSYNCHRONIZED | rw.into(), + ) + } + + fn map_texture_unsynchronized( + &self, + res: &PipeResource, + bx: &pipe_box, + rw: RWFlags, + ) -> Option { + self.lock + .texture_map_flags(res, bx, pipe_map_flags::PIPE_MAP_UNSYNCHRONIZED | rw.into()) + } + fn is_create_fence_fd_supported(&self) -> bool { self.lock.is_create_fence_fd_supported() } diff --git a/src/gallium/frontends/rusticl/mesa/pipe/context.rs b/src/gallium/frontends/rusticl/mesa/pipe/context.rs index c8c92fafa7d..2f28073c79a 100644 --- a/src/gallium/frontends/rusticl/mesa/pipe/context.rs +++ b/src/gallium/frontends/rusticl/mesa/pipe/context.rs @@ -210,12 +210,12 @@ impl PipeContext { } } - pub fn buffer_map( + pub fn buffer_map_flags( &self, res: &PipeResource, offset: i32, size: i32, - rw: RWFlags, + flags: pipe_map_flags, ) -> Option { let b = pipe_box { x: offset, @@ -225,20 +225,39 @@ impl PipeContext { ..Default::default() }; - self.resource_map(res, &b, rw.into(), true) + self.resource_map(res, &b, flags, true) + } + + pub fn buffer_map( + &self, + res: &PipeResource, + offset: i32, + size: i32, + rw: RWFlags, + ) -> Option { + self.buffer_map_flags(res, offset, size, rw.into()) } pub(super) fn buffer_unmap(&self, tx: *mut pipe_transfer) { unsafe { self.pipe.as_ref().buffer_unmap.unwrap()(self.pipe.as_ptr(), tx) }; } + pub fn texture_map_flags( + &self, + res: &PipeResource, + bx: &pipe_box, + flags: pipe_map_flags, + ) -> Option { + self.resource_map(res, bx, flags, false) + } + pub fn texture_map( &self, res: &PipeResource, bx: &pipe_box, rw: RWFlags, ) -> Option { - self.resource_map(res, bx, rw.into(), false) + self.texture_map_flags(res, bx, rw.into()) } pub(super) fn texture_unmap(&self, tx: *mut pipe_transfer) {