rusticl/device: add unsynchronized mapping functions to helper context
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32581>
This commit is contained in:
@@ -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<PipeTransfer>;
|
||||
|
||||
fn map_texture_unsynchronized(
|
||||
&self,
|
||||
res: &PipeResource,
|
||||
bx: &pipe_box,
|
||||
rw: RWFlags,
|
||||
) -> Option<PipeTransfer>;
|
||||
|
||||
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<PipeTransfer> {
|
||||
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<PipeTransfer> {
|
||||
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()
|
||||
}
|
||||
|
||||
@@ -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<PipeTransfer> {
|
||||
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<PipeTransfer> {
|
||||
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<PipeTransfer> {
|
||||
self.resource_map(res, bx, flags, false)
|
||||
}
|
||||
|
||||
pub fn texture_map(
|
||||
&self,
|
||||
res: &PipeResource,
|
||||
bx: &pipe_box,
|
||||
rw: RWFlags,
|
||||
) -> Option<PipeTransfer> {
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user