pub struct PboClientParts {
pub state: EfClientState,
pub map_fn: EfPboMapFn,
pub unmap_fn: EfPboUnmapFn,
pub buffer_id: u32,
pub size: usize,
pub shape: Vec<usize>,
/* private fields */
}Expand description
The C-ABI parts ef_tensor_wrap_pbo takes, from a PboTensor at
the origin of its buffer.
“At the origin”, not “whole-buffer”: what
PboTensor::into_client_parts guards is the byte offset, not the
extent. view(0, &[16]) on a 32-byte buffer passes and yields
shape = [16], size = 32 — a correct, representable tensor, because
size is the GL allocation’s full byte count and is documented to
exceed the shape’s product (that is exactly how a stride-padded PBO is
carried). A non-zero view_offset is the only thing this struct cannot
express, and that is what is refused.
state.ctx borrows the channel this value still owns; the callee is
expected to retain it (which client_state_pbo_ops does) before this
struct drops. Dropping it without retaining releases the client’s own
last reference and deletes the GL buffer — which is why the Arc is a
field here rather than something the caller has to remember to hold.
Deliberately neither Send nor Sync: EfClientState holds a raw
pointer and edgefirst-tensor-abi adds no unsafe impl. That is right
for a value whose only purpose is to be handed straight to a C entry
point on the calling thread. If this ever needs to cross a thread, that
is a design question to raise, not something to unblock with an
unsafe impl.
Fields§
§state: EfClientStateThe callback channel, borrowing this value’s own reference.
map_fn: EfPboMapFn§unmap_fn: EfPboUnmapFn§buffer_id: u32§size: usizeThe GL allocation’s full byte count, which may exceed the shape’s product (a 64-byte-aligned row stride).
shape: Vec<usize>Auto Trait Implementations§
impl !RefUnwindSafe for PboClientParts
impl !Send for PboClientParts
impl !Sync for PboClientParts
impl !UnwindSafe for PboClientParts
impl Freeze for PboClientParts
impl Unpin for PboClientParts
impl UnsafeUnpin for PboClientParts
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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