BufferMemorySettings

Struct BufferMemorySettings 

Source
pub struct BufferMemorySettings {
    pub size_bytes: Option<u64>,
    pub is_physically_contiguous: Option<bool>,
    pub is_secure: Option<bool>,
    pub coherency_domain: Option<CoherencyDomain>,
    pub heap: Option<Heap>,
    /* private fields */
}
Expand description

These are memory-related settings for all buffers of a buffer collection.

Fields§

§size_bytes: Option<u64>

This field will always be set by sysmem.

Rule for producers: For BufferCollectionInfo with ImageFormatConstraints, storing an image of a given ImageFormat in a buffer of that BufferCollection is only allowed if the result of calling ImageFormatImageSize or a strictly equivalent computation is less than or equal to size_bytes.

Producer participants must stay within size_bytes when determining whether an image will fit in a buffer, even if the VMO’s size is larger than this.

Note: The VMO’s zx_vmo_get_stream_size / ZX_PROP_VMO_CONTENT_SIZE are not usable for this purpose, as that can’t be set (and get returns 0) for all VMO types that sysmem actually allocates (at least so far). In any case zx_vmo_get_stream_size is about current content size not max permitted content size.

Any future padding-only constraint which is irrelevant to a non-padding participant when locating each valid pixel’s valid data will be accounted for by checking ImageFormatImageSize() against size_bytes instead of the VMO size.

Following this rule allows producers to not need to worry about arbitrary padding requirements of other participants, including future-added padding-only constraints.

The bytes_per_row and rounding up to a tile size boundary are included in ImageFormatImageSize and accounted for in size_bytes, even though these two aspects are partially about padding. These two aspects are included in the ImageFormatImageSize calculation because these two aspects are also relevant to all participants that need to locate pixel data.

With the exception of bytes_per_row and rounding up to a tile size boundary when not PixelFormatModifier.Linear (and no other exceptions), this field does not include any extra VMO size padding that is added because of participant-specific padding constraint(s).

The same size_bytes value is sent to all participants.

This field is not page aligned. This value rounded up to zx_system_page_size() boundary is guaranteed to be less than or equal the buffer VMO size. In other words, the VMO is allowed to have more pages than implied by this value.

§is_physically_contiguous: Option<bool>

This field will always be set by sysmem.

§is_secure: Option<bool>

This field will always be set by sysmem.

§coherency_domain: Option<CoherencyDomain>

This field will always be set by sysmem.

§heap: Option<Heap>

The specific heap from which buffers are allocated.

This field will always be set by sysmem.

Trait Implementations§

Source§

impl Clone for BufferMemorySettings

Source§

fn clone(&self) -> BufferMemorySettings

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for BufferMemorySettings

Source§

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

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

impl<D> Decode<BufferMemorySettings, D> for BufferMemorySettings
where D: ResourceDialect,

Source§

fn new_empty() -> BufferMemorySettings

Creates a valid instance of Self. The specific value does not matter, since it will be overwritten by decode.
Source§

unsafe fn decode( &mut self, decoder: &mut Decoder<'_, D>, offset: usize, depth: Depth, ) -> Result<(), Error>

Decodes an object of type T from the decoder’s buffers into self. Read more
Source§

impl Default for BufferMemorySettings

Source§

fn default() -> BufferMemorySettings

Returns the “default value” for a type. Read more
Source§

impl<D> Encode<BufferMemorySettings, D> for &BufferMemorySettings
where D: ResourceDialect,

Source§

unsafe fn encode( self, encoder: &mut Encoder<'_, D>, offset: usize, depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl PartialEq for BufferMemorySettings

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TypeMarker for BufferMemorySettings

Source§

type Owned = BufferMemorySettings

The owned Rust type which this FIDL type decodes into.
Source§

fn inline_align(_context: Context) -> usize

Returns the minimum required alignment of the inline portion of the encoded object. It must be a (nonzero) power of two.
Source§

fn inline_size(_context: Context) -> usize

Returns the size of the inline portion of the encoded object, including padding for alignment. Must be a multiple of inline_align.
Source§

fn encode_is_copy() -> bool

Returns true if the memory layout of Self::Owned matches the FIDL wire format and encoding requires no validation. When true, we can optimize encoding arrays and vectors of Self::Owned to a single memcpy. Read more
Source§

fn decode_is_copy() -> bool

Returns true if the memory layout of Self::Owned matches the FIDL wire format and decoding requires no validation. When true, we can optimize decoding arrays and vectors of Self::Owned to a single memcpy.
Source§

impl ValueTypeMarker for BufferMemorySettings

Source§

type Borrowed<'a> = &'a BufferMemorySettings

The Rust type to use for encoding. This is a particular Encode<Self> type cheaply obtainable from &Self::Owned. There are three cases: Read more
Source§

fn borrow( value: &<BufferMemorySettings as TypeMarker>::Owned, ) -> <BufferMemorySettings as ValueTypeMarker>::Borrowed<'_>

Cheaply converts from &Self::Owned to Self::Borrowed.
Source§

impl Persistable for BufferMemorySettings

Source§

impl StructuralPartialEq for BufferMemorySettings

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> Body for T
where T: Persistable,

Source§

type MarkerAtTopLevel = T

The marker type to use when the body is at the top-level.
Source§

type MarkerInResultUnion = T

The marker type to use when the body is nested in a result union.
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, D> Encode<Ambiguous1, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<T, D> Encode<Ambiguous2, D> for T
where D: ResourceDialect,

Source§

unsafe fn encode( self, _encoder: &mut Encoder<'_, D>, _offset: usize, _depth: Depth, ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
Source§

impl<E> ErrorType for E

Source§

type Marker = E

The marker type.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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.

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.