Skip to main content

PboTensor

Struct PboTensor 

Source
pub struct PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,
{ pub name: String, pub shape: Vec<usize>, /* private fields */ }
Expand description

A tensor backed by an OpenGL Pixel Buffer Object.

Fields§

§name: String§shape: Vec<usize>

Implementations§

Source§

impl<T> PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,

Source

pub fn from_pbo( buffer_id: u32, size: usize, shape: &[usize], name: Option<&str>, ops: Arc<dyn PboOps>, ) -> Result<Self>

Create a new PBO tensor from an already-allocated GL buffer.

Called by the image crate after creating the PBO on the GL thread. Users should not call this directly — use ImageProcessor::create_image().

§Errors

Returns Error::ShapeMismatch if size does not equal shape.iter().product::<usize>() * std::mem::size_of::<T>(). Returns Error::InvalidSize if size is zero.

Source

pub fn buffer_id(&self) -> u32

Returns the GL buffer ID for this PBO.

Source

pub fn is_mapped(&self) -> bool

Returns true unless the PBO is fully unmapped.

That covers an exclusive map, one or more read-only holders, AND a map or unmap another thread currently has in flight — during those windows the GL buffer is (or is about to be) mapped, and no other mapping may begin, so reporting false would be misleading. Use it as “is this buffer free for GL operations?”, not as “does a CPU pointer exist right now”.

Trait Implementations§

Source§

impl<T> Clone for PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Send for PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,

Source§

impl<T> Sync for PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,

Source§

impl<T> TensorTrait<T> for PboTensor<T>
where T: Num + Clone + Debug + Send + Sync,

Source§

fn set_logical_shape(&mut self, shape: &[usize]) -> Result<()>

Capacity-based reconfigure (mirrors Mem/Shm/DMA/IOSurface): allow any shape whose byte size fits the PBO allocation, so an oversized reusable pool can be configure_imaged to a smaller image. Without this PBO fell back to the strict-reshape default and rejected pool reuse.

Source§

fn view(&self, offset_bytes: usize, shape: &[usize]) -> Result<Self>

Zero-copy sub-region view sharing this PBO’s GL buffer (via the Arc<PboHandle>) and BufferIdentity, positioned at offset_bytes from this tensor’s own window with logical shape. The GL backend keys the import on the shared identity and addresses the window via glViewport / the staged copy; a CPU map adds view_offset to the mapped base. Mirrors DmaTensor::view.

§Errors
Source§

fn new(_shape: &[usize], _name: Option<&str>) -> Result<Self>

Create a new tensor with the given shape and optional name. If no name is given, a random name will be generated.
Source§

fn from_fd(_fd: OwnedFd, _shape: &[usize], _name: Option<&str>) -> Result<Self>

Import an existing buffer as a tensor, taking ownership of its file descriptor. The buffer is adopted in place — no bytes are copied. Read more
Source§

fn clone_fd(&self) -> Result<OwnedFd>

Clone the file descriptor associated with this tensor.
Source§

fn memory(&self) -> TensorMemory

Get the memory type of this tensor.
Source§

fn name(&self) -> String

Get the name of this tensor.
Source§

fn shape(&self) -> &[usize]

Get the shape of this tensor.
Source§

fn reshape(&mut self, shape: &[usize]) -> Result<()>

Reshape this tensor to the given shape. The total number of elements must remain the same.
Source§

fn capacity_bytes(&self) -> usize

Bytes of the underlying allocation (>= the current logical size()). Defaults to the logical size for storages without spare capacity.
Source§

fn map_with<'a>(&self, access: CpuAccess) -> Result<HostView<'a, T>>
where T: 'a,

Map the tensor into memory with the given access direction and return a TensorMap for accessing the data. Read more
Source§

fn buffer_identity(&self) -> &BufferIdentity

Get the buffer identity for cache keying and liveness tracking.
Source§

fn len(&self) -> usize

Get the number of elements in this tensor.
Source§

fn is_empty(&self) -> bool

Check if the tensor is empty.
Source§

fn size(&self) -> usize

Get the size in bytes of this tensor.
Source§

fn map<'a>(&self) -> Result<HostView<'a, T>>
where T: 'a,

Map the tensor read-write (equivalent to map_with(CpuAccess::ReadWrite) — the historical map() behavior).
Source§

fn map_read<'a>(&self) -> Result<HostView<'a, T>>
where T: 'a,

Map the tensor for CPU reading only. The returned map rejects as_mut_slice; on macOS this takes the read-only IOSurface lock (skips the unlock flush), on Linux the dma-buf read-direction sync.
Source§

fn map_write<'a>(&self) -> Result<HostView<'a, T>>
where T: 'a,

Map the tensor for CPU writing (fill-only: reading through a write map may see write-combined memory — do not read the slice).
Source§

fn map_mut<'a>(&self) -> Result<HostView<'a, T>>
where T: 'a,

Map the tensor read-write (alias of map with the intent spelled out).

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for PboTensor<T>

§

impl<T> !UnwindSafe for PboTensor<T>

§

impl<T> Freeze for PboTensor<T>
where PhantomData<T>: Freeze,

§

impl<T> Unpin for PboTensor<T>
where PhantomData<T>: Unpin,

§

impl<T> UnsafeUnpin for PboTensor<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more