blob: 1b4210be14e2474d745de181aae7ed41e47c3ca3 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.sysmem2;
using zx;
// The contents of this file are not final. Incompatible changes are still
// being made to this file. Do not rely on the contents of this file to provide
// backward compatibility (yet).
//
// TODO(fxbug.dev/34192): Sysmem should use llcpp and FIDL tables. The definitions in
// this file are part of that transition, but the definitions here are not
// final. For now, the definition here is only used internally to sysmem (not
// between processes), and therefore this definition can change for now. Later
// after we're happy with this representation, we'll create
// fuchsia.sysmem2.BufferCollection.SetConstraints() which will accept
// constraints as defined here.
resource table VmoBuffer {
/// The same VMO can be used by more than one CodecBuffer (only of the same
/// buffer_lifetime_ordinal), but each vmo handle must be a separate handle.
///
/// |vmo| can be un-set if a participant has no usage which requires a
/// VMO handle.
1: zx.handle:VMO vmo;
/// Offset within the VMO of the first usable byte. Must be < the VMO's
/// size in bytes, and leave sufficient room for
/// BufferMemorySettings.size_bytes before the end of the VMO.
2: uint64 vmo_usable_start;
/// In some cases, we have a physically separate aux buffer that is a
/// logical shadow of the main buffer. The main use case so far is DRM L1
/// where we can have a clear aux buffer that has meaningful bytes only for
/// the portions of the input which are clear (not protected). The
/// protected portions will be set to a byte value that will prevent start
/// code emulation (0xFF will work for most video formats).
///
/// |aux_vmo| will be un-set if there are no aux buffers, or in the same
/// cases that |vmo| can be un-set.
3: zx.handle:VMO aux_vmo;
};
const uint32 MAX_COUNT_BUFFER_COLLECTION_INFO_BUFFERS = 128;
/// Information about a buffer collection and its buffers.
// TODO(fxbug.dev/32119): provide a way for clients to receive this table instead of the
// struct fuchsia.sysmem.BufferCollectionInfo_2.
resource table BufferCollectionInfo {
/// These settings apply to all the buffers in the inital buffer allocation.
/// This must be set.
1: SingleBufferSettings settings;
/// VMO handles (and vmo_usable_start offset) for each buffer in the
/// collection.
///
/// The size of this vector is the buffer_count (buffer_count is not sent
/// separately).
///
/// All buffer VMO handles have identical size and access rights. The size
/// is in settings.buffer_settings.size_bytes.
///
/// The VMO access rights are determined based on the usages which the
/// client specified when allocating the buffer collection. For example,
/// a client which expressed a read-only usage will receive VMOs without
/// write rights. In addition, the rights can be attenuated by the
/// parameter to BufferCollectionToken.Duplicate() calls.
///
/// This field will always have VmoBuffer(s) in it, even if the participant
/// specifies usage whieh does not require VMO handles. This permits such
/// a participant to know the vmo_usable_start values, in case that's of any
/// use to the participant.
2: vector<VmoBuffer>:MAX_COUNT_BUFFER_COLLECTION_INFO_BUFFERS buffers;
};
/// These settings and constraints apply to all the buffers in the collection.
table SingleBufferSettings {
1: BufferMemorySettings buffer_settings;
/// Buffers holding data that is not uncompressed image data will not have
/// this field set. Buffers holding data that is uncompressed image data
/// _may_ have this field set.
///
/// At least for now, changing the PixelFormat requires re-allocating
/// buffers.
///
/// If un-set, there are no image format constraints.
2: ImageFormatConstraints image_format_constraints;
};
/// These are memory-related settings for all buffers of a buffer collection.
table BufferMemorySettings {
1: uint32 size_bytes;
2: bool is_physically_contiguous;
3: bool is_secure;
4: CoherencyDomain coherency_domain;
/// The specific heap from which buffers are allocated.
/// See above in this file for heap identifier values.
5: HeapType heap;
};