Skip to main content

dope_core/driver/
buffers.rs

1use std::ptr::NonNull;
2
3use crate::backend::Backend;
4use crate::backend::ops::buffers::BufferBackend;
5
6use super::DriverContext;
7
8pub trait ProvidedBuffers {
9    fn buffer_group(&self) -> u16;
10    fn buffer_len(&self) -> usize;
11    /// # Safety
12    /// `bid` must name a live buffer uniquely owned by the caller.
13    unsafe fn release(&mut self, bid: u16);
14    /// # Safety
15    /// `bid` must name a live buffer and `len` must fit its allocation.
16    unsafe fn buffer_ptr_len(&mut self, len: u32, bid: u16) -> (NonNull<u8>, usize);
17}
18
19impl ProvidedBuffers for DriverContext<'_, '_> {
20    fn buffer_group(&self) -> u16 {
21        <Backend as BufferBackend>::buffer_group(self.backend_ref())
22    }
23
24    fn buffer_len(&self) -> usize {
25        <Backend as BufferBackend>::buffer_len(self.backend_ref())
26    }
27
28    unsafe fn release(&mut self, bid: u16) {
29        unsafe { <Backend as BufferBackend>::release_buffer(self.backend(), bid) };
30    }
31
32    unsafe fn buffer_ptr_len(&mut self, len: u32, bid: u16) -> (NonNull<u8>, usize) {
33        unsafe { <Backend as BufferBackend>::buffer_ptr_len(self.backend_ref(), len, bid) }
34    }
35}