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
 
impl Clone for BufferMemorySettings
Source§fn clone(&self) -> BufferMemorySettings
 
fn clone(&self) -> BufferMemorySettings
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BufferMemorySettings
 
impl Debug for BufferMemorySettings
Source§impl<D> Decode<BufferMemorySettings, D> for BufferMemorySettingswhere
    D: ResourceDialect,
 
impl<D> Decode<BufferMemorySettings, D> for BufferMemorySettingswhere
    D: ResourceDialect,
Source§fn new_empty() -> BufferMemorySettings
 
fn new_empty() -> BufferMemorySettings
Self. The specific value does not matter,
since it will be overwritten by decode.Source§impl Default for BufferMemorySettings
 
impl Default for BufferMemorySettings
Source§fn default() -> BufferMemorySettings
 
fn default() -> BufferMemorySettings
Source§impl<D> Encode<BufferMemorySettings, D> for &BufferMemorySettingswhere
    D: ResourceDialect,
 
impl<D> Encode<BufferMemorySettings, D> for &BufferMemorySettingswhere
    D: ResourceDialect,
Source§impl PartialEq for BufferMemorySettings
 
impl PartialEq for BufferMemorySettings
Source§impl TypeMarker for BufferMemorySettings
 
impl TypeMarker for BufferMemorySettings
Source§type Owned = BufferMemorySettings
 
type Owned = BufferMemorySettings
Source§fn inline_align(_context: Context) -> usize
 
fn inline_align(_context: Context) -> usize
Source§fn inline_size(_context: Context) -> usize
 
fn inline_size(_context: Context) -> usize
inline_align.Source§fn encode_is_copy() -> bool
 
fn encode_is_copy() -> bool
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 moreSource§fn decode_is_copy() -> bool
 
fn decode_is_copy() -> bool
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
 
impl ValueTypeMarker for BufferMemorySettings
Source§type Borrowed<'a> = &'a BufferMemorySettings
 
type Borrowed<'a> = &'a BufferMemorySettings
Encode<Self>
type cheaply obtainable from &Self::Owned. There are three cases: Read moreSource§fn borrow(
    value: &<BufferMemorySettings as TypeMarker>::Owned,
) -> <BufferMemorySettings as ValueTypeMarker>::Borrowed<'_>
 
fn borrow( value: &<BufferMemorySettings as TypeMarker>::Owned, ) -> <BufferMemorySettings as ValueTypeMarker>::Borrowed<'_>
&Self::Owned to Self::Borrowed.