Skip to main content

DmaBufHandle

Struct DmaBufHandle 

Source
pub struct DmaBufHandle {
    pub width: u32,
    pub height: u32,
    pub format: SurfaceFormatKind,
    pub modifier: u64,
    pub planes: SmallVec<[DmaBufPlane; 2]>,
    pub acquire_fence: Option<Arc<OwnedFd>>,
    pub release: Option<Arc<OwnedFd>>,
    pub chroma: ChromaReconstruction,
    pub color_space: YuvColorSpace,
    pub transfer: TransferFunction,
}
Expand description

A dma-buf a producer hands the renderer to composite as a surface.

See the module documentation for the producer’s contract — uncompressed, linear across vendors, dedicated when the planes are split.

Fields§

§width: u32

The surface width, in pixels.

§height: u32

The surface height, in pixels.

§format: SurfaceFormatKind

The pixel layout.

§modifier: u64

The DRM format modifier (tiling/compression layout); Self::LINEAR for a linear buffer.

§planes: SmallVec<[DmaBufPlane; 2]>§acquire_fence: Option<Arc<OwnedFd>>

An optional sync_file fence the renderer waits on before sampling the buffer; a fence that does not signal in time drops the surface for that frame rather than blocking the frame.

§release: Option<Arc<OwnedFd>>

An optional descriptor the renderer signals once it has finished sampling the buffer — the mirror of acquire_fence, which the renderer waits on. A producer that recycles surfaces waits on this before returning one to its pool.

It is not a sync_file: wgpu owns its queue and offers no way to export one, so what carries the signal is an eventfd the producer makes, which the renderer writes to once the submission that sampled the buffer has completed.

§chroma: ChromaReconstruction

How the renderer should reconstruct chroma; the producer’s hint for a YCbCr buffer, and ignored for an RGB one.

§color_space: YuvColorSpace

The colour space this buffer’s YCbCr bytes are in; ignored for an RGB one, whose bytes are already RGB.

§transfer: TransferFunction

How this buffer’s values relate to light. An RGB producer declares whether its bytes are sRGB-encoded or linear; for YCbCr it follows the matrix, and the default is the video curve.

Implementations§

Source§

impl DmaBufHandle

Source

pub const LINEAR: u64 = 0

DRM_FORMAT_MOD_LINEAR: the only modifier meaningful across GPU vendors.

Source

pub fn new( width: u32, height: u32, format: SurfaceFormatKind, modifier: u64, planes: impl IntoIterator<Item = DmaBufPlane>, acquire_fence: Option<OwnedFd>, ) -> DmaBufHandle

Build a handle from its planes.

planes is collected, so a caller need not name SmallVec to construct a handle (see SurfaceFormatKind::plane_count for how many a format needs); acquire_fence is the producer’s optional sync_file.

Source

pub fn with_chroma(self, chroma: ChromaReconstruction) -> DmaBufHandle

Ask the renderer to reconstruct this buffer’s chroma LumaGuided rather than bilinearly. A hint: a renderer may ignore it.

Source

pub fn with_color_space(self, color_space: YuvColorSpace) -> DmaBufHandle

Declare the colour space this buffer’s YCbCr bytes are in. A hint: a renderer that does not understand the matrix or range falls back to its default (BT.601 full range).

Source

pub fn with_transfer(self, transfer: TransferFunction) -> DmaBufHandle

Declare how this buffer’s values relate to light. A hint, like the colour space: an RGB producer whose bytes are linear says so here, and the renderer encodes them for its sRGB-encoded targets. The default follows the format (sRGB for RGB, the video curve for YCbCr), so a producer with sRGB-encoded bytes need not call this.

Source

pub fn with_release(self, release: OwnedFd) -> DmaBufHandle

Give the renderer a descriptor to signal once it has finished with this buffer, so a producer that recycles the surface behind it can wait rather than guess. See Self::release.

Source

pub fn signal_release(&self)

Signal the release descriptor, telling the producer the buffer is finished with — what the renderer does once it has sampled the buffer, for a consumer that took a frame and then dropped it without ever painting it.

A no-op where the handle carries no descriptor. The descriptor is shared, so the signal goes through a duplicate rather than consuming it.

Source

pub fn plane_count(&self) -> usize

The number of planes the handle carries, which SurfaceFormatKind::plane_count should agree with.

Trait Implementations§

Source§

impl Clone for DmaBufHandle

Source§

fn clone(&self) -> DmaBufHandle

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 Debug for DmaBufHandle

Source§

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

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

impl Eq for DmaBufHandle

Source§

impl From<DmaBufHandle> for SurfaceSource

Available on Linux only.
Source§

fn from(handle: DmaBufHandle) -> SurfaceSource

Converts to this type from the input type.
Source§

impl PartialEq for DmaBufHandle

Source§

fn eq(&self, other: &DmaBufHandle) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more

Auto Trait Implementations§

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<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> CustomStyleProperty for T
where T: 'static + Send + Sync + PartialEq,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Upcasts to Any so CustomStyles::get can recover the concrete type.
Source§

fn eq_property(&self, other: &(dyn CustomStyleProperty + 'static)) -> bool

Compares two properties that share a concrete type.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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> Same for T

Source§

type Output = T

Should always be Self
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> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

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